ATtiny45 läuft zu schnell

OP #4391502
Lesenswert?
• ▲
▼
Ich habe einen ATtiny45, der nach meinem Empfinden zu schnell läuft.

Ich nutze den internen 8MHz-RC-Oszillator und habe einen 
Timer-Interrupt, der alle 100us kommt.

Wenn ich in der Interrupt-Routine einen Port toggle, kann ich mit dem 
Oszi eine Periodendauer von ca. 88µs messen.

Daraufhin hab ich mal eine Hauptschleife mit gesperrten Interrupts 
gebaut, die einfach nur einen Port toggelt.
Wenn ich im Assembler-Listing die Zyklen vom Maschinencode raussuche und 
addiere, komme ich ebenfalls drauf, dass der uC etwa 13% zu schnell 
läuft.

Gemäß Datenblatt sollte die Genauigkeit im Auslieferungszustand 10% 
sein. Wenn ich an der Spannung drehe (2.5V...5V) oder an der Temperatur
(Daumen drauf), ändert sich das Zeitverhalten nur minimal. 13% wären 
damit ausserhalb der Spec.


Wenn ich OSCCAL auf 0x5F setze stimmt die Frequenz.

Mit OSCCAL=0xa6 ist die Frequenz so, wie wenn ich OSCCAL gar nicht 
beschreibe. Demnach ist dies vermutlich der Wert nach Reset.
Die internen Kalibrationswerte kann ich mit dem AVRDUDE zu 0x8B und 0x41 
auslesen. Wenn ich diese Werte ins OSCCAL schreibe, komme ich auf
noch andere Fehler.

Das OSCCAL-Register kann ich natürlich so abgleichen, dass die 
Geschwindigkeit passt.

Aber ist die CPU im 8MHz-Modus nicht von Haus auf 1% kalibriert?

Mir stellt sich die Frage, ob mein uC nicht korrekt tickt, oder ob ich 
zu blöd bin, das Handbuch zu begreifen.
#4391543
Lesenswert?
• ▲
▼
DB verspricht "Factorycalibration" von +-10% indem die Hardware beim 
Start einen Device-spezifischen OSCCAL-Wert setzt. Per FineTuning kann 
man per Software +-1% erreichen.
 Fast +14% ist zwar etwas mehr, aber nicht wirklich unerwartet. Wer weiß 
ob beim reinfrickeln alle "Lötanweisungen" des Herstellers eingehalten 
wurden ;-)
OP #4391593
Lesenswert?
• ▲
▼
Hier meine kleine Schleife und ihr Listing.

Nach meinem Dafürhalten benötigen die vier  Befehle 5 Zyklen,
bei 8MHz sollte ein Durchlauf 625us benötigen, gemessen hab ich
ca. 550us.

while(1)
{
   PORTB=~PORTB;
  38:  88 b3         in  r24, 0x18  ; 24
  3a:  80 95         com  r24
  3c:  88 bb         out  0x18, r24  ; 24
  3e:  00 c0         rjmp  .+0        ; 0x40 <__SREG__+0x1>
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.