- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: I2C-Befehle unterbrechen

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Anzeige

    Praxistest und DIY Projekte
    Was man machen kann, ist folgendes:

    I2C wird nur in ISR(1) gemacht. Das kann dann auch mal von einem anderen Interrupt unterbrochen werden, solange weder in main() noch in einem anderen Interrupt die I2C-Hardware angefasst wird. Das schlimmste was passieren kann, ist das die Pause zwischen zwei I2C Bytes etwas länger wird.

    Nicht in jedem ISR(1) wird das gleiche gemacht. Mal wird der eine Sensor, mal der andere abgefragt. Dadurch wird die ISR nie zu lang. Dazu kann man einen Zähler in der ISR mitführen, und die Sensoren je nach Zählerstand auswählen.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  2. #12
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hi,

    auch das scheidet leider aus, da der Sensor welcher in der ISR(1) abgefragt wird der Gyro + ACC (MPU6000) ist, welcher zwingend notwendig ist. Es wäre zwar evtl. möglich, den anderen Slave auch noch in der ISR abzufragen, aber spätestens wenn dann nochmal ein Slave hinzukommt, wirds wohl Probleme geben...
    Was wäre den, wenn ich am Anfang der ISR(1) einfach einen provisorischen I2CSTOP einfüge? IMHO sollte dann, falls eine Verbindung vorhanden ist, diese gestoppt werden?

    Gruß
    Chris

  3. #13
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Zitat Zitat von Che Guevara Beitrag anzeigen
    Was wäre den, wenn ich am Anfang der ISR(1) einfach einen provisorischen I2CSTOP einfüge? IMHO sollte dann, falls eine Verbindung vorhanden ist, diese gestoppt werden?
    Wird wahrscheinlich nicht funktionieren, da du damit den I²C am Mikrocontroller stoppst aber wenn ein Device bereits ausgewählt wurde ändert der Stop-Befehl da nichts dran.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Kampi Beitrag anzeigen
    Wird wahrscheinlich nicht funktionieren, da du damit den I²C am Mikrocontroller stoppst aber wenn ein Device bereits ausgewählt wurde ändert der Stop-Befehl da nichts dran.
    So ist es.

    Die Frage ist: wie oft muss der jeweilige Sensor gelesen werden. Wie ist seine Messbandbreite? Kann z.B. der ACC alle 1,25ms ein wirklich neues Ergebniss liefern? Und wie weit dreht sich dein Kopter in 1,25ms. Reicht es aus, nur alle 2,5ms einen echten Messwert zu nehmen und dazwischen zu interpolieren? Die langsameren Sensoren werden dann, einer nach dem anderen in jeder 2. ISR gelesen.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  5. #15
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Ja, der ACC und der GYRO sind beide in der Lage, alle 1ms (also 1000Hz) ein neues Signal zu liefern. Die Freqzenz von 800Hz ist zwar nicht zwingend (es könnten auch 600Hz sein), aber das Flugverhalten wird dadurch besser, da ja der Gyro auch integriert wird... Ob der merkbare Unterschied dadurch sooo groß ist weiß ich nicht, aber ich möchte es bei 800Hz belassen

    Aber bei einer normalen Kommunikation wird doch die "Verbindung" auch durch ein I2CSTOP beendet. Dem Slave sollte es doch egal sein, ob ich ihn nur addressiere oder auch einen Befehl schicke... Oder irre ich mich da?

    Gruß
    Chris

  6. #16
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Zitat Zitat von Che Guevara Beitrag anzeigen

    Aber bei einer normalen Kommunikation wird doch die "Verbindung" auch durch ein I2CSTOP beendet. Dem Slave sollte es doch egal sein, ob ich ihn nur addressiere oder auch einen Befehl schicke... Oder irre ich mich da?
    Dieses I2CStop sorgt dafür das ein NACK gesendet wird. Die Verbindung wird dadurch nur beendet, weil der Slave dann ein NACK erwartet.
    Wenn er ein NACK bekommt obwohl er Daten erwartet, kann das zum Fehlverhalten des Slaves führen bzw. den Bus stören.
    Ob du ihm nun eine Adresse schickst oder Daten ist dem Slave egal. Er wertet einfach nur das erste Datenpaket als Adresse und dann das zweite als Daten. Mehr macht er nicht (wie soll er auch sonst erkennen ob das erste Datenpaket eine Adresse oder Daten sind wenn man ihm das vom Werk aus nicht vorgibt).
    Es ist beim I²C Bustechnisch festgelegt, dass die ersten Daten eine Adresse sind und von daher weiß der Slave das es sich um eine Adresse handelt und es ist auch festgelegt, dass eine Kommunikation mit einem NACK endet und deswegen weiß der Slave, dass bei einem NACK die Kommunikation zu ende ist.
    Wenn du nun einfach mittendrin ein NACK sendest verwirrst du den Chip.
    Das ist im Grunde dasselbe als wenn du jemanden nach der Uhrzeit fragst und er dir sagt das die Sonne scheint
    Der I²C Bus ist nun mal nicht dafür gedacht das mitten in einer Kommunikation die Kommunikation abgebrochen wird. Sowas gilt es softwareseitig zu umgehen.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Loop unterbrechen
    Von bomberman_z im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 02.11.2008, 21:29
  2. Wait-Anweisung durch Interrupt unterbrechen?
    Von CapSob im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 18
    Letzter Beitrag: 05.06.2008, 10:30
  3. akku laden ohne betrieb unterbrechen (wie beim handy)
    Von Russak2007 im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 23.12.2007, 17:13
  4. for Schleife unterbrechen
    Von Sunstar im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 31.08.2007, 17:23
  5. Programm unterbrechen durch Sensor?
    Von Trabukh im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 07.02.2005, 14:40

Berechtigungen

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

12V Akku bauen