_delay_ms(x) braucht 8 mal länger bei ATTiny85

Gast #4151123
Seit dem WE beschäftige ich mich damit, ein IIC-OLED mit einem ATTiny85 
zu befeuern. Da die U8GLib die Tinies offiziell nicht unterstützt, habe 
ich als Alternive eine eine passende LIb im Projekt Digispark gefunden, 
sie stammt ursprünglich wohl aus der Tinosaur-Ecke.
Um es so simpel wie möglich zu halten verwende ich die Arduino-IDE mit 
speziellen ATTiny-Erweiterungen (13,25,45,85), programmiert wird mittels 
USBASP.
Im Prinzip alles prima, die Demo-Programme funzen, bzw. liefern den 
erwarteten Output. Fast.
Eine Demo verwendet die ANweisung _delay_ms, um das gemalte Bild eine 
Weile stehen zu lassen. Leider nicht die angebenen 8000 ms, sondern eine 
halbe Ewigkeit. Wenn ich die Zeitspanne auf 1000 reduziere, bleibt die 
Ausgabe ca. 8 sec stehen, bei 800 ca. 6sec.
Hier im AVR-Tut habe ich einiges gefunden, delay.h und F_CPU.
delay.h wird irgendwo in der lib includiert, F_CPU suche ich vergeblich.
Muss F_CPU zugewiesen werden?
Apropos, getaktet wird mit 8MHz intern, Fuses stehen auf 0x62 und und 
0xDF.
Gast
Max D. schrieb:
> ckdiv8 gesetzt

Wenn's bloß oilweil soo leichd hergangad (sogd da Bayer).

Formalistisch korrekte (jedoch das Bayern Feeling nicht
wiedergebende) Übersetzung:

Wenn es nur immer so leicht zu erreichen wäre .....
Gast
Ihn dünkt', er säh' 'nen Zeitversatz,
  und ward darob entsetzt.
Er guckt noch mal und merkt', es war,
  die Fuse ganz falsch gesetzt.
"Wenn's gar so einfach ist", sprach er,
  "bin ich zufrieden jetzt."
Gast
Jörg Wunsch schrieb:
> Also 1 MHz.  Stell die Low Fuse auf 0xE2.

Danke, hat geklappt, irgendwie hatte ich ein Brett vorm Kopp.
Die Tiny85 Fuses kenne ich nicht auswendig und eigentlich verlasse ich 
mich auf die in die Brennproggies eingebauten Routinen.
Im Falle des ATTiny85 waren leider nur zwei davon in der Lage, dessen 
Fuses auszulesen, interpretieren konnte sie keines, da sie außer dessen 
SIgnatur keine Infos haben.
Allerding hätte ich erwartet, dass der Burn-O-Mat die Tinies kennt.
Martin schrieb:
> F_CPU kannst Du z.B. in den Compiler-Optionen setzen, im AVR-Studio in
> der Toolchain für den Compiler unter "Symbols".

Nein, kann man nicht. Dort wird dem Compiler mitgeteilt, mit welcher 
Frequenz der Controller läuft. Der Takt ist eine Hardwareeinstellung, 
die im Controller gemacht wird.

Die CKDIV8-Fuse ist aber nur für die Einstellung des Clock-Dividers beim 
Start relevant. Der Clock-Divider lässt sich danach auch per Software 
einstellen.

siehe "power.h"

mfg.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.