-         

Ergebnis 1 bis 5 von 5

Thema: [gelöst] I2C sendet keine Bytes / Programm bleibt stehen.

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987

    [gelöst] I2C sendet keine Bytes / Programm bleibt stehen.

    Anzeige

    Moin.

    Hab an einem ATMega8 das Problem, dass ich über den I2C-Bus keine Bytes senden kann. Die Startbedingung wird noch korrekt gesetzt, das Nachfolgende Byte wird jedoch nicht mehr gesendet.
    Pullups sind je 2x 2,2K.

    Hier die betreffende SUB:
    Code:
    Sub FormatEEPROM
      '.............................................................................
      ' Format EEPROM (all bytes to 0xFF)
      '.............................................................................
      Config SCL = PORTC.5
      Config SDA = PortC.4
    
      tmpWord = 0
      LED_EEPROM = Led_On
      BarOff                 'LED-Bargraph off
      Bar10 = LED_ON  'Last LED on Bargraph on
      Print #1 , "F-"
    
      Pages = EEPROMSIZE / PAGESIZE  'EEPROMSIZE = 8192, PAGESIZE = 32
    
      For w2 = 1 to pages
      Print "W2:" ; w2
        INCR tmpword
        If tmpWord = 10 Then
          tmpWord = 0
          Toggle Bar10
        EndIf
      Print "a";
        EEAddress = PAGESIZE * w2
        EEAddress = EEAddress - PAGESIZE
      Print "b";
        I2CStart
      Print "c";
        I2CWByte SID_EEPROMW
      Print "d";
        I2CWByte EEAddressH
      Print "e";
        I2CWByte EEAddressL
      Print "f";
        For w1 = 1 to PAGESIZE
        Print "W1:" ; w1
      Print "g";
        '     I2CWByte CTRL_EMPTY
        next
        I2CStop
        waitms 1
      Print "e";
      next
      PRINT #1 , "F!"
      LED_EEPROM = Led_Of
      Bar10 = LED_OFF
    
    End Sub
    Über RS232 wird "c" noch ausgegeben, danach steht das Programm.
    Sieht da jemand nen Fehler?
    #ifndef MfG
    #define MfG

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Bei TWI bleibt man eigentlich nur hängen, wenn irgendeiner die Clock-Leitung auf low hält (Bit-stretching) und nicht mehr ausläßt.
    Verwendest du HW-TWI ?

    Mach doch nach I2CStart eine Kontrolle, ob das überhaupt geklappt hat.
    (if ERR = 1 ). Sonst schickst du ihn ja in den Krieg.

    . Messen, ob im Normalzustand beide Leitungen wirklich auf High sind
    . Test auf Durchlauf OHNE EEprom
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Also verwendet wird Hardware-TWI. ERR ist nach dem Start = 0.
    Nachgemessen hab ich auch nochmal, da ist es so, dass bei I2CStart beide Leitungen (SCL + SDA) auf Low gezogen werden, danach rührt sich nichts mehr. Vor I2CStart ist es wie's sein soll auf 5V.

    Das ganze ist auch noch unabhängig davon ob ein EEPROM drinsteckt oder nicht. Tritt auch dann auf, wenn andere Geräte am Bus angesprochen werden sollen (LM75, RNKeyLCD...)


    NACHTRAG: GELÖST!
    In der Software war garkein Fehler. Die übriggebliebene Dimension-Layer hat tatsächlich noch unter einem D-Sub-Stecker nen Kurzschluss gebaut...
    #ifndef MfG
    #define MfG

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    mmmmhhh. blöde Fragen :

    Kriegt der TWI auch einen Takt ?
    Config Twi = 400000 'I2C Speed wahlweise

    Config SCL = PORTC.5
    Config SDA = PortC.4
    kannst du dir bei HW-TWI sparen, der kennt da keine Variationen.

    noch blödere Fragen, bitte nicht schlagen:
    Ich nehm' doch an, daß du die Original-Pins verwendest ?
    (und nicht SCL/ SDA vertauscht hast)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Also taktmässig stimmt alles. Wie im Edit: Die Software selbst funktioniert, der Bus läuft. An genau einer einzigen Stelle hab ich beim Platinen absägen die Dimension-Layer übersehen => Dünner Kupferrand, der für nen Kurzen zwischen SDA + SCL gereicht hat.
    #ifndef MfG
    #define MfG

Berechtigungen

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