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

Reaktivlicht mit LDR mit Morsezeichen???

rumo&rala

Geocacher
Also ich bin ein Anfänger auf diesem Gebiet und hab soeben mal mein erstes Reaktivlicht zusammen gebastelt :p

Ich hab mich nach der Schaltung mit LDR (Abb. 6 im Kochbuch) gerichtet und zum ersten Test das Programm 5.2 einfach mal unverändert übernommen.

Nun möchte ich das Programm modifizieren und zwar so, dass es Morsezeichen blinkt. Am besten schon etwas komfortabler mit Text, Zahlen und Pausen.
Teilweise verstehe ich die Programme, teilweise auch nicht und darum hoffe ich dass man mir hier bisschen unter die Arme greifen kann.

Und ja ich hab die Suchfunktion schon benutzt.

Schon mal vielen Dank,

Lorenz
 
OP
R

rumo&rala

Geocacher
Gut die Morsezeichen in den EEPROM zu schreiben und wie die kodiert sind, das habe ich inzwischen verstanden.

Allerdings um das Hauptprogramm so umzuschreiben, wie ich es haben will fehlt mir noch das Verständnis.

Im Gegensatz zum Programm 4.10 brauche ich nur eine einfache Auslösung des Reaktivlichts, dass dann meinen Code abspielt.
 
A

Anonymous

Guest
Ich mache das so:

Code:
'============================================================
'
' ********************************************************
' ***                                                  ***
' ***    Tiny-Reaktivlicht mit LDR und A/D-Wandler     ***
' *** mit Watchdog-Energiesparmodus und Tagabschaltung ***
' *** Ausgabe von Morsesignalen beim Anleuchten        ***
' ***                                                  ***
' ***      erstellt von Windi für www.geoclub.de       ***
' ***                   04.01.2008                     ***
' ***                                                  ***
' ********************************************************
'
' µC: ATtiny13V
' +Ub: 3,00 V
' I: 17 µA im Leerlauf (Nachtbetrieb)
' I: 5 µA bei Tagabschaltung
' Reichweite: 650 m mit Maglite 5D
'
'============================================================

$hwstack = 20                                               'hardwarestack herabsetzen damit genügend variablen zur verfügung stehen
$regfile = "ATtiny13.DAT"
$crystal = 128000                                           'Frequenz des internen Oszillators




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

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

Const Schwelle = 40                                         'je größer der Schwellwert, desto unempfindlicher
Const Tagschwelle = 800                                     'Schwellwert für Schlafmodus
Const Zwangsimpuls = 37                                     'LED-Impuls tagsüber (5 minuten) alle X Schlafyklen (á ca. 8 Sekunden)

Dim A 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 Zeichen As String * 1

Do
Reset Watchdog
Powerdown                                                   'prozessor bremsen da sonst lichtänderung nicht erkannt wird
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 Morsen                      'Bei großer Änderung Dunkel->Hell: Blinken
If Ldr > Tagschwelle Then                                   'prüfen ob helligkeit über tagschwelle liegt
   If Tagzaehler < 255 Then                                 'int-variable geht nur bis 255
      Tagzaehler = Tagzaehler + 1
   End If
Else
   Tagzaehler = 0                                           'wenn wieder dunkel tagzähler löschen
End If

If Tagzaehler > 200 Then Gosub Pause                        'wenn mehr als x zyklen hell dann schlafmodus

Loop


Pause:
Wdtcr = &B11110001                                          'Watchdog auf 8 Sekunden stellen
Reset Watchdog
Powerdown
Wdtcr = &B11010011                                          'Watchdog wieder auf 0,125 Sekunden zurückstellen
Schlafzaehler = Schlafzaehler + 1                           'merken wie oft Schlafmodus durchlaufen wurde
If Schlafzaehler = Zwangsimpuls Then                        'als Funktionskontrolle tagsüber LED auslösen
   Portb.3 = 1
   Reset Watchdog
   Powerdown
   Portb.3 = 0
   Schlafzaehler = 0
End If
Return

Morsen:
Restore Daten                                               'Am Beginn der Daten anfangen
Alt = 1023                                                  'Doppelauslösung verhindern
Do
Read Zeichen
Wdtcr = &B11010100                                          'Watchdog auf 250ms stellen
If Zeichen = "*" Then Gosub Kurz
If Zeichen = "-" Then Gosub Lang
If Zeichen = " " Then Gosub Leer
Wdtcr = &B11010011                                          'Watchdog wieder auf 125ms stellen
If Zeichen = "X" Then Return
Loop

Kurz:
Portb.3 = 1
Reset Watchdog
Powerdown
Portb.3 = 0
Reset Watchdog
Powerdown
Return

Lang:
Portb.3 = 1
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Portb.3 = 0
Reset Watchdog
Powerdown
Return


Leer:
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Return

End

Daten:
Data "-" , "*" , "-" , "*" , "-" , " "                      'Spruchanfang
Data "*" , "*" , "*" , "*" , " "                            'H
Data "*" , "-" , " "                                        'A
Data "*" , "-" , "*" , "*" , " "                            'L
Data "*" , "-" , "*" , "*" , " "                            'L
Data "-" , "-" , "-" , " "                                  'O
Data " "
Data "-" , "*" , "-" , "*" , " "                            'C
Data "*" , "-" , " "                                        'A
Data "-" , "*" , "-" , "*" , " "                            'C
Data "*" , "*" , "*" , "*" , " "                            'H
Data "*" , " "                                              'E
Data "*" , "-" , "*" , " "                                  'R
Data "*" , "-" , "*" , "-" , "*" , "-" , " "                '.
Data " "
Data "-" , "-" , "*" , " "                                  'G
Data "*" , "-" , "*" , " "                                  'R
Data "*" , "*" , "-" , " "                                  'U
Data "*" , "*" , "*" , " "                                  'S
Data "*" , "*" , "*" , " "                                  'S
Data " "
Data "*" , "*" , "*" , "-" , " "                            'V
Data "-" , "-" , "-" , " "                                  'O
Data "-" , "*" , " "                                        'N
Data " "
Data "*" , "-" , " "                                        'A
Data "*" , "*" , "*" , " "                                  'S
Data "-" , "*" , "*" , "*" , " "                            'B
Data "-" , "-" , "-" , " "                                  'O
Data "-" , "-" , " "                                        'M
Data "-" , "-" , "-" , " "                                  'O
Data " "
Data "*" , "*" , "-" , " "                                  'U
Data "-" , "*" , " "                                        'N
Data "-" , "*" , "*" , " "                                  'D
Data " "
Data "*" , "*" , "*" , " "                                  'S
Data "*" , "-" , "-" , "-" , "-" , " "                      '1
Data "-" , "-" , "*" , " "                                  'G
Data "*" , "-" , "*" , "-" , "*" , "-" , " "                '.
Data " "
Data "*" , "*" , "*" , "-" , "*" , "-"                      'Verkehrsende







Data "X"

Wer es sich ausgedacht hat, steht im Programm, ich habe nur den Text angepasst...
 
OP
R

rumo&amp;rala

Geocacher
Ja danke, das hilft mir schon mal sehr.

Ist doch etwas einfacher als das im Kochbuch :D

Ich werde das nachher mal testen.

Gruß,

Lorenz aka rumo
 

Hucky3000

Geocacher
Tach !

Ich habe das ganze jetzt auch mal ausprobiert.
Irgendwie blicke ich das nicht. Die LED macht irgendwie was sie will.
Ich habe den Schwellwert von 40 mal auf 5 runtergenommen, weil ich das ganze mal in einem abgedunkelten Raum testen wollte.
Wenn ich den LDR anleuchte funktioniert das ganze sofort, mal macht sich die Schaltung selbständig wenn ich garnichts mache und mal reagiert die LED garnicht wenn ich den LDR anstrahle.
Muss ich die Tagschwelle evtl. noch ändern, wenn ja höher, oder niedriger ?

Was sollte bei den im LIsting angegebenen Werten überhaupt passieren ?

Ich stelle mir das ganze eigentlich so vor: Die Leuchte fuchteln mit ihren Lampen im Wald überall herum. Sobald ein Lichtkegel, oder auch ein längerer Schein auf den LDR kommt soll die LED mit einem Code anfangen zu blinken.
Der Code wiederholt sich solange der Lichtkegel auf den LDR scheint, bzw. um das Teil heller ist.

Geht das so überhaupt mit dem Programm ?

Ich habe da leider kein Plan von und habe nur blind abgetippt.

Hucky
 

stonewood

Geowizard
Äh, wenn Du das im abgedunkelten Raum ausprobierst führt schon ein wenig Rumfuchteln mit 'ner Taschenlampe zum Auslösen. Schließlich ist das auf >200m auszulösen, so daß nur sehr wenig Licht reicht. Verantwortlich dafür ist der Schwellwert.

Und es kann schon sein daß es dem Tiny nicht dunkel genug ist: Dann schaltet der ab. Soweit ich weiß ist das nach 20s 'hell' der Fall, dann schaut der nur alle 8 sekunden nach ob's wieder dunkel ist. Das regelst Du mit der 'tagschwelle'.

Und das normale Verhalten ist eigentlich daß Du nur kurz den LDR anleuchtest, dann blinkt das Reaktivlicht den Code zurück. Wenn das dauerhaft angeleuchtet wird geht das in den Tagmodus.l
 

Hucky3000

Geocacher
So. Ich habe das jetzt mal wie aus dem "Kochbuch" gemacht. Damit bin ich sehr zu frieden :)
Genau wie ich mir das vorstelle. Verstehen tu ich es weitestgehend auch. Ist ja nicht sooo schwer wenn man mit Basic und 6510-Code vorbelastet ist ;)

Hucky
 
Oben