Arduino Forum

International => Deutsch => Topic started by: -Jonas- on Mar 10, 2015, 01:08 pm

Title: Interrupt
Post by: -Jonas- on Mar 10, 2015, 01:08 pm
Hey leute !

ich hab mal gehört, dass wenn das hauptprogramm von einem interrupt unterbrochen wird und währenddessen daten über den Seriellen Eingang reinkommen, dass die dann verloren gehen.

Stimmt das?

Grüsse :)
Title: Re: Interrupt
Post by: Serenifly on Mar 10, 2015, 01:14 pm
Ja. Beim Eintritt in eine ISR wird das globale Interrupt Enable Flag deaktiviert. Interrupts können sich also nicht gegenseitig unterbrechen.

Der Interrupt wird immer noch registriert (d.h. das entsprechende Interrupt Flag wird gesetzt) und nach dem Ende des aktuellen Interrupts abgearbeitet. Aber im Fall von Serial können dann die Daten schon vorüber sein.
Title: Re: Interrupt
Post by: -Jonas- on Mar 10, 2015, 01:39 pm
Danke!

Hasst du denn eine Lösungsidee, damit man einen Sensor (MPU6050) mit interrupts auslesen kann und gleichzeitig meine kommunikation nicht zu grunde geht?

Title: Re: Interrupt
Post by: -Jonas- on Mar 10, 2015, 08:17 pm
Hat jemand ne idee, wie mann den MPU6050 ohne interrupt auslesen könnte?
Title: Re: Interrupt
Post by: agmue on Mar 10, 2015, 08:53 pm
Hallo,
ich habe keine praktische Erfahrung mit MPU6050, lese im Playground (http://playground.arduino.cc/Main/MPU-6050) aber, dass die Kommunikation über I2C läuft. Dafür ist nicht zwingend ein (externer) Interrupt notwendig. Einen I2C-Slave kann der Master nach Daten fragen, wann immer er das möchte. I2C und Serielle Kommunikation mit dem Monitor (IDE) stören sich bei mir auch nicht. Ob MPU6050 ohne Interrupt sinnvoll zu verwenden ist, weiß ich aber nicht.
Title: Re: Interrupt
Post by: michael_x on Mar 10, 2015, 09:28 pm
Quote
Ob MPU6050 ohne Interrupt sinnvoll zu verwenden ist, weiß ich aber nicht
Eher im Gegenteil: Ob ein I2C Slave per Interrupt sinnvoll zu lesen ist, ist für mich die Frage ...

Wie machst du es denn und wo ist das Problem?
Manche hier wollen gern den ganzen Code, ich hätte lieber den kleinstmöglichen der kompiliert und das Problem zeigt ;)

byte length = Wire.requestFrom(adr, maxlength); sollte erst mit einer Antwort zurückkehren, aber währenddessen Serial nicht blockieren ( selbst wenn der Serial EmpfangsPuffer voll wird... )
Title: Re: Interrupt
Post by: -Jonas- on Mar 13, 2015, 04:31 pm
ja sowas hätte ich auch gemacht. das Auslesen der Sensordaten würde ich mir noch fast zutrauen.
aber wie dass man dann mit dem offset klar wird, oder wie dass man dann die Eulerwinke aus gyroskop und accelerometer berechnen kann, das wird schon schwieriger, habe ich das gefühl. desshalb hänge ich eben noch nen bissel an der I2Cdev lib.

ich benütze eben die I2Cdev lib, um den MPU6050 auszulesen. nebendrann habe ich meine Serielle kommunikation die über SerialEvent1() läuft. nun stürzt mir der Sensor immer ab, bessergesagt es gibt in dem klassischen Beispiel-Sketch die FIFO-Overflow-meldung.

Grüsse