Ich bin überwältigt von soooviel Hilfe.
Aber vlt. weiß doch jemand,wie das LCD Modul richtig initialisiert wird
in dieser Assembler Software.
...oder doch nicht?
Uli
Wirre Zeichen beim LCD deuten auf fehlerhafte Impulse hin.
Die Versorgungsspannung am LCD muss unbedingt mit eigenen Kondensatoren
geschützt werden.
Stimmt deine Taktfrequenz ?
Hast du deine Hardware und LCD schon mit einem anderen Programm und
"Hello World" getestet ?
"Ich bin überwältigt von soooviel Hilfe."
Ich denke eine gute Hilfestellung deinerseits wäre, den Code ein wenig
gekürzt zu veröffentlichen und nur auf die LCD Routinen zu reduzieren.
Dann müssten der Leser weniger lesen, auf den ersten Blick hatte ich
keine Lust mich einzulesen. Tut mir leid.
Grüße
werner
Ulrich W. schrieb:> ...und hier noch das Datenblatt vom LCD Modul
Das ist die Anschlussbelegung und kein Datenblatt.
Ulrich W. schrieb:> Ich bin überwältigt von soooviel Hilfe.
Wenn es das Originalprogramm ist, welches mit einem anderen Display
funktioniert, wird ein solches Display auch richtig initialisiert.
Möglichkeiten
- Dein Display ist nicht kompatibel,
- Deine Bastelei ist fehlerhaft,
- Du hast etwas am Programm verändert,
- Das Display ist kaputt,
- Das Timing stimmt nicht (falscher Quarz, falsche Fuses)
- Du sammelst Dir Störungen ein (Flachbandkabel zu lang? D0..D3 hängen
in der Luft?)
Die Initialisierung kann niemand überprüfen, da niemand das Timing
Deines Displays kennt.
Das Umstecken des LCD im laufenden Betrieb ist nicht gesund für das LCD.
Dass dabei wirre Zeichen kommen ist erklärbar (=> Joe).
Kontrolliere im Original diese Zeilen
> lcd_init:> rcall wait1s> ldi AL, 0b0011000> out PORTB, AL
Ich sehe da 2-3 Probleme. Im Anhang ist ein Minimalprogramm mit
Änderungen. Es wird wiederholt im 3s Takt nur ein Text ausgegeben. Kommt
der Text und stimmen die Pausen?
Die Änderungen betreffen die Erweiterung der Konstante 0b0011000 auf
8-Bit (0b00110000), Runterziehen von RS, und die Ausgabe auf die
Datenleitungen (PORTA) statt auf E/RS Leitung auf PORTB. Die Änderungen
orientieren sich am Code in AVR-Tutorial: LCD.
Hallo,
es ist mein erstes Projekt mit einem LCD Modul und bin seit 3 Wochen
damit beschäftigt.
Soft.-und Hardware funktionieren definitiv,aber mit dem richtigen LCD
Modul.
@Joe
>>Hast du deine Hardware und LCD schon mit einem anderen Programm und
"Hello World" getestet ?
Bis jetzt nicht,aber den Gedanke hatte ich schon,nur noch nichts
passendes gefunden.Ich werde weiter suchen und testen!
>>Stimmt deine Taktfrequenz ?
Falls Du die vom AVR meinst,die ist 1 Mhz.
@ WernerSch
>>Ich denke eine gute Hilfestellung deinerseits wäre, den Code ein wenig
gekürzt zu veröffentlichen und nur auf die LCD Routinen zu reduzieren.
Dann müssten der Leser weniger lesen, auf den ersten Blick hatte ich
keine Lust mich einzulesen. Tut mir leid.
Das muss Dir nicht Leid tun,sondern ich muss Dir Recht geben!
Ich kann zwar einen µC programmieren,aber mit der Software kenne ich
mich nicht aus.Weder in Bascom, Assembler noch in C,C++ und was es noch
alles gibt.
Natürlich hätte ich es kürzen können,aber bloss was? Nur nicht zuviel
wegmachen dachte ich.Naja,das wird schon noch...
@ Christian H
>>Das ist die Anschlussbelegung und kein Datenblatt.
...auch richtig,aber das einzige was es von diesem Modul gibt.Es ist
HD44780 kompatibel und habe mir eben von diesem Controller das
Datenblatt besorgt.Ich hoffe, es hilft weiter.
>>Möglichkeiten
- Dein Display ist nicht kompatibel,
- Deine Bastelei ist fehlerhaft,
- Du hast etwas am Programm verändert,
- Das Display ist kaputt,
- Das Timing stimmt nicht (falscher Quarz, falsche Fuses)
- Du sammelst Dir Störungen ein (Flachbandkabel zu lang? D0..D3 hängen
in der Luft?)
1. doch,ist es.
2. definitiv ist die Hardware ok.
3. natürlich habe ich einige Einstellungen zu Testzwecken verändert,die
aber keine Besserung brachten.Das Upload ist die Originaldatei und daran
habe ich nichts verändert.
4. Das Display ist neu,trotzdem habe ich ein anderes
angeschlossen...immer dasselbe.
5. Es werden keine Fuses eingestellt,es bleibt bei der
Standardeinstellung.
6. Flachbandkabel ist 12cm lang,dürfte keine Probleme geben.
7. D0..D3 hatte ich mit GND verbunden,kein Erfolg.
@ Stefan B.
Ich werde die Software compilieren und testen.Melde mich dann wieder.
Bedanke mich für eure Hilfe.
@ Stefan B.
C:\Download\Lader\Lader(neu)\sla.asm(49): error: Undefined symbol:
txtHello
C:\Download\Lader\Lader(neu)\sla.asm(50): error: Undefined symbol:
txtHello
Assembly failed, 2 errors, 8 warnings
Ich weiß (noch)nicht,wie man diesen Fehler korrigieren kann.
Uli
Sorry da habe ich geschlampt und beim Labelnamen ist das Denglisch mit
mir durchgegangen.
Relativ weit oben im Quellcode steht:
1
txtHallo:
2
.db "Hello world!",0,0
Etwas weiter unten im Quellcode steht
1
start:
2
;3s Text ausgeben
3
rcall lcd_home
4
ldi ZL,Low(txtHello*2)
5
ldi ZH,High(txtHello*2)
Die Fehlermeldung besagt, dass der Assembler das Symbol txtHallo kennt
(Umkehrschluss weil keine Fehlermeldung) aber das Symbol txtHello
nicht...
Wie man das beheben kann, müsstest du selbst rausbekommen, so viel Grips
hast du! Tipp: Es gibt genau zwei Möglichkeiten!
Hi Stefan,
ja, natürlich hab ich es rausbekommen und es funzt perfekt!
In der 1.Zeile steht Hallo!
Demnach ist das Display und die Hardware also ok.
aber:
Ein neustart der Schaltung reicht nicht,(neu anlegen der
Spannung)sondern ich habe mal wieder den Stecker vom Display abgezogen
(verzeih mir) und erst dann zeigte es " Hallo! "an.
Währenddessen blinkt der Cursor (viereckiges Quadrat)und wandert ständig
von der 1.Zeile bis in die 2.Zeile.
Nachdem wir das bewältigt haben müssten wir doch auch das Original
Programm zum Laufen bekommen,oder?
Danke Dir,Du machst mir wieder Hoffnung!
Währenddessen bin ich aber nicht untätig und versuche die
Assemblersprache besser zu verstehen.
Gruß Uli
Tja, dann schau dir die eigentliche Änderung in ulrich_lcd.asm mal
genauer an. Es geht um die ersten paar Zeilen in der Routine ab dem
Label lcd_init:
Ich denke in deiner Fassung wird kein richtiger Software-Reset des LCDs
gemacht, weil die lcd_init wohl fehlerhaft ist. Der Fehler in den ersten
Zeilen wirkt sich dann auf die Umschaltung in den 4-Bit Ansteuermodus
aus. Deshalb scheitern die folgenden Ausgaben.
Wenn du das LCD brutal von der Versorgung trennst und wieder
anstöpselst, macht das LCD einen Hardware-Reset beim Power-Up
(Spannungsversorgung wieder da). Das LCD ist dann im Werksmodus und es
sieht so aus, als ob der zufällig etwas besser funktioniert als der
fehlerhaft initialisierte 4-Bit-Modus (teilweise richtige Ausgabe).
Dein Ziel muss allerdings sein, einen korrekten Software-Reset
hinzubekommen und das LCD korrekt in den 4-Bit-Ansteuermodus zu bringen.
Ich würde im nächsten Schritt aus ulrich_lcd.asm die geänderten Zeilen
beim lcd-init: Label mal in das Ladeprogramm übertragen.
EDIT: Ich gehe gleich in die Falle also mehr ggf. morgen!
EDIT2: Darüber muss ich noch brüten:
> Ein neustart der Schaltung reicht nicht,(neu anlegen der> Spannung)sondern ich habe mal wieder den Stecker vom Display abgezogen> (verzeih mir) und erst dann zeigte es " Hallo! "an.
Es scheint so, dass auch ulrich_lcd.asm das LCD noch nicht richtig
resettet. Ich schaue mal, was ich an Hardware hier habe, um die
Situation nachzustellen.
Hallo Stefan,
gestern Abend noch ein kleines Erfolgserlebnis.Ich habe die
ulrich_lcd.asm insoweit verändert,dass in der 1.Zeile "Hallo !"
und in der 2.Zeile "Guten Tag" angezeigt wurde.Hat mich gefreut,denn von
wirren Zeichen war nichts mehr zu sehen.
Heute habe ich das Originalprogramm etwas verändert und es wird wie
vorgesehen in der 1.Zeile "Akku 12V" angezeigt.Nach Tastendruck erfolgt
Umschaltung auf "Akku 24V".
Das Programm bleibt allerdings an der Stelle stehen.Nach Eingabe des
Akku Typs sollte dahinter die Ampere (beim Start auf 2A eingestellt)
angezeigt und auch verändert werden können.
Direkt nach dem ich den µC neu programmiert habe,läuft das Programm
normal an.Ist die Spannung einmal unterbrochen und wird neu
angelegt,bleibt die Anzeige leer.
Deine Vermutung mit dem Reset könnte zutreffen.Wie kann man das in der
Software einstellen?
Uli
Uli, ich habe zufällig das gleiche LCD in der Bastelkiste gefunden und
baue die Hardware (nur µC/Attiny2313 und LCD) jetzt am Wochenende auf.
Mal sehen, ob ich das von dir beobachtete Verhalten nachstellen und ggf.
beheben kann.
Beim anlegen der Spannung ist die Anzeige nicht mehr "Akku 12V" ,
sondern es wird nur noch " 00,21VV: " ausgegeben.
Das Reset ist also erfolgt und scheinbar behoben.
Die Anzeige von "Akku " bzw. "Ampere" geht nur noch,wenn ich "rcall
wait1s" eingebe.Aber kein Umschalten auf 24V möglich.
Ich arbeite derzeit an dem Original,bekomme es aber nicht hin.
Vielen Dank für deine Mühe.
Uli
Ich verstehe deine Antwort nicht bzw. kann deine Aktionen aus der Ferne
nicht nachvollziehen.
1/ Funktioniert das Minimalprogramm (plus der Änderung aus
Beitrag "Re: Brauche eure Hilfe zum Programmieren") auch bei dir
fehlerfrei?
Fehlerfrei würde bedeuten:
Die Anzeige
1
+--------------------+
2
|Hello world! |
3
| |
4
+--------------------+
und
1
+--------------------+
2
| |
3
| |
4
+--------------------+
wechseln sich alle 3s ab. Tipp: 3s wie Pulsschlag abpassen. Anzahl der
Wechsel in z.B. 1 Min. zählen.
2/ Mit welchem Quellcode und welchem Experiment kam die Anzeige "Akku
12V"?
3/ Welche Spannung hast du dann wo angelegt?
4/ Änderte sich die Anzeige dann von "Akku 12V" auf " 00,21VV: " oder
kam nur " 00,21VV: "? Wenn ersteres - wieviel Zeit ist da ungefähr
vergangen? Hattest du eine Eingabe an den Tasten gemacht? Die Anzeige
bleibt jetzt auf " 00,21VV: " stehen?
5/ Wo machst genau du die Änderung mit rcall wait1s?
Ich habe inzwischen auch den Thread gefunden, in dem der Bleilader
beschrieben ist: Beitrag "Bleiakku-Lader 12/24V"
Bin jetzt am Debuggen der Firmware 1.41
Assembler meldet
> Firmware141.asm(508) : error : Illegal argument type or count
der Zeile
> adiw ZL:ZH,8 ; "Ende!" ausgeben
und er hat Recht. Ändere
1
vct:
2
...
3
ldi ZL,Low(txtSonstiges*2) ; Leerstring zur Überdeckung
4
ldi ZH,High(txtSonstiges*2) ; der bisherigen Stromanzeige
5
adiw ZL:ZH,8 ; "Ende!" ausgeben
in
1
vct:
2
...
3
ldi ZL,Low(txtSonstiges*2) ; Leerstring zur Überdeckung
4
ldi ZH,High(txtSonstiges*2) ; der bisherigen Stromanzeige
Fehlerfrei bedeutet,dass das Minimalprogramm (plus der Änderung)
"ulrich_lcd.asm" ohne Fehler abläuft.
>>2/ Mit welchem Quellcode und welchem Experiment kam die Anzeige "Akku
12V"?<<
Mit dem unendlich langen Quellcode am Anfang des Threads
(Firmware 1.41).
Ich wäre überglücklich,wenn dieser Quellcode ebenso Fehlerfrei laufen
würde.
>>3/ Welche Spannung hast du dann wo angelegt?<<
damit meinte ich die Betriebsspannung von 5V auf der Platine.
>>4/ Änderte sich die Anzeige dann von "Akku 12V" auf " 00,21VV: " oder
kam nur " 00,21VV: "? Wenn ersteres - wieviel Zeit ist da ungefähr
vergangen? Hattest du eine Eingabe an den Tasten gemacht? Die Anzeige
bleibt jetzt auf " 00,21VV: " stehen?<<
Anfangs kam nur die Anzeige auf dem Display " 00,21VV " .An gleicher
Stelle sollte stattdessen " Akku 12V" stehen.
Bis ich den anzuzeigenden Text " Akku 12V" in der Firmware 1.41 so
abgeändert habe:
start:
;3s Text ausgeben
rcall lcd_home
ldi ZL,Low (txtAkku*2)
ldi ZH,High (txtAkku*2)
rcall lcd_print
rcall wait1s
rcall wait1s
rcall wait1s
Der Text "Akku" wurde 3 sec. angezeigt und danach nur noch " 00,21VV: "
Die Anzeige 00,21VV soll die gemessene Akkuspannung in der 2.Zeile des
Display's darstellen.
>>Assembler meldet> Firmware141.asm(508) : error : Illegal argument....<<
Im AVR Studio4 hatte ich keine Probleme beim kompilieren zu einer .hex
Datei.
Ich werde auch die Änderung "adiw ZH:ZL,8" testen.
Brauchst Du evtl. die hex?
Hallo Stefan,
die Firmware 1.41 habe ich nun komplett auf das o.a. LCD Modul
umgeschrieben und es funktioniert ohne Fehler.
An der Stelle bedanke ich mich herzlich für deine Hilfe.
Uli