Wer kann das wissen ?
Poste bitte deine Source
hi,
ich habe mit mit AVRcalc und auch anderen tools die Variablen für nen 16Bit timer mit ca. 10ms errechnet.
ich habe da ein prog geschrieben , das laufen müsste doch die Led blinkt immer lahmer als im Sekundentakt !!!!
ich verwende nen Atmega 16 @6Mhz
was ist da los ???
Thx im voraus
mfg ebb
Wer kann das wissen ?
Poste bitte deine Source
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
diese timings sind für 100msCode:#include <avr/io.h> #include <avr/interrupt.h> #include <avr/delay.h> #include <avr/signal.h> volatile uint8_t stepcount=0; SIGNAL (SIG_OVERFLOW1) { stepcount ++; PORTD ^= (1<<PD0); }; int main(void) { DDRD = 0xff; DDRB = 0xff; OCR1AL = 0x27; OCR1AH = 0x09; TCNT1L = 0xd9; TCNT1H = 0xf6; TIMSK |= (1 << TOIE1); TIMSK |= (1 << TOIE1); TCCR1B |= (1<<CS12); //256 //TCCR0 |= (1<<CS10)|(1<<CS12); //1024 //TCCR1B |= (1<<CS10)|(1<<CS11); //64 sei(); while(1) { if(stepcount == 0) { PORTB = 0x01; }; if(stepcount == 1) { PORTB = 0x00; }; if(stepcount == 2) { PORTB = 0x02; }; if(stepcount == 3) { PORTB = 0x00; stepcount = 0; }; }; }
Böse Falle. Der erste Zyklus wird durch das Setzen von TCNT1 100ms lang sein, danach tritt der SIG_OVERFLOW jedes Mal dann auf, wenn der Zähler komplet von 0 bis 65535 durchgelaufen ist.
Schau mal im Datenblatt nach dem CTC Mode. Im Grunde musst du nur den passenden Mode wählen, den Prescaler einstellen und das Register ICR1 setzen.
Danke für die Info , ich kam mit dem nicht ganz klar , jetzt hab ichs ganz einfahc gelöst, ich habe die 4 Timervariablen einfahc in die SIG_OVERFLOW1 schleife kopiert, jetzt funzts einwandfrei, da er bei jedem Overflow die Variablen neu setzt
BIG THX nochmal
~closed~
Lesezeichen