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
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.
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
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
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
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.
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
Eine eigene Frage?
Dieser Thread ist über 17 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.