Hallo zusammen, nachdem ich gestern schon mal einsehen musste das meine erste Idee wohl eher nicht so toll ist, hier die Frage ob jemanden eine gute Lösung einfällt. Problemstellung: - Es geht um einen mobilen Datenlogger der möglichst Stromsparend mit 3V (2*AAA Baterie) arbeiten soll. Dies ist der Normbetrieb der Schaltung. - Zusätzlich soll ein USB-Port verbaut werden, um die Daten bequem am PC auslesen zu können. Aus Platzgründen etc. soll die USB-Kommunikation komplett in Firmware via V-USB abgehandelt werden. Probleme: - V-USB verlangt einen Quarz von mindestens 12 Mhz => Nur der ATTiny2313 normal (also ohne V) ist für mehr als 10Mhz spezifiziert. Bei 3V ist auch dieser nur bis 10Mhz spezifiziert Ich suche nun eine Jumperfreie Lösung, bei der der Tiny bei 5V Versorungsspannung (via USB) auf externen Takt bei 12Mhz läuft, bei 3V Versorgungsspannung jeodch unterhalb von 10Mhz (genauer Takt fast egal, da hier nur relativ selten (alle Sekunde) ein Meßwert per ADC erfasst werden soll) Wichtige Rahmenbedingung: Es darf verlangt werden das die 3V Versorungsspannung vor dem anschließen an den USB-Port abgenommen wird. Der Tiny bootet also entweder mit 5V oder 3V. Meine bisherigen Ideen dazu: - Quarz per Schaltung umschalten => funktioniert nicht da externer Takt gefused werden muß - Step-Up Wandler auf 5V auch im 3V Betriebsfall => gefällt mir nicht, Stromverbrauch - Prescaler verwenden => Glaube ich nicht das das funktioniert, da ich denke die Takteinschränkungen kommen daher das CMOS-Technik verwendet wird und dann die Ladungen bei zu geringer Spannung nicht mehr umgeladen werden können, ich habe also bedenken das der Prescaler bei 3V die 12Mhz externen Takt verträgt) Fällt jemanden eine Lösung ein? Gerne auch andere Mikrocontroller von Atmel da hier die Infrastruktur für diese vorhanden ist. PIC würde ich aus diesen Gründen ungerne nehmen, auch wenn diese für meinen Anwendungsfall wohl scheinbar die geeigneteren Controller sind)
Setze beim Programmieren die CKDIV8 Fuse. Dadurch läuft der tiny2313 beim Start erst mal mit 12/8 Mhz. Während der Initialisierung prüfst du, ob die Versorgunggspannung 5V oder 3V ist. Wenn VCC=5V setzt du den System Clock Prescaler auf ":1".
Uli Trautenberg schrieb: > Ich suche nun eine Jumperfreie Lösung, bei der der Tiny bei 5V > Versorungsspannung (via USB) auf externen Takt bei 12Mhz läuft, bei 3V > Versorgungsspannung jeodch unterhalb von 10Mhz > (genauer Takt fast egal, > da hier nur relativ selten (alle Sekunde) ein Meßwert per ADC erfasst > werden soll) Schick das Ding in irgendeinen PowerDown/Sleep Mode und gut is'. Alles was du an esoterischen Schaltungsmaßnahmen drumherum baust wird vermutlich mehr Dampf brauchen als der µC beim Pennen.
Ich würde die Step Up auf 5V Lösung wählen, und zwar mit einem Regler der noch mit recht wenig Spannung auskommt. Nur so holst Du das maximale aus den Batterien raus. Denn was bringen dir deine 2 Zellen direkt am µc wenn schon bei 2,7V Schluss ist.
Sleep Modes nehme ich, aber ich kann ihn ja schlecht bei 3V mit 12 MHz betreiben.... Gut, ihn mit 12/8Mhz hochzufahren klingt vernünftig, aber wie gesagt, verträgt der Prescaler den externen 12Mhz Takt auch bei 3V.. Ich nehme an auch der Prescaler ist aus CMOS-Logik gebaut....
tek schrieb: > Ich würde die Step Up auf 5V Lösung wählen, und zwar mit einem Regler > der noch mit recht wenig Spannung auskommt. Nur so holst Du das maximale > aus den Batterien raus. > Denn was bringen dir deine 2 Zellen direkt am µc wenn schon bei 2,7V > Schluss ist. Hm, das mit dem Spannungseinbruch und der besseren Batterieausnutzung bei einem StepUp klingt sinnvoll... Welchen Wandler würdest Du empfehlen? Vorzugsweise in SMD verfügbar :D Besten Dank allen bisher für die Anregungen und Vorschläge
Ich hab schon den L6920 verwendet http://www.st.com/internet/analog/product/75172.jsp Gibts bei Reichelt und läuft bei mir Problemlos.
Also bevor Du nun so'n riesen Aufwand betreibst bau zusätzlich einen Tiny85 ein den Du mit der internen PLL und V-USB betreibst und nur dann mit Strom versorgst wenn die Schaltung am USB hängt.
Oder nimm einen 16U2, der bedient den USB auch noch bei einem MHz. Auch ein programmierbarer Teile käme in Frage.
Magnus M. schrieb: > Setze beim Programmieren die CKDIV8 Fuse. Dadurch läuft der tiny2313 > beim Start erst mal mit 12/8 Mhz. Während der Initialisierung prüfst du, > ob die Versorgunggspannung 5V oder 3V ist. Wenn VCC=5V setzt du den > System Clock Prescaler auf ":1". So würd ich es auch machen, klingt nach einer guten Strategie. Außerdem würde ich nicht den alten ATtiny2313, sondern seinen Nachfolger, den ATtiny2313A, oder gleich den ATtiny4313 (ohne A) verwenden. Die neueren Typen laufen nämlich in einem Spannungsbereich von 1,8 bis 5,5 Volt und schaffen einen Takt von sogar 20 MHz (ab 4,5 Volt). Es gibt da also keine Unterscheidung mehr nach V und nicht V. Nochwas: Falls du zum Loggen der Daten keine exakte Zeitbasis brauchst, gehts auch ohne Quarz. V-USB kann man nämlich auch ohne Quarz mit dem internen RC-Oszillator betreiben. Dazu brauchst du dann aber einen AVR, der intern auch mit 16 MHz läuft, also z.B. den ATtiny85 (8 Pins) oder den ATtiny861A (hat auch 20 Pins wie der ATtiny2313). Markus
Nach dem durchlesen aller Kommentare bin ich jetzt wohl zur folgenden Lösung gekommen... Verwendet wird ein ATtiny85 im SOIC8 mit internem Oszi auf 16Mhz mit einem StepUp Wandler L6920. Der verträgt bis 5,5V, bin ich also auch bei USB auf der sicheren Seite :D und brauch nur eine nichtschaltbare Spannungsversorgung. Besten Dank allen die sich Gedanken um mein Problem gemacht haben!
Uli Trautenberg schrieb: > Nach dem durchlesen aller Kommentare bin ich jetzt wohl zur folgenden > Lösung gekommen... Verwendet wird ein ATtiny85 im SOIC8 mit internem > Oszi auf 16Mhz mit einem StepUp Wandler L6920. Der verträgt bis 5,5V, > bin ich also auch bei USB auf der sicheren Seite :D und brauch nur eine > nichtschaltbare Spannungsversorgung. > > Besten Dank allen die sich Gedanken um mein Problem gemacht haben! Hallo Uli, den Stepup brauchst du nicht, mach es einfach so wie "Magnus M." empfohlen hat. Bei Loggen läuft das Teil mit einem sehr langsamen Takt (z.B. 64 kHz, spart viel Strom!), bei USB-Betrieb läuft es mit 16 MHz. Den Standard kannst du per Fuses auf 2 MHz festlegen, dann läuft der Mikrocontroller auch mit 1,8 Volt noch zuverlässig los. Beim Programmstart kann dein Programm feststellen, ob USB-Betrieb ist oder nicht und stellt den Prescaler für den internen Takt entsprechend um. Wenn du - wie du ja vorhast - auf den Quarz verzichtest, brauchst du für USB-Betrieb 16,5 MHz, das heißt, du musst den internen Oszillator kalibrieren. Das ist nur notwendig, wenn das Gerät an USB hängt und kann mit dem USB-Takt als Referenz durchgeführt werden, passiert also automatisch. Dazu gibt es schon fertige Prozeduren. Such am besten nach "guloprog S" (ist ein einfacher USB-Programmer), für den habe ich den Quellcode veröffentlicht. Der enthält alle nötigen Einstellungen für V-USB sowie eine Kalibrierungsprozedur, die ich für den ATtiny85 geschrieben habe (der ATtiny85 wird auch in dem Programmer verwendet). Viel Spaß damit! Markus
Also zu der Sache mit den 12 MHz bei 3V: Als ich das erste mal von V-USB gelesen habe, habe ich das mal getestet und weil ich keine 3.6V Zehner Dioden rumliegen hatte, habe ich den uC hat mit 3.3V betrieben. In meinem Test lief er so ohne Probleme, allerdings habe ich nicht sehr ausführlich getestet...
@Markus: Bin jetzt etwas verwirrt... Ich setzte also die Fuses auf 2Mhz, interner Oszi... Okay, per ClockPrescaler komm ich jetzt auf z.B. 15kHz runter, selbst das sollte für mein Logging reichen.... Aber wie bekomm ich den jetzt auf 16,5 Mhz hoch für V-USB? Und kann ich mit dem StepUp nicht die Batterien "leerer" saugen? Aber da das ganze ne Mini-Serie mit ca. 200 Stck. werden soll bin ich natürlich über jedes Bauteil froh das ich mir spare :D
Uli Trautenberg schrieb: > Nach dem durchlesen aller Kommentare bin ich jetzt wohl zur folgenden > Lösung gekommen... Verwendet wird ein ATtiny85 Warum eigentlich nicht den ATtiny2313A, der dein ursprüngliches Problem (V geht nur bis 10 MHz, nicht-V geht nur ab 4,5 V) löst? Uli Trautenberg schrieb: > Aber wie bekomm ich den jetzt auf 16,5 Mhz hoch für V-USB? Indem du an OSCCAL "drehst". Die Frage ist halt nur, wieviel man da drehen muss. Vielleicht kannst du das ja aber vor der Auslieferung messen und dann den passenden Wert im EEPROM hinterlegen?
Markus Weber schrieb: > Wenn du - wie du ja vorhast - auf den Quarz verzichtest, brauchst du für > USB-Betrieb 16,5 MHz, das heißt, du musst den internen Oszillator > kalibrieren. Das ist nur notwendig, wenn das Gerät an USB hängt und kann > mit dem USB-Takt als Referenz durchgeführt werden, passiert also > automatisch. Laut Datenblatt ist bei knapp 14Mhz Schluss.
Hallo Jörg, vielleicht hab ich das nicht klar genug ausgedrückt. Zur Mikrocontroller-Wahl: Der ATtiny2313A ist in diesem Fall nicht so gut geeignet, weil er regulär nicht mit dem internen RC-Oszillator auf 16 MHz betrieben werden kann. 16,5 MHz werden aber benötigt, wenn man V-USB ohne Quarz verwenden will. Es gingen auch 12,8 MHZ, aber auch das liegt deutlich außerhalb des offiziell zulässigen Bereichs für den ATtiny2313A, man kann sich also nicht drauf verlassen, dass es funktioniert. Folglich bleibt als Alternative der ATtiny861A (ebenfalls 20 Pins). Er hat im Gegensatz zum 2313A sogar AD-Wandler. Billiger ist jedoch der ATtiny85, und wenn Uli die 8 Pins ausreichen, dann ist der ATtiny85 sicher die beste Wahl, denn er besitzt ebenfalls einen RC-Oszillator, der sich regulär auf 16 MHz einstellen lässt. Im Gegensatz zum ATtiny2313 löst der ATtiny85 (wie auch der ATtiny861A) also nicht nur das Problem mit der Versorgungsspannung, sondern lässt auch einen Betrieb ohne Quarz zu. Das ist von Vorteil, wenn man Bauteile (Kosten) einsparen will. Der Einfach-USBasp (siehe Bild) macht das auch so. Zum Oszillator: Zunächst muss der RC-Oszillator des ATtiny85 auf 16 MHz eingestellt werden. Dazu muss man die Fuses CKSEL3..0 auf 0001 setzen. Damit die 16 MHz nicht von Beginn an laufen, muss man das Fusebit CKDIV8 auf 0 setzen. Dadurch startet der Mikrocontroller mit 16/8 = 2 MHz, läuft also auch mit 1,8 Volt zuverlässig los. Nach dem Start fragt man ab, ob USB-Betrieb vorliegt. Man könnte dazu z.B. die Betriebsspannung messen oder Ähnliches. Falls USB-Betrieb, wird die Taktfrequenz auf 16 MHz erhöht, falls Batteriebetrieb, wird sie verringert, um Strom zu sparen. Das lässt sich über den Prescaler erreichen (Register CLKPS). Bei USB-Betrieb muss die Frequenz auf 16,5 MHz kalibiert werden, damit V-USB funktioniert. Dazu wird der Takt des USB-Signals verwendet, man kann das also während des Betriebs erledigen und braucht dazu keine Werte im EEPROM abzulegen. Schau dir dazu einfach die Prozedur calibrateOscillator(void) in der Datei main.c der Quellen des "guloprog S" an. Diese Prozedur kalibriert den Oszillator und trägt den Kalibrierungswert ins Register OSCCAL ein. Uli: Per Clock-Prescaler kommst du leider nicht bis auf 15 kHz runter. Normal gingen 32 kHz (8 MHz / 256). Dadurch dass der interne Oszillator aber mit 16 MHz läuft, kommst du auf 64 kHz. Das Fusebit CKDIV8 stellt nur den Prescaler beim Mikrocontrollerstart auf 8 ein und sorgt nicht für eine zusätzliche Teilung. Aber auch bei 64 kHz braucht der Mikrocontroller seeehr wenig Strom. Knut: Nein, laut Datenblatt kann man wählen zwischen 8 MHz und 16 MHz Takt. Beides kann anschließend entsprechend kalibriert werden. 16,5 MHz liegen da auf alle Fälle im Rahmen. So, hoffentlich war ich diesmal klar genug. :-) Markus
Markus Weber schrieb: > Der ATtiny2313A ist in diesem Fall nicht so gut geeignet, weil er > regulär nicht mit dem internen RC-Oszillator auf 16 MHz betrieben werden > kann. Sorry, das hatte ich verwechselt. Habe in letzter Zeit wohl zu viel mit den ATmega128RFA1 gemacht, deren internen RC-Oszillator kann man bis über 20 MHz ziehen, aber das ist natürlich in der Tat eine andere Implementierung. Allerdings könntest du ihn natürlich mit einem 16-MHz-Quarz betreiben und dann nur bei erkannter 5-V-Versorgung den 1:8-Prescaler per Software abschalten.
Markus Weber schrieb: > Knut: > > Nein, laut Datenblatt kann man wählen zwischen 8 MHz und 16 MHz Takt. > Beides kann anschließend entsprechend kalibriert werden. 16,5 MHz liegen > da auf alle Fälle im Rahmen. Ja, bei dem 85er, aber nicht bei dem 2313, so meinte ich das ;-)
So, dann guck ich gleich mal daheim in die Bastelkiste was da zum rumprobieren rumliegt.... 85er hab ich mit Sicherheit keine... Die Lösung gefällt mir irgendwie gut mit der guloprog kalibrierroutine. 88er müssten noch rumliegen, also auf ans fröhliche basteln :D
Uli Trautenberg schrieb: > So, dann guck ich gleich mal daheim in die Bastelkiste was da zum > rumprobieren rumliegt.... 85er hab ich mit Sicherheit keine... > > Die Lösung gefällt mir irgendwie gut mit der guloprog kalibrierroutine. > > 88er müssten noch rumliegen, also auf ans fröhliche basteln :D Ich könnt jetzt sagen, besorg dir besser ein paar ATtiny85, aber ich kenne den Spieltrieb selber nur zu gut. :-) Du kannst auch mit dem ATmega88 schon anfangen, musst dann halt wieder einiges in der Software ändern, wenn du zum t85 wechselst. USB per RC-Oszillator geht auch mit dem ATmega88 – jedenfalls meistens. Statt 16,5 MHz nimmst du 12,8 MHz und lässt den internen Oszillator von 8 MHz auf 12,8 hochdrehen. Das liegt natürlich weit außerhalb des erlaubten Bereichs, klappt aber oft trotzdem. Die Port-Zuordnung musst du dann auch anpassen. Wichtig ist, dass du für USB-D+ einen Port wählst, auf dem auch INT0 liegt. Jörg: Ich war grad neugierig auf den "ATmega128RFA1" hab ihn aber auf die Schnelle nicht gefunden. Ich kenn nur die dicken Brummer ATmega1284 (40-poliges DIP), der RFA1 ist einer im SMD-Gehäuse?
Hi >Ich war grad neugierig auf den "ATmega128RFA1" hab ihn aber auf die >Schnelle nicht gefunden. Ich kenn nur die dicken Brummer ATmega1284 >(40-poliges DIP), der RFA1 ist einer im SMD-Gehäuse? http://www.atmel.com/devices/ATMEGA128RFA1.aspx MfG Spess
Spess53 schrieb: > http://www.atmel.com/devices/ATMEGA128RFA1.aspx Danke! Irgendwie aber schon verwirrend. Er nennt sich ATmega, ist aber bei den Xmegas einsortiert – wenn man nach dem Directory-Pfad geht. Weder auf der ATmega noch auf der ATxmega-Übersicht hab ich ihn gefunden. Wahrscheinlich noch zu neu. Schaut interessant aus. :-)
Markus Weber schrieb: > Ich kenn nur die dicken Brummer ATmega1284 > (40-poliges DIP), der RFA1 ist einer im SMD-Gehäuse? Ja, den gibt's nur im QFN. Aber auch einen ATmega1284 bekommst du in TQFP oder QFN, da sind sie bei weitem nicht so riesig wie in DIP-40.
Markus Weber schrieb: > Danke! Irgendwie aber schon verwirrend. Er nennt sich ATmega, ist aber > bei den Xmegas einsortiert – wenn man nach dem Directory-Pfad geht. Jaja, das ist schon seltsam. > Weder auf der ATmega noch auf der ATxmega-Übersicht hab ich ihn > gefunden. Wahrscheinlich noch zu neu. Schaut interessant aus. :-) Neu? Neu wäre der Nachfolger ATmega256RFR2, denn der ist gerade erst zur Produktronika vorgestellt worden: http://www.atmel.com/devices/ATMEGA256RFR2.aspx Den 'RFA1 gibt es nun schon so lange, dass man ihn sogar bei Reichelt kaufen kann. ;-)
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.