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.