Ich würde auf jeden Fall mal
"I2c_twi.lib" VOR der
"lcd_i2c.lib" angeben.
Und die "CONFIG SCL" etc. auslassen.
Hallo,
ich betreibe auf meinem Roboter ein I2C LCD 16*2.
Diese steuere ich mit der lcd_i2c.lib an. Das läuft soweit auch ganz gut.
Der Software I2C bus funktioniert soweit dann auch gut. Nur wollte ich das Ganze nun gerne über die Hardware laufen lassen.
Blos wenn ich nun die i2c_twi.lib einbinde funktioniert plötzlich nichts mehr.
Hier ein ausschnitt des Codes:
Freundlicher Gruß,Code:'Microcontroller '================ $regfile = "m16def.dat" $crystal = 16000000 $baud = 19200 $hwstack = 32 $swstack = 10 $framesize = 40 $lib "Lcd_i2c.lib" $lib "i2c_twi.lib" Config Twi = 400000 I2cinit Twcr = &B00000100 'I2C Pins '========== Config Scl = Portc.0 Config Sda = Portc.1 'I2C LCD-Display '================ Declare Sub Lcdausgabe Const Pcf8574_lcd = &H40 Dim _lcd_e As Byte _lcd_e = 128 Waitms 200 Config Lcd = 16 * 2 Cls
Bammel
Ich würde auf jeden Fall mal
"I2c_twi.lib" VOR der
"lcd_i2c.lib" angeben.
Und die "CONFIG SCL" etc. auslassen.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
da funktioniert nix... aber ich glaube langsam das liegt an der i2c_twi.lib
selbst wenn ich diese alleine einbinde funktioniert nichts mehr.
Hast du dir schonmal den Quellcode der Lcd_i2c.lib angeschaut? Ich denke dass diese nur für Software I2C geschrieben ist und nicht ohne weiteres mit Hardware TWI kompatibel ist. Eventuell musst du nur geringfügige Änderungen darin vornehmen und schon läuft es.
Ich kann mir kaum vorstellen, dass der Entwickler der Library diese für beide Arten hergestellt hat.
@PicNick:
"I2c_twi.lib" und "lcd_i2c.lib" vertauschen ist sinnlos, das ist nur eine Anweisung für den Compiler diese einzubinden.Ich würde auf jeden Fall mal
"I2c_twi.lib" VOR der
"lcd_i2c.lib" angeben.
@Bammel:
NeroII hat richtig getippt, der Fehler passiert beim Initialisieren des LCD's, dazu wird ganz zu Anfang, noch bevor eigentlicher Bascom Code ausgeführt wird, die Init LCD Routine unter Verwendung des HW I2C Interfaces aufgerufen.
In diesem Moment ist aber die I2C HW noch nicht konfiguriert, das bedeutet die I2C Hardware des µC läuft mit 1MHz Takt und die internen Pullups sind noch nicht gesetzt.
Du könntest das wie folgt lösen:
- Soft I2C verwenden
- versuchen externe Pullups anzuschließen und hoffen, daß die ersten Takte des I2C Interface mit 1MHz bis zum Config Twi = 400000 korrekt durchlaufen.
- Du kannst die Lib verändern, so daß dieses Problem behoben ist, probier' mal Folgendes:
Such die Stelle in der lcd_i2c Lib:
Ersetze sie durch:Code:[_Init_LCD] _Init_LCD:
Der geänderte Bascom Code dafür:Code:[_Init_LCD] _Init_LCD: Ret _Init_m_LCD:
Code:'Microcontroller '================ $regfile = "m16def.dat" $crystal = 16000000 $baud = 19200 $hwstack = 32 $swstack = 10 $framesize = 40 $lib "Lcd_i2c.lib" $lib "i2c_twi.lib" Config Twi = 400000 I2cinit Twcr = &B00000100 Config Lcd = 16 * 2 'I2C Pins '========== Config Scl = Portc.0 Config Sda = Portc.1 'I2C LCD-Display '================ Declare Sub Lcdausgabe Const Pcf8574_lcd = &H40 Dim _lcd_e As Byte _lcd_e = 128 !Call _Init_m_LCD Waitms 200 Cls
hallo,
das schein zu funktionieren. hab aber bemerkt das es scheinbar an meinem angeschlossenen nunchuk liegt. wenn der dran ist geht garnichts mehr. werde morgen mal nach schaun.
gruß und danke,
Bammel
Lesezeichen