• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Reaktives Licht mit Atmel AVR

Dr.Schmock

Geocacher
Ich hatte vergessen, dazuzusagen, dass ich das Datenblatt vom Tiny24 benutzt habe. Dort steht auch dieser Satz mit "If a lower resolution than 10 bits is needed..." und hinten bei den El.Characteristics diese Tabelle:

Absolute accuracy

Condition ----------------------------- Typ -------------Max ---------------- Unit
-------------------------------------------------------------------------------------------------------------------------
VREF = 4V, VCC = 4V, ---------- 2.0--------------- TBD----------------- LSB
ADC clock = 200 kHz

VREF = 4V, VCC = 4V, -----------2.5 -------------- TBD --------------- LSB
ADC clock = 1 MHz

VREF = 4V, VCC = 4V, ---------- 1.5----------------- TBD ----------------- LSB
ADC clock = 200 kHz
Noise Reduction Mode

VREF = 4V, VCC = 4V, ---------- 2.0 --------------- TBD --------------- LSB
ADC clock = 1 MHz
Noise Reduction Mode

Was TBD heißt, weiß ich nicht

Bei einer Frequenz von 500kHz (Systemtakt 1MHz) dürfte die Genauigkeit da eigentlich ausreichen
 

stonewood

Geowizard
Dr.Schmock schrieb:
Wenn man auf 500kHz erhöht, lässt sich einiges an Strom sparen und es "kostet" lediglich ein halbes Bit an Genauigkeit (DB: Electrical Characteristics).
Hmm. Das kostet dann aber die Kleinigkeit eines aktivierten Oszillators bei 4,8 oder 9,6 Mhz. Mit 128 Khz schwingt da nur der Watchdog-Timer.

Wenigstens ist der Oszillator dann im Powerdown schon mal wieder aus ...

Ach ja, das mit dem ADC-Takt gibts auch im Tiny13:
14.5 Prescaling and Conversion Timing
By default, the successive approximation circuitry requires an input clock frequency between 50
kHz and 200 kHz to get maximum resolution. If a lower resolution than 10 bits is needed, the
input clock frequency to the ADC can be higher than 200 kHz to get a higher sample rate
18.7 ADC Characteristics
Table 18-7. ADC Characteristics, Single Ended Channels. TA = -40°C - 85°C
Code:
Symbol Parameter           Condition Min Typ Max  Units
       Clock Frequency               50      1000 kHz
 

thomas_st

Geowizard
Dr.Schmock schrieb:
Ich hatte vergessen, dazuzusagen, dass ich das Datenblatt vom Tiny24 benutzt habe. Dort steht auch dieser Satz mit "If a lower resolution than 10 bits is needed..." und hinten bei den El.Characteristics diese Tabelle:
Mmm, ich muss vorhin blind gewesen sein - diese Tabelle gibt es auch beim Tiny 13 (ich habe sogar eine Zeile daraus zitiert :???: ):

Absolute accuracy (Including INL, DNL, and Quantization, Gain and Offset Errors):
VREF = 4V, VCC = 4V,
ADC clock = 200 kHz ........................ 2 LSB
VREF = 4V, VCC = 4V
ADC clock = 1 MHz ........................ 3 LSB
VREF = 4V, VCC = 4V
ADC clock = 200 kHz
Noise Reduction Mode ........................ 1.5 LSB
VREF = 4V, VCC = 4V,
ADC clock = 1 MHz
Noise Reduction Mode ........................ 2.5 LSB

-> also ein Bit weniger bei 1MHz im Vergleich zu 200kHz

Sollte wirklich ausreichen.

stonewood schrieb:
Hmm. Das kostet dann aber die Kleinigkeit eines aktivierten Oszillators bei 4,8 oder 9,6 Mhz. Mit 128 Khz schwingt da nur der Watchdog-Timer.
Schaue mal in den Nachbar-Thread um CLKPR-Register. Dort hatte ich bei 128kHz (WD-Oszil.) 3,7µA im Tagmodus und 6,6µA im Nachtmodus gemessen, während der Tiny bei 1,2MHz (9,6MHz Oszil / 8 ) am Tag 4,1µA und in der Nacht 5,7µA "schluckt" - ich sehe da keine Unterschiede zwischen 128kHz oder 1,2MHz

Viele Grüße,
Thomas(_st)
 

gomerffm

Geocacher
thomas_st schrieb:
schnasemann schrieb:
Warum hat ein einfaches Einfügen der Watchdog-Routine zwischen Entladen und Spannungsmessung nicht zum Erfolg geführt?
Würde mich auch interessieren - bzw. "was hat nicht funktioniert".
Kann den Status (ob Tag oder Nachtmodus) nur über die Stromaufnahme bestimmen.
Wenn ich den WD aktiviere steigt die Stromaufnahme eventuell einmalig kurzfristig (vielleicht auch ein Meßfehler?) an (geht also mutmaßlich in den Nachtmodus) um anschließend im Tagmodus zu verharren :(
Der Watchdog schaltet bei Powerdown auch den ADC ab. Kann nur spekulieren.. Weiß nicht was genau am Eingangspin des ADC passiert, wenn er neu startet. Ein retrograder, kurzzeitiger Spannungsimpuls (hat evtl. auch was mit DIDR0 zu tun) könnte ja schon genug Ladung auf die LED bringen, damit der Tiny glaubt, dass es hell ist?
 

thomas_st

Geowizard
gomerffm schrieb:
Kann den Status (ob Tag oder Nachtmodus) nur über die Stromaufnahme bestimmen.
Um zu testen, ob er im Tag- oder Nachtmodus ist, kannst Du ja einen Outputpin nutzen: Tagmodus = GND / Nachtmodus = Vcc oder so.

gomerffm schrieb:
Wenn ich den WD aktiviere steigt die Stromaufnahme eventuell einmalig kurzfristig (vielleicht auch ein Meßfehler?) an (geht also mutmaßlich in den Nachtmodus) um anschließend im Tagmodus zu verharren :(
Mit dem Oszi gemessen?

gomerffm schrieb:
Der Watchdog schaltet bei Powerdown auch den ADC ab.
Jep. Das ist richtig. Daher auch der Messablauf: LED laden -> WD aktivieren und 16ms warten -> ADC an -> Messen

gomerffm schrieb:
Kann nur spekulieren.. Weiß nicht was genau am Eingangspin des ADC passiert, wenn er neu startet.
Normalerweise sollten IO-Pins im Reset auf Eingang (also hochohmig) gehen und solange so bleiben, bis sie per Programm auf Ausgang geschaltet werden. Ein Spannungsimpuls an einem Eingangspin während des Resets wäre IMO ein Designfehler - es könnte ja mit diesem Pin eine Aktion ausgelöst werden, die dann bei jedem Reset anlaufen würde.

gomerffm schrieb:
Ein retrograder, kurzzeitiger Spannungsimpuls (hat evtl. auch was mit DIDR0 zu tun) könnte ja schon genug Ladung auf die LED bringen, damit der Tiny glaubt, dass es hell ist?
DIDR0 deaktiviert nur den digitalen Eingangspuffer - der Pin kann weiter als Eingang fungieren, nur dass die (digitale) Abfrage immer 0 liefert.

Viele Grüße,
Thomas(_st)
 

gomerffm

Geocacher
thomas_st schrieb:
gomerffm schrieb:
Der Watchdog schaltet bei Powerdown auch den ADC ab.
Jep. Das ist richtig. Daher auch der Messablauf: LED laden -> WD aktivieren und 16ms warten -> ADC an -> Messen
Hab gerade den Messablauf wie o.g. allerdings ohne WD mal ausgestestet. Bin mir jetzt ziemlich sicher, dass es beim Einschalten des ADC -sicherlich extrem hochohmig- zu Ladungsverschiebungen aus dem Eingangspin auf die LED kommt. Das sorgt dann dafür, dass sich der ADC selbst vera... und dauernd "hell" erkennt. Habe dann einen 10MOhm Widerstand parallel zur LED geschaltet mit dem Ergebnis, dass das Lichtchen in ein Dauerblinken übergegangen ist. Dies Phänomen ist nur so zu erklären: Bei abgeschaltetem ADC wird die LED vollständig "entladen". Beim Einschalten des ADC entsteht die postulierte Ladung am Eingangspin, welche auf die LED verschoben wird. Die beiden Vorgänge werden als Wechsel von "dunkel" nach "hell" erkannt und das Blinken wird ausgelöst.
Wie auch immer... mit 5µA bei Tag und ca. 35µA bei Nacht, kommt man immerhin auf eine theoretische Betriebsdauer von >5 Jahren bei Verwendung alkalischer AAA-Zellen (1000 mAh angenommen), > 2,5 Jahre mit AAAA-Zellen (500 mAh) aus einem geschlachteten 9V Block und mehr als1 Jahr bei Verwendung einer CR 2032 Knopfzelle (200 mAh).
 

thomas_st

Geowizard
gomerffm schrieb:
Bei abgeschaltetem ADC wird die LED vollständig "entladen". Beim Einschalten des ADC entsteht die postulierte Ladung am Eingangspin, welche auf die LED verschoben wird.
Gerade nochmal in das DB geschaut - irgendwie passt da etwas nicht: einerseits wird von einem Eingangswiderstand des ADC von 100 MOhm gesprochen andererseits wird ein "Input Leakage Current I/O Pin" von +/- 1µA angegeben. Letzteres bedeutet bei 3V einen Eingangswiderstand von 3 MOhm - das ist ja schonmal eine ganz andere Welt. Wann jetzt was relevant ist oder ob beides gleichzeitig wirksam ist (und das DB inkonsistent ist) habe ich nicht überprüft.

Viele Grüße,
Thomas(_st)
 

gomerffm

Geocacher
$regfile = "ATtiny13.DAT"
$crystal = 128000 'Reale Frequenz des internen 128kHz-Oszillators
$hwstack = 10 ' default use 32 for the hardware stack
$swstack = 10 'default use 10 for the SW stack
$framesize = 10 'default use 40 for the frame

Stop Ac

Config Portb = &B11101111 'Portb.4 auf 'Eingang' schalten
Portb = &B00000000 'keine Pullups zuschalten

Wdtcr = &B11010100 'Watchdog auf 250ms einstellen
Enable Interrupts

Config Adc = Single , Prescaler = Auto , Reference = Internal 'referenzspannung Des Adc Auf "Internal" = 1,1 V

Dim Wert1 As Word
Dim Wert2 As Word
Dim Schwelle As Word

Dim Anzahl As Byte
Dim Impuls As Byte

Wert1 = 1023 'Wert 1 vor der ersten Messung definieren

Do

Wdtcr = &B11010100 'Watchdog auf 250ms einstellen
Reset Watchdog
Powerdown

Start Adc

Config Portb.4 = Output 'LED "entladen"
Portb.4 = 0

Waitus 1500

Config Portb.4 = Input
Portb.4 = 0

cbi adcsra,7 'ADEN = 0

Wdtcr = &B11010000 'Watchdog auf 16ms einstellen
Reset Watchdog
Powerdown

sbi adcsra,7 'ADEN = 1

Wert2 = Getadc(2) 'Spannung der LED messen

Stop Adc

Schwelle = Wert1 + 10 'Schwelle (10 heller als Signal)festlegen, je kleiner so empfindlicher

If Wert1 < 50 And Wert2 > Schwelle Then 'Dunkelschwelle (30) festlegen, je kleiner umso dunkler
Gosub Blitz
End If

If Wert1 > 49 And Wert2 > 49 Then 'bei Tag oder Dauerlicht Watchdog x n aktivieren

Wdtcr = &B11110001 'Watchdog auf 8s einstellen
Reset Watchdog
Powerdown

End If

Wert1 = Wert2 'Wert2 nach Wert1 verschieben

Loop

Blitz: 'LED getaktet blinken lassen

Config Portb.4 = Output
Portb.4 = 0

For Anzahl = 1 To 5

For Impuls = 1 To 20
Portb.4 = 1
Waitms 2
Portb.4 = 0
Waitms 8
Next Impuls

Waitms 200

Next Anzahl

Return
End


Habe es geschafft, die Stromaufnahme meiner LED-only-Variante nochmals deutlich zu senken.
Nachdem es mir nicht gelungen ist, unter Bascom die für den Betrieb des ADC notwendigen Register manuell (anlaog dem Vorgehen zur Konfiguartion des Watchdogregisters) zu setzen, so ist es doch möglich, bei konfiguriertem und eingeschaltetem ADC, das ADEN-Bit mittels sbi und cbi direkt zu manipulieren :D
Weiterhin wurde die Zeit, die der LED zur Erzeugung der Meßspannung bleibt via WD definiert.
Dann wurde die Stomaufnahme mit der in einem anderen Fred beschriebenen Kondensatormethode bestimmt.
Habe einen 2200µF Kondensator verwendet und bei einer Meßzeit von exakt 60 s folgende Werte erhalten:

Tag: 2,937V - 2,797V => 308µAs => 5,13 µA
Nacht: 2,937V - 2,745V => 422µAs => 7,03µA

Denke mal,viel mehr wird sich da kaum optimieren lassen. :joint:
 

huzzel

Geowizard
gomerffm schrieb:
Denke mal,viel mehr wird sich da kaum optimieren lassen. :joint:
Setz mal die Frequenz rauf.
Code:
$crystal = 128000 'Reale Frequenz des internen 128kHz-Oszillators
scheint ja nicht die stromsparendste Einstellung zu sein.
 

gomerffm

Geocacher
huzzel schrieb:
gomerffm schrieb:
Denke mal,viel mehr wird sich da kaum optimieren lassen. :joint:
Setz mal die Frequenz rauf.
Code:
$crystal = 128000 'Reale Frequenz des internen 128kHz-Oszillators
scheint ja nicht die stromsparendste Einstellung zu sein.

128000 Hz ist in diesem Fall die stromsparendste Einstellung :silvester2_cool:
Hab andere Frequenzen auch durchgemessen:
128 khz Tag: 5,1µA; Nacht 7µA :up:
4,8 Mhz Tag: 5,4µA; Nacht 16µA :schockiert:
9,6 Mhz Tag: 5,6µA; Nacht da bricht die Spannung über dem Kondensator schon nach ca 20 s auf 0.9V zusammen.

Das liegt sicher daran, dass bei diesem Programm zumindest eine Zeit (1,5ms) nicht über den Watchdog realisiert wird.
 

schnasemann

Geocacher
na, dann sind so langsam wirklich alle Vorschläge umgesetzt. Ich hätte aber, wie huzzel auch erwartet, dass ein höherer Takt !im Betrieb! für schnellere AD-Wandlung sorgt und somit Strom spart. Beim Schlafenlegen muss dieser Oszillator dann natürlich wieder ausgeschaltet werden und auf den WD-Oszillator umgeschwenkt werden.
Bringt das wirklich nichts?

Ansonsten werde ich so langsam wirklich mal eine Menge bei Frau Reichelt bestellen, wenn, dann mache ich mir die Arbeit nur einmal (BTW: Habe noch ca. 80 Petlinge daheim :D ).
 

thomas_st

Geowizard
gomerffm schrieb:
[...]
Config Portb.4 = Output 'LED "entladen"
Portb.4 = 0

Waitus 1500

Config Portb.4 = Input
Portb.4 = 0
Das zweite Portb.4 = 0 könnte doch eigentlich wegfallen - oder sehe ich das falsch.

gomerffm schrieb:
cbi adcsra,7 'ADEN = 0
Warum schaltest Du den ADC hier nochmal aus? Der ist doch schon ausgeschaltet.

gomerffm schrieb:
Tag: 2,937V - 2,797V => 308µAs => 5,13 µA
Nacht: 2,937V - 2,745V => 422µAs => 7,03µA
Das sieht doch gut aus :^^:

gomerffm schrieb:
128000 Hz ist in diesem Fall die stromsparendste Einstellung :silvester2_cool:
[...]
Das liegt sicher daran, dass bei diesem Programm zumindest eine Zeit (1,5ms) nicht über den Watchdog realisiert wird.
Komisch. Das steht ja nun schon etwas im Widerspruch zu huzzels und meinen Messungen. Was anders als dieses 1,5ms fallen mir nicht ein *grübel*

Viele Grüße,
Thomas(_st)
 

gomerffm

Geocacher
thomas_st schrieb:
gomerffm schrieb:
[...]
Config Portb.4 = Output 'LED "entladen"
Portb.4 = 0

Waitus 1500

Config Portb.4 = Input
Portb.4 = 0
Das zweite Portb.4 = 0 könnte doch eigentlich wegfallen - oder sehe ich das falsch.

Ja, kann gut sein... wenn am Pin sobald er auf Input geschaltet wird, der Pullup sicher abgeschaltet ist..

thomas_st schrieb:
gomerffm schrieb:
cbi adcsra,7 'ADEN = 0
Warum schaltest Du den ADC hier nochmal aus? Der ist doch schon ausgeschaltet.

Nein, der ADC wird vor der LED-Entladung und Pinumschaltung auf Input aktiviert und dann via cbi schlafen gelegt. Auf cbi zu verzichten und den Tiny einfach via WD schlafen zu schicken, hat bei diversen Programmierversuchen nicht geklappt. Ebensowenig war es möglich, den ADC erst nach der Pinumschaltung mit Start ADC einzuschalten, das führte dazu, dass die Schaltung nie in den Nachtmodus ging.

thomas_st schrieb:
gomerffm schrieb:
Tag: 2,937V - 2,797V => 308µAs => 5,13 µA
Nacht: 2,937V - 2,745V => 422µAs => 7,03µA
Das sieht doch gut aus :^^:

:D Die gerade mal 7µA bei Nacht find ich auch sehr akzeptabel Dx
Kann den Tiny wenns hell ist, z.B. nur alle 32 oder 40 Sekunden nachschauen lassen, ob schon wieder die Dunkelheit hereingebrochen ist.. Spart evtl. nochmal 0,5µA :p

thomas_st schrieb:
gomerffm schrieb:
128000 Hz ist in diesem Fall die stromsparendste Einstellung :silvester2_cool:
[...]
Das liegt sicher daran, dass bei diesem Programm zumindest eine Zeit (1,5ms) nicht über den Watchdog realisiert wird.
Komisch. Das steht ja nun schon etwas im Widerspruch zu huzzels und meinen Messungen. Was anders als dieses 1,5ms fallen mir nicht ein *grübel*
Denke auch, dass es die 1,5ms sind, die durch die wait-Anweisung realisiert werden. Wenn man WD-lastiger programmieren könnte, würde es bestimmt mit steigender Taktfrequenz auch hier Einsparungspotential geben.
 

Dr.Schmock

Geocacher
Was bedeutet denn der Ausdruck
"Config Adc = Single , Prescaler = Auto , ..."?
...also wie wird der Presscaler des ADC berechnet?

Wenn die ADC-Frequenz auch bei 1MHz (und mehr) bei nur <100kHz gehalten wird durch diese "auto"-Einstellung, dann wäre da noch Einsparpotential bei hohen Frequenzen.
 

schnasemann

Geocacher
gomerffm schrieb:
:D Die gerade mal 7µA bei Nacht find ich auch sehr akzeptabel Dx
Kann den Tiny wenns hell ist, z.B. nur alle 32 oder 40 Sekunden nachschauen lassen, ob schon wieder die Dunkelheit hereingebrochen ist.. Spart evtl. nochmal 0,5µA :p

Mache einen Zähler, der am Tag auf 5 zählt. Erst bei erreichen der 5 wird die Routine mit dem ADC angesprungen und der Zähler zurückgesetzt, sonst nur Zähler inkrementiert und gleich weiter geschlafen.
 

huzzel

Geowizard
Ich habe gestern mal kurz ein bissel was ausprobiert (Kondensator-Methode):
Tiny mit größter Frequenz betrieben, gemessen: 5,7 µA
Tiny vor dem Schlafenlegen mit
Code:
config clockdiv=256
ausgebremst und nach dem Schlafen mit
Code:
config clockdiv=1
wieder in den Hintern getreten :D , gemessen: 6,3 µA :/

Das bringt wohl nicht wirklich was.

Nächster Versuch mit
Code:
config clockdiv=1
vor
Code:
start adc
und
Code:
config clockdiv=256
nach
Code:
stop adc
, gemessen: 7,2µA

Auch nicht besser.

Also so wirklich viel Potenzial sehe ich jetzt nicht mehr bei
Code:
config clockdiv
. Oder hat wer noch eine Idee?
 

schnasemann

Geocacher
gomerffm schrieb:
Next Impuls

Waitms 200

Next Anzahl

200ms lassen sich auch da wieder durch einen WD realisieren. Sollte noch ein Quentchen bringen. Dann sollten wir aber aufhören, nicht, dass man nach einem Jahr immer wieder hin muss, und den Akku auswechseln muss, weil er sonst überladen wird :D
 

thomas_st

Geowizard
Dr.Schmock schrieb:
Was bedeutet denn der Ausdruck
"Config Adc = Single , Prescaler = Auto , ..."?
...also wie wird der Presscaler des ADC berechnet?
Ich spekuliere mal: der Prescaler wird von Bascom so eingestellt, das der ADC-Takt im Bereich zwischen 50 und 200kHz liegt.

huzzel schrieb:
Ich habe gestern mal kurz ein bissel was ausprobiert (Kondensator-Methode):
Tiny mit größter Frequenz betrieben, gemessen: 5,7 µA
Was mir noch einfällt: hast Du den Strom berücksichtigt, der über das DMM fließt. Je nachdem ob das DMM einen Eingangswiderstand von 1M oder 10M hat, fließen über dieses nämlich auch noch mal 3 bzw. 0,3µA

huzzel schrieb:
Also so wirklich viel Potenzial sehe ich jetzt nicht mehr bei
Code:
config clockdiv
. Oder hat wer noch eine Idee?
Wer war es denn, der darauf hinwies, dass wir uns schon sehr nahe an der theoretischen Grenze befinden - der WD braucht ja selbst ca. 4µA.

Viele Grüße,
Thomas(_st)
 

huzzel

Geowizard
thomas_st schrieb:
Was mir noch einfällt: hast Du den Strom berücksichtigt, der über das DMM fließt. Je nachdem ob das DMM einen Eingangswiderstand von 1M oder 10M hat, fließen über dieses nämlich auch noch mal 3 bzw. 0,3µA
Ist berücksichtigt. Ohne IC fließen ca. 0,6 µA durch die Schaltung.
 
Oben