Hi Leute, ich hab vor kurzem mit dem Programmieren von AVR µC angefangen. Im Augenblick habe ich einen mega644p und versuche einen einfachen Timer zum Laufen zu bringen. Dazu habe ich folgendes Script verwendet. Arbeiten tue ich mit dem AVR Studio 5 //************************************************************* #include <avr/io.h> #include <avr/interrupt.h> //Variablen für die Zeit volatile unsigned int millisekunden; volatile unsigned int sekunde; volatile unsigned int minute; volatile unsigned int stunde; int main(void) { DDRB = 0xff; // Timer 0 konfigurieren TCCR0 = (1<<WGM01); // CTC Modus TCCR0 |= (1<<CS01); // Prescaler 8 // ((1000000/8)/1000) = 125 OCR0 = 125-1; // Compare Interrupt erlauben TIMSK |= (1<<OCIE0); // Global Interrupts aktivieren sei(); while(1) { /*Hier kann die aktuelle Zeit ausgeben werden*/ } } /* Der Compare Interrupt Handler wird aufgerufen, wenn TCNT0 = OCR0A = 125-1 ist (125 Schritte), d.h. genau alle 1 ms */ ISR (TIMER0_COMP_vect) { millisekunden++; if(millisekunden == 16000) { sekunde++; millisekunden = 0; } sekunde++; if(sekunde == 60) { minute++; sekunde = 0; } stunde++; if(minute == 1) { PORTB |= (1<<PB0); } if(minute == 1) { PORTB &= ~(1<<PB0); } } } //************************************************ Die Zeile: // Compare Interrupt erlauben TIMSK |= (1<<OCIE0); habe ich durch: TIMER0_COMPA_vect |= (1<<OCIE0A); ersetzt. Jetzt erhalte ich dauernd die Fehlermeldung: Error 1 '__vector_16' undeclared (first use in this function) C:\Dokumente und Einstellungen\*******\timetest.c Was mach ich blos falsch? lg HeyHey
HeyHey schrieb: > Was mach ich blos falsch? das HeyHey schrieb: > Die Zeile: // Compare Interrupt erlauben > TIMSK |= (1<<OCIE0); > > habe ich durch: TIMER0_COMPA_vect |= (1<<OCIE0A); > > ersetzt. warum machst du so einen Quark?
Justus Skorps schrieb: > warum machst du so einen Quark? Gute Frage. Das ist schon mal fast richtig. >TIMSK |= (1<<OCIE0); und so ganz richtig. >TIMSK0 |= (1<<OCIE0); Und das ist völliger Stuss: > habe ich durch: TIMER0_COMPA_vect |= (1<<OCIE0A); >OCR0 = 125-1; Ein Register OCR0 gibt es nicht, sondern OCR0A und OCR0B und entsprechend die ISR >ISR (TIMER0_COMP_vect) so nicht! sondern ISR(TIMER0_COMPA_vect) für Register OCR0A. mfg.
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.