Forum: Mikrocontroller und Digitale Elektronik Display I2C_Init Problem


von Torsten (Gast)


Lesenswert?

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.

von Torsten (Gast)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.