mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Display I2C_Init Problem


Autor: Torsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
void lcd_init(void)
 {    
    lcd_light(false);
  _delay_ms(15);            //-  Wait for more than 15ms after VDD rises to 4.5V
  lcd_write(CMD_D1 | CMD_D0);  //-  Set interface to 8-bit
  _delay_ms(5);          //-  Wait for more than 4.1ms
  lcd_write(CMD_D1 | CMD_D0);  //-  Set interface to 8-bit
  _delay_ms(1);            //-  Wait for more than 100us  
  lcd_write(CMD_D1 | CMD_D0);  //-  Set interface to 8-bit
  lcd_write(CMD_D1);        //-  Set interface to 4-bit

    _delay_ms(50);
  //- From now on in 4-bit-Mode
  lcd_command(LCD_LINE_MODE | LCD_5X10);
  _delay_ms(50);
    lcd_command(LCD_DISPLAYON | LCD_CURSORON | LCD_BLINKINGOFF);
  _delay_ms(50);
    lcd_command(LCD_INCREASE | LCD_DISPLAYSHIFTOFF);
  _delay_ms(50);
   lcd_command(LCD_CLEAR);
    _delay_ms(50);
}
Das steht in einer anderen Datei
#define CMD_D0    (1 << 0)  /**< bit 0 in lower nibble */
#define CMD_D1    (1 << 1)  /**< bit 1 in lower nibble */
#define CMD_D2    (1 << 2)  /**< bit 2 in lower nibble */
#define CMD_D3    (1 << 3)  /**< bit 3 in lower nibble */
#define CMD_RS    (1 << 4)  /**< RS-bit */
#define CMD_RW    (1 << 5)  /**< RW-bit */


  #define LCD_DISPLAYMODE      0x08      /**< Set displaymode */
  #define LCD_DISPLAYON    LCD_DISPLAYMODE | 0x04  /**<  Display on */
  #define LCD_DISPLAYOFF    LCD_DISPLAYMODE | 0x00  /**<  Display off */
  #define LCD_CURSORON    LCD_DISPLAYMODE | 0x02  /**<  Cursor on */
  #define LCD_CURSOROFF    LCD_DISPLAYMODE | 0x00  /**<  Cursor off */
  #define LCD_BLINKINGON    LCD_DISPLAYMODE | 0x01  /**<  Blinking on */
  #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.

Autor: Torsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.