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

RL mit Auslesemöglichkeit von Schwelle und erf. Auslösungen

obelix77

Geocacher
Hallo Forum.

Ich habe mir gedacht, daß es geschickt wäre wenn man dem RL (LDR)
die Anzahl der Auslösungen entlocken könnte. Auch ist es von Vorteil, die
Auslöseschwelle von Außen ändern zu können, ohne jedesmal neu zu
programmieren. Gerade beim Verstecken eines RL ist es gut zu wissen,
wie es sich so in dieser Umgebung verhält, und auch das Ansprechverhalten
ohne Laptop ändern zu können. Wenn man die Werte hat, kann man ja ein
fertig programmiertes RL in die Bäume setzen.

Habe mir folgendes überlegt: wenn Pin6 auf Masse gelegt wird,
wird erst die Anzahl der Auslösungen, dann die Schwelle ausgeblinkt.
Damit man das vom "normalen" geblinke unterscheiden kann, kommt
als erstes und als letztes, sowie zwischen den Werten jeweils ein langer Blink.
Wenn Pin7 an Masse gelegt wird, so wird die Auslöseschwelle um eins erhöht,
gleichzeitig ein kurzer Blink ausgegeben.

Prinzipiell funktioniert das auch, aber den Pin7 muß man immer 2mal nach
Masse tippen. Wenn man das nur einmal tut, so leuchtet die LED und geht nicht
wider aus. Das Auslesen der Werte funktioniert jedoch problemlos.
Vielleicht kann ja von Euch jemand den Fehler finden, ich habe keinen Plan.

Viele Grüße,
Obelix77

Prog.

' ********************************************************
' *** ***
' *** Tiny-Reaktivlicht mit LDR und A/D-Wandler ***
' *** mit Watchdog-Energiesparmodus und Tagabschaltung ***
' *** ***
' ********************************************************

$regfile = "ATtiny13.DAT"
$crystal = 16000 'Frequenz des internen Oszillators
$hwstack = 4 'hardwarestack herabsetzen damit genÄugend variablen zur verfÄugung stehen

Config Adc = Single , Prescaler = Auto
Config Portb = &B00001001 'Pinb.3 auf 'Ausgang', Rest auf 'Eingang' schalten
Portb = 0 'AusgÄange auf Low setzen
Stop Ac 'Analog-Komparator abschalten, um Strom zu sparen

Wdtcr = &B11010011 'Watchdog definieren: 0.125 Sekunden, Interrupt auslÄosen, kein Reset
Enable Interrupts 'Interrupts freigeben

'je grÄo¼er der Schwellwert, desto unempfindlicher
Const Tagschwelle = 800 'Schwellwert fÄur Schlafmodus

Dim A As Byte
Dim Schwelle As Byte 'Variablen definieren
Dim Tagzaehler As Byte
Dim Schlafzaehler As Byte
Dim Ldr As Integer '0 = Dunkel, 1023 = Hell
Dim Alt As Integer
Dim Merker As Integer
Dim Zaehler As Byte
Dim Frage As Byte
Dim Schwellfrage As Byte
Zaehler = 0
Schwelle = 10

Do
Reset Watchdog
Powerdown 'prozessor bremsen da sonst lichtÄanderung nicht erkannt wird
Config Portb.1 = Input
Portb.1 = 1
Frage = Pinb.1
If Frage = 0 Then
Gosub Auslesen
Else
End If
Reset Watchdog
Powerdown
Config Portb.2 = Input
Portb.2 = 1
Schwellfrage = Pinb.2
If Schwellfrage = 0 Then
Gosub Aendern
Else
End If
Reset Watchdog
Powerdown
Start Adc 'A/D-Wandler starten
Ldr = Getadc(2) 'Helligkeitswert einlesen
Stop Adc 'A/D-Wandler zum Stromsparen wieder stoppen
Merker = Ldr - Alt 'Unterschied zwischen letzter und aktueller Messung ermitteln
Alt = Ldr 'letzten LDR-Wert sichern
If Merker > Schwelle Then
Gosub Blinken 'Bei gro¼er ÄAnderung Dunkel->Hell: Blinken
End If
If Ldr > Tagschwelle Then 'prÄufen ob helligkeit Äuber tagschwelle liegt
If Tagzaehler < 255 Then 'int-variable geht nur bis 255
Tagzaehler = Tagzaehler + 1
End If
Else
Tagzaehler = 0 'wenn wieder dunkel tagzÄahler lÄoschen
End If
If Tagzaehler > 200 Then
Gosub Pause 'wenn mehr als x zyklen hell dann schlafmodus
End If
Loop

Blinken:
Zaehler = Zaehler + 1 'LED blinken lassen
For A = 0 To 10
Portb.3 = 1
Reset Watchdog
Powerdown
Portb.3 = 0
Reset Watchdog
Powerdown
Next A
Alt = 1023 'DoppelauslÄosung verhindern
Return


Auslesen:
Portb.3 = 1
Waitms 900
Portb.3 = 0
Waitms 1500
For A = 1 To Zaehler
Portb.3 = 1
Waitms 300
Portb.3 = 0
Waitms 500
Next A
A = 0
Waitms 900
Portb.3 = 1
Waitms 900
Portb.3 = 0
Waitms 1500
For A = 1 To Schwelle
Portb.3 = 1
Waitms 300
Portb.3 = 0
Waitms 500
Next A
A = 0
Waitms 900
Portb.3 = 1
Waitms 900
Portb.3 = 0
Waitms 1500

Return

Aendern:
Schwelle = Schwelle + 1
Pinb.3 = 1
Waitms 80
Pinb.3 = 0
Waitms 300
Return

Pause:
Wdtcr = &B11110001 'Watchdog auf 8 Sekunden stellen
Reset Watchdog
Powerdown
Wdtcr = &B11010011 'Watchdog wieder auf 0,125 Sekunden zurÄuckstellen
Return
 
OP
O

obelix77

Geocacher
Blöd, wenn man sich mit In/Out vertut. Aber auch das kann
vorkommen. Hier das vollständig funktionierende Programm:

Bitte das Unterprogramm Aendern durch folgendes ersetzen:

Aendern:
Schwelle = Schwelle + 1
Portb.3 = 1
Waitms 80
Portb.3 = 0
Waitms 300
Return

Dann Funktioniert auch alles einwandfrei. Die Schwelle kann jetzt
pro Tastendruck um +1 erhöht werden, und die LED blinkt das Ganze
auch zuverlässig aus. Wenn man die Taster mit ReedKontakten ausführt,
kann das Ganze auch im Petling verbleiben.

Gruß,
Obelix77
 

schnasemann

Geocacher
schreib das Ganze doch wenigstens ins EEPROM, dann kann man das bei einer Cachewartung evtl. auch mal auslesen oder hat die Werte als "Startwerte" bei einem Ersatz.
 

upigors

Geowizard
schöne Idee auch wenn ich vom ersten Tag an mit den gleichen Werten für die "Auslöseschwelle" und so arbeite und diese nie ändern musste, egal wo der Blinker liegt.
Nehmt doch das Programm ins Wiki auf.....
 
OP
O

obelix77

Geocacher
Das Programm hat noch einen "Fehler". Die Tagschwelle verhindert
nicht das Auslösen. Bedeutet: Wenn der Tagschwellenwert überschritten
ist, und dann ne plötzliche Änderung (Größer Ausöseschwelle) kommt, wird das Ding
getriggert.
Das passiert aber auch bei dem Programm vom Kochbuch. Hab das auch nur per
Zufall bemerkt weil ich mir die Werte auf nem LCD angeschaut habe.
Draussen ist das nicht wirklich aufgefallen.

Wie auch immer, mit dieser Version passiert das nichtmehr.
Ach ja, noch was: im Spannungsteiler mit dem LDR verwende ich einen
1Megaohm Widerstand. (Hatte nix größeres). Wer die 4,7 Meg verwenden
möchte, muß evtl noch mit den Schwellwerten spielen. Bei mir jedenfalls funktioniert
es vortrefflich, und ich habe so gut wie keine Fehlauslösungen. (1 in 13 Tagen)
Reichweite liegt bei ca 400 Metern mit LED Lenser P7 Funzel.
Viel Spaß damit.

PS: Ich nutze diese RL nur, um mögliche Verstecke Zu testen. Sind die Werte
ermittelt, wird dann ein neues Programiert. Daher die flüchtigen Speicher.
Hat bis jetzt gute Dienste getan.

Gruß,

Obelix77
 

Anhänge

  • 1 LED LDR RL mit Auslesen.rar
    8,1 KB · Aufrufe: 13
Oben