Hallo,
nach Kauf eines 44780-er-Standard-LCD-Displays ergaben sich folgende "Glühbirn-im-Kopf-angeh"-Aha-Effekte:
Unbekannte Hardware:
Pinbelegung herausfinden. (z. B. waren Beleuchtungs-Pins nicht herausgeführt verdrahtet, das Poti zur Kontrast-Einstellung zwingend notwendig.)
Die Software-Beispiele im Net, von deren es doch eine Menge gibt, teils Bascom, leider sehr wenige in Assembler, die der hier verwendete ATMega8515 (STK500-er Board) auch versteht, sind nicht eins zu eins auch einsetzbar.
(...wäre auch zu schön...)
Dann der 4-Bit-Modus, über den in zahllosen Threads immer wieder dieselben Probs aufzutauchen scheinen:
Also:
Denkproblem numero eins:
Wenn ich ein Display initialisieren soll mit einer Bitfolge, die eine Parallelbusbreite von mindestens 8-Bit hat, dafür aber nur die vier obersten Strippen anschließe, wie soll man dann dreimal hintereinander Hex03 senden?
OK.
Denkproblem numero zwei:
Die RS- bzw. Enable- Impuls- Bitzuordnung auf dem(n) Port(s) erfolgt einmal per sbi dann wiederum per sbr Befehl.
In der Syntaxblibliothek (AVR-Studio4 - Help Menue Assemblerbefehle) findet man dazu,
daß einmal von Null aus gezählt wird, dann einmal von 1 aus
also kann z. B. eine .EQU RS=1 Anweisung in dem Definitionsheader eines selbsterstellten Progs nie richtig funktionieren. (dasselbe gälte auch für den Enable-Impuls, wenn der z. B. auf Bit Null gesetzt wurde.)
Dann gibt es ein weiteres Denkproblem:
Die RS-Setzung erfolgt einmal nach Null einmal nach Eins.
Das ist wohl abhängig davon, welcher Maskierungsbefehl vorher verwendet wurde:
Einmal wird mit andi gearbeitet, dann wieder mit ori.
Also, Bei Andi wird nach geraumer Zeit alles mehr oder weniger Null, bei Ori mehr oder weniger High, (kleiner Exkurs am Rande).
Dabei setzen die sbr bzw sbi Befehle, wenn ich die Syntaxbibliothek richtig verstanden habe einmal ein andi bzw. ori voraus, bzw. führen diese Operation intern selber aus.
Und jetzt kommt's:
Wenn ich im Vier-Bit-Modus arbeiten möchte muß ich ja die Vierergruppen (Nibbles) vertauschen.
OK.
Jetzt ist im "unteren" Nibble der RS- und der Enable-Impuls maskiert.
Wie soll man da noch nach jedem Nibble, den Enable-Impuls aktivieren, was ja auch oft vergessen wird, ohne wieder die Maske hier neu definieren zu müssen.
Die Timingbedinung kommt so niemals zustande, da der Enableimpuls ein "Transition-State"-Impuls ist, das heißt, er ist flankenorientiert. Dabei hat die steigede, wie auch fallende Flanke eine Bedeutung.
Einfach einen Hex-Wert-eingeben und alles mit einem Rutsch übergeben, geht nicht. Die Daten müssen vor dem Enable-Impuls stabil anliegen.
So, für heute erst einmal Schluß, werde weiter berichten.
Also
Cursor blinkt schon mal, mir HexC0 bekomme ich auch zwei Zeilen hin.
Nur, die Routinen laufen immer rund.
Und jede Menge Stack-Overflow- Fehlermeldungen.
Bis dann,
bleibe dran.
Gruß von Oskar.
nach Kauf eines 44780-er-Standard-LCD-Displays ergaben sich folgende "Glühbirn-im-Kopf-angeh"-Aha-Effekte:
Unbekannte Hardware:
Pinbelegung herausfinden. (z. B. waren Beleuchtungs-Pins nicht herausgeführt verdrahtet, das Poti zur Kontrast-Einstellung zwingend notwendig.)
Die Software-Beispiele im Net, von deren es doch eine Menge gibt, teils Bascom, leider sehr wenige in Assembler, die der hier verwendete ATMega8515 (STK500-er Board) auch versteht, sind nicht eins zu eins auch einsetzbar.
(...wäre auch zu schön...)
Dann der 4-Bit-Modus, über den in zahllosen Threads immer wieder dieselben Probs aufzutauchen scheinen:
Also:
Denkproblem numero eins:
Wenn ich ein Display initialisieren soll mit einer Bitfolge, die eine Parallelbusbreite von mindestens 8-Bit hat, dafür aber nur die vier obersten Strippen anschließe, wie soll man dann dreimal hintereinander Hex03 senden?
OK.
Denkproblem numero zwei:
Die RS- bzw. Enable- Impuls- Bitzuordnung auf dem(n) Port(s) erfolgt einmal per sbi dann wiederum per sbr Befehl.
In der Syntaxblibliothek (AVR-Studio4 - Help Menue Assemblerbefehle) findet man dazu,
daß einmal von Null aus gezählt wird, dann einmal von 1 aus
also kann z. B. eine .EQU RS=1 Anweisung in dem Definitionsheader eines selbsterstellten Progs nie richtig funktionieren. (dasselbe gälte auch für den Enable-Impuls, wenn der z. B. auf Bit Null gesetzt wurde.)
Dann gibt es ein weiteres Denkproblem:
Die RS-Setzung erfolgt einmal nach Null einmal nach Eins.
Das ist wohl abhängig davon, welcher Maskierungsbefehl vorher verwendet wurde:
Einmal wird mit andi gearbeitet, dann wieder mit ori.
Also, Bei Andi wird nach geraumer Zeit alles mehr oder weniger Null, bei Ori mehr oder weniger High, (kleiner Exkurs am Rande).
Dabei setzen die sbr bzw sbi Befehle, wenn ich die Syntaxbibliothek richtig verstanden habe einmal ein andi bzw. ori voraus, bzw. führen diese Operation intern selber aus.
Und jetzt kommt's:
Wenn ich im Vier-Bit-Modus arbeiten möchte muß ich ja die Vierergruppen (Nibbles) vertauschen.
OK.
Jetzt ist im "unteren" Nibble der RS- und der Enable-Impuls maskiert.
Wie soll man da noch nach jedem Nibble, den Enable-Impuls aktivieren, was ja auch oft vergessen wird, ohne wieder die Maske hier neu definieren zu müssen.
Die Timingbedinung kommt so niemals zustande, da der Enableimpuls ein "Transition-State"-Impuls ist, das heißt, er ist flankenorientiert. Dabei hat die steigede, wie auch fallende Flanke eine Bedeutung.
Einfach einen Hex-Wert-eingeben und alles mit einem Rutsch übergeben, geht nicht. Die Daten müssen vor dem Enable-Impuls stabil anliegen.
So, für heute erst einmal Schluß, werde weiter berichten.
Also
Cursor blinkt schon mal, mir HexC0 bekomme ich auch zwei Zeilen hin.
Nur, die Routinen laufen immer rund.
Und jede Menge Stack-Overflow- Fehlermeldungen.
Bis dann,
bleibe dran.
Gruß von Oskar.