Hallo holger,
stimmt - Danke für den Hinweis!
Das bedeutet also eine eigene Funktion nur für die ersten vier Befehle.
Dazu habe ich noch eine Verständnisfrage:
Im 4-Bit-Mode, wir das Byte ja in High-byte und Low-byte aufgeteilt.
Das High-Byte soll zuerst übertragen werden, danach das Low-Byte.
Ich habe 4 Datenleitungen, das passt.
Wie soll ich nun aber dieses Byte im 8-Bit-Mode senden?
Ich kann ja auf Grund der 4 Datenleitungen auch nicht alle 8 bits auf
einmal senden?!
Wie funktioniert das?
Hallo Mitlesa,
vielen Dank für deine Hilfe und deinen Hinweis bezüglich der
Formatierung.
Ich habe es nun genau durchgelesen.
Das Code-Beispiel von dir erscheint mir richtig, allerdings muss noch
ein anderer Fehler im Quellcode sein.
Hier nochmal die Initialisierung:
Wolfgang schrieb:> allerdings muss noch ein anderer Fehler im Quellcode sein.
Lies das Datenblatt zur Initialisierung eines HD44780.
Vor und zwischen dem Senden der Initialisierungs-Nibbles müssen
Delays eingebaut sein.
LCD schrieb:> // Zeitschleife> void Delay(uint32_t nCount)> {> for(; nCount != 0; nCount--);> }
Da müsstest du dir vielleicht noch etwas intelligenteres
einfallen lassen. Im schlimmsten Fall wird dir diese Schleife
vom Compiler wegoptimiert sodass dein Delay nahezu Null ist.
m.n. schrieb:> Da muß nämlich R/W beschaltet sein.
Begündung?
Gegenbegründung: Solange man das LCD nur beschreibt, also keinen
Handshake macht indem man den Status liest, muss die R/W Leitung
auch nicht bedient werden und kann statisch auf Low gezogen werden.
Nur das Timing durch Delays muss eingehalten werden ....
LCD schrieb:> ich habe ein Problem mit meinem HD44780 LCD Display an einem STM32F10xLCD schrieb:> void upNib(uint8_t c) {> if(c & 0x80)> GPIO_SetBits(LCD_Port, D7);> else> GPIO_ResetBits(LCD_Port, D7);> if(c & 0x40)> GPIO_SetBits(LCD_Port, D6);> else> GPIO_ResetBits(LCD_Port, D6);> if(c & 0x20)> GPIO_SetBits(LCD_Port, D5);> else> GPIO_ResetBits(LCD_Port, D5);> if(c & 0x10)> GPIO_SetBits(LCD_Port, D4);> else> GPIO_ResetBits(LCD_Port, D4);> }
Nein.
Du hast kein Problem mit deinem HD44780.
Du hast hingegen ein ernstes Problem mit deinem STM32F10x - und zwar mit
dessen sinnvoller Benutzung. Was du da mit den Portbits anstellst, sieht
ja grauenhaft aus. Lies mal das Manual zu deinem Chip, insbesondere
dazu:
1
volatileunsignedlongBSRR;/* Bit-SetReset:
2
Bits 0..15->set ODR Bits 0..15,
3
Bits 16..31->reset ODR Bits 0..15 */
Abgesehen davon sollte dir die meiner Erinnerung nach knapp 1 seitige
Tabelle mit den Befehlscodes zum Display genug sagen, um so ein Display
sinnvoll ansteuern zu können.
W.S.
Hallo W.S.,
vielen Dank für deinen Tipp.
Ich werde mich nun umgehend damit befassen.
Aber eigentlich ist es ja nur die Schreibweise die verbessert werden
sollte, die Funktion an sich sollte ja trotzdem funktionieren.
Wolfgang schrieb:> Da lag der Fehler - die Zeitschleife wurde wohl wegoptimiert.
Ja freut mich für dich!
Aber etwas gut Definiertes ist das ja nicht mit deiner Zählschleife.