Hallo,
ich versuche mich gerade an einem Timer Interrupt und komme nicht
weiter.
An einem Eingang liegt ein zu messendes Signal.
Mit jeder fallenden Flanke wird ein Interrupt ausgelöst.
Soweit OK.
In diesem Interrupt, starte ich einen Timer der nach festgelegter Zeit
selbst einen Timerinterrupt auslöst. Hier kann ich dann z.B den
Pegel des Pins abfragen.
Mit einem AVR kein Problem, doch mit dem ESP wird sofort mit
"timerAlarmEnable" der Interrupt ausgelöst und nicht erst nach der
vorgegebener Zeit.
Auf dem Oszi ist es am Testpin zu sehen.
Was mache ich falsch ?
1 | #include <Arduino.h>
|
2 |
|
3 | #define eingang 34 // ESP Pin Eingang Rechteck
|
4 | #define testpin 12 // Testpin zum toogeln für Oszi
|
5 |
|
6 | hw_timer_t * myTimer = NULL;
|
7 |
|
8 | /******************************************
|
9 | * Timer Interrupt
|
10 | *****************************************/
|
11 | void IRAM_ATTR onTimer()
|
12 | {
|
13 | digitalWrite(testpin,LOW);
|
14 | timerAlarmDisable(myTimer);
|
15 | // nur für den Testfall Oszi
|
16 | delayMicroseconds(40);
|
17 | digitalWrite(testpin,HIGH);
|
18 | }
|
19 | /******************************************************
|
20 | * Flanke fallend am Eingang
|
21 | ******************************************************/
|
22 |
|
23 | void IRAM_ATTR isr1()
|
24 | {
|
25 | //jetzt den Timer starten
|
26 | timerAlarmWrite(myTimer, 750, true);
|
27 | timerAlarmEnable(myTimer);
|
28 |
|
29 | }
|
30 |
|
31 | void setup()
|
32 | {
|
33 | myTimer = timerBegin(0, 80, true);
|
34 | timerAttachInterrupt(myTimer, &onTimer, true);
|
35 | timerAlarmWrite(myTimer, 750, true);
|
36 |
|
37 | // Testpin am Anfang auf H
|
38 | pinMode(testpin,OUTPUT);
|
39 | digitalWrite(testpin,HIGH);
|
40 |
|
41 | // Eingang für das zu messende Signal
|
42 | pinMode(eingang, INPUT);
|
43 | attachInterrupt(digitalPinToInterrupt(eingang), isr1, FALLING);
|
44 | }
|