- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 16

Thema: I2C-Befehle unterbrechen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo Chris,
    reicht denn 1/800 s nicht, um den zweiten Sensor abzufragen? Ist doch eigentlich jede Menge Zeit. Allerdings musst du davon noch die Ausführungszeit der I2C Befehle im Interrupt abziehen.
    Wenn das reicht, musst du die I2C Kommunikation nur unmittelbar nach dem Interrupt machen, wie oben geschrieben mittels eines Flag.
    Wenn nicht, bleibt noch die Möglichkeit, einzelne Teile der gesamten Kommunikation zwischen den interrupts durchzuführen, so wie Klabwax das vorgeschlagen hat.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von for_ro Beitrag anzeigen
    Wenn nicht, bleibt noch die Möglichkeit, einzelne Teile der gesamten Kommunikation zwischen den interrupts durchzuführen, so wie Klabwax das vorgeschlagen hat.
    Du hast mich missverstanden. Nicht zwischen den Interrupten, in den Interrupten. Sonst muß, wie ich schon sagte, die Mainloop schneller als die Interrupte sein und man kann nie eine längere Berechnung machen.

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

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    32
    Beiträge
    1.578
    Hi,

    nunja, ich erklärs mal ein bisschen:
    Alles, was in der ISR(1) abgearbeitet wird dauert im Worst-case ca. 0.666ms. Die ISR(1) wird alle 1.25ms aufgerufen, d.h. zwischen zwei ISR-Aufrufen bleiben ca. 0.6ms Zeit. Dann gibts allerdings noch einen zweiten und einen dritten Interrupt, diese sind für das einlesen des PWM-Summensignals verantwortlich. Wann diese genau kommen, hängt immer von der Stellung der Fernsteuerungsknüppel ab. Diese beiden Interrupts sind Hi-Level, d.h. sie können den anderen Interrupt (Lo-Level) jederzeit unterbrechen.
    Es ist also so, dass selbst wenn ich die I2C-Kommunikation direkt nach der Regelschleifen-ISR(1) ausführe ich nicht weiß, ob nicht ein anderen Interrupt dazwischen kommt und direkt danach dann wieder die ISR(1).
    Ich hoffe ihr versteht die Thematik.

    Gruß
    Chris

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    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 !

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    32
    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

  6. #6
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    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

  7. #7
    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 !

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    32
    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

Ä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
  •  

Labornetzteil AliExpress