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