www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmega8 + Batron (Philips) i2c LCD + Peter Fleury i2c lib


Autor: Tom F. (mrtom)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche ein Batron i2c Display mit einem Atmega8 anzusteuern.

Hardware:
- Batron BT HQ 21605AV-YETF-LED04-I2C-5V
 ( Philips PCF2119 Controller )
- SDA und SCL mit 4,7 K auf VDD
- Atmega8 (mit internem OC auf STK500)

Software:
- GCC-AVR 4.2.2
- Peter Fleury`s I2C Master Interface

Meine SRC-Änderungen:
- test_i2cmaster.c angepasst (siehe *.zip)
- i2cmaster.s die SDA und SCL Pinne eingestellt
- makefile für Atmega8 konfiguriert

Ich habe mir die "test_i2cmaster.c" genommen und nach meinen 
Bedürfnissen geändern. Leider sieht man auf dem LCD gar nichts.

Hier meine "test_i2cmaster.c". Die kompletten Files + Datenblätter 
liegen im rar file.
#include <avr/io.h>
#define F_CPU 1000000UL  // 1 MHz
#include <util/delay.h>
#include "i2cmaster.h"

#define lcd_address  0x74      // device address


unsigned char ret;

void blink(void)
{
  PORTB = 0xFF; 
  _delay_ms(500);  
  PORTB = 0x00; 
  _delay_ms(500);  
  PORTB = 0xFF;    
  _delay_ms(500);  
  PORTB = 0x00;
}
    
void lcd_init(void)
{
  
    ret = i2c_start(lcd_address+I2C_WRITE);       // set device address and write mode
    if ( ret ) 
  {
        /* failed to issue start condition, possibly no device found */
        i2c_stop();
        PORTB=0xFF;                            // activate all 8 LED to show error */
    }
  else 
  {    
    i2c_write(0x80);        // Control byte for Instruction
    i2c_write(0x30);   
    i2c_write(0x0E);           // DDRAM Address set to 00hex
    i2c_write(0x06);           // return home  
    }
}

void write_char(void)
{
  
   ret = i2c_start(lcd_address+I2C_WRITE);       // set device address and write mode
  if ( ret ) 
  {
    /* failed to issue start condition, possibly no device found */
    i2c_stop();
    PORTB=0xFF;                            // activate all 8 LED to show error */
  }
  else 
  {    
    i2c_write(0x40);        // Control byte for Data
    
    int i;
    for (i=1;i<=16;i++)
    {
      i2c_write(0xC0+i);      // Write ABCDE....
    }
    i2c_stop();
  }
}



int main(void)
{
    DDRB  = 0x00;  
  
  i2c_init();    

  lcd_init();    
  
  write_char();
}

Ich bin für jeden Tip bzw. Code dankbar.

Gruss mrtom

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.