Hallo erstmal! Ich versuche den Timer 16Bit von dem Atmega 8L zu benutzen. Aber das funktioniert nicht. Ich benutze Winavr mit kamavr. Hier der C-Code. #include <stdint.h> #include <stdlib.h> #include <avr/eeprom.h> #include <avr/interrupt.h> #include <avr/io.h> #include <avr/pgmspace.h> #include <avr/sleep.h> #include <avr/wdt.h> int main (void) { DDRC=1; PORTC=1; TCCR1B=0x02; OCR1AH=20000>>8; OCR1AL=20000%256; TIMSK=0x10; sei(); while(1); return 1; } ISR (TIMER1_COMPA_vect) { PORTC=0; } Ich will erstmal nur, dass er in die ISR reinkommt. gruss mc
mc wrote: > Hallo erstmal! > > Ich versuche den Timer 16Bit von dem Atmega 8L zu benutzen. Aber das > funktioniert nicht. Was funktioniert nicht? > int main (void) > { > > DDRC=1; > PORTC=1; > TCCR1B=0x02; Bitte schreib das so, dass man ohne Blick ins Datenblatt erkennen kann, was da passiert. Siehe Bitmanipulation. In diesem Fall
1 | TCCR1B = 1 << CS11; |
> OCR1AH=20000>>8; > OCR1AL=20000%256; Dürfte zwar in diesem Fall funktionieren, ist aber Murks. Schreib
1 | OCR1A = 20000; |
Die Drecksarbeit erledigt der Compiler.
> TIMSK=0x10;
Siehe oben bei TCCR1B
Und wie gesagt: Musst schon erzählen, was genau nicht funktioniert bzw.
was Dich zu der Annahme verleitet, dass es nicht funktioniert. Von der
Funktion her scheint da zumindest kein dicker Fehler drin zu sein. Aber
es gibt viele Stolpersteine, v.a. dann, wenn man den Simulator benutzt.
> #include <stdint.h> > #include <stdlib.h> > > #include <avr/eeprom.h> > #include <avr/interrupt.h> > #include <avr/io.h> > #include <avr/pgmspace.h> > #include <avr/sleep.h> > #include <avr/wdt.h> holla... wozu das alles? o_O #include <avr/interrupt.h> #include <avr/io.h> die reichen dafür. > DDRC=1; > PORTC=1; misst du auch am richtigen pin? PORTC=1 setzt nur das bit PC0. nur, um das mal auszuschließen. der rest sieht ziemlich richtig aus...
1 | DDRC=1; |
2 | PORTC=1; |
3 | TCCR1B=0x02; |
4 | OCR1AH=20000>>8; |
5 | OCR1AL=20000%256; |
6 | TIMSK=0x10; |
Schreib erstmal leserlichen Code, dann sprechen wir weiter. Die Zuweisung an OCR1AL ist jedenfalls schwachsinnig.
Michael G. wrote:
> Die Zuweisung an OCR1AL ist jedenfalls schwachsinnig.
Begründung? (Abgesehen von der, die ich oben schon angesprochen habe...)
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.