PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wiedermal ein LCD Problem



ThunderD
31.12.2004, 03:09
Ich habe mir jetzt mal ein Display an meinen Mega8 angeschlossen.
Programmierung und sonstiges haut hin. Das Problem ist nur, dass das Display nur funktioniert, wenn alles am ISP hängt.
Dann funktioniert das Initialisieren auf Knopfdruck usw. .S
Sobald ich den PC abhänge und die Initroutine aufrufe verschwinden die schwarzen Balken und das Display bleibt leer.

Was ist da los? Spannungsproblem? Habe fürs Display auch einmal einen eigenen 7805 zusäzlich aufs Steckbrett getan. Hilft leider auch nichts.
Wie könnte ich das Problem lösen?

mbod77
31.12.2004, 12:58
Mmmh,

So auf die schnelle Würde mir da der Reset einfallen. Hast Du den über einen Pull-Up an Vcc angeschlossen? Wenn nämlich der ISP dran hängt ist der vom PC asu deffiniert an Vcc oder GND ist der weg und kein Pull-Up am Reset Pin hängt der in der Luft (undeffinierter Pegel)

Grüßle Jochen

ThunderD
31.12.2004, 13:10
Danke aber ich hab ihn mit pullup auf vcc geschalten.
da haut sowieso was nicht hin. einmal funktionierts einmal nicht.
wenns am isp hängt merkt sich das display anscheinend was es als letzes getan hat, weil es dann ohne den schwarzen balken startet.

ich kenn mich bald selbst nichtmehr aus.

mbod77
31.12.2004, 13:21
Hast du eine serielle Schnittstelle mit in Betrieb? Wenn ja könntest Du da ja mal ein paar debug-Informationen drüber schicken um zu sehen bis wo das Programm kommt bzw. um den Fehler einzugrenzen.

Ansonsten poste doch mal Deinen Code dann kann man mal drüber schaunen.

Grüßle Jochen

ThunderD
31.12.2004, 13:27
ne serielle ab ich nicht aber ich schick mal meinen miserablen probecode :)


.include "m8def.inc"
.def temp =r16
.def data =r17

ldi temp, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse
out SPL, temp
ldi temp, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse
out SPH, temp
;Ausgänge setzen
ldi temp,0b000111111 ;Portb pin 0-5 als Ausgang definieren
;0-3 = daten 4=Enable 5=RS
out DDRB,temp

ldi temp,0
out PORTB,temp

ldi temp,0b10000000
out DDRD,temp
ldi temp,255
out PortD,temp
loopvor:
sbis PinD,5
rjmp init
rjmp loopvor
;INITIALISIERUNG
init:
ldi data,0b00100000

rcall lcd_send
rcall lcd_send

ldi data,0b01000100

rcall lcd_send

rcall delay_39us

ldi data,0b00000000
rcall lcd_send
ldi data,0b11110000
rcall lcd_send

rcall delay_39us

ldi data,0b00000000
rcall lcd_send
ldi data,0b00010000
rcall lcd_send

rcall delay_2ms

ldi data,0b00000000
rcall lcd_send
ldi data,0b01100000
rcall lcd_send
main:
loop:
sbis PinD,6
rcall clear
sbis PinD,5
rcall send_h
ldi temp,0b01111111
out PORTD,temp
rjmp loop

lcd_send:
mov temp,data
swap temp
andi temp,0b00001111
out PortB,temp

rcall lcd_enable

mov temp,data
andi temp,0b00001111
out PortB,temp

rcall lcd_enable

ret


lcd_enable:
sbi PortB,4
nop
nop
nop
cbi PortB,4
ret


delay_39us:
ldi temp,100
delay39us_loop: dec temp
brne delay39us_loop
ret

delay_2ms:
ldi temp,25
delay2ms_loop: dec temp
brne delay2ms_loop
ret

clear:
ldi data,0b00000001
rcall lcd_send
ldi temp,255
out Portd,temp
rcall delay_2ms
ret

send_h:
ldi data,'h'
rcall lcd_data_send
ldi temp,255
out PortD,temp
rcall delay_2ms
ret
lcd_data_send:

mov temp,data
swap temp
andi temp,0b00001111
out PortB,temp
sbi PortB,5
rcall lcd_enable

mov temp,data
andi temp,0b000011111
out PortB,temp
sbi PortB,5
rcall lcd_enable

ret

ThunderD
31.12.2004, 17:10
So jetzt funktionierts.
Das Display macht nur nicht iwrklich das was ich beim init von ihm will. ich kann die größe der buchstaben ändern usw. es bleibt immer alles gleich. ich muss einfach nachher das ganze nochmal extra eingeben dann funktionierts ohne weiteres.