PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : lcd_i2c.lib + i2c_twi.lib laufen nicht zusammen!?



Bammel
10.01.2010, 13:27
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:


'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


Freundlicher Gruß,
Bammel

PicNick
10.01.2010, 17:15
Ich würde auf jeden Fall mal
"I2c_twi.lib" VOR der
"lcd_i2c.lib" angeben.

Und die "CONFIG SCL" etc. auslassen.

Bammel
10.01.2010, 17:28
da funktioniert nix... aber ich glaube langsam das liegt an der i2c_twi.lib
selbst wenn ich diese alleine einbinde funktioniert nichts mehr.

NeroII
10.01.2010, 18:08
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.

MagicWSmoke
10.01.2010, 19:02
@PicNick:

Ich würde auf jeden Fall mal
"I2c_twi.lib" VOR der
"lcd_i2c.lib" angeben.


"I2c_twi.lib" und "lcd_i2c.lib" vertauschen ist sinnlos, das ist nur eine Anweisung für den Compiler diese einzubinden.

@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:

[_Init_LCD]
_Init_LCD:

Ersetze sie durch:

[_Init_LCD]
_Init_LCD:
Ret

_Init_m_LCD:


Der geänderte Bascom Code dafür:




'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

Bammel
10.01.2010, 21:08
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