Hey ihr... Ich hab mal etwas mit dem ATmega 2561 herumgespielt, und wollte jetzt einen Timer0 einsetzen. Aus dem Datenblatt hab ich mir meine Bits herausgesetzt und alles richtig gesetzt, sagt mir der Kompiler zumindest. Jetzt hab ich oben das ISR (TIMER0_OVF_vect) drin und wenn ich jetzt kompilieren will, sagt er mir das: ../main.c:36: error: static declaration of 'TIMER0_OVF_vect' follows non-static declaration ../main.c:36: error: previous declaration of 'TIMER0_OVF_vect' was here Ich hab da ein Buch wo etwas über Timer steht, aber ich versteh nicht ob ich da etwas in der iom2561.h ändern muss! Auf einem Mega32 gehen meine Timer alle... Hoff ich hab nichts total doofes übersehen -.- Besten Dank schonmal hans
>ich da etwas in der iom2561.h ändern muss!
Die braucht dich gar nicht interessieren.
Dafür ist die io.h da!
Naja bei meinem Buch stand da mal was von "wenn man sich da net sicher ist lieber mal gucken..." ja und warum grig ich dann den Fehler ist doch alles richtig... Wenn ich die GANZE ISR Funktion ausklammere, dann geht alles durch! Grüße hans
Dennis G. schrieb: > Naja bei meinem Buch stand da mal was von "wenn man sich da net sicher > ist lieber mal gucken..." Ja. Ins iom2561.h kann man mal hineinschauen um zu sehen was da alles drinnen ist, wie bestimmte Bits oder auch Interruptvektoren heissen. Aber gearbeitet wird immer mit der io.h. Dazu stellt man dann in seiner Entwicklungsunmgebung noch den verwendeten Prozessor ein und die io.h verzweigt selbst zur richtigen, prozessorspezifischen uim...h Code zeigen!
1 | #include "defines.h" |
2 | |
3 | int main(void) |
4 | {
|
5 | DDRA = 0b00000110; |
6 | DDRB = 0b11111111; |
7 | DDRC = 0b11111111; |
8 | DDRD = 0b11111100; |
9 | DDRE = 0b01111100; |
10 | DDRF = 0b11111111; |
11 | DDRG = 0b100111; |
12 | |
13 | lcd_init(1); //Init LCD |
14 | // adc_init(); //Init ADC
|
15 | lcd_clear(); //Clear Display |
16 | DCF77_init(); //Init das DCF77 Modul |
17 | |
18 | LED_RIGHT(ON); |
19 | |
20 | |
21 | // Timer/Counter0 Overflow
|
22 | //
|
23 | ISR(TIMER0_OVF_vect) |
24 | {
|
25 | PORTE ^= (1 << PE5); // LED toogle |
26 | }
|
27 | |
28 | //Konfiguration Timer0
|
29 | //
|
30 | TCNT0 |= (1 << TOIE0); // Overflow Interrupt |
31 | TCCR0B |= (1 << CS00) | (1 << CS01); // Prescaler F_CPU/64 |
32 | |
33 | //Konfiguration ADC
|
34 | //
|
35 | |
36 | //Konfiguration I²C
|
37 | //
|
38 | |
39 | int t=0; |
40 | char buffer[32]; |
41 | unsigned int Clustervar; |
42 | unsigned char Dir_Attrib = 0; |
43 | unsigned long Size = 0; |
44 | |
45 | while(1) |
46 | {
|
47 | }
|
48 | |
49 | return 0; //Wird nie erreicht! |
50 | }
|
Also hier mal der Code... Ich find alles genau so im Datenblatt, hab das ja auch raus gelesen, aber irgendwo ist der Wurm drin... Guten Morgen!
>#include "defines.h"
1. Was steht da drin?
2. Wieso inkludierst du die "io.h". nicht?
3. Um Interrupts zu nutzen, musst du auch noch die "interrupts.h" mir
einladen...
4. GUCK INS TUTORIUM!
In deinem Code sind soviele elementare Problemstellen, dass ich mich
frage, wie diese Aussage
> Auf einem Mega32 gehen meine Timer alle...
wohl zu verstehen ist.
Was ist damit?
1 | #include <avr/io.h> |
2 | #include <avr/interrupt.h> |
3 | |
4 | // Timer/Counter0 Overflow
|
5 | //
|
6 | ISR(TIMER0_OVF_vect) |
7 | {
|
8 | PORTE ^= (1 << PE5); // LED toogle |
9 | }
|
10 | |
11 | int main(void) |
12 | {
|
13 | DDRE = 0b01111100; |
14 | |
15 | //Konfiguration Timer0
|
16 | //
|
17 | TIMSK0 |= (1 << TOIE0); // Overflow Interrupt |
18 | TCCR0B |= (1 << CS00) | (1 << CS01); // Prescaler F_CPU/64 |
19 | |
20 | sei(); |
21 | |
22 | while(1) |
23 | {
|
24 | }
|
25 | |
26 | return 0; //Wird nie erreicht! |
27 | }
|
Hallo, im Header defines.h werden ALLE HEADER und DEFINES des GESAMTEN PROGRAMMS geschrieben, um den Überblick zu behalten, daran ist doch nichts auszusetzen, drum auch nur der eine Header... UND wenn ich die io.h und die interrupt.h einbinde geht es genauso wenig wie vorher! Ich weiß nicht was euer Problem sein soll! hans
>Wenn ich die GANZE ISR Funktion ausklammere, dann geht alles durch!
Was hat die ISR in der main() zu suchen? Genau, nichts!
Da gehört sie nicht hin. Siehe Post von Karl Heinz.
Und warum dann so einen Aufstand machen, wenn man einfach mal was übersieht und nicht mehr durchkommt? Schon komisch... Aber Danke! hans
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.