- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 7 von 7

Thema: Attiny13 und externer Takt von OCXO, schlechte Genauigkeit?

  1. #1

    Attiny13 und externer Takt von OCXO, schlechte Genauigkeit?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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?


    Code:
    $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

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Es kann sein dass wenn du einen Prescaler von 64 nimmst das die 10MHz schlecht geteilt werden können und dadurch ungenauigkeiten im Timer entstehen.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Die Formel für CTC ist aus dem DB ersichtlich: fOCNx = fclk I/O / (2 x Prescaler x (1 + OCRnx)) = 4960,317.
    Passt also ganz gut.
    Oder auf Deutsch, Dein CTC ist um 1 zu hoch.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo Alex,
    schau dir mal im Datenblatt auf Seite 64 die Berechnung der CTC Frequenz an.
    Dort siehst du deinen Fehler.

    130Hz bei 10MHz sind übrigens nur 13ppm

  5. #5
    Hallo Kampi, MagicWSmoke und for_ro,

    danke für eure nützlichen Hinweise. Stimme for_ro, ich hatte anscheinend mit 1 Mhz gerechnet, also 13PMM. Habe mir nochmal die Timerberechnung angesehen. In vielen FAQ`s und Skripten wird leider oft einfach nur der Takt durch Prescaler und das Register geteilt. Irgendwann habe ich dann diese Methode aus Faulheit übernommen...Im Datenblatt und in einem Buch habe ich dann die von euch erwähnte Formel (wieder) gefunden.

    @MagicWhiteSmoke
    Stimmt sogar sehr gut:4960,3277 Mhz In meinem Beitrag war ein Fehler, es werden NICHT 4969 angezeigt, sondern eben 4960xxxxx.


    Werde mal schnell die Änderungen übernehmen und alles nochmal ausprobieren. Attiny wieder auf das Evolution Board und zum Brennen den externen Takt ranhängen.

  6. #6
    Vielen Dank für eure Hilfe !

    Für die, die es noch interessiert:

    Der Frequenzzähler zeigt nun; 5000,00711 Hz an, ich konnte den OCXO noch etwas ziehen. Im Moment sind das alles nur reine Experimente, mal sehen ob sich daraus noch ein kleines Projekt ergibt.

    Alex

  7. #7
    Kleiner Nachtrag noch:

    Ich habe jetzt auch nochmal einen Test mit dem internen RC Oszillator gemacht. Dieser erreicht natürlich nicht die Werte einen Quarzes. Bei meinem Attiny13V bei 3,3V und 19° Umgebungstemperatur bei 4,8 Mhz komme ich auf eine Genauigkeit von etwa 7 %. Dies bewegt sich im Rahmen der Herstellerdaten.
    Alex

Ähnliche Themen

  1. Hydrophon - schlechte Bedingungen
    Von Virus im Forum Sensoren / Sensorik
    Antworten: 18
    Letzter Beitrag: 05.09.2011, 09:22
  2. externer Takt am Timer1 bei atmega48 (mein Fehler)
    Von The Man im Forum C - Programmierung (GCC u.a.)
    Antworten: 0
    Letzter Beitrag: 05.12.2010, 21:08
  3. Externer Takt auf ATmega128 geben
    Von JollyJumper8 im Forum AVR Hardwarethemen
    Antworten: 7
    Letzter Beitrag: 02.10.2009, 15:42
  4. Externer Takt und kaputte Pins bei TQFP
    Von tobimc im Forum AVR Hardwarethemen
    Antworten: 9
    Letzter Beitrag: 29.12.2004, 17:30
  5. Externer Takt,aber wie definieren?
    Von Involut im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 13.10.2004, 01:34

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test