Display I2C_Init Problem

Gast #4705096
Hallo zusammen,

ich habe ein problem wo mich schon sehr viele Nerven Ruiniert hat.

Ich habe einen Atmega8 und einen Externen Quarz (8Mhz) und möchte über 
den I2C Bus ein 4*20 Display ansteuern.
Der I2C-Bus läuft so weit habe eine Ausgangs- und Eingangskarte dran 
hängen wo ich Abfragen und Schalten kann. Also kann es da mal nicht dran 
liegen.

Wenn ich mein LCD-Display Initialisiere möchte bleibt mein 
Microcontroller stehen und macht nicht mehr weit. Wenn ich diese Zeile 
raus nehme Funktioniert er wunder bar, also muss es ja irgendwo an 
diesem Initialisiere liegen.
1
void lcd_init(void)
2
 {    
3
    lcd_light(false);
4
  _delay_ms(15);            //-  Wait for more than 15ms after VDD rises to 4.5V
5
  lcd_write(CMD_D1 | CMD_D0);  //-  Set interface to 8-bit
6
  _delay_ms(5);          //-  Wait for more than 4.1ms
7
  lcd_write(CMD_D1 | CMD_D0);  //-  Set interface to 8-bit
8
  _delay_ms(1);            //-  Wait for more than 100us  
9
  lcd_write(CMD_D1 | CMD_D0);  //-  Set interface to 8-bit
10
  lcd_write(CMD_D1);        //-  Set interface to 4-bit
11

12
    _delay_ms(50);
13
  //- From now on in 4-bit-Mode
14
  lcd_command(LCD_LINE_MODE | LCD_5X10);
15
  _delay_ms(50);
16
    lcd_command(LCD_DISPLAYON | LCD_CURSORON | LCD_BLINKINGOFF);
17
  _delay_ms(50);
18
    lcd_command(LCD_INCREASE | LCD_DISPLAYSHIFTOFF);
19
  _delay_ms(50);
20
   lcd_command(LCD_CLEAR);
21
    _delay_ms(50);
22
}
Das steht in einer anderen Datei
1
#define CMD_D0    (1 << 0)  /**< bit 0 in lower nibble */
2
#define CMD_D1    (1 << 1)  /**< bit 1 in lower nibble */
3
#define CMD_D2    (1 << 2)  /**< bit 2 in lower nibble */
4
#define CMD_D3    (1 << 3)  /**< bit 3 in lower nibble */
5
#define CMD_RS    (1 << 4)  /**< RS-bit */
6
#define CMD_RW    (1 << 5)  /**< RW-bit */
7

8

9
  #define LCD_DISPLAYMODE      0x08      /**< Set displaymode */
10
  #define LCD_DISPLAYON    LCD_DISPLAYMODE | 0x04  /**<  Display on */
11
  #define LCD_DISPLAYOFF    LCD_DISPLAYMODE | 0x00  /**<  Display off */
12
  #define LCD_CURSORON    LCD_DISPLAYMODE | 0x02  /**<  Cursor on */
13
  #define LCD_CURSOROFF    LCD_DISPLAYMODE | 0x00  /**<  Cursor off */
14
  #define LCD_BLINKINGON    LCD_DISPLAYMODE | 0x01  /**<  Blinking on */
15
  #define LCD_BLINKINGOFF    LCD_DISPLAYMODE | 0x00  /**<  Blinking off */

Ich lade die eine Datein auch in die andere rein.

Ich habe auch schon im Internet nachgeschaut und gelesen und ich werde 
einfach nicht schlau.
Gast
Hallo,

ich hab meine Fehler gefunden :-)

Das Problem war das ich die I2C Adresse
als 7 Bit ohne RW betrachtet,  habe sei aber anders angeben müssen also 
als 8 Bit inklusive RW.

Also nicht 0x27 sonder 0x4E.

Jetzt geht das wunderbar.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.