- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 6 von 6

Thema: Srf02 an Rp6

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.12.2010
    Ort
    Dörpen
    Alter
    27
    Beiträge
    120
    Alles klar. Ich habe das RP6Base_I2CMaster_03 Programm jetzt für die M32 umgeändert. Doch nun gibt das Programm am Terminal
    I2C ERROR --> TWI STATE IS: 0x20

    I2C ERROR --> TWI STATE IS: 0x48


    I2C ERROR --> TWI STATE IS: 0x20
    aus.
    Woran liegt das?

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    "Abstürzen" ist wohl etwas übertrieben... diese TWI Errors besagen das was in der Kommunikation nicht stimmt. Was - läst sich da nicht so genau sagen.
    Als Ursachen kommt verschiedenes in Betracht - mir fällt auf das du z.B. I2CTWI_initMaster nicht aufrufst. Somit wird das Bus-Speed-Register nicht gesetzt. Eine falsche Zieladresse wäre aber auch möglich.... oder Verdrahtungs- bzw. Kabelsalat... weis der Geier.
    TW_MR_SLA_NACK und TW_MT_SLA_NACK ( 0x20, 0x48 , man beachte das T für Transmit und R für Receive, so oder ähnlich in der .h definiert) sind "unerwartete" Nack Events im TWI Mastermodul... da passiert also was auf dem Bus (oder eben nicht), was nicht passieren soll... allerdings fängt die RP6Lib dieses auch nicht ab und es kommt eben zu diesen "Fehlerketten" im Log. "unerwartet" in so fern, das der TWI Treiber so straight geschrieben ist, das er auf bestimmte Situationen nich reagieren kann und nur stur ein bestimmtes Schema ab arbeitet, was die meisten.. aber eben auch nicht alle Devices können. Quasi eine Minimalversion. TW_MT_SLA_NACK bedeutet z.B. Master sendet und Slave antwortet nicht mit Ack. (wobei das quasi für "Device nicht erreichbar" steht, korrekter Weise bricht man hier die Übertragung schon ab und restauriert den Bus mit STOP bzw. benachrichtigt das aufrufende Programm über "device not found".) Auf die Art kann man sogar ein I2C Bus "durchpingen" wie man es von Netzwerken kennt.. vorausgesetzt man wertet solche Ereignisse auch richtig aus... Es gibt noch ein paar Dinge, die diese TWI Lib nicht kann, die aber Funktionsumfang von I2C/TWI sind... spielt aber hier allgemein und für das spezielle Problem keine gesteigerte Rolle.
    Da die TWI Lib nun aber von dem Gerät auch Daten lesen will, was im ersten Anlauf schon nicht angesprochen werden kann, ... und das immer wieder.... ohne jede Fehlerprüfung... *schulterzuck
    Gruß Rolf
    Geändert von RolfD (17.08.2012 um 01:26 Uhr)
    Sind Sie auch ambivalent?

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    Hallo,

    Code:
    int main (void)  {   
    
    void initSRF02(void){  } 
    void stopSRF02(void){  } 
    void task_SRF02(void) { }
    
    ...
    }

    Das ist schonmal gefährlich.
    Auch wenn C solche Spielereien erlaubt wie Funktionen in Funktionen zu deklarieren,
    sollte man sowas nicht tun.


    allerdings fängt die RP6Lib dieses auch nicht ab
    Es gibt einen Handler dafür (void I2C_transmissionError(uint8_t errorState))
    wo man darauf reagieren kann wenn man mag.

    Wenn so ein Fehler auftritt, dann stimmt meist sowieso was überhaupt nicht mit dem Programm

    z.B. sowas:
    mir fällt auf das du z.B. I2CTWI_initMaster nicht aufrufst.


    Da viele Ressourcen in aufwändige Fehlerbehandlung zu investieren ist nicht sonderlich sinnvoll.
    Man könnte ggf. alle weiteren Übertragungen beim ersten Fehler anhalten... dazu einfach
    ein while(true); in den error Handler setzen

    MfG,
    SlyD

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.12.2010
    Ort
    Dörpen
    Alter
    27
    Beiträge
    120
    Ah super, jetzt klappt es

Ähnliche Themen

  1. SRF02 - I2C
    Von oratus sum im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 07.06.2010, 17:18
  2. Srf02 an I2C
    Von Tenorm im Forum Sensoren / Sensorik
    Antworten: 10
    Letzter Beitrag: 22.03.2008, 14:53
  3. SRF02 an RP6
    Von WarChild im Forum Robby RP6
    Antworten: 5
    Letzter Beitrag: 28.01.2008, 22:55
  4. Atmega8 + SRF02 (I2C)
    Von mefiX im Forum AVR Hardwarethemen
    Antworten: 20
    Letzter Beitrag: 28.09.2007, 15:23
  5. SRF02 mit I2C
    Von Simon93 im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 30.11.2006, 19:45

Stichworte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress