-         

Ergebnis 1 bis 6 von 6

Thema: lcd_i2c.lib + i2c_twi.lib laufen nicht zusammen!?

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    30
    Beiträge
    1.400

    lcd_i2c.lib + i2c_twi.lib laufen nicht zusammen!?

    Anzeige

    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:
    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
    Freundlicher Gruß,
    Bammel

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    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.

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    30
    Beiträge
    1.400
    da funktioniert nix... aber ich glaube langsam das liegt an der i2c_twi.lib
    selbst wenn ich diese alleine einbinde funktioniert nichts mehr.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    27.02.2008
    Ort
    Weil der Stadt
    Alter
    23
    Beiträge
    50
    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.

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    @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:
    Code:
    [_Init_LCD]
    _Init_LCD:
    Ersetze sie durch:
    Code:
    [_Init_LCD]
    _Init_LCD:
      Ret
    
    _Init_m_LCD:
    Der geänderte Bascom Code dafür:

    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

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    30
    Beiträge
    1.400
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •