keiner der mir helfen kann?
Hallo,
ich habe mal wieder ein LCD Problem.
ich habe das AV2040 Display von Conrad (4Zeilen*20Zeichen)
Hier mal mein Testcode, nur funktioniert der leider nicht.
Warum?
Kann mir das bitte jemand helfen?Code:#include <util/delay.h> #define RS PA5 #define RW PA6 #define E PA7 void RS_Low(void) { PORTA &= ~(1<<RS); } void RS_High(void) { PORTA |= (1<<RS); } void RW_Low(void) { PORTA &= ~(1<<RW); } void RW_High(void) { PORTA |= (1<<RW); } void busy(void) { char richtungC = DDRC; char richtungA = DDRA; DDRC = 0x00; RW_High(); RS_Low(); while(PINC & (1<<PINC7)) // warten solange busy DDRC = richtungC; DDRA = richtungA; } void enable(void) { PORTA |= (1<<E); _delay_us(1); PORTA &= ~(1<<E); } void lcd_init(void) { _delay_ms(30); RS_Low(); RW_Low(); DDRC = 0xFF; PORTC = 0b00111100; // Function set: 2 Line Mode / Display on enable(); _delay_us(500); PORTC = 0b00001111; // Display on / Cursor on / Blink on enable(); _delay_us(500); PORTC = 0b00000001; // Display Clear enable(); _delay_ms(3); PORTC = 0b00000110; // Entry Mode Set: auto inkrement busy(); } void Return_Home(void) { RS_Low(); RW_Low(); DDRC = 0xFF; PORTC = 0b00000010; // Return Home enable(); busy(); } void set_adr(char adr) { RS_Low(); RW_Low(); DDRC = 0xFF; PORTC = adr; PORTC |= (1<<PC7); enable(); busy(); } void put_c_adr(char adr, char c) { set_adr(adr); RS_High(); RW_Low(); DDRC = 0xFF; PORTC = c; enable(); busy(); }
Gruß
keiner der mir helfen kann?
Hi,
hätte zunächst zwei Gegenfragen:
Wo ist deine main-Funktion?
Warum das Rad neu erfinden und nicht die Bibliotheken von P. Fleury verwenden?
vG Simon
Meine Main Funktion würde so aussehen:Die Fleury Lib habe ich probiert, aber ich bekomme sie nicht zum laufen.Code:#include <avr/io.h> #include <util/delay.h> #include "lcd.c" int main(void) { lcd_init(); put_c_adr(0x01,0x30); while(1); }
Das Problem: Wenn ich die Fleury lib nehme, wird das Display beim Initialisieren gelöscht. Danach kann ich aber nicht auf das Display schreiben, zumindest erscheint nichts. Aufhängen tut sich der Controller aber nicht und an der Kontrastspannung kanns eigentlich nicht liegen...
Hi,
eins vorneweg: Ich habe keine Ahnung von C, kann dir also nicht helfen wenn das Problem in deinem Programm ist. Ich hatte mal das Problem (in Bascom Basic und mit einem billig-LCD). Ich wollte alle viertel Sekunde neue Werte meines Robby am LCD ausgeben. ALo immer schön ein Clear Screen Befehl( also Cls ; keine Ahnung wie der Befehl in C aussieht) davor. Das Problem dann: Das DIsplay kam nicht mehr mit löschen und schreiben hinterher und war dann auch sozusagen aus. Vielleicht gibt es dasselbe Problem bei dir auch, da ich jedoch kein C kenne konnte ich den Sourcecode von dir nicht absuchen.
Gruß Felix
PS.: Könnte es sein das (falls das Display selbst angelötet wurde)es irgendwo keinen Kontakt gibt?? War bei mir auch schonmal dann flitzen komische Zeichen übers Display.
- Status meines ersten Bot BUG 1.0 : Mit dem US-Sensor rumärgern
- Meine Homepage
Alsi ich empfehle dir, die lib von p. Fleury zu verwenden. Die funktioniert nämlich mit sicherheit (so fern du einen HD44870 kompatiblen Controller auf dem LCD hast)! Ansonsten: hast du R/W angeschlossen oder auf Masse gelegt?
Was für'n Controller? (Bei ATMega32 kannst du z.B. PC6 (bin mir grad nicht ganz sicher) nicht benutzen, wenn das Fusebit JTAGEN enabled ist). Ich schätze mal, dass hier ein Softwareproblem vorliegt.
vG Simon
Ja, das JTAGEN wars, vergess ich immer wieder....Zitat von PCMan
aha, na also
Lesezeichen