Forum: Mikrocontroller und Digitale Elektronik _delay_ms(x) braucht 8 mal länger bei ATTiny85


von bianchifan (Gast)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

bianchifan schrieb:
> 8MHz intern, Fuses stehen auf 0x62

Also 1 MHz.  Stell die Low Fuse auf 0xE2.

von Max D. (max_d78)


Lesenswert?

ckdiv8 gesetzt

€dit: zu spät ^^

: Bearbeitet durch User
von Arduinoquäler (Gast)


Lesenswert?

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 .....

von S. Landolt (Gast)


Lesenswert?

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."

von markus (Gast)


Lesenswert?

Mich duenkt das war ein Limerik
mit fuenf Zeilen jetzt
schau ich noch mal genauer hin
Dann sinds der Zeilen sechs

von bianchifan (Gast)


Lesenswert?

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.

von da1l6 (Gast)


Lesenswert?

Schau mal da nach:

http://www.engbedded.com/fusecalc

da1l6

von Martin (Gast)


Lesenswert?

F_CPU kannst Du z.B. in den Compiler-Optionen setzen, im AVR-Studio in 
der Toolchain für den Compiler unter "Symbols".

von Thomas E. (thomase)


Lesenswert?

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.

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.