menthol
06.02.2012, 20:51
Hallo,
ich bin gerade etwas am Verzweifeln. Vielleicht kann mir jemand meinen wahrscheinlichen Denkfehler aufzeigen.
Mein Aufbau sieht wie folgt aus:
Auf einer Steckkarte sitzt mein mit Bascom programmierter Attiny13, die Fuses wurden auf external Clock gesetzt.
Als Taktquelle benutze ich einen 10Mhz TTL OCXO. Dessen Frequenz habe ich mit meinem Frequenzzähler mal überprüft. Die Abweichung vom Soll sind etwa 130 Hz, wobei ich den Frequenzzähler nicht auf dessen Genauigkeit überprüft habe. Es geht mir nur um einen Vergleich.
Wenn ich die Timer der AVR`s richtig verstanden habe, dann sollte die Genauigkeit des externen Taktes die Genauigkeit der Timer bestimmen.
Bei 130 Hz Abweichung des OCXO`s ergeben sich so 130 PPM oder 0,13 Promille...
Diese Abweichung sollte der Timer des Attiny nun doch auch haben?
Wenn ich also den Pinb.0 durch den Timer0 mit einem Prescale von 64 und OCR0A mit 125 toggle, dann sollte man eine Frequenz von 5000 Hz am Pin messen können...Vorrausgesetzt wir schicken 10Mhz heinein...Da wir aber einen Fehler von 130 PPM erwarten, sollte man "wenigstens" 4999,35 sehen. Leider bin ich hiervon aber weit entfernt...Die Ausgangsfrequenz liegt bei 4969 Hz, also 40 Hz daneben...
Was noch hinzukommt ist die Tatsache, dass der OCXO 130PPM zu weit "oben" schwingt, der AVR aber viel zu weit "unten"...Das Signal selbst ist dabei aber schön konstant und nicht Spannungsabhängig.
Interrupts verwende ich in meinem Programm nicht, sonst hätte ich auf Rechenzeit getippt, die das Ergebnis nach unten beeinflussen. Wo liegt mein Denkfehler? Wo ist das Delay welches sich auf die Frequenz auswirkt?
$regfile = "attiny13.dat"
$crystal = 10000000
$hwstack = 32
$swstack = 8
$framesize = 16
Config Portb.0 = Output
Config Timer0 = Timer , Compare A = Toggle , Prescale = 8 , Clear Timer = 1
Ocr0a = 125
Do
Nop
Loop
Alex
ich bin gerade etwas am Verzweifeln. Vielleicht kann mir jemand meinen wahrscheinlichen Denkfehler aufzeigen.
Mein Aufbau sieht wie folgt aus:
Auf einer Steckkarte sitzt mein mit Bascom programmierter Attiny13, die Fuses wurden auf external Clock gesetzt.
Als Taktquelle benutze ich einen 10Mhz TTL OCXO. Dessen Frequenz habe ich mit meinem Frequenzzähler mal überprüft. Die Abweichung vom Soll sind etwa 130 Hz, wobei ich den Frequenzzähler nicht auf dessen Genauigkeit überprüft habe. Es geht mir nur um einen Vergleich.
Wenn ich die Timer der AVR`s richtig verstanden habe, dann sollte die Genauigkeit des externen Taktes die Genauigkeit der Timer bestimmen.
Bei 130 Hz Abweichung des OCXO`s ergeben sich so 130 PPM oder 0,13 Promille...
Diese Abweichung sollte der Timer des Attiny nun doch auch haben?
Wenn ich also den Pinb.0 durch den Timer0 mit einem Prescale von 64 und OCR0A mit 125 toggle, dann sollte man eine Frequenz von 5000 Hz am Pin messen können...Vorrausgesetzt wir schicken 10Mhz heinein...Da wir aber einen Fehler von 130 PPM erwarten, sollte man "wenigstens" 4999,35 sehen. Leider bin ich hiervon aber weit entfernt...Die Ausgangsfrequenz liegt bei 4969 Hz, also 40 Hz daneben...
Was noch hinzukommt ist die Tatsache, dass der OCXO 130PPM zu weit "oben" schwingt, der AVR aber viel zu weit "unten"...Das Signal selbst ist dabei aber schön konstant und nicht Spannungsabhängig.
Interrupts verwende ich in meinem Programm nicht, sonst hätte ich auf Rechenzeit getippt, die das Ergebnis nach unten beeinflussen. Wo liegt mein Denkfehler? Wo ist das Delay welches sich auf die Frequenz auswirkt?
$regfile = "attiny13.dat"
$crystal = 10000000
$hwstack = 32
$swstack = 8
$framesize = 16
Config Portb.0 = Output
Config Timer0 = Timer , Compare A = Toggle , Prescale = 8 , Clear Timer = 1
Ocr0a = 125
Do
Nop
Loop
Alex