- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 7 von 7

Thema: TWI/I2C Bus Verhalten bei Reset eines Teilnehmers?

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    45
    Beiträge
    269

    TWI/I2C Bus Verhalten bei Reset eines Teilnehmers?

    Anzeige

    Praxistest und DIY Projekte
    Moin moin!

    Ich lasse zwei (später mehr) ATmegas über TWI kommunizieren. Da ich beim debuggen häufig Resets erzeuge, nämlich immer beim Laden neuer Software, ist mir aufgefallen, daß der TWI-Bus etwas seltsam reagiert. Wenn ich den Slave resette (der in meinem Fall vom Master regelmäßig gepollt wird), funktioniert der Bus hinterher sofort wieder. Wenn ich aber den Master resette, muß ich hinterher den Slave ebenfalls resetten, sonst hängt der Bus sich auf.

    Gibt es da ein System bzw. Spezifikationen, was passiert, wenn man Geräte am Bus abschaltet/zuschaltet oder wenn man die Busleitungen bei laufendem Bus mit (unter Spannung stehenden) neuen Teilnehmern verbindet?

    Im TWI-Manual von AVR steht glaube ich nur, daß für ordnungsgemäßen Betrieb alle Teilnehmer angeschaltet sein müssen. Ob der Bus tolerant auf "online" angesteckte Teilnehmer reagiert, steht dort nicht, oder?

    Ich plane jetzt, einen I/O-Pin des Masters zum Reset-Eingang des Slaves zu verdrahten, damit der Master beim "Hochfahren" den Slave resetten kann. Das würde das Problem hoffentlich umgehen, was meint ihr?

    Ich benutze übrigens die internen Pullups im Master für den TWI-Bus und die normale Geschwindigkeit (100kHz).

    Gruß,

    Nils

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    38
    Beiträge
    4.255
    Probier mal externe Pullups, oder aktivier zusätzlich die Pullups im Slave.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    45
    Beiträge
    269
    Wenn ich die Pullups der Slave mit aktiviere, ist das doch wie eine Parallelschaltung der Widerstände, entspräche also kleineren Pullups, richtig?

    Was würde denn dann passieren, sollte der Bus dann auch nach einem Master-Reset wieder anlaufen?

    Danke, Nils

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    38
    Beiträge
    4.255
    Zitat Zitat von Minifriese
    Wenn ich die Pullups der Slave mit aktiviere, ist das doch wie eine Parallelschaltung der Widerstände, entspräche also kleineren Pullups, richtig?
    Ja, und da die internen Pullups einen Wert von etwa 50-100k haben, stört das nicht weiter. Für längere Busse sollte man sowieso kleiner Widerstände (5 bis 10k) verwenden.

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    45
    Beiträge
    269
    OK, danke. Mein Bus ist zwar nicht lang (jetzt zwei, später sechs Teilnehmer, <0,5m), aber ich glaube, externe Pullups werden öfter empfohlen. Werde ich also mal testen. So groß ist der HW-Aufwand ja nicht...

    Aber das hat mit dem unterschiedlichen Verhalten bei Master- bzw. Slave-Reset nichts zu tun, oder?
    Mich würde interessieren, ob man den Bus nach Reset des Masters auch per Software, im Master oder Slave, "wiederbeleben" kann oder ob wirklich nur der Reset hilft?
    Der Reset eines ATmegas per I/O-Pin eines anderen AVRs sollte funktionieren, oder?

    Nils

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    38
    Beiträge
    4.255
    Zitat Zitat von Minifriese
    OK, danke. Mein Bus ist zwar nicht lang (jetzt zwei, später sechs Teilnehmer, <0,5m), aber ich glaube, externe Pullups werden öfter empfohlen. Werde ich also mal testen. So groß ist der HW-Aufwand ja nicht...
    Nen halber Meter ist schon ganz schön lang für die internen pullups.

    Zitat Zitat von Minifriese
    Mich würde interessieren, ob man den Bus nach Reset des Masters auch per Software, im Master oder Slave, "wiederbeleben" kann oder ob wirklich nur der Reset hilft?
    Das TWI im Slave abschalten und neu initalisieren dürfte auch helfen. Du könntest ja ein Timeout einbauen. Wenn einige Sekunden nichts auf dem Bus passiert ist, das TWI neustarten.

    Zitat Zitat von Minifriese
    Der Reset eines ATmegas per I/O-Pin eines anderen AVRs sollte funktionieren, oder?
    Müsste.

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    45
    Beiträge
    269
    Hm, stimmt, da muß ich mir mal ne passende Timeout-Routine überlegen. Vermutlich eher im Master, dann brauch ich die Sache nur einmal zu schreiben. Wenn beim Polling eines Slaves z.B. fünfmal die TWI-Routine mit Fehler beendet wurde, könnte ich ein HW-Signal an den Slave schicken, daß er seinen TWI resetten soll...

    Ich habe eh vor, alle Platinen mit einem zehnpoligen Flachbandkabel zu verbinden, auf dem VCC, GND, SDA und SCL liegen. Die restlichen sechs Adern würde ich zu freien I/O-Pins legen (davon habe ich überall genug), man weiß ja nie, wozu man sie mal braucht... Außerdem lässt sich jedes dieser Reservesignale per Jumper mit dem Reset des AVR auf der jeweilgen Platine verbinden, sodaß ich theoretisch vom Master aus jeden anderen AVR gezielt resetten kann. Oder per normalem I/O-Signal ein Kommando zum Neustart des TWIs geben kann, mal schauen...
    Danke für die Tips,
    Nils

Berechtigungen

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

12V Akku bauen