Hallo,
Ich habe das Programm schon für den 16 Bit-Timer geschrieben und befinde
mich wieder einmal in einer Sackgasse.
Nun möchte ich den Timer 0 benutzen. Ich hab mir gedacht ich müsste nur
die Register ändern und das wäre es. Aber irgendwo hab ich einen
Denkfehler anscheinend gemacht. Ich programmier unter der Arduino IDE
und mein µC hat einen atMega 328.
1 | #define F_CPU 16000000UL
|
2 |
|
3 | #include <avr/io.h>
|
4 | #include <avr/interrupt.h>
|
5 | #include <util/delay.h>
|
6 |
|
7 | volatile boolean LampeAN;
|
8 | volatile int TimerCount;
|
9 |
|
10 | ISR( TIMER0_COMPA_vect) // Interruptbehandlungsroutine
|
11 | {
|
12 | TimerCount++;
|
13 | if(TimerCount == 100000)
|
14 | {
|
15 | if (LampeAN){
|
16 | LampeAN = false;
|
17 | }
|
18 | else{
|
19 | LampeAN= true;
|
20 | }
|
21 | TimerCount = 0;
|
22 | }
|
23 | }
|
24 |
|
25 | void setup() {
|
26 | DDRB = 0b11111111;
|
27 | PORTB |= (1<<PORTB1); // Pullup für PB0 und PB1
|
28 |
|
29 | TCCR0A = (1<<WGM01); // CTC-Mode;
|
30 | TCCR0B = (1<<CS00); // Prescaler 1
|
31 | TIMSK0 = (1<<OCIE0A); // Timer-Compare Interrupt an
|
32 | LampeAN = true;
|
33 |
|
34 | OCR0A = 160; // Neutralposition ((2500-2312)*0.008ms)=1,5ms)
|
35 | sei(); // Interrupts global an
|
36 |
|
37 | }
|
38 |
|
39 | void loop() {
|
40 | if (LampeAN) { // Impuls-Zeit verlängern
|
41 | PORTB |= (1<<PORTB0);
|
42 | }
|
43 | else{ // Impuls-Zeit verkürzen
|
44 | PORTB &= ~(1<<PORTB0);
|
45 | }
|
46 | }
|
Problem: Kein blinken bei 1 sec.
Vielen Dank für eure Bemühungen
Jan Peter Meyer