-
        

Ergebnis 1 bis 8 von 8

Thema: LCD Problem

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.11.2004
    Beiträge
    263

    LCD Problem

    Anzeige

    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?
    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();
    }
    Kann mir das bitte jemand helfen?

    Gruß

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.11.2004
    Beiträge
    263
    keiner der mir helfen kann?

  3. #3
    Erfahrener Benutzer Begeisterter Techniker Avatar von PCMan
    Registriert seit
    05.08.2006
    Ort
    Munich
    Beiträge
    311
    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

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.11.2004
    Beiträge
    263
    Meine Main Funktion würde so aussehen:
    Code:
    #include <avr/io.h>
    #include <util/delay.h>
    #include "lcd.c"
    
    int main(void) {
    
    	lcd_init();
    	put_c_adr(0x01,0x30);
                    while(1);
    }
    Die Fleury Lib habe ich probiert, aber ich bekomme sie nicht zum laufen.
    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...

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    24.05.2007
    Ort
    Breisach
    Alter
    26
    Beiträge
    72
    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

  6. #6
    Erfahrener Benutzer Begeisterter Techniker Avatar von PCMan
    Registriert seit
    05.08.2006
    Ort
    Munich
    Beiträge
    311
    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

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.11.2004
    Beiträge
    263
    Zitat Zitat von PCMan
    ... wenn das Fusebit JTAGEN enabled ist
    Ja, das JTAGEN wars, vergess ich immer wieder....

  8. #8
    Erfahrener Benutzer Begeisterter Techniker Avatar von PCMan
    Registriert seit
    05.08.2006
    Ort
    Munich
    Beiträge
    311
    aha, na also

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •