Entweder ist die Initialisierung falsch. Was bedeutet lcd_init(LCD_DISP_ON)? Sollte das nicht nur lcd_init() heißen?
Oder das Display ist keines mit HD44780 oder kompatibel
MfG Hannes
Hallo,
ich habe ein LCD gemäß 4-Bit mit Busy an Port C angeschlossen.
Das ganze mit WinAVR übertragen:
Ich habe aber das weit verbreitete Problem mit den 2 schwarzen bzw. 2 weißen Balken.Code:> "make.exe" program Compiling C: rn-control.c avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./rn-control.lst -I. -std=gnu99 -MMD -MP -MF .dep/rn-control.o.d rn-control.c -o rn-control.o Compiling C: lcd.c avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./lcd.lst -I. -std=gnu99 -MMD -MP -MF .dep/lcd.o.d lcd.c -o lcd.o Linking: rn-control.elf avr-gcc -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=rn-control.o -I. -std=gnu99 -MMD -MP -MF .dep/rn-control.elf.d rn-control.o lcd.o --output rn-control.elf -Wl,-Map=rn-control.map,--cref -lm Creating load file for Flash: rn-control.hex avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock rn-control.elf rn-control.hex Creating load file for EEPROM: rn-control.eep avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \ --change-section-lma .eeprom=0 --no-change-warnings -O ihex rn-control.elf rn-control.eep || exit 0 avrdude -p atmega32 -P com4 -c stk500v2 -U flash:w:rn-control.hex avrdude: stk500_2_ReceiveMessage(): timeout avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.04s avrdude: Device signature = 0x1e9502 avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude: erasing chip avrdude: reading input file "rn-control.hex" avrdude: input file rn-control.hex auto detected as Intel Hex avrdude: writing flash (722 bytes): Writing | ################################################## | 100% 0.89s avrdude: 722 bytes of flash written avrdude: verifying flash memory against rn-control.hex: avrdude: load data flash data from input file rn-control.hex: avrdude: input file rn-control.hex auto detected as Intel Hex avrdude: input file rn-control.hex contains 722 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.48s avrdude: verifying ... avrdude: 722 bytes of flash verified avrdude done. Thank you. > Process Exit Code: 0 > Time Taken: 00:22
Text bekomme ich nicht auf das Display, egal in welcher Zeile
Ein Datenblatt von dem Display habe ich allerdings nichtCode:#include <stdlib.h> #include <avr/io.h> #include "lcd.h" #include "rn-control.h" int main(void) { for(;;){ /* Initialisiere Display, Cursor aus */ lcd_init(LCD_DISP_ON); /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */ lcd_clrscr(); /* String auf Display anzeigen */ lcd_puts("Hello world.\n"); lcd_puts("testme\n"); } return 0; }
auf dem Display steht nur was von "JHD 204A".
Wie bekomme ich Text auf das Display?
gruß
pod32
Entweder ist die Initialisierung falsch. Was bedeutet lcd_init(LCD_DISP_ON)? Sollte das nicht nur lcd_init() heißen?
Oder das Display ist keines mit HD44780 oder kompatibel
MfG Hannes
Hmmm, bei mir steht z.B. dies:Zitat von pod32
... und Hannes hat ja schon festgestellt, dass das bei Dir nicht da ist. Ausserdem vermisse ich beim schnellen drüberschauen bei Dir die einzubindenden Libraries. Andersrum: wo ist bei Dir die Routine lcd_init, die Du im main aufrufst? NUR Abschreiben des codes funktioniert ja leider nicht immer. Hast Du das in der Anleitung gelesen?Code:#define LCD_DISP_ON 0x0C /* display on, cursor off */
Zitat von [b
Ciao sagt der JoeamBerg
die lcd.h ist 'selbstverständlich' eingebunden.
Zu allem Überfluss habe ich auch noch die rn-control.h aus dem Demoprogramm drin, falls ich mal von dort eine Funktion brauche (wird ja weg optimiert).
Die Routine lcd_init steht dann in der lcd.h bzw. lcd.c und das
auch.Code:#define LCD_DISP_ON 0x0C /* display on, cursor off
Der Linker bindet die lcd.o auch ein...
@Hannes:Code:Linking: rn-control.elf avr-gcc -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=rn-control.o -I. -std=gnu99 -MMD -MP -MF .dep/rn-control.elf.d rn-control.o lcd.o --output rn-control.elf -Wl,-Map=rn-control.map,--cref -lm
Das Display ist zumindest zum HD44780 kompatibel, soviel weiß ich.
edit: habe ein Datenblatt gefunden:
http://www.8051projects.net/e107_fil...jm204aspec.pdf
edit2:
auf Seite 16, im Flussdiagramm steht, dass man 30ms (bei einer Oszillatorfrequenz von 270kHz) warten muss, bevor man mit dem Initialisieren beginnen kann.
In der lcd.c, in, in Zeile 556,Code:void lcd_init(uint8_t dispAttr)
steht im 4-Bit IO Mode eine Verzögerung von 16ms.
Die Frage ist nun, ob es sich um ein Timing-Problem handelt oder nicht...
ich habe nun mal auf Verdacht das Display gegen ein neues, baugleiches getauscht -> keine Änderung.
Ich habe auch die von Bascom generierte Intel-HEX (aus dem Wiki-Eintrag) übertragen. Selbes Ergebnis, nur 2 Balken.
Bild 1Bild 2
Dabei leuchtet die LED2,4,6 und 7
Könnte es auch an HF-Einflüssen liegen?
Die Platine unterhalb des Displays ist ein Veroboard (die mit durchgezogenen Leiterbahnen).
Könnte es sein, dass ich mir damit Störungen einfange?
Warum bekomm ich nur nichts auf die Anzeige... :\
P.S. ein Oszi habe ich zur Verfügung...
Puhhhh - schrecklich ! Brrrrrrrrrrr ! Kannst Du bitte die Bilder kleiner machen? Siehe hier - Punkt 11. Mir fällt bei solchen Breitwandbildern immer der Bildschirm mit Übergewicht vom Tisch.
Du hast das LCD am Port C des m32. Dummerweise hatte ich nicht gleich geschaltet: hast Du die JTAG Fuses korrekt gesetzt? Siehe hier - lesen bei JTAGEN. Das ist ein dämlicher Fallstrick - in dem war ich auch mal gefangen *nochmehrbrrrrrrrrrrrrrr*. Dabei werden beim m32 PC2 bis PC5 vom JTAG "besetzt". Kann es sein, dass Dein Display an einem oder mehreren dieser Pinne hängt?
Viel Erfolg
Ciao sagt der JoeamBerg
JTAG habe ich disabled, es werden von PORTC der Pin 1 bis 7 genutzt.
Ich habe alles so angeschlossen, wie im Wiki beschrieben:
http://www.rn-wissen.de/index.php/LC...8I.2FO_Mode.29
Screenshot der ausgelesenen FUSES mit AVR-Studio:
Bild hier
echt seltsam das Ganze
Danke für die geänderte Bilderpräsentation.
Ich lese mal in der Beschreibung der RNControl:Zitat von pod32
Diese Ports hängen an zwei "IN"s des L293D. Ich habe aber keine Ahnung, was das ausmacht (bin auch im Moment zu faul, das zu testen - da müsste ich mein LCD umlöten . . . .).Zitat von Beschreibung der RNControl
Ich gehe mal jetzt davon aus (sorry, steht vielleicht auch hier irgendwo im Thread) dass der Port korrekt initialisiert ist. Das sollte ja durch die Library gut erfolgen. Wenn nicht irgendwann "hinterher" etwas anderes geschrieben steht.
Ciao sagt der JoeamBerg
Danke für das Vorlesen aus der Beschreibung *nochnochmehrbrrrr*
Ich habe das L293D entfernt und zur Sicherheit nochmal neu geflashed.
Immer noch nur 2 Balken.
hier meine main:
Den I2C nutze ich (wie zu sehen ist) auch nicht.Code:#include <stdlib.h> #include <avr/io.h> #include "lcd.h" #include "rn-control.h" /*### Hauptschleife ###*/ int main(void) { for(;;){ /* Initialisiere Display, Cursor aus */ waitms(30); lcd_init(LCD_DISP_ON); /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */ waitms(20); lcd_clrscr(); /* String auf Display anzeigen */ waitms(30); lcd_puts("Hello world.\n"); lcd_puts("testme\n"); lcd_puts("testme\n"); lcd_puts("testme\n"); } return 0; }
Hmmm, ich muss wohl doch mein RNControl auspacken und das LCD umlöten. Wie wärs, wenn Du nach den einzelnen lcd_puts(irgendwas) immer wieder ein waitms (1000) einfügst? Ausserdem würde ich (so als totaler C(äh)-Nobody die for-Schleife erst nach dem lcd_init anfangen lassen.
Meine Rat(losigkeits)schläge sind wie immer ohne jede Garantie.
Ciao sagt der JoeamBerg
Lesezeichen