Hallo zusammen,
ich sehe da den Fehler nicht. Füge einfach mal den betreffenden Code
ein.
Timer.h
1 | #ifndef TIMER_H_
|
2 | #define TIMER_H_
|
3 |
|
4 | volatile uint8_t flag = 0;
|
5 |
|
6 | void InitialTimer(void);
|
7 | ISR (TIMER0_OVF_vect);
|
8 |
|
9 |
|
10 |
|
11 | #endif /* TIMER_H_ */
|
Timer.c
1 | #include <avr/io.h>
|
2 | #include <avr/interrupt.h>
|
3 | #include "Timer.h"
|
4 |
|
5 | uint8_t count = 0;
|
6 |
|
7 |
|
8 | void InitialTimer(void)
|
9 | {
|
10 | // Timer 0 konfigurieren
|
11 | TCCR0B = ((1<<CS00)|(1<<CS02)); // Prescaler 8 <-- Hier zeigt der Fehler hin.
|
12 |
|
13 | // Overflow Interrupt erlauben
|
14 | TIMSK0 |= (1<<TOIE0);
|
15 | }
|
16 |
|
17 |
|
18 | ISR (TIMER0_OVF_vect)
|
19 | {
|
20 | if (count == 30)
|
21 | {
|
22 | //PORTD ^= (1<<PD0);
|
23 | flag = 1;
|
24 | count = 0;
|
25 | }
|
26 | count++;
|
27 | }
|
Main.c
1 | // µC Frequenz
|
2 | #define F_CPU 8000000UL
|
3 |
|
4 | ...
|
5 |
|
6 | #include <avr/io.h>
|
7 | #include <util/delay.h>
|
8 | #include <avr/interrupt.h>
|
9 | #include "Timer.h"
|
10 |
|
11 |
|
12 | int main(void)
|
13 | {
|
14 | ...
|
15 |
|
16 | InitialTimer();
|
17 | sei();
|
18 |
|
19 | ...
|
20 |
|
21 | // Beginn der Hauptschleife
|
22 | while(1)
|
23 | {
|
24 | if (flag == 1)
|
25 | {
|
26 | DATAPORT ^= (1<<PD0);
|
27 | flag = 0;
|
28 | }
|
29 | ...
|
30 | }
|
31 | }
|
Ich muss doch, wenn ich eine Variable nicht nur innerhalb einer
Quelldatei nutzen möchte, die in der Header Datei angeben. Das
funktioniert soweit auch, das mir Intellisens die Variable anbietet,
wenn ich in der main.c die Header Datei einbinde.
Nur warum meckert der Compiler, das ich die Variable in folgender Zeile
doppelt definiere.
1 | TCCR0B = ((1<<CS00)|(1<<CS02)); // Prescaler 8
|
Wo muss ich meine Gedanken noch ordnen, das es funktioniert?
Grüße
Stephan