INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Timer-IRQ-Routine für Arduino Due umschreiben
17.10.2014, 08:05 (Dieser Beitrag wurde zuletzt bearbeitet: 17.10.2014 09:20 von HaWe.)
Beitrag #1
Timer-IRQ-Routine für Arduino Due umschreiben
hallo,
ich benutze z.Zt eine Timer-IRQ-Routine auf meinen Megas, die ich jetzt für Arduino Due umschreiben muss.
Die bisherige Routine für einen 250µs Takt lautet folgendermaßen - wie ist das jetzt für den Due anzupassen ?

Code:
void setup()
{
       //...
       // timer interrupt for encoder readings
       noInterrupts(); // Jetzt keine Interrupts

           TIMSK1 |= (1<<OCIE1A);  // Timer 1 PIDOutput Compare A Match Interrupt Enable
           TCCR1A = 0;             // "Normaler" Modus
           // WGM12: CTC-Modus einschalten (Clear Timer on Compare match)
           //        Stimmen OCR1A und Timer überein, wird der Interrupt ausgelöst
           // Bit CS12 und CS10 setzen

           // => Prescaler=8:
           TCCR1B = (1<<WGM12) | (1<<CS11);     // Frequenz = 16,000,000 / 8 / 512 = rd. 4 kHz (512-1=511)
           OCR1A =511;

       interrupts(); // Interrupts wieder erlauben

       //...
}

wenn dann der IRQ ausgelöst wird, wird diese Funktion aufgerufen:

Code:
ISR(TIMER1_COMPA_vect) {
    //...
}

die Funktion ist insgesamt allerdings schon in der bisherigen Form für mich kaum verständlich, ich habe sie nur aus einem anderen Programmbeispiel 1:1 übernommen.
Was die ganzen
TIMSK1 OCIE1A TCCR1B WGM12 CS11 CS12 CS10 CTC Dinger bedeuten - keine Ahnung.

Wenn es also eine einfacherere und verständlichere Methode gäbe, alle 250µs den normalen Pogrammablauf zu unterbrechen um ein paar Pin-Werte auszulesen, wäre es sogar noch besser.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.10.2014, 14:09
Beitrag #2
RE: Timer-IRQ-Routine für Arduino Due umschreiben
umschreiben scheint gar nicht zu gehen, eher neu schreiben.
Ich habe zwar noch keinen Due (aber vor ein paar Tagen meinen ersten bestellt), aber es scheint eine lib namens DueTimer zu geben, in der du die Timer scheinbar ziemlich einfach definieren kannst:
https://github.com/ivanseidel/DueTimer

Zitat:To call a function handler every 1000 microseconds:

Timer3.attachInterrupt(handler).start(1000);
// or:
Timer3.attachInterrupt(handler).setPeriod(1000).start();
// or, to select whichever available timer:
Timer.getAvailable().attachInterrupt(handler).start(1000);

To call a function handler 10 times a second:

Timer3.attachInterrupt(handler).setFrequency(10).start();

In case you need to stop a timer, just do like this:

Timer3.stop();

And to continue running:

Timer3.start();

There are 9 Timer objects already instantiated for you: Timer0, Timer1, Timer2, Timer3, Timer4, Timer5, Timer6, Timer7 and Timer8.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.10.2014, 17:42 (Dieser Beitrag wurde zuletzt bearbeitet: 18.10.2014 17:43 von HaWe.)
Beitrag #3
RE: Timer-IRQ-Routine für Arduino Due umschreiben
danke - super Info !
mein Due müsste jetzt die nächsten Tage aus China eintreffen, bin sehr gespannt und werde es sofort testen (wenn ich das 3.3 -> 5V pwm-Pegelproblem für die H-Brücken gelöst habe... gibt doch immer wieder neue unerwartete Probleme... )
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Countdown Timer Uwe1475 23 738 19.10.2016 18:33
Letzter Beitrag: Uwe1475
  (Mega) Timer 3 A, B & C Scheams 0 231 04.06.2016 17:09
Letzter Beitrag: Scheams
  Arduino MEGA2560 Timer PWM Einsteiger94 3 666 04.04.2016 10:38
Letzter Beitrag: RMR
  Timer Interrupt Anfängerprobleme Fox 4 622 05.03.2016 02:28
Letzter Beitrag: Fox
  OUTPUT bleibt HIGH und timer stopt nicht. Atwist 4 535 08.01.2016 11:02
Letzter Beitrag: Atwist
  Timer inizialisieren Mathias 2 571 21.10.2015 21:24
Letzter Beitrag: Mathias
  Timer.h - es will nicht so, wie ich will. Daher benötige ich Hilfe. Gelegenheitsbastler 1 642 13.09.2015 14:32
Letzter Beitrag: Bitklopfer
  Arduino Ethernet mit USB 2 Serial Converter/Welche Einstellungen im Arduino-Sketch lociluke 1 1.113 05.05.2015 13:40
Letzter Beitrag: Bitklopfer
  Arduino Mega-Projekt mit EEPROM auf Arduino Due portieren Foto-Ralf 17 3.143 16.03.2015 12:06
Letzter Beitrag: Foto-Ralf
  250µs-Timer für Arduino Due HaWe 0 653 19.11.2014 16:32
Letzter Beitrag: HaWe

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste