Forum: Mikrocontroller und Digitale Elektronik Attiny interner Takt nur sehr ungenau?


von Spice (Gast)


Lesenswert?

Hi Leute,

ich habe folgendes Problem. Ich habe eine USB-Anwendung (V-usb) auf dem 
Tiny85 und der läuft mit internem Takt, wo der OSCAL-Wert per Firmware 
kalibriert wird. Allerdings musste ich feststellen, dass zwar USB mit 
einem Takt von 12MHz läuft, allerdings meine delays sehr ungenau sind. 
Woran kann das liegen, was mache ich falsch?
liegt das daran, dass der OSCAL-Wert nun für USB optimiert ist und darum 
die eigentlichen delays in dem Programm nicht korrekt ablaufen?
Gruß Spice

von Richard U. (ronw)


Lesenswert?

Das liegt daran, dass die USB-Interrupts busy-waiting Warteschleifen 
(die du wahrscheinlich verwendest) unvorhersagbar unterbrechen und damit 
zu dem beobachteten Verhalten führen.
Eine Lösung wäre es, einen Timer zu verwenden, mit dem die Wartezeiten 
gemessen werden.

von Spice (Gast)


Lesenswert?

Danke für die Info.

ich verfolge das verhalten, dass du beschreibst auf dem Oszi.
Wenn ich die Interrupts ausschalte, bevor ich in die Warteschleife gehe, 
beobachte ich eine ungenauigkeit die gering ist, aber die ist da und um 
die geht es mir. Wenn ich aber in die warteschleife gehe, bevor ich die 
interrupts ausschalte, dauert die Warteschleife fast doppelt so lang, da 
dort die interrupts zwischen funken (verständlich)
Aber wie gesagt mir geht es um die ungenauigkeiten, die trotz 
deaktiviertem interrupt auftreten. Auch zu sehen ohne USB-Firmware...
Ich vermute, dass ich mit den Fuses nicht zurecht komme. Obwohl die 
Fuses richtig scheinen, da USB funktioniert. Wo liegt mein Fehler, 
welcher mich bereits tage und nächte kostet?
Für jede Hilfe und Anregung bin ich dankbar...
MFG Spice

von hownottobeseen (Gast)


Lesenswert?

Läuft der AVR bei automatischer Kalibrierung nicht bei 16,5MHz?

von Spice (Gast)


Lesenswert?

Das weiss ich nicht genau.
Der Tiny bzw die USB-Firmware war auf 16.5MHz eingestellt. Doch leider 
wurde da kein Device entdeckt. Aus dem Grunde habe ich mit den Fuses und 
mit der Freuquenz rumgespielt, bis Windows bei 12MHz (laut Makefile) ein 
Device gefunden hat.
Vielleicht weißt du näheres dazu oder hast sowas (VUSB) schon mal 
gemacht?
Danke nochmal und Gruß
Spice

von hownottobeseen (Gast)


Lesenswert?

soweit ich weiß läuft der USB bei interner Taktung auf den Tinys mit 
12,8 oder 16,5MHz, steht zumindest in der usbconfig-prototype.h:
1
Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000,
2
16500 and 20000. The 12.8 MHz and 16.5 MHz versions of the code require no
3
crystal, they tolerate +/- 1% deviation from the nominal frequency

Schalte doch einfach mal CKOUT an und schau, welcher Takt am 
entsprechenden Pin liegt. Macht dein Frequenzzähler den Takt nicht mit, 
nimm nen Timer, der für dich runterteilt.

Ansonsten kannst du auch den OSCCAL-Wert aus dem EEProm lesen bzw. 
direkt von der Firmware (-> Easylogger) ausgeben lassen.

Achja: lass den Tiny lieber bei 5V laufen, bei 3,3V (per 2 Dioden) sind 
anscheinend nur kurze Leitungslängen möglich bzw. liegt die Kalibrierung 
daneben (woran es genau liegt, kann ich nicht sagen)

hth

von mp (Gast)


Lesenswert?

Der interne Oscillator schwankt auch nach der Kalibrierung bis zu 10% 
mit der Temperatur.
Bei uns ist der Tiny deswegen aus der Serie rausgeflogen 
(>10000Stück/Jahr)
Steht aber auch so im Datenblatt, wobei die Realität noch schlimmer ist.

von Jadeclaw D. (jadeclaw)


Lesenswert?

Neuere ATMegas und ATTinys haben einen recht kräftigen Jitter auf dem 
internen RC-Oszillator. Der freundliche Japaner hat sich auch so seine 
Gedanken darüber gemacht:
http://elm-chan.org/docs/avr/jitter.html
Den Text braucht man nichtmal zu verstehen, die Oszi-Bilder sind 
deutlich genug. Mein Rat: Wenn man es stabil braucht, Quarz nehmen.

@mp (Gast): Glaubst du wirklich, bei anderen Controllern wäre die 
Stabilität großartig besser? RC ist RC, Drift durch Temperatur und 
Alterung sind da normal. Nur daß da Epoxy um den Chip drumherum ist, 
macht es nicht wirklich besser.

Gruß
Jadeclaw

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
Noch kein Account? Hier anmelden.