Hallo zusammen
Ich hab ein Problem mit meinem Code, den ich für einen AT90CAN32
geschrieben habe. Irgendwo muss ein Fehler sein, aber ich finde ihn
nicht.
Mein Code sollte folgendes machen:
Ein externer Aufruf startet den Timer 1 (TIMER_Start (1);)
Bei jedem Überlauf des Timers soll die Variable count hochgezählt
werden. Erreicht sie den Wert 20, wird der ADC (ADC_Enable(1);)
freigegeben und der Timer wider angehalten (TIMER_Start (0);)
Funktioniert das überhaupt so, wie ich das will?
1 | //------------------------------------------------------------------------------
|
2 | //--- Interrupt routine
|
3 | //------------------------------------------------------------------------------
|
4 | ISR (TIMER1_OVF_vect)
|
5 | {
|
6 | count++; //Counter for Overflow
|
7 | if ( count == 20)
|
8 | {
|
9 | ADC_Enable (ENABLE); //enable ADC
|
10 | count = 0; //reset counter
|
11 | TIMER_Start (STOP);
|
12 | }
|
13 | }
|
14 |
|
15 | //------------------------------------------------------------------------------
|
16 | //--- Initialize Timer 1
|
17 | //------------------------------------------------------------------------------
|
18 | void TIMER_Init (void)
|
19 | {
|
20 | TIMSK1 |= (1 << TOIE1);
|
21 | }
|
22 |
|
23 | //------------------------------------------------------------------------------
|
24 | //--- Start / Stopp Timer 1
|
25 | //------------------------------------------------------------------------------
|
26 | void TIMER_Start (uint8_t start)
|
27 | {
|
28 | if (start) TCCR1B |= (1<<CS10) | ( 1 << CS12);
|
29 | else TCCR1B &= ~((1<<CS10) | ( 1 << CS12));
|
30 | }
|
Und hier noch das ADC_Enable:
1 | void ADC_Enable (uint8_t enable)
|
2 | {
|
3 | if (enable) ADCSRA |= (1<<ADEN);
|
4 | else ADCSRA &= ~(1<<ADEN);
|
5 | }
|
Danke für Eure Hilfe!
Gruss
Patrick