-
        

Ergebnis 1 bis 6 von 6

Thema: LCD an Atmega8 funktioniert nicht

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    18.12.2004
    Beiträge
    24

    LCD an Atmega8 funktioniert nicht

    Anzeige

    Hallo!

    Ich werd verrückt.
    Mein Display will einfach nicht.
    Bitte kann mir wer helfen. Ich will das Display mit 4bit-Daten ansprechen.

    Danke im Vorraus
    mfg Christian

    Code:
    /*
    Displayansteuerung
    2x20 Display an ATmega8
    Pinbelegung: PORTD = (x,E,RS,RW,D7,D6,D5,D4)
    */
    
    #include <avr/io.h>
    #include <stdlib.h>
    
    #define LCD_RS 5
    #define LCD_E 7
    
    void warten(int t)          // Warteschleife
    {
     int h;
     for (;t>0;t--)
     {
      for (h=1600;h>0;h--) {}
     }
     return;
    }
    
    void lcd_enable( int d )
    {
      PORTD = d;
      PORTD |= 1<<LCD_E;
      PORTD &= ~(1<<LCD_E);  
    
    }
    
    void lcd_init( void )
    {
      PORTD = 0x00;
      
      lcd_enable(0x03);        // 8 bit mode
      warten( 500 );			   
    
      lcd_enable(0x03);
      warten( 200 );			   
    
      lcd_enable(0x03);	       
      warten( 200 );			   
    
      lcd_enable(0x02);		   // 4 bit mode
      warten( 200 );
    
      lcd_enable(0x08);		   // 2zeilig, 5*8
      warten( 200 );
      
      lcd_enable(0x01);		   // clear Display
      warten( 200 );
      
      lcd_enable(0x0F);		   // Disp., Cursor, blink. ein
      warten( 200 ); 
    }
    
    
    
    void main(void)		   // Hauptprogramm
    {   
      DDRD = 0xFF;          
      lcd_init();
    
    }

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Nach dem Umstellen auf 4 Bit musst du in Nibbles senden, und zwar zuerst das HIGH, danach das LOW.
    Disclaimer: none. Sue me.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,
    ich glaub das mit den Bits passt nicht ganz zusammen, zumindest nicht mit der Bemerkung zur Pinbelegung !
    ich mein RS und Enable Pin.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Dann fällt mir noch ein, wie schnell Taktet der µC ?
    die Daten des LCD werden mit fallender Flanke von Enable übernommen, dazu muss das Enable eine gewisse Zeit auch oben sein, damit es erkannt wird, bei Dir geht das, meiner Meinung, etwas zu schnell mit dem setzen und löschen.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Jau, das Enable sollte etwas gehalten werden.
    Die Warteschleife ist nicht so optimal, möglicherweise kloppt GCC die in die Tonne, weil da nix passiert.
    Bau mal ein
    asm volatile (";");
    anstatt dem {} ein.
    Disclaimer: none. Sue me.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    18.12.2004
    Beiträge
    24
    Danke für die schnellen Antworten. Jetzt habe ich es geschafft.
    Es war von allem etwas falsch.

Berechtigungen

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