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