Hallo,
ich würde gern die LiPo batterie welche an meinem Tiny13 hängt
überwachen damit sie nicht unter 3V kommt.
Dazu möchte ich die interne 1.1V quelle gegen VCC messe.
Es soll ohne extra Komponenten funktionieren (geht bei tiny85 auch)
ist das so möglich?
1
void setup()
2
{
3
}
4
5
void loop()
6
{
7
// Read 1.1V reference against AVcc
8
// set the reference to Vcc and the measurement to the internal 1.1V reference
Stefan A. schrieb:> Dazu möchte ich die interne 1.1V quelle gegen VCC messe.> Es soll ohne extra Komponenten funktionieren (geht bei tiny85 auch)
Das nennt sich Bandgap.
Ist eine tolle Sache. Der 13er hat das aber leider nicht.
mfg.
1. Warum probierst du das nicht einfach aus? Häng den Attiny an ein
Labornetzteil und stell einfach die Spannung ein.
2. Ich denke nicht dass das SO läuft wie es aktuell da steht: Was machst
du denn mit dem Ergebnis?
3. "float" auf einem AVR mit 1KB FLASH ist nicht sinnvoll bzw.
vermutlich auch gar nicht möglich. Du brauchst hier kein Float. Du
brauchst den Wert auch nicht in Volt. Rechne doch einfach mit Integer
weiter und du weißt dann, dass der Wert von 123 z.B. 3V entspricht (nur
ein Beispiel, keine korrekten Zahlen!).
Thomas E. schrieb:> Das nennt sich Bandgap.> Ist eine tolle Sache. Der 13er hat das aber leider nicht.
Doch, natürlich hat der ATtiny13 eine Bandgap-Referenz, eben die
1,1 V. Allerdings kann man diese nicht an einen Eingang des ADC
legen und gegen Vcc relativ messen damit.
Stefan A. schrieb:> Also muss ich den Tiny85 nehmen :(
Naja, ein ATtiny25 würde es auch tun, große Mengen an Code oder RAM
wirst du ja wohl nicht brauchen, wenn es bislang alles in den 13er
gepasst hat.
Da er ansonsten pinkompatibel ist, was spricht denn dagegen? Wirklich
teurer ist er ja auch erst, wenn du davon einige 10000 Stück kaufen
willst.
Jörg W. schrieb:> Allerdings kann man diese nicht an einen Eingang des ADC> legen und gegen Vcc relativ messen damit.
Ja eben. Und darum geht es, das man diese nicht über den Mux schalten
kann.
Und die heisst meistens VBG. Manchmal kann man die Korinthen auch da
lassen, wo sie sind.
mfg.
Jörg W. schrieb:> Stefan A. schrieb:>> Also muss ich den Tiny85 nehmen :(>> Naja, ein ATtiny25 würde es auch tun, große Mengen an Code oder RAM> wirst du ja wohl nicht brauchen, wenn es bislang alles in den 13er> gepasst hat.>> Da er ansonsten pinkompatibel ist, was spricht denn dagegen? Wirklich> teurer ist er ja auch erst, wenn du davon einige 10000 Stück kaufen> willst.
Wegen dem Verbrauch. Der tiny85 braucht 10µA und der tiny13 4µA.
Trotzdem unverständlich, warum ein ATtiny25 damit mehr Energie
verbrauchen sollte als ein 13er. Die Kurven für den typischen
Stromverbrauch sind bei beiden ziemlich ähnlich.
Ich habe in einer vergleichbaren Anwendung einen ATmega128RFA1 laufen,
der braucht im Mittel irgendwas um 1 µA herum. Ist ein Wettersensor,
der wie bei dir jede Sekunde vom Watchdog aufwacht, und dann aller
5 Minuten eine Messung eines SHT-21 anwirft und das Ergebnis zur
Basisstation innerhalb der Wohnung funkt.
Matthias S. schrieb:> Dort kann man beide Timer Module, das USI und den ADC abschalten.
Interessiert aber nur im idle oder active mode.
Wenn ich den (offenbar) Arduino-Code richtig deute, dümpelt der aber
möglicherweise wirklich nur im idle mode herum, statt den Controller
ordentlich schlafen zu legen (power-down mode).
Dort ist natürlich noch viel Einsparungspotenzial.
Matthias S. schrieb:> Beim Tiny25/45/85 lohnt es sich, mal das PRR Register anzuschauen. Dort> kann man beide Timer Module, das USI und den ADC abschalten.
Was m.E. kaum was ausmacht, messbar ja, aber Auswirkungen z.B. beim
Batteriebetrieb vernachlässigbar. Ob der jetzt 5µA mehr verbraucht das
juckt doch keinen, da hat z.B. die Temperatur bei Outdooreinsatz viel
grösseren Einfluss.
Eventuell könnte man es mit dem Brownoutdetector versuchen. Den sollte
man eigentlich vor dem Schlafmodus deaktivieren können damit er nicht
unnötig Energie verpulvert.
Da der Brownout nur 2,7 Volt erkennen kann, könnte man mit einer Diode
die gleichzeitig noch als Verpolschutz dient auf ~ 3,0 Volt kommen.
Das ist allerdings nur graue Theorie.
Stefan A. schrieb:> Wegen dem Verbrauch. Der tiny85 braucht 10µA und der tiny13 4µA.
Was soll denn das Programm machen?
Wenn da LEDs dranhängen, sollten die 10µA mehr doch nichts ausmachen.
Und ansonsten gehe in Power-Down ohne Watchdog (0,5µA @5V) und laß ihn
per PCINT aufwachen.
Mir ist gerade noch was aufgefallen. Von den 5 verfügbaren Pins werden 4
dazu verwendet die Led's zu steuern, und zwar werden alle gleichzeitig
ein bzw. ausgeschaltet. Das heißt man könnte die 4 Led's mit einem
Transistor schalten und hätte somit noch genügend Pins für eine ADC
Messung frei.
Das Blinken sollte wenigstens mit dem Watchdog realisiert werden, der
delay kostet nur unnötig Energie.
Holger L. schrieb:> Mir ist gerade noch was aufgefallen. Von den 5 verfügbaren Pins> werden 4> dazu verwendet die Led's zu steuern, und zwar werden alle gleichzeitig> ein bzw. ausgeschaltet. Das heißt man könnte die 4 Led's mit einem> Transistor schalten und hätte somit noch genügend Pins für eine ADC> Messung frei.>> Das Blinken sollte wenigstens mit dem Watchdog realisiert werden, der> delay kostet nur unnötig Energie.
Ich habe noch ein ADC pin frei, verwende nur 3 Leds.
Ich wollte so wenig wie möglich extra teile.
Weis leider nicht wie das mit dem WDT geht.
Wenn die Bedingung das es Blinken soll erfüllt ist wird der Watchdog auf
0,25 Sekunden konfiguriert, die Leds werden eingeschaltet.
In der loop Schleife wird vorher geprüft ob die entsprechenden LED Pins
high sind, wenn das der Fall ist wird der Watchdog wider auf 2 Sekunden
konfiguriert, die Led's werden ausgeschaltet.
Allerdings ergeben sich dadurch andere Zeiten, da eine Watchdogauslösung
die Counter statt nach 2 Sekunen nach 0,25 Sekunden erhöht, die könnte
man allerdings um eins erniedrigen wodurch sich dann nur noch ein plus
von 0,25 Sekunden ergeben würde.
Stefan A. schrieb:> Ich habe noch ein ADC pin frei, verwende nur 3 Leds.
Falls Du eine der LEDs an einem ADC-tauglichen Pin hast, dann kannst Du
auch indirekt die Akkuspannung ermitteln.
Dazu schaltest Du den Pin mit der LED auf Eingang und auf H. Der interne
PullUp-Widerstand wird aktiv, es fließt ein sehr geringer Strom durch
die LED. Der ist so gering, dass der Spannungsabfall am LED-Widerstand
vernachlässigbar klein ist.
Nun misst Du die Spannung, die an der LED (incl. Vorwiderstand) abfällt
gegen Vcc als Referenz. Da dürftest Du je nach LED-Typ etwa 1,8 V bis 3
V erwarten.
Und schon hast Du genau das, was Du mit der Bandgap-Spannung machen
wolltest, nur mit etwas mehr Auflösung, da die Spannung an der LED höher
ist.
Und es kostet Dich nichts, denn die LED ist ja schon da und kann in
einem kurzen Teil der Dunkelphase mal nebenher als Spannungsreferenz
missbraucht werden.
;-)
Natürlich gelten weiterhin alle bereits gegebenen Hinweise zum
Sleepmode.
...