PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD noch zu retten ?????



Spitfire
07.08.2012, 22:22
Hallo zusammen !!!

ICh habe beim experimentiern mit meinem ERSTEN LCD versucht bei Vcc (+5V) einen Vorwiederstand einzubauen. Beim Rückbau passierte mir ein fateler Fehler. Ich habe Vcc und GND vertauscht. Bei einem einzigen probeprogramm bekomme ich, wenn ich auf einen Anschlußdraht greife etliche Symbole. Diese sind zwar zu erkennen, eregben aber keinen Sinn. Daher habe ich gedacht, es könnte ein Bauteil VOR den `Registern` oder dem LCD kaputt sein. Eventuell ein Elko oder dgl. Denn die Buchstaben oder Zahlen die dabei sind, sind eindeutig zu erkennen. Hatte jemand schon einmal so ein Problem, bzw. hat jemand mit so etwas schon einmal bekanntschaft gemacht. :confused::confused:

Ich hoffe es kann mir jemand helfen !!!!

Spitfire

Thomas E.
08.08.2012, 04:49
Hast du es vorher bereits einmal erfolgreich angesteuert?

Kampi
08.08.2012, 05:39
Wenn du Vcc und GND vertauscht hast, wird sehr wahrscheinlich ein IC gestorben sein.
Das du undefinierte Zeichen siehst kann damit zusammenhängen das das IC nicht mehr richtig arbeitet.
Als wenn dein Testprogramm vor dem Umbau noch funktioniert hat, dürfte dein LCD hinüber sein ;)
Ich weiß auch nicht ob es soviel Sinn macht da was reparieren zu wollen....mir ist mal genau derselbe Fehler mit einem Grafik-LCD passiert und es hat anschließend gar nichts mehr angezeigt. Da aber das IC sehr warm wurde, wusste ich, dass mit sehr großer Wahrscheinlichkeit der Chip gestorben ist und ich denke das wird auch bei dir der Fall sein.

Spitfire
08.08.2012, 09:02
Hallo zusammen !!

Bezüglich der Frage ob ich das LCD bereits erfolgreich angesteuert habe: Ja, das habe ich, nur konnte ich dieses nicht löschen. Der von mir eingegebene Text war eindeutig zu lesen. Es waren immer nur einige Zeichen davor, welche warscheinlich vom Einschalten, und den daraus bedingten, noch undeffinierten Schaltzustände der Ausgänge am Atmega gekommen sind. In irgendeinem Beitrag (Google) habe ich dan von ungleichen Spannungspegeln, bzw. schwellspannungen, gelesen und wie dort beschrieben, einen Vorwiederstand eingebaut. Beim wiederherstellen der ursprünglichen Schaltung ist mir dann dieser b.... Fehler unterlaufen, und ich habe Vcc und GND vertauscht. :(

Ich hatte ja auch die Befürchtung, das ein Bauteil des LCD, in dei ewigen Jagdgründe der Elektronik eingegangen ist.

Danke für die schnellen Antworten !!!

Spitfire

Datenheld
08.08.2012, 09:46
Hallo zusammen !!

Bezüglich der Frage ob ich das LCD bereits erfolgreich angesteuert habe: Ja, das habe ich, nur konnte ich dieses nicht löschen. Der von mir eingegebene Text war eindeutig zu lesen. Es waren immer nur einige Zeichen davor, welche warscheinlich vom Einschalten, und den daraus bedingten, noch undeffinierten Schaltzustände der Ausgänge am Atmega gekommen sind. In irgendeinem Beitrag (Google) habe ich dan von ungleichen Spannungspegeln, bzw. schwellspannungen, gelesen und wie dort beschrieben, einen Vorwiederstand eingebaut. Beim wiederherstellen der ursprünglichen Schaltung ist mir dann dieser b.... Fehler unterlaufen, und ich habe Vcc und GND vertauscht. :(

Ich hatte ja auch die Befürchtung, das ein Bauteil des LCD, in dei ewigen Jagdgründe der Elektronik eingegangen ist.

Danke für die schnellen Antworten !!!

Spitfire

Hallo, dein LCD muss nicht tot sein. Es kann gut sein, dass deine Initialisierungsreihenfolge falsch ist und deswegen die komischen Zeichen kommen oder du zwischen den Befehlszyklen nicht lange genug abwartest. Überprüf auch die Länge der Strings, die du sendest. Check jedenfalls nochmal dein Programm und bau längere Delays ein (5ms reichen auf jeden Fall, vor dem initialisieren 50ms zur Spannungsstabilisierung). Welcher Controller steckt denn im Display?

Torrentula
08.08.2012, 11:53
Welcher Controller steckt denn im Display?

Ich nehme mal an ein HD44780 oder kompatibel, nach ein bisschen eindenken und probieren kann man hiermit viel anfangen (hat mir gestern geholfen): http://sprut.de/electronic/lcd/index.htm

Spitfire
08.08.2012, 17:34
Hallo zusammen !!!!

Das LCD sollte HD44780 kompatibel sein.
Lt. Reichelt
KS0070B, HD44780 kompatibel Es ist auch im Datenblatt der Befehlssatz des HD44780 aufgeführt.

Wegen der komischen Zeichen:

Ich habe bereits am Display eine Korrekte Zeichenfolge angezeigt bekommen. Erst nachdem ich Vcc und GND vertauscht hatte kamen diese Zeichen. Und das auch nur wenn ich die Leitungen berührt hatte, bzw. mit der Hand in die Nähe dieser gekommen bin. Daher hatte ich auch an eine kalte Lötstellen gedacht. Auch das kontollieren, und nachlöten hat nichts gebracht. Ob ich durch das weitere ausprobieren den Quelltext mittlerweile so durcheinander gebracht habe, dass nichts sinnfolles mehr herauskommt, kann natürlich auch sein. Leider habe ich, da ich noch Anfänger bin, kein zweites Diplay zur Zeit zur verfügung. Dieses werde ich mir aber besorgen, damit ich einen Vergleich habe.

Danke für die Hilfe

Spitfire

Torrentula
08.08.2012, 18:37
Ob ich durch das weitere ausprobieren den Quelltext mittlerweile so durcheinander gebracht habe, dass nichts sinnfolles mehr herauskommt, kann natürlich auch sein

Du kannst auch den Code mal hier posten, damit man wenigstens da Fehler ausschließen kann. Ob Basic oder C es finden sich genügend Anhänger beider Sprachen hier ;)

Spitfire
08.08.2012, 20:14
Hallo zusammen !!!

Der ursprüngliche Code, welcher in Assembler geschrieben ist:



.include "m8def.inc"

ldi r16, 0xFF
out DDRD,r16 ;Im Datenrichtungsregister PORTD als Ausgang deklarieren

ldi r18, 0xFF ;Dem Diplay Zeit geben um sich selbst zu initialisieren
ldi r16, HIGH(RAMEND)
out sph, r16
ldi r16, LOW(RAMEND)
out SPL, r16

rcall Warten
;
; cbi PORTD, 6 ;Den 6.Port (PD6) = R/W auf low setzen um in den Schreibmodus zu stellen
cbi PORTD, 4 ;Den 4.PORT (PD4) auf low setzen um in den Komandomodus zu wechseln
; ;ldi r16,0b00000010
out PORTD, r16
sbi PORTD, 5 ;Den 5.PORTD (PD5) auf High setzen, um den Display zu Signalisieren, das es die Daten von PD0 bis PD4 übernehmen kann
nop ; 3 Taktzyklen warten, um dem Display, für die Datenübernahme, genügend Zeit zu geben
nop
nop
cbi PORTD, 5 ;PD5 wieder auf LOW setzen
;
; ldi r18, 0xFF ;Dem Diplay Zeit geben um sich selbst zu initialisieren
; ldi r16, HIGH(RAMEND)
; out sph, r16
; ldi r16, LOW(RAMEND)
; out SPL, r16
;;
rcall Warten
;;
ldi r16, 0b00000010
out PORTD, r16 ;Den 1.Port (PD1) am Display DB5 auf High setzen um in den 4-Bit Modus zu wechseln

sbi PORTD, 5 ;Den 5.PORTD (PD5) auf High setzen, um den Display zu Signalisieren, das es die Daten von PD0 bis PD4 übernehmen kann
nop ; 3 Taktzyklen warten, um dem Display, für die Datenübernahme, genügend Zeit zu geben
nop
nop
cbi PORTD, 5
;;
; ldi r18, 0xFF ;Dem Diplay Zeit geben um sich selbst zu initialisieren
; ldi r16, HIGH(RAMEND)
;; out sph, r16
; ldi r16, LOW(RAMEND)
; out SPL, r16
rcall Warten
; rcall Befehl



;************************************************* ************************************************** ********************************
ldi r18, 0xFF ;Dem Diplay Zeit geben um sich selbst zu initialisieren
ldi r16, HIGH(RAMEND)
out sph, r16
ldi r16, LOW(RAMEND)
out SPL, r16
rcall Warten

ldi r16, 0b01001101 ;M
rcall Ausgabe
ldi r18, 0xFF ;Dem Diplay Zeit geben um sich selbst zu initialisieren
ldi r16, HIGH(RAMEND)
out sph, r16
ldi r16, LOW(RAMEND)
out SPL, r16

rcall Warten

ldi r16, 0b01100001 ;a
rcall Ausgabe
ldi r18, 0xFF ;Dem Diplay Zeit geben um sich selbst zu initialisieren
ldi r16, HIGH(RAMEND)
out sph, r16
ldi r16, LOW(RAMEND)
out SPL, r16

rcall Warten

....

hier wiederholt sich der Code immer wieder, nur der Eintrag in r16 wird auf andere Buchstaben (Binärcode) geändert

.....

und hier geht´s weiter:



ldi r16, 0b00100001 ;!
rcall Ausgabe
ldi r18, 0xFF ;Dem Diplay Zeit geben um sich selbst zu initialisieren
ldi r16, HIGH(RAMEND)
out sph, r16
ldi r16, LOW(RAMEND)
out SPL, r16

rcall Warten

loop1:
rjmp loop1

Befehl:
;ldi r16, 125 ;Ab dieser Zeile ist das Programm nur Abgeschrieben

mov r17,r16 ; Kopie von r16 in r17 eintragen

swap r16 ; vertauscht die beiden Nibbles von r16 (Die Bit´s 0-3 und 4-8 werden vertauscht)

andi r16, 0b00001111 ; Nur die vier unteren (mit 1 markierten)
; Bits werden übernommen, alle anderen werden null

sbr r16, 0b00010000 ; Bit 4 auf low setzen, alle anderen Bits bleiben gleich

out PORTD, r16

sbi PORTD, 5 ;Den 5.PORTD (PD5) auf High setzen, um den Display zu Signalisieren, das es die Daten von PD0 bis PD4 übernehmen kann
nop ; 3 Taktzyklen warten, um dem Display, für die Datenübernahme, genügend Zeit zu geben
nop
nop
cbi PORTD, 5 ;PD5 wieder auf LOW setzen

andi r17, 0b00001111

sbr r17, 1<<4 ; nur eine andere Schreibweise von oben

out PORTD, r17

sbi PORTD, 5
nop
nop
nop
cbi PORTD, 5
sbi PORTD, 4
ret

Ausgabe:
;ldi r16, 125 ;Ab dieser Zeile ist das Programm nur Abgeschrieben

mov r17,r16 ; Kopie von r16 in r17 eintragen

swap r16 ; vertauscht die beiden Nibbles von r16 (Die Bit´s 0-3 und 4-8 werden vertauscht)

andi r16, 0b00001111 ; Nur die vier unteren (mit 1 markierten)
; Bits werden übernommen, alle anderen werden null

;sbr r16, 0b00010000 ; Bit 4 setzen, alle anderen Bits bleiben gleich
sbr r17, 1<<4
out PORTD, r16

sbi PORTD, 5 ;Den 5.PORTD (PD5) auf High setzen, um den Display zu Signalisieren, das es die Daten von PD0 bis PD4 übernehmen kann
nop ; 3 Taktzyklen warten, um dem Display, für die Datenübernahme, genügend Zeit zu geben
nop
nop
cbi PORTD, 5 ;PD5 wieder auf LOW setzen

andi r17, 0b00001111

sbr r17, 1<<4 ; nur eine andere Schreibweise von oben

out PORTD, r17

sbi PORTD, 5
nop
nop
nop
cbi PORTD, 5
ret

Warten:
dec r18
brne Warten
ret

BussyAbfrage :

ldi r18, 0b00010100 ;Dem Diplay Zeit geben um sich selbst zu initialisieren
ldi r16, HIGH(RAMEND)
out sph, r16
ldi r16, LOW(RAMEND)
out SPL, r16

rcall Warten

sbi PORTD, 6 ;Port 6 (PD6) = R/W auf high setzen, für den lesemodus
cbi DDRD, 3 ;PORTD-3 (PD3) von Ausgang auf Eingang (PIND-3) ändern
nop
sbi PORTD, 5 ; PD5 (E) auf High setzen
nop
nop
nop
in r16,PIND ; Einlesen des oberen Daten Nipples von Port D
nop
cbi PORTD, 5 ; PD5 (E) auf Low setzen (E-Wackeln)
nop
sbi PORTD, 5 ; PD5 (E) wieder auf High setzen
nop
in r17, PIND ; Einlesen des unteren Daten Nipples von Port D
nop
cbi PORTD, 5 ; PD5 (E) auf Low setzen (E-Wackeln)

swap r16
andi r16, 0b10000000
brne BussyAbfrage
cbi PORTD, 6 ;Den 6.Port (PD6) = R/W auf low setzen um in den Schreibmodus zu stellen
sbi DDRD,3 ; PORT-3 (PD3) wieder als Ausgang deffinieren
ret


Die Funktionen `Befehl` und `BussyAbfrage` habe ich im Code zweck´s Versuch ebenfalls eingebaut gehabt. Ich kann aber jetzt nicht mehr genau sagen wo, deshalb habe ich auch keinen `rcall` Befehl mehr dafür. Wenn ich diesen Code auf den Atmega brenne, ist das Display einfach leer.

Mit dem folgenden Code, dieser war, bzw. ist nur zum Testen, und deshalb auch nicht komplett. Aber hier zeigt sich wenigstens etwas am Display. Nur bis gestern hatte ich nur dann Bewegung am Display, wenn ich mit der Hand in die nähe der Anschlußleitungen (Vcc, GND, DB0-DB7...usw) gekommen bin. Ansonsten war ruhe am Display. Jetzt tut sich auch etwas, auch wenn ich nicht in der nähe bin. Die Lötstellen habe ich, wie bereits erwähnt, kontolliert und alle nachgelötet.
Hier der zweite Code:


.include "m8def.inc"

ldi r16, 0xff
out DDRD, r16 ;PORTD als Ausgang Initialisieren

out DDRB, r16 ;PORTB als Ausgang initialisieren

ldi r18, 0b1100100
ldi r16, HIGH(RAMEND)
out sph, r16
ldi r16, LOW(RAMEND)
out SPL, r16


rcall Warten ;Dem Diplay Zeit geben um sich selbst zu initialisieren

ldi r16, 0b00000011
out DDRB, r16

ldi r18, 0b1100100
ldi r16, HIGH(RAMEND)
out sph, r16
ldi r16, LOW(RAMEND)
out SPL, r16


rcall Warten ;Dem Diplay Zeit geben um sich selbst zu initialisieren


ldi r17, 0b00000001
loop:

out DDRD, r17


ldi r18, 0b1100100
ldi r16, HIGH(RAMEND)
out sph, r16
ldi r16, LOW(RAMEND)
out SPL, r16


rcall Warten ;Dem Diplay Zeit geben um sich selbst zu initialisieren

;ldi r16, 0b00000010
;out DDRB, r16

ldi r18, 0b1100100
ldi r16, HIGH(RAMEND)
out sph, r16
ldi r16, LOW(RAMEND)
out SPL, r16


rcall Warten

inc r17

ldi r16, 0b00000000
out DDRB, r16

ldi r18, 0b1100100
ldi r16, HIGH(RAMEND)
out sph, r16
ldi r16, LOW(RAMEND)
out SPL, r16


rcall Warten
rjmp loop


Warten:
dec r18
brne Warten
ret


Ich hoffe ihr könnt etwas damit anfangen. :confused:

Spitfire

Besserwessi
08.08.2012, 20:51
Die LCD Display sind nicht so teuer. Bis man ein lauffähiges Programm hat, würde ich wirklich ein neues Display empfehlen. Wenn die Software dann läuft kann man dem alten Display ja noch mal eine Chance geben. Die Software zu entwickeln und debuggen mit einer eventuell (vielleicht 80% Chance) defekten Hardware ist ziemlich frustrierend bis aussichtslos.