• 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

schnasemann

Geocacher
Hallo, Ihr besser im Bascom vertrauten, was ist an untenstehendem Programm falsch? Mein RL blinkt schön kurz über den gesamten Tag, entscheidet dann irgendwann, dass es nun Nacht sei (der Wert stimmt also), um danach quasi dauernd hintereinander auszulösen. Ohne dass da was wäre.

$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
Const Dunkelwert = 20 ' Wert, ab dem Nacht erkannt wird
Const Hub = 20
Wert1 = 800 '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 + Hub 'Schwelle (10 heller als Signal)festlegen, je kleiner so empfindlicher

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

If Wert1 >= Dunkelwert And Wert2 >= Dunkelwert Then 'bei Tag oder Dauerlicht Watchdog x n aktivieren
Config Portb.4 = Output
Portb.4 = 1 ' einmal blitzen als Anzeige für Tag
Waitms 2
Portb.4 = 0
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 20
'For Impuls = 1 To 20
Portb.4 = 1
Waitms 10
Portb.4 = 0
Waitms 240

Next Anzahl

Return
End
 

Teddy-Teufel

Geoguru
schnasemann schrieb:
Hallo, Ihr besser im Bascom vertrauten, was ist an untenstehendem Programm falsch?
:kopfwand: Meiner denkt es sei immer Tag und wacht überhaupt nicht auf. Wech inde Eck mit denn Mäss. Habe unterdessen 0815 LED's rangehängt, damit funktioniert es aber die Reichweite ist kleiner 50m und die Erkennbarkeit ist auch nicht zufriedenstellend. Da nehme ich lieber wieder die LED-Only von Ralph, die ist wenigstens zuverlässig :p . So jetzt ist erstmal Auszeit. :^^:
 

gomerffm

Geocacher
@ schnasemann: Was für eine LED verwendest Du denn? Funktionirt Dein Lichtchen mit der "Originalsoftware" von Seite 129 des Fred?

Grüße
gomerffm
 

schnasemann

Geocacher
gomerffm schrieb:
@ schnasemann: Was für eine LED verwendest Du denn? Funktionirt Dein Lichtchen mit der "Originalsoftware" von Seite 129 des Fred?

Grüße
gomerffm
Ich verwende eine ultrahelle LED, die auf den schönen Namen LS5436 hört. Die Originalsoftware macht quasi das gleiche. Ich will nicht so ein Geflacker, sondern ein echtes Blinken und ich wollte eine optische Anzeige, ob ich im Nacht- oder Tagesmodus bin. Wahrscheinlich werde ich einfach den Hub nochmal größer nehmen müssen, aber das geht auf die Empfindlichkeit und somit Reichweite.
Das Programm habe ich teilweise abgeändert, weil ich manches nicht verstanden habe. Warum wird z.B. der Wert1 zunächst auf 1023 gesetzt? Spätestens nach der Addition ist dann der Wert "Schwelle" für die Katz, oder? Da sollten dann 9 drin stehen.
 

gomerffm

Geocacher
schnasemann schrieb:
Ich verwende eine ultrahelle LED, die auf den schönen Namen LS5436 hört. Die Originalsoftware macht quasi das gleiche. Ich will nicht so ein Geflacker, sondern ein echtes Blinken und ich wollte eine optische Anzeige, ob ich im Nacht- oder Tagesmodus bin. Wahrscheinlich werde ich einfach den Hub nochmal größer nehmen müssen, aber das geht auf die Empfindlichkeit und somit Reichweite.

Habe gerade eben dein Listing compiliert und auf nen Tiny aufgespielt.
Tiny + LED aufs Steckbrett und 3V Batteriespannung dran. Funktioniert einwandfrei! Keine Selbstauslösung in der halbdunklen Küche oder dem ganzdunklen Keller.
Denke, es ist ein Problem der LED. Habe auch ein superhelles Teil (Typenbezeichnung Fehlanzeige) mit allerdings nur 1000 oder 2000 mcd verwendet.

schnasemann schrieb:
Das Programm habe ich teilweise abgeändert, weil ich manches nicht verstanden habe. Warum wird z.B. der Wert1 zunächst auf 1023 gesetzt? Spätestens nach der Addition ist dann der Wert "Schwelle" für die Katz, oder? Da sollten dann 9 drin stehen.
Da haste recht, aber nicht ganz.
1023+10=1033 da ja nicht das ADC-Register, sondern eine Variable so definiert wird, ist es dann quasi so hell, wie es gar nicht werden kann. Wollte der Variablen einen Wert zuweisen, was man streng genommen wahrscheinlich gar nicht muss.
 

schnasemann

Geocacher
habe es letzte Nacht nochmal angeschaut. Muster mit einer anderen LED klappt besser. Nur habe ich auch in dunkelster Nacht (gut, ich finde da noch zum Klo) meine superhelle LED immer noch "Tag" blinken sehen, muss wohl mal einen Taster dranmachen und mir den Wert ins EEPROM schreiben lassen, der gerade gemessen wird.
Oder wie ermittelt Ihr den richtigen Wert für Dunkelwert und Schwelle?
 

huzzel

Geowizard
Den LDR-Wert alle (grobe) Stunde ins EEPROM schreiben lassen ;)
Watchdog auf 8 Sekunden, alle 450 Runden einen Wert schreiben.
 

Kappler

Geowizard
Ich habe mir dazu eine kleine Routine eingebaut, die mir den ausgelesenen ADC-Wert "zublinkt".

Alle Ziffern einzeln, mit einer Pause dazwischen. Immer ein Blitz mehr, damit auch die "0" erkannt wird.
Also für 1023:
2 Blitze - Pause - 1 Blitz - Pause - 3 Blitze - Pause - 4 Blitze - lange Pause

Funktioniert ganz gut, man muss halt ewas zählen :D
 

gomerffm

Geocacher
schnasemann schrieb:
habe es letzte Nacht nochmal angeschaut. Muster mit einer anderen LED klappt besser. Nur habe ich auch in dunkelster Nacht (gut, ich finde da noch zum Klo) meine superhelle LED immer noch "Tag" blinken sehen, muss wohl mal einen Taster dranmachen und mir den Wert ins EEPROM schreiben lassen, der gerade gemessen wird.
Oder wie ermittelt Ihr den richtigen Wert für Dunkelwert und Schwelle?

Hatte ursprünglich das ganze mal auf nen Tiny24 programmiert, der die Werte auf einem LCD ausgegeben hat.
Habe später feststellen dürfen, dass der Eingang des Tiny13 offensichtlich noch hochohmiger ist.
Die Variante, den Wert "zublinken" zu lassen ist doch sehr elegant.
Im schlimmsten Fall kann man ja den Dunkelwert stufenweise hochsetzen und schauen, wann es "Nacht" wird.
 

schnasemann

Geocacher
habe nun zwei unterschiedliche LEDs an meine RLs gehängt und die werden die nächsten 24 Stunden Minimum und Maximum messen und minütlich in das EEPROM schreiben. Bin mal gespannt, welcher Unterschied bei rauskommt.

Human eye sensitivity Fototransistor habe ich auch 5 Muster bekommen, einen hat huzzel schon angeboten bekommen, weil man so einen Realtest machen könnte. Es würde mich freuen, wenn wir gemeinsam einen erschwinglichen Sensor finden könnten, der auch bei LED-Talas hübsch empfindlich ist. Huzzels Machwerke sind zu schade, als dass sie nur so selten gefunden werden :D
Soviel zum Stand der Dinge
 

thomas_st

Geowizard
schnasemann schrieb:
habe nun zwei unterschiedliche LEDs an meine RLs gehängt und die werden die nächsten 24 Stunden Minimum und Maximum messen und minütlich in das EEPROM schreiben. Bin mal gespannt, welcher Unterschied bei rauskommt.
Du hast einen Tiny 13 ? Der hat 64 Bytes EEPROM - das reicht nicht lange :/ Oder Max und Min über den ganzen Tag - das könnte interessant werden. Bei der LDR-Variante ging das bei mir in der Wohnung von ca. 130 (Nacht) bis 1023 (Tag).


Viele Grüße,
Thomas(_st)
 

schnasemann

Geocacher
ich logge nur Minimum und Maximum, auch die 100Tsd Zyklen sollte ich somit noch nicht überschritten haben. Es geht mir nur darum, mal den wirklichen Unterschied zu messen.
Die Woche werde ich dann mal einen mit LDR, einen mit SFH300 und einen mit meinem Muster-human-eye aufbauen und auch mal loggen lassen.
Wie hast Du Deine schöne Datenloggerei gemacht? Rechner nebendran? Du hast schon recht, mit 64Byte ist da nicht viel. Aber mehr als Min und Max interessieren erstmal auch nicht für den Dunkelwert.
 

huzzel

Geowizard
Ich glaub bei meinem Versuch waren die Dunkelwerte 7. Weiß ich aber leider nicht mehr genau, weil ich da die Hellwerte gemessen habe ;) und die waren so bei 1000 - 1023.
 

Teddy-Teufel

Geoguru
thomas_st schrieb:

Hallo ihr "Wissenschaftler",
könntet ihr das hier bitte so schreiben, daß wir "Doofen" das auch noch verstehen?
Eigentlich ist das hier doch für Alle, die sich für RL's interessieren. Was sollen wir da mit solchen schönen Diagrammen. Sieht zwar gut aus und macht Mühe aber ...
Für mich ist bis jetzt hier rausgekommen, daß LED's mit >1000 mcd bei der neuen LED-Only-Variante, als ungeeignet erscheinen, schade!
 

thomas_st

Geowizard
schnasemann schrieb:
ich logge nur Minimum und Maximum, auch die 100Tsd Zyklen sollte ich somit noch nicht überschritten haben. Es geht mir nur darum, mal den wirklichen Unterschied zu messen.
Wenn Du minütig loggst? Kein Problem. :D Ich würde vorschlagen, auch die Änderungen des Messwertes zwischen zwei Messungen mit zu protokollieren - also der Wert, der im Endeffekt zum Auslösen führen würde. Wenn Du sicherstellen kannst, das das RL in dieser Nacht/Tag nicht auslöst, hättest Du damit einen experimentell gesicherten Wert für die Auslöseschwelle.

schnasemann schrieb:
Wie hast Du Deine schöne Datenloggerei gemacht? Rechner nebendran?
Jep. Das Ganze ist ein "Abfallprodukt" des geteilten Reaktivlichtes. Dieses hat den aktuellen Wert des ADCs per RFM12 gesendet; dann noch einen Mega48, der die Funksignale empfängt und per serieller Schnittstelle an den Rechner weit ergibt und fertig idt der Datenlogger. Damals war letzteres noch auf einem Steckbrett aufgebaut; inzwischen habe ich mir einen solchen Funk zu COM/USB Wandler auf einer Lochrasterplatine "fest" aufgebaut. Im Rechner wird dann protokolliert: bei ca. 150.000 Messungen und einer 5,4MByte großen Datei auch nicht mehr viel anders möglich.

huzzel schrieb:
Ich glaub bei meinem Versuch waren die Dunkelwerte 7.
Das ist sehr niedrig :D So weit runter bin ich nie gekommen.

Teddy-Teufel schrieb:
Hallo ihr "Wissenschaftler",
:D

Teddy-Teufel schrieb:
könntet ihr das hier bitte so schreiben, daß wir "Doofen" das auch noch verstehen?
Eigentlich ist das hier doch für Alle, die sich für RL's interessieren.
Sorry. Ich dachte es erklärt sich von selbst. Aber da die Beschriftung der X-Achse fehlt, könnte es etwas undurchsichtig sein.
Zunächst, das ganze ist die LDR-Variante - also nichts LED-only. Dargestellt ist der vom ADC gemesse Wert über der Uhrzeit: von 12 Uhr mittags bis 0 Uhr nachts. Man kann gut erkennen, dass am Tag der Wert bei 1023 liegt und dann zwischen 17 und 18 Uhr auf ca. 130 abfällt. Bei Werten des ADC > 900 ist der RL im Tagmodus und inaktiv - hierbei wurde der Wert alle ca. 9s ermittelt (so genau ist der WD-Timer nicht :D ) Sobald der Wert des ADCs < 900 wird, geht das RL in den aktiven Nachtmodus (Messwerte alle 144 ms) und kann jetzt auch ausgelöst werden, was insgesamt 3x passiert ist.

Viele Grüße und HTH,
Thomas(_st)
 

flashfingaz

Geocacher
Moins,

wir bauen hier gerade den Programmer nach und haben festgestellt dass das Handbuch offensichtlich einen PonySer Programmer einsetzt. Allerdings unterscheidet dieser sich in einem Punkt von den anderen Schaltungen die wir gefunden haben. Und zwar scheinen hier die Anschlüsse 3 und 4 auf der seriellen Seite vertauscht zu sein. Kann das jemand bestätigen oder erklären?

grütze,
Rene
 

huzzel

Geowizard
Gestern zusammen mit schnasemann ein paar Test gemacht. Das Wetter war leider nicht optimal, es zog Nebel auf :roll: .
Versuchsaufbau:
4 RLs:
1. Fototransistor SFH300
2. Fotowiderstand 905014
3. LED-Only (neue Version)
4. LED-Only mit gelber diffuser LED

Lampen:
a LED-Lampe 1 Watt
b Handscheinwerfer 5 Watt
c Handscheinwerfer 10 Watt
d Handscheinwerfer 25 (?) Watt

Code:
RL      Entfernungen und Lampen (jeweils abcd)
          50     75     100   125    150     200     
1      xxxx    xxxx    xxxx   -xxx     -xxx    ---x
2      xxxx    xxxx    xxxx   xxxx     --xx    ----
3      xxxx    xxxx    --xx   --xx     ----    ----
4     die war irgendwie nicht ganz bei der Sache  ;)

Ergebnis:
LED-Lampen funktionieren bei Fotowiderständen besser, mit Fototransistoren kommt man weiter, wenn auch nur mit "normalen" Lampen.
Mit Fototransistor sind aber auch mit LED-Lampen 100 Meter kein Problem (und es war da schon sehr neblig!)
Aber das Überraschendste war, dass die "neue" LED-Only gute 100 Meter geschafft hat und mit LED-Lampe immerhin noch 75 Meter (weiterhin zu beachten, es war neblig!)

Dann haben wir uns noch eine Fotodiode vorgenommen. Die hat ein Spektrum, ähnlich dem menschlichen Auge. Sollte also mit LED-Lampen besser zurecht kommen.
Der ADC vom RL wurde auf interne Referenz umgestellt, da die Diode nicht so viel Hub schafft.
Die Ernüchterung kam aber recht schnell. Am Anfang wollte sie gar nicht, dann doch, aber nur ca. 50 Meter und das mit der dicken Lampe. Mit Led war nicht viel mehr wie 20 Meter drin. Also insgesamt nicht der Brüller. Zur Verteidigung, der Nebel war da schon recht stark. Mögliche Gründe: Diese Fotodiode ist scheinbar nicht die schnellste und liefert (lt. Datenblatt) nur 2,5 Volt bei 7,5 Volt Vcc.
Ich werde noch ein wenig mit ihr rumbasteln, aber viel Hoffnung habe ich nicht, dass sie Fototransistor und Fotowiderstand übertrumpfen kann.
 
Oben