Forum: Mikrocontroller und Digitale Elektronik ATTiny Taktfrequenz und Versorgungsspannung


von mgolbs (Gast)


Lesenswert?

Hallo,

ich möchte gern in einer Anwendung einen ATTiny mit 8 Pins verwenden 
(3xADC +1xIO), möglichst 4kB. Versorgt werden soll dieser mit 2,4V 
(2x1,2V Akku). Die Taktfrequenz des Tiny soll möglichst gering sein, 
Kapazitätsthema Akku, aber noch mit normalen Programmern funktionieren. 
"1MHz"...?

Nun habe ich gelesen, dass die interne Taktfrequnez sowohl von 
Vorteiler, der Versorgungsspannung und der Temperatur abhängig ist.

Ein ATTiny der bis zu 1,8V läuft wäre prima. Dann könnte ich die Akkus 
effektiver nutzen. Ich dachte zuerst an einen ATTiny13a. Da fehlt leider 
was an EEPROM/SRAM.

Leider habe ich noch keine Darstellung gefunden, wie sich die 
Taktfrequenz z.B. von 1,8...5,5V VCC entwickelt. Ist das in etwa linear?

Wie ist das beim ATTiny13a zu verstehen? Wie kann ich bei 5.5V die 4, 10 
oder 20 MHz einstellen, per Fuse?

Speed Grade:
    – 0 – 4 MHz @ 1.8 – 5.5V
    – 0 – 10 MHz @ 2.7 – 5.5V
    – 0 – 20 MHz @ 4.5 – 5.5V

Über Tipps und Infos wäre ich sehr dankbar.

Gruß Markus

von Hmm (Gast)


Lesenswert?

Ich empfehle Dir zur Lektüre das Datenblatt 
http://www.atmel.com/Images/doc8126.pdf , insbesondere die Kapitel 6.2, 
18.4 und 22.

>Leider habe ich noch keine Darstellung gefunden, wie sich die
Taktfrequenz z.B. von 1,8...5,5V VCC entwickelt. Ist das in etwa linear?
Kapitel 18.4

>Wie ist das beim ATTiny13a zu verstehen? Wie kann ich bei 5.5V die 4, 10
>oder 20 MHz einstellen, per Fuse?

Kapitel 6.2. CKSEL Fuse

Mit den Spannungsangaben in Verbindung mit dem Takt ist das so zu 
verstehen:

    – 0 – 4 MHz @ 1.8 – 5.5V   Bei minimal 1,8V darf der Takt max. 4MHz 
betragen
    – 0 – 10 MHz @ 2.7 – 5.5V  Bei min. 2,7V max Takt 10MHz
    – 0 – 20 MHz @ 4.5 – 5.5V  Bei min 4,5V max Takt 20MHz

Es gibt aber laut. Kapitel 22 überhaupt nur den 20MHz Typ (bei anderen 
Modellen sind das im Ggs. zum ATTiny13a tatsächlich physisch andere 
Teile).
D.h. du kriegst einen Chip der bei minimal 4,5V bis 20MHz kann, der aber 
bei 4MHz mit einer Versorgungsspannung von bis zu minimal 1,8V auskommt.

Da der RC-Oscillator aber beim Einschalten (mindestens) 4,8MHz +-10% hat 
darfst Du ihn theoretisch nicht mit 1,8V einschalten sondern eher mit 
2,2V oder so ähnlich. Du kannst zwar probieren den OSCAL-Wert als erstes 
zu ändern, aber das muss nicht funktionieren. Garantiert geht das mit 
1,8V nur bei einer externen Taktquelle oder einem Quarz.

von Hmm (Gast)


Lesenswert?

>Wie ist das beim ATTiny13a zu verstehen? Wie kann ich bei 5.5V die 4, 10
>oder 20 MHz einstellen, per Fuse?

Kapitel 6.2. CKSEL Fuse

Die Antwort ist etwas lakonisch.

Per Fuse kannst Du den RC-Oscillator zwischen 4,8MHz und 9,8MHz 
umschalten und zusätzlich noch mit OSCAL bis auf 19,2MHz hochgehen bzw 
auf 2,4MHz herunter. Alternativ kannst Du einen Quarz oder eine externe 
Taktquelle in den Grenzen benutzen die oben angeben sind. Dafür gibt es 
auch Fuses.

von Hmm (Gast)


Lesenswert?

Das ist auch ein bisschen irreführend.

>Es gibt aber laut. Kapitel 22 überhaupt nur den 20MHz Typ (bei anderen
>Modellen sind das im Ggs. zum ATTiny13a tatsächlich physisch andere
>Teile).

Das Problem ist, das die beiden Infos im Grunde widersprüchlich sind:

Einerseits gibt es die drei Speed-Grades auf der ersten Seite.
Andererseits im Kapitel 22, den Order Typ 20MHz 1,8V - 5V

Es mag sein, das die Einschränkungen der ersten Seite gelten, auch wenn 
es nur einen Typ zu kaufen gibt. D.h. Du kannst den uC in den Grenzen 
der Ordering Info insgesamt betreiben aber Du könntest z.B. nicht 20MHz 
bei 1,8V fahren oder 10MHz unter 2,7V usw.

Es kann aber auch sein, das die Einschränkungen der ersten Seite nicht 
gelten sondern die Order-Info korrekt ist. Dann könntest Du den uC mit 
20MHz bei 1,8V betreiben.

Leider gibt es solche Widersprüche immer wieder und nicht nur bei Atmel.
Musst Du ausprobieren. (Was an sich auch nicht trivial ist).

von c-hater (Gast)


Lesenswert?

mgolbs schrieb:

> Nun habe ich gelesen, dass die interne Taktfrequnez sowohl von
> Vorteiler, der Versorgungsspannung und der Temperatur abhängig ist.

So ist es.

> Leider habe ich noch keine Darstellung gefunden, wie sich die
> Taktfrequenz z.B. von 1,8...5,5V VCC entwickelt.

Dann lies einfach das Datenblatt. Da sind wunderschöne Diagramme zu 
diesem Thema drinne.

> Ist das in etwa linear?

Oszillatorfrequenz vs. Spannung: Ja.

> Wie ist das beim ATTiny13a zu verstehen? Wie kann ich bei 5.5V die 4, 10
> oder 20 MHz einstellen, per Fuse?

Jain. Mit den Fuses wählst du die Quelle des Taktes und evtl. den 
Taktteiler. Die Frequenz selber kannst du darüber aber nicht steuern. Im 
Falle des internen Oszillators kannst du ihn (in Grenzen) über das 
OSCCAL-Register kontrollieren.

> Speed Grade:
>     – 0 – 4 MHz @ 1.8 – 5.5V
>     – 0 – 10 MHz @ 2.7 – 5.5V
>     – 0 – 20 MHz @ 4.5 – 5.5V

Das ist ein völlig anderes Thema. Hierbei geht es darum, bis zu welchem 
Takt bei welcher Spannung die Funktion des Controllers garantiert ist. 
Das hat direkt nix mit dem internen Oszillator zu tun.

> Über Tipps und Infos wäre ich sehr dankbar.

Das dachte sich wohl auch Atmel und deshalb ziemlich umfangreiche 
Datenblätter zu ihren Produkten veröffentlicht, in denen dies alles und 
noch viel mehr drinsteht.

Nur lesen und verstehen mußt du den Kram immer noch selbst. Das kann dir 
niemand abnehmen.

von Wolfgang (Gast)


Lesenswert?

Hmm schrieb:
> Leider gibt es solche Widersprüche immer wieder und nicht nur bei Atmel.
> Musst Du ausprobieren. (Was an sich auch nicht trivial ist).

Du musst nicht überall Widersprüche suchen und mit dem Bügelbrett quer 
durch die Tür rennen wollen. Versuch mal das Datenblatt zu verstehen.

Laut Ordering Info gibt es nur Typen, für die mindestens 20MHz als 
maximale Taktfrequenz garantiert ist. Diese maximale Taktfrequenz ist 
bei Vcc=4.5 ... 5.5V möglich.
Fertig.

Für die erweiterten Spannungsbereiche sind maximal mögliche 
Taktfrequenzen von 4 bzw. 10MHz garantiert.

von mgolbs (Gast)


Lesenswert?

Hallo,

vielen Dank für die umfangreiche Diskussion. Das zeigt wohl, daß das 
Thema recht komplex ist :-). Ich werde mich dann in die umfangreiche 
Dokumentation eines gewählten DIL8 ATTiny mit VCC 2,4V und 4kB einlesen.

Bevor ich die tun werde, möchte ich noch mal kurz zusammenfassen, ob ich 
was im Grundsatz falsch verstanden habe:

# für eine gewissen Frequenz muss ein Mindestspannungslevel VCC 
sichergestellt werden

# mit der Fuse kann ich bei intern verwendetem Taktgeber einen Preteiler 
aktivieren.

Wobei bringt ein Preteiler der Taktfrequenz oder OSCCAL-Register 
Frequenzreduzierung "Energieeinsparung?

# ohne Preteiler (<>1) läuft der ATTiny mit der im Datenblatt 
angegebenen intern erzeugten Frequenz von z.B. 20MHz >> braucht dann 
aber min. z.B. VCC =4.5V

# Mit verwendetem Preteiler/ Angabe im OSCCAL-Register zur 
Frequenzreduzierung kann ich dann auch VCC Min. absenken (z.B. bis 
1,8V)?

# Möglichst etwas über VCC min. betreiben zum sicheren Anlauf

# Über Preteiler und OSCCAL-Register eingestellte Frequenz bedingt VCC 
min. Beim Betrieb oberhalb kann Frequenz über Spannungsvariation VCC 
angepasst werden.

Externer Taktgeber kommt bei mir nicht in Frage.

Welchen DIL8 ATTiny mit 4kB und VCC ca. 2,4V würdet Ihr empfehlen?


Gruß und Dank Markus

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Hallo Markus,

mgolbs schrieb:
> # für eine gewissen Frequenz muss ein Mindestspannungslevel VCC
> sichergestellt werden

Genau. Im Datenblatt ist dazu auch eine Grafik enthalten (Kapitel 18.3 
"Speed" auf Seite 118 unten).

> # mit der Fuse kann ich bei intern verwendetem Taktgeber einen Preteiler
> aktivieren.

Jein.
Den Vorteiler kannst du per Register CLKPR auf einen Teiler-Wert 
zwischen 1 und 256 einstellen (siehe Datenblatt Kapitel 6.4.2 auf Seite 
28). Das Fusebit CKDIV8 bestimmt lediglich die Voreinstellung dieses 
Vorteilers:
CKDIV8=1: Vorteiler hat den Anfangswert 1
CKDIV8=0: Vorteiler hat den Anfangswert 8
Den Rest stellst du dann im Programm selbst ein, indem du das 
Vorteilerregister entsprechend beschreibst. Das Fusebit ist deswegen 
notwendig, weil der Mikrocontroller bei sehr geringer Spannung und einem 
Vorteiler-Wert von 1 gar nicht erst losläuft. Also in deinem Fall: 
CKDIV8=0 einstellen.

> Wobei bringt ein Preteiler der Taktfrequenz oder OSCCAL-Register
> Frequenzreduzierung "Energieeinsparung?

Eindeutig ja!
Wenn es dir aber auf Energiereduzierung ankommt, solltest du den Takt 
noch weiter verringern, indem du gleich den internen 128-kHz-Oszillator 
verwendest. Der ist nicht so genau, aber zusammen mit dem Vorteiler 
kommst du dann auf einen Takt von 500 Hz, und da braucht der 
Mikrocontroller kaum noch Strom (unter 100 μA). Zusätzlich kannst du 
SLEEP verwenden, wenn er zwischendurch nichts arbeiten soll.

> # ohne Preteiler (<>1) läuft der ATTiny mit der im Datenblatt
> angegebenen intern erzeugten Frequenz von z.B. 20MHz >> braucht dann
> aber min. z.B. VCC =4.5V

20 MHz sind nur mit Quarz möglich. Normal läuft der ATtiny13A ohne Quarz 
mit 9,6 MHz (mit CKDIV8=0 mit 1,2 MHz).

> # Mit verwendetem Preteiler/ Angabe im OSCCAL-Register zur
> Frequenzreduzierung kann ich dann auch VCC Min. absenken (z.B. bis
> 1,8V)?

Richtig. Sehr wahrscheinlich sogar noch weiter runter, aber dann 
garantiert der Hersteller für nichts mehr. ;-)

> # Möglichst etwas über VCC min. betreiben zum sicheren Anlauf

Genau.

> # Über Preteiler und OSCCAL-Register eingestellte Frequenz bedingt VCC
> min. Beim Betrieb oberhalb kann Frequenz über Spannungsvariation VCC
> angepasst werden.

Die Frage verstehe ich nicht ganz. Du kannst aber zum Beispiel im 
Mikrocontroller über einen ADC-Eingang die eigene Versorgungsspannung 
messen und daraufhin per Programm die Taktfrequenz ändern.

> Welchen DIL8 ATTiny mit 4kB und VCC ca. 2,4V würdet Ihr empfehlen?

Da kommen dann nicht mehr so viele in Frage. Am populärsten und 
günstigsten ist wohl der ATtiny85 mit seinen 8 kB Flash-ROM, 512 Bytes 
SRAM und 512 Bytes EEPROM. Diese Serie (ATtiny25/45/85) hat sogar eine 
integrierte PLL für den CPU-Takt, so dass du ohne externe Beschaltung, 
also nur mit dem internen Oszillator ganz regulär sogar auf 16 MHz 
kommst - falls du das jemals brauchen solltest. :-)

von mgolbs (Gast)


Lesenswert?

Hallo,

danke für die vielen sehr hilfreichen Informationen. Ich werde dann also 
einen ATTINY45 verwenden, mit interm 128-kHz-Oszillator, VCC ca. 2,4V. 
So einen habe ich jetzt schon da. Dann muss ich nur am ADC ohne VRef die 
Sensorspannung des MEMS auf z.B. 1,8V begrenzen.

Über http://www.engbedded.com/fusecalc kann man ja prima Einstellungen 
erhalten.

Sind die 128kHz schon für die Programmer problemtisch?

Gruß und Dank Markus

von Ulrich (Gast)


Lesenswert?

Mit 128 kHz Takt muss man bei einigen Programmern schon eine niedrigere 
Geschwindigkeit einstellen. Die meisten AVRs laufen halt default mit ca. 
1 MHz RC Takt und dafür die Programmer in der Regel eingestellt.

Wenn man im Programm mit Sleep Modes statt aktivem Warten arbeitet, ist 
der Stromverbrauch auch mit 1 MHz Takt nicht unbedingt höher, oft sogar 
niedriger als mit 128 kHz Takt und aktivem warten.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

mgolbs schrieb:
> einen ATTINY45 verwenden, mit interm 128-kHz-Oszillator, VCC ca. 2,4V.
> So einen habe ich jetzt schon da. Dann muss ich nur am ADC ohne VRef die
> Sensorspannung des MEMS auf z.B. 1,8V begrenzen.

Oh, ich bin mir grad nicht sicher, ob der ADC auch dann korrekt läuft, 
wenn du nur 500 Hz CPU-Takt hast. Bei 128 kHz gehts bestimmt. Probiers 
einfach aus und stell den ADC-Prescaler auf 1.

> Über http://www.engbedded.com/fusecalc kann man ja prima Einstellungen
> erhalten.

Sicherer ist es, zusätzlich ins Datenblatt zu schauen. Meist lernt man 
da dann noch ein bisschen mehr. Geht mir jedenfalls so. :-)

> Sind die 128kHz schon für die Programmer problemtisch?

Gute Frage, ich kann hier aus eigener Erfahrung nur für den USBasp mit 
aktueller Firmware sprechen: da ist es kein Problem ("-B"-Option 
verwenden).
Aber ich bin sicher, es meldet sich noch jemand, der 500 Hz CPU-Frequenz 
schon mit anderen Programmern getestet hat.

von mgolbs (Gast)


Lesenswert?

Hallo,

werde mit 128kHz arbeiten. Sleep geht aus der Anwendung heraus leider 
nicht.
1
Oh, ich bin mir grad nicht sicher, ob der ADC auch dann korrekt läuft, 
2
wenn du nur 500 Hz CPU-Takt hast...

Wenn ich die Frequenz am ADC reduziere (Teiler), was kann da im Gunde 
passieren? Die Zeit bis die Wandlung fertig ist, spielt bei mir keine 
Rolle, wenn es nicht gerade in den mehrere Sekundenbereich läuft.

Hat das was mit dem sich änderenden Signal zu tun, dass zu niedrige ADC 
Frequenzen problematisch sind? Habe da leider keine Ahnung.

Gruß und Dank Markus

von Ulrich (Gast)


Lesenswert?

Bei einer zu niedrigen ADC Taktrate könnte die Genauigkeit etwas leiden 
weil die S&H Stufe in der Zeit dann etwas mehr driftet. Ich würde da 
Probleme vor allem bei höheren Temperaturen an der oberen Grenze 
erwarten, bei normaler Temperatur dürfte man vermutlich auch noch 
einiges runter gehen in der Frequenz ohne deutlich Fehler zu bekommen.
Der ADC Takt darf zwischen 50 und 200 kHz liegen, und auch mit 125 kHz 
System-takt sind noch 62,6 kHz als ADC-Takt möglich. Da ist man also 
noch im vorgesehenen Bereich. Ein mögliches Problem mit dem ADC-Takt 
hätte man also nur bei weniger als 100 kHz CPU-takt, wie etwa mit einem 
32 kHz Quarz.

Es gibt nur recht weniger Fälle wo man nicht wenigstens den Idel mode 
verwenden kann, um Strom zu sparen. Der einzige Fall, der mit da 
einfällt wären ggf. unkritische Wärtezeiten die man als aktive Wait 
realisieren muss um eine schnelle Reaktion auf einen Interrupt zu 
erlauben. Mit einem etwas schnelleren Takt ließe sich aber auch das ggf. 
noch mit Sleep Modes lösen. Das Programm müsste natürlich angepasst 
werden, ggf. auch ganz neu organisiert werden, mit einer anderen Nutzung 
von Interrupts.

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.