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