Pages: [1]   Go Down
Author Topic: Interrupt  (Read 384 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 87
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Logged


Gurkengraeber
Guest
 Bigger Bigger  Smaller Smaller  Reset Reset

'Zufällig' kann ich dir nur das einzigste Interrupt aus den Beispielen zeigen:

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

Code:
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
« Last Edit: May 07, 2011, 11:20:58 am by Gurkengraeber » Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20281
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 87
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20281
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: