Hallo erstmal Also zu meinem Problem I ich hab ein C programm für eine Uhr mit meinen attiny 2313 geschrieben die formel ist doch (4194304/256)/256 = 64 mal = 1sec warum muss ich aber (4194304/256)/(256 * 8 ) = 16 mal = 1sec /* * LED_Display.c * * Created: 31.08.2012 18:47:22 * Author: Sausy */ #define XTAL 4194304 #define F_CPU XTAL #define HIGH 1 #define LOW 0 #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "LED_Disp.h" volatile int tc; // seconds counter int overflow_c = 0; ISR(TIMER0_OVF_vect) // 1 second clock { if(overflow_c < 16) //prescala = 256 max.vec = 256 overflow_c++; //(4194304/256)/256 = 64 mal = 1sec if(overflow_c >= 16){ //für sec++ overflow_c = 0; PORTB ^= (1<<PB1); //für DP togl tc++; } if(overflow_c == 8) PORTB ^= (1<<PB1); //für DP togl } int main(void) { int hr=9, min=0, sec=0; //set start time inite_LED_D(); //inizalisiert LED display DDRB &= ~(1<<PB0); PORTB &= ~(1<<PB0); DDRB |= (1<<PB1); //----[ initialize timer1 ]--- TIMSK |= _BV(TOIE0); // erlaubt overflow interupt -- //aktiviert den overflow interrupt des timer1 TCCR0B |= (1<<CS02); // prescaler = 256 TCNT0 = 0x00; sei(); while(1) { number_output (hr*100+min); // setz die Variablen // für meinen Led display { sec=tc; if (sec>=60) { tc=0; sec=0; min++; if (min>=60) { min=0; hr++; if (hr>=12) hr=0; } } } while (sec==tc) refresh(); //refrescht das bild } return(0); }
Frequenz von tc = 4194304 Hz /256/256/64 = 1 Hz Den Pin PB1 toggelst Du immer, wenn der overflow_c den Wert 8 und 16 hat, die Blinkfrequenz ist daher ebenfalls 1 Hz (1/8 Sekunde an, dann 18 Sekunde aus). Soweit der Soll-Zustand. Deiner anderen Formel kann ich nicht folgen, zumal sie auch nicht mit dem von Dir geposteten Quelltext überein stimmt. Dein Quelltext teil den Takt durch 16 anstatt 64. Die Uhr müsste demnach mit 4Hz getaktet werden. Erhälst Du andere Zeiten? Dann schau Dir die FUSES an. Sind die Kondensatoren am Quartz richtig bemessen (ca 22pF)? Mit PWM hat das übrigens nichts zu tun.
ok dann thx für deine schnell antwort zu der formel //(4194304/256)/256 = 64 mal = 1sec habe ich mir gedacht wäre die eigentliche taktung teilung dies war die eigentliche von mirberächnete teilung ich aber als ich diesen wert verwändet habe war die uhr bis auf auf +3min ungenau und durch das absetzen hab ich dann dann eine ungenauigkeit von +3sec erreicht. Und mir ist nicht klar warum das so ist denn wie du schon sagst müsste das quarz dann aners dimensioniert werden.
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.