Moin moin! Ich bin am tagelang am Verwzweifeln, hin und her probiert aber ich bekomme einen 2x16 HD44780 LCD schlichtweg nicht initialisiert... Vielleicht kann sich mal jemand von euch erbarmen, sich den Code mal genauenr annzuschauen Grundgestell ist der gut erklärte Code welchen ich aus einem Tutorial dieser Seite entnommen hab... .include "m32def.inc" .equ XTAL = 3686400 .equ LCD_PORT = PORTD .equ LCD_Com = PortB .equ PIN_RS = PB0 .equ PIN_RW = PB1 .equ PIN_E = PB2 .def temp1 = r16 .def temp2 = r17 .def temp3 = r18 ldi r16, LOW(RAMEND) out SPL, r16 ldi r16, HIGH(RAMEND) out SPH, r16 ldi r16, 255 out DDRB, r16 out DDRD, r16 main: clr temp1 out PortB, temp1 rcall lcd_init rcall lcd_clear sbi PortB, 0 ldi r19, 'T' rcall lcd_data rcall lcd_enable loop: rjmp loop lcd_data: out LCD_PORT, r19 rcall lcd_enable rcall delay50us ret ; erzeugt den Enable-Puls lcd_enable: sbi PortB, 2 ; Enable high nop ; 3 Taktzyklen warten nop nop cbi PortB, 2 ; Enable wieder low ret ; Und wieder zurück ; Pause nach jeder Übertragung delay50us: ; 50µs Pause ldi temp1, ( XTAL * 50 / 3 ) / 1000000 delay50us_:dec temp1 brne delay50us_ ret ; wieder zurück ; Längere Pause für manche Befehle delay5ms: ; 5ms Pause ldi temp1, ( XTAL * 5 / 607 ) / 1000 WGLOOP0: ldi temp2, $C9 WGLOOP1: dec temp2 brne WGLOOP1 dec temp1 brne WGLOOP0 ret ; wieder zurück ; Initialisierung: muss ganz am Anfang des Programms aufgerufen werden lcd_init: ldi temp3,6 powerupwait: rcall delay5ms dec temp3 brne powerupwait ldi temp1, 0b00110000 ; muss 3mal hintereinander gesendet out PortD, temp1 ; werden zur Initialisierung rcall lcd_enable ; 1 rcall delay5ms rcall lcd_enable ; 2 rcall delay5ms rcall lcd_enable ; und 3! rcall delay5ms ldi temp1, 0b00111000 out PortD, temp1 rcall delay50us ldi temp1, 0b00001110 ; Display on, Cursor off out PortD, temp1 rcall delay50us ldi temp1, 0b00000001 ; endlich fertig out PortD, temp1 rcall delay50us ret ; Sendet den Befehl zur Löschung des Displays lcd_clear: ldi temp1, 0b00000001 ; Display löschen out PortD, temp1 rcall delay5ms ret ; Sendet den Befehl: Cursor Home lcd_home: ldi temp1, 0b00000010 ; Cursor Home out PortD, temp1 rcall delay5ms ret
Funktioniert es mit dem Code aus dem Tutorial? (oder anders gefragt: Hardware- oder Softwarefehler?)
Hi > ldi temp1, 0b00111000 > out PortD, temp1 > rcall delay50us Wo ist der Impuls auf E? MfG spess
...hatte es tatsächlich mit dem Code aus dem Tuturial probiert (4bit und entsprechend verkabelt) Hatte aber auch nicht gefunzt... allerding hatte da noch keinen Quarz angehängt...mmhhh... meinst das LCD ist im A**** ?
si claro! Sehr ordentlich Spess :) das war schon`ma der erste Fehler... hab`s korrigiert, nun sind alle Pixel an?! NAja, hatt sich zumindest schon einmal was verändert... werd`s weiter probieren - vielen Dank bis dahin!
Hi
>nun sind alle Pixel an?!
Dann solltest du mal am Kontrast drehen.
MfG Spess
QUE IDIOTA! Genauso sah es auch bei meinem ersten Versuch aus. Und wenn ich mal genau hinschaue, seh auch die Buchstaben...boahh... schande über mein Haupt...!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.