You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 15_TimerUndInterrupts.md
+75-11Lines changed: 75 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -287,6 +287,7 @@ int main(){
287
287
### Einführungsbeispiele
288
288
289
289
**Externe Interrupts**
290
+
290
291
Wenden wir das Konzept mal auf einen konkreten Einsatzfall an und lesen die externen Interrupts in einer Schaltung. Dabei sollen Aktivitäten an einem externen Interruptsensiblen Pin überwacht werden.
291
292
292
293
> **Aufgabe:** Ermitteln Sie mit die PORT zugehörigkeit und die ID der Externen Interrupt PINs `ÌNT0` und `ÌNT1`. Welche Arduino Pin ID gehört dazu?
@@ -303,8 +304,8 @@ ISR(INT0_vect) {
303
304
304
305
int main (void) {
305
306
DDRB |= (1 << PB5);
306
-
DDRD &= ~(1 << DDD2);
307
-
PORTD |= (1 << PORTD2);
307
+
DDRD &= ~(1 << DDD2); // Pin als Eingang
308
+
PORTD |= (1 << PORTD2); // Pullup-Konfiguration
308
309
EIMSK |= ( 1 << INT0);
309
310
EICRA |= ( 1 << ISC01);
310
311
sei();
@@ -315,30 +316,40 @@ int main (void) {
315
316
316
317
**Analog Digitalwandler**
317
318
318
-
```c
319
-
#define F_CPU 16000000UL
319
+
Das folgende Beispiel nutzt den Analog-Digital-Wandler in einem teilautonomen Betrieb. Innerhalb der Interrupt-Routine wird das Ergebnis ausgewertet und jeweils eine neue Wandlung aktiviert.
320
+
321
+
Als Demonstrator dient ein Spannungsteiler über einen lichtabhängigen Widerstand.
320
322
323
+
```c
321
324
#include <avr/io.h>
322
325
#include <avr/interrupt.h>
323
326
324
327
// Interrupt subroutine for ADC conversion complete interrupt
ADCSRA |= (1<<ADSC); // Start the first conversion
339
344
340
-
while (1);
341
-
return 0; // This line will never be executed
345
+
int i = 0;
346
+
while (1) {
347
+
Serial.print("Ich rechne fleißig ... ");
348
+
Serial.println(i++);
349
+
_delay_ms(50);
350
+
}
351
+
352
+
return 0;
342
353
}
343
354
```
344
355
@@ -568,14 +579,40 @@ Folgende Fragen müssen wir die Nutzung des Timers beantwortet werden:
568
579
569
580
#### Timer Modi
570
581
582
+
Timer-Modi bestimmen das Verhalten des Zählers und der angeschlossenen Ausgänge / Interrupts. Neben dem als Normal-Mode bezeichneten Mechanismus existieren weitere Konfigurationen, die unterschiedliche Anwendungsfelder bedienen.
Die Periode des Signals an `OCRnA` wechselt während eines Hochzählens des Counters. Damit kann eine größere Frequenz bei gleicher Auflösung des Timers verglichen mit CTC erreicht werden.
[^4]: Firma Microchip, megaAVR® Data Sheet, Seite 141, [Link](http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf)
578
611
612
+
$$
613
+
f_{OCnA} = \frac{f_{clk_i/o}}{2 \cdot N \ cdot TOP)}
614
+
$$
615
+
579
616
#### Timer-Funktionalität (Normal-Mode)
580
617
581
618
Für die Umsetzung eines einfachen Timers, der wie im Nachfolgenden Beispiel jede
@@ -634,6 +671,8 @@ Wir verknüpfen unseren Timer im Comparemodus mit einem entsprechenden Ausgang u
634
671
635
672
> **Frage:** Welchen physischen Pin des Controllers können wir mit unserem Timer 1 ansteuern?
0 commit comments