attachInterrupt, Timer2 im 328p
|
24.02.2020, 23:28
Beitrag #1
|
|||
|
|||
attachInterrupt, Timer2 im 328p
Hallo,
ich möchte einen 328P (UNO in meinem ersten Versuch) zeitweise in den PowerSave Mode versetzten und zyklisch wecken. Das geht mit Timer 2. In einem ersten Schritt experimentiere ich also mit Timer2, der einen Interrupt auslösen soll. In meinem Sketch (s.u.) passiert aber Merkwürdiges: Nach Reset erscheint ordentlich die Zeile mit Compilezeit, dann 5 s Pause. Aber dann wird als Dauerfeuer ausgegeben "Programm PowProgramm PowProgramm Pow...". Die Zeile "attachInterrupt" hat darauf in den verschiedenen Versionen keinen Einfluss. Wenn ich die Zeile " TIMSK2 = 0x02; // IR auf OCR2A" auskommentiere, dann erscheint einmalig meine Headerzeile, Timer2 löst also IRs aus, das ist plausibel. (CHANGE hier nur als Test, muss m. e. RAISING sein, aber CHANGE ist allgemeiner.) In den Register-Zuweisungen mögen Fehler sein, ok, aber es wird ja anscheinend das Setup unterbrochen. Wie kann das sein? Mieine These: Timer2-IR feuert, findet aber keine ISR. Aber warum nicht und was passiert dann? Vielleicht hat ja jemand einen Tipp, Gruß GuaAck Code: /* |
|||
25.02.2020, 06:54
(Dieser Beitrag wurde zuletzt bearbeitet: 25.02.2020 06:55 von georg01.)
Beitrag #2
|
|||
|
|||
RE: attachInterrupt, Timer2 im 328p
Hallo GuaAck,
die Selbe Probleme habe ich damals, … und wen es passiert dann immer bei UNO. Vor einem Jahr war hier auch eine Diskussion darüber. Probiermal die andere modis. Kann ich mir vorstellen – ICH WILL ABER CHANGE Glaube mein Kompromiss war mit RISING. Kann ich mich jetzt aber nicht mehr erinnern. Mit CHANGE ging bei mir damals auch NICHT. Gruß Georg Sorry für mein nicht korrektes Deutsch. ![]() |
|||
25.02.2020, 08:53
(Dieser Beitrag wurde zuletzt bearbeitet: 25.02.2020 09:07 von MicroBahner.)
Beitrag #3
|
|||
|
|||
RE: attachInterrupt, Timer2 im 328p
Ich glaube Du verwechselst da was. 'attachInterrupt' hat nichts mit Timer-Interrupts zu tun. Das funktioniert nur mit externen Interrupts an Eingangspins. Beim UNO auch nur an den Pins 2 und 3 ( Interruptnr 0 und 1 ). Das geht zwar auch, wenn der Pin als Ausgang geschaltet ist, und der Statuswechsel am Pin von innen ausgelöst wird. Pin 3 könntest Du über OCR2B beeinflussen. Das ist aber eigentlich nicht der Sinn der Sache bei Timerinterrupts.
Wenn Du Timerinterrupts verwenden willst, musst Du eine entsprechende ISR mit dem spezifischen Namen des Timerinterrupts erstellen. An diesem Namen erkennt der Compiler dann, dass das es ein Timerinterrupt ist, und trägt das auch entsprechend in der Vektor-Tabelle ein. z.B.: Code: ISR ( TIMER2_COMPA_vect) { P.S. ausserdem solltest Du, während Du die Timerregister änderst, die Interrupts abschalten und erst wenn der Timer komplett konfiguriert ist, wieder einschalten. P.P.S Wenn Du mit attachInterrupt einen Interrupt auf einen offenen Eingang setzt, passieren da die wildesten Dinge. Da der offene Eingang beliebig zwischen LOW und HIGH hin- und herspringt, werden auch beliebig Interrupts erzeugt. Gruß, Franz-Peter |
|||
25.02.2020, 09:29
Beitrag #4
|
|||
|
|||
RE: attachInterrupt, Timer2 im 328p
Das über den Timer-1 ist bekannt ?
lgbk An alle Neuankömmlinge hier, wenn ihr Code(Sketch) hier posten wollte dann liest euch bitte diese Anleitung durch. 1+1 = 10 ![]() ![]() |
|||
25.02.2020, 10:36
Beitrag #5
|
|||
|
|||
RE: attachInterrupt, Timer2 im 328p
Wen die Funktion attachInterrupt(… schon "in der Quelle Kaput ist", kann man die Register schieben … IR auf XYZ Adressen verschieben / portieren, wird aber gar nicht helfen. (? nur Vermutung ?)
Gruß Georg Sorry für mein nicht korrektes Deutsch. ![]() |
|||
25.02.2020, 11:12
Beitrag #6
|
|||
|
|||
RE: attachInterrupt, Timer2 im 328p
Danke,
genau so funktioniert es jetzt!! Viele Grüße GuaAck (25.02.2020 08:53)MicroBahner schrieb: Ich glaube Du verwechselst da was. 'attachInterrupt' hat nichts mit Timer-Interrupts zu tun. Das funktioniert nur mit externen Interrupts an Eingangspins. Beim UNO auch nur an den Pins 2 und 3 ( Interruptnr 0 und 1 ). Das geht zwar auch, wenn der Pin als Ausgang geschaltet ist, und der Statuswechsel am Pin von innen ausgelöst wird. Pin 3 könntest Du über OCR2B beeinflussen. Das ist aber eigentlich nicht der Sinn der Sache bei Timerinterrupts. |
|||
|
|
Möglicherweise verwandte Themen... | |||||
Thema: | Verfasser | Antworten: | Ansichten: | Letzter Beitrag | |
Atmega 328p und reset | Hbc | 9 | 1.851 |
20.11.2019 20:35 Letzter Beitrag: Tommy56 |
|
Sketch laden Arduino Pro Mini 5V ATmega 328P | Herberto | 6 | 1.604 |
13.01.2019 14:20 Letzter Beitrag: hotsystems |
|
ATMega 328P Bootloader funktioniert nur 1x | Gelegenheitsbastler | 4 | 2.248 |
08.04.2018 16:09 Letzter Beitrag: Chopp |
|
328P geht nicht mehr [gelöst] | Harry | 37 | 13.811 |
04.03.2018 19:57 Letzter Beitrag: Harry |
|
328P sleep, wecken und Batterie überwachen | Harry | 25 | 10.355 |
04.02.2018 22:14 Letzter Beitrag: Chopp |
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste