Ich habe mir ein I2C LCD_Modul gekauft, und kann es nicht ansteuern. Das Problem scheint die Adresse zu sein. Die Angaben zum Modul:
LiquidCrystal_I2C lcd(0x20,2,1,0,4,5,6,7,3,POSITIVE);//Addr,En,RW,RS,d4,d5,d6,d7,backlighpin, polarity. Weiterhin steht I2C Adress:0x27.
Ich versuche die Ansteuerung mit einem Atmega 8a und Ihrem geänderten Programm.
' Datei für Attiny-Platine 2.0 mit I2C-LCD von E. Eube, G. Heinrichs und U. Ihlefeldt
' Hello-World-Programm für I2C-LCD von YwRobot
'
' Die in der Deklaration benutzten Bezeichner werden von der Library benutzt und dürfen
' nicht verändert werden.
'
' Die Hintergrundbeleuchtung kann mithilfe der Variablen lcd_backlight ein- und ausgeschaltet werden;
' allerdings wird der Zustand dieser Variablen erst durch einen folgenden LCD-Befehl
' (z. B. locate, lcd "...") an das LCD übermittelt.
' Standardmäßig wird lcd_backlight beim Initialisieren des LCDs durch die Library
' auf 1 gesetzt, so dass die Hintergrundbeleuchtung beim Start automatisch eingeschaltet wird.
'----------------------------------------------------------------------------
$regfile = "m8adef.dat" 'ATMEGA8A
$crystal = 1000000 '1 MHz
$lib "YwRobot_Lcd_i2c.lib" 'YwRobot Treiber für LCD
$hwstack = 64
$swstack = 10
$framesize = 40
LyquidCrystal
'**********************************************************
'******************* Deklarationen ************************
Const Pcf8574_lcd = 78 'Adresse des I2C-LCDs
Dim Lcd_backlight As Byte '1 = an; 0 = aus. Wird erst durch einen LCD-Befehl umgesetzt!
'****************** Initialisierung ***********************
Ddrc = &B11111111 'Port B als Ausgangsport
'Ddrd = &B01110000 'D4, D5, D6 als Ausgang; Rest als Eingang
'Portd = &B10001111 'Eingänge auf high legen
Config Scl = Portc.5 'Konfigurieren von I2C
Config Sda = Portc.4
Config Lcd = 16 * 2 'nicht unbedingt nötig
Config I2cdelay = 1
Waitms 300 'warte bis Kondensator bei Ta0 geladen, auch für LCD-Init!
'**********************************************************
'******************** Hauptprogramm ***********************
Cls
Lcd "Hello world!"
Wait 1
Lcd_backlight = 0
Locate 2 , 1
Lcd "2. row..."
Wait 2
Lcd_backlight = 1
Locate 1 , 1 'Damit Backlight-Zustand an LCD übermittelt wird
End
LCD I2Ansteuerung
Re: LCD I2Ansteuerung
Hallo stappe,
leider habe ich mich lange Zeit nicht mehr so richtig um mein Forum kümmern können; deswegen habe ich auch Deinen Beitrag erst heute gelesen. Nun, besser spät als nie; vielleicht hilft Dir meine Antwort doch noch:
1. Die Adressenangabe ist m. E. korrekt: I2C-Adressen werden häufig im 7-Bit-Format angegeben: Die Angabe des Herstellers/Händlers lautet $27, das ist dezimal 32+7 = 39. BASCOM benutzt eine 8-Bit-Adresse; diese besteht aus der 7-Bit-Adresse, an welche das Richtungsbit angefügt wird: 0 für Schreiben, 1 für Lesen. In diesem Fall ist die Schreibadresse daher 39*2 + 0 = 78. Und dieser Wert steht auch unten im Programm.
2. Auffällig ist der Befehl LyquidCrystal. Es handelt sich hier nicht um einen BASCOM-Befehl; deswegen kommt es auch zu einem Kompilationsfehler. Ich verstehe auch nicht, welchen Zweck dieser Befehl hier haben sollte. Ich rate dazu, ihn einmal wegzulassen.
Liebe Grüße
Georg
leider habe ich mich lange Zeit nicht mehr so richtig um mein Forum kümmern können; deswegen habe ich auch Deinen Beitrag erst heute gelesen. Nun, besser spät als nie; vielleicht hilft Dir meine Antwort doch noch:
1. Die Adressenangabe ist m. E. korrekt: I2C-Adressen werden häufig im 7-Bit-Format angegeben: Die Angabe des Herstellers/Händlers lautet $27, das ist dezimal 32+7 = 39. BASCOM benutzt eine 8-Bit-Adresse; diese besteht aus der 7-Bit-Adresse, an welche das Richtungsbit angefügt wird: 0 für Schreiben, 1 für Lesen. In diesem Fall ist die Schreibadresse daher 39*2 + 0 = 78. Und dieser Wert steht auch unten im Programm.
2. Auffällig ist der Befehl LyquidCrystal. Es handelt sich hier nicht um einen BASCOM-Befehl; deswegen kommt es auch zu einem Kompilationsfehler. Ich verstehe auch nicht, welchen Zweck dieser Befehl hier haben sollte. Ich rate dazu, ihn einmal wegzulassen.
Liebe Grüße
Georg