Go Down

Topic: Interrupt (Read 532 times) previous topic - next topic

gloob

Hallo

Kann mir zufällig jemand kurz erklären wie man Interrupts beim arduino nutzt? Ich habe eine Aktion, die ich unabhängig vom restlichen Code alle 500 ms ausführen möchte.


Gurkengraeber

#1
May 07, 2011, 06:11 pm Last Edit: May 07, 2011, 06:20 pm by Gurkengraeber Reason: 1
'Zufällig' kann ich dir nur das einzigste Interrupt aus den Beispielen zeigen:

http://www.arduino.cc/en/Reference/AttachInterrupt

Code: [Select]
int pin = 13;
volatile int state = LOW;

void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE);
}

void loop()
{
  digitalWrite(pin, state);
}

void blink()
{
  state = !state;
}



Parameters

interrupt: the number of the interrupt (int)
function: the function to call when the interrupt occurs; this function must take no parameters and return nothing. This function is sometimes referred to as an interrupt service routine.
mode defines when the interrupt should be triggered. Four contstants are predefined as valid values:
LOW to trigger the interrupt whenever the pin is low,
CHANGE to trigger the interrupt whenever the pin changes value
RISING to trigger when the pin goes from low to high,
FALLING for when the pin goes from high to low.

Aber die die Referenz ist ja jedem zugänglich.

Mit dem Finden tue ich mich allerdings auch öfters schwer !

http://arduino.cc/en/Reference/DetachInterrupt

entfernt den Interruptus.

MfG

uwefed


Kann mir zufällig jemand kurz erklären wie man Interrupts beim arduino nutzt? Ich habe eine Aktion, die ich unabhängig vom restlichen Code alle 500 ms ausführen möchte.

Hallo gloob
Interrupt ist nur die Hälfte der Lösung.
Der Atmega hat 3 Timer die mit einem Vorteiler (prescaler) den Systemtakt zählen können. Der Timer kann mit einem Wert verglichen werden und bei Gleichheit einen Interrupt auslösen und wieder von Anfang zählen.
Mehr kann ich Dir nicht sagen da ich mich auch erst einarbeiten muß.
siehe http://arduino.cc/forum/index.php/topic,60480.0.html.

Eine Alternative ist durch ein externes Signal von 2 Hz einen externen Interrupt auslösen. Dazu brauchst Du aber externe HW.
Woher die 2 Hz nehmen? Einige RTC haben einen programmierbaren Frequenzausgang, die meisten einen 1Hz Ausgang. Um da 2 mal die Sekunde einen Interrupt zu bekommen mußt Du nach jedem Interruptaufruf den Interrupt  umprogrammieren damit er einmal auf der steigenden Flanke und dann auf der fallenden Flanke triggert. Wenn Das Tastverhältnis nicht genau 50% ist dann hast du 2 verschiedenen Zeiten aber die summe ist dann 1000mS. (müßte aber 50% sein!).

Grüße Uwe

gloob

Danke Uwe, das hilft mir doch schon um einiges weiter, da ich keinen Interrupt per Pin auslösen möchte und es eigentlich ohne zusätzliche Hardware realisieren wollte.

uwefed

Also Timer!
Schauen wir mal ob jemand uns da weiterhilft.
Bedenke auch, daß viele Bibiotheken Timer benutzen, bzw PWM Ausgänge auch durch die Timer funktionieren. Dopelbenutzung eines Timers funktioniert nicht !!

Ich kenne aber keine Liste die alle Bibliotheken auflistet.

Viele Grüße Uwe

Go Up