• 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 zickt !!

Hucky3000

Geocacher
Tach !

Ich habe die Schaltung vom Kochbuch etwas umgemodelt um aus meinen SOS-Blinkis nun etwas zu basteln um einen FM-Transmitter anzusteuern.
Die GC-Station hatte irgendwie den Geist aufgegeben. Ich weiß jetzt auch warum. Tagsüber blinkt die LED manchmal fröhlich vor sich hin und schaltet mit immer über einen Optokoppler den Transmitter an.
Offenbar reicht jetzt im Herbst die Sonne, die zwischen den Baumwipfeln ab und an durchscheint.
Vor Ort habe ich heute beobachtet, dass das Ding gleich 4 mal hintereinander angesprochen hat.

Da ich mir gearde erst passendes Equipment besorgt habe um in die Mikrocontroller-Materie etwas tiefer einzusteigen (habe praktisch noch nicht so den Durchblick) und ich den Cache so schnell wie möglich wieder freischalten möchte, wäre es schön wenn hier jemand einen Tipp geben könnte was ich im Programm ändern kann, dass das ganze besser funktioniert.
Es soll ja eigentlich nur im dunkeln aktiviert werden können.
Selbst beim tragen in einer Plasziktüte leuchtete die LED andauernd :(


Hucky
 
OP
Hucky3000

Hucky3000

Geocacher
Öhhh....

Wie kann ich das denn von Bascom sinnvoll kopieren und hier vernünftig darstellen lassen ?!

Hucky
 

stonewood

Geowizard
Moin,

Code:
das
willst Du wohl machen.

(lange Version: 'Code' oben im Menü drücken, alles dazwischen kopieren. Das gibt dann (code) (/code), aber mit eckigen statt runden Klammern.)

Und nun zum Problem: Wie sieht denn die Schaltung aus? LED-only vermutlich? Du schreibst was von 'Optokoppler'? Wie ist der da reingebaut? Was soll passieren wenn die Schaltung ausgelöst wird?
 
OP
Hucky3000

Hucky3000

Geocacher
Dann nocheinmal ;)

Code:
'===============================================================================

'*************************************
'***                               ***
'*** Reaktiv-Tiny v0.1 24/11/2005  ***
'*** Version v0.2 13.02.2006 Morse ***
'***                          (FU) ***
'*************************************

'
' µC: ATinmy13
' +UB: 3,43 V
' I: 58 µA
' Reichweite Dorcy:
' Reichweite 4D-Maglite:
'
' Port 3 = LED
' Port 1 = 6V schalten
' Port 2 = Voice-Memo start (Taster)
'===============================================================================

$regfile = "Attiny13.DAT"
$crystal = 113000                                           'Reale Frequenz des internen 128KHz-Oszillators
$hwstack = 6                                                'sram Compilerfehler vermeiden

Config Portb = &B00011110                                   'Pib.1,2,3 und 4 auf 'Ausgang', Rest auf 'Eingang' schalten
Portb = &B11100001                                          'Pullups zuschalten, außer für Pinb. 1,2,3 und 4

Stop Adc                                                    'A/D-Wandler abschalten, um Strom zu sparen
Stop Ac                                                     'Analog-Komperator abschalten um Strom zu sparen

Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim Led_ladezustand As Bit
Dim Hell As Bit
Dim Dunkel As Bit
Dim Morse$ As String * 10                                   '10 Takte, die gemorst werden sollen
Dim S$ As String * 1                                        'Merken zum Morsen (aktueller Takt)

'*******************************************************************************
'Start des Hauptprogramms
Do
  Gosub Led_abfrage
  If Led_ladezustand = 0 Then Hell = 1                      'Bei Licht Merker setzen
  If Hell = 1 And B < 255 Then B = B + 1                    'Wenn Merker gesetzt wurde, Zähler für
                                                             'Lichtdauer erhöhen (bis max. 255)

  If Led_ladezustand = 1 And Hell = 1 And B < 30 Then       'Wenn es wieder dunkel ist dann
                                                              'nachsehen für wie lange
     Dunkel = 1                                             'Merker setzen
     For C = 0 To 5                                         'Led-Zustand mehrmals abfragen
       Gosub Led_abfrage
       If Led_ladezustand = 0 Then Dunkel = 0               'Wenn wieder Hell dann Dunkel-Merker löschen
     Next B
    If Dunkel = 1 Then Gosub Blinken                        'Wenn Dunkel-Merker gesetzt Blinken
Rem     If Dunkel = 1 Then Gosub Morsen                        'Wenn Dunkel-Merker gesetzt Morsen
  End If

  If Led_ladezustand = 1 Then                               'Bei Dunkelheit Merker und Zähler für Lichtdauer löschen
    Hell = 0
    B = 0
  End If
Loop
'*******************************************************************************


'*******************************************************************************
' Abfrage, ob LED beleuchtet wird (Ladezustand 0 = Licht, 1 = kein Licht)
Led_abfrage:
  Portb.3 = 0                                               'Portb.3 auf Masse schalten
  Portb.4 = 1                                               'Portb.4 auf +Ub schalten, um die LED zu 'laden'
  Waitus 1                                                  'Ladezeit 1 µs, kann ggf. noch verkleinert werden
  Config Portb.4 = Input                                    'Portb.4 nun zwecks Abfrage der LED-Ladung auf 'Eingang' schalten
  Portb.4 = 0                                               'Pillup abschalten, sonst geht's nicht !
  Waitms 20                                                 'Entladezeit 20ms (100ms) - je kleiner, je unempfindlicher
  Led_ladezustand = Pinb.4                                  'Ladezustand einlesen: '1' -> dunkel, '0' -> hell
  Config Portb.4 = Output                                   'Port.4 wieder auf Ausgang schalten
  Portb.4 = 0                                               'Portb.4 auf Masse schalten
Return
'*******************************************************************************


'*******************************************************************************
'Mit LED kurz blinken
Blinken:
      For A = 1 To 5
        Portb.3 = 1
        Waitms 50
        Portb.3 = 0
        Waitms 250
      Next A
    Portb.1 = 1
    Waitms 1000
    Portb.2 = 1
    Waitms 10
    Portb.2 = 0
    Portb.3 = 1
    Waitms 12000
    Portb.3 = 0
    Portb.1 = 0
Return
'*******************************************************************************


'*******************************************************************************
'Mit LED Zeichen morsen (10 Impulse)
Morsen:
    Morse$ = "***---***"                                    'String aus 10 Zeichen * = kurz - = lang
    For A = 1 To 9                                          '10 Zeichen auslesen und auswerten
    S$ = Mid(morse$ , A , 1)                                'Teilstring auslesen
      If S$ = "*" Then                                      'wenn kurz blinken
        Portb.3 = 1                                         ' LED an
        Waitms 170                                          ' kurz warten
        Portb.3 = 0                                         ' LED aus
        Waitms 450                                          'lang warten
      Else                                                  'sonst lang blinken
        Portb.3 = 1                                         ' LED AN
        Waitms 550                                          'lange warten
        Portb.3 = 0                                         'LED Aus
        Waitms 450                                          'lang warten
      End If
    Next A
  Return
  '*****************************************************************************

  End
 
OP
Hucky3000

Hucky3000

Geocacher
:)

DAS sieht schon besser aus !
Danke.
Tja, was will ich machen ?

Wir haben ne alte Baumwurzel im Wald präpariert. Langes Loch durch, LED mit Kabel durchgeschoben.
Also: die Version mit LED, die praktisch auch als "LDR" funktioniert.
Ich habe die "Grundschaltung" nur abgeändert, indem die LED, die auch zum auslösen angeleuchtet wird, als Signal dient wann der ganze Kram auf Sendung ist.
Sie blinkt 5x kurz, danach etwas 10 Sekunden lang. In der Zeit werden auch andere Ausgänge aktiviert.
Der eine nur kurz um über einen Optokoppler den Speechmemo zu aktivieren (Taster-Simulation), der andere Ausgang steuert mir über einen anderen Optokoppler die 3V für den Transmitter durch (2x AAA)
Das ganze ist nicht das problem, lediglich die Aktivierung.
Bei Sonnenschein geht es manchmal offenbar von alleine los. Wie es aussieht ist die Lithium Batterie von dem Speech Dingsbums fast leer. Wer weiß wie lange das Teil vorher irgendwo im Regal gelegen hat.
Ich könnte ja einfach neue Batterien reinstecken und gut ist.
Aber das wollte ich dann nicht unbedingt jeden Monat machen...

Hucky
 

stonewood

Geowizard
Also wie lang ist das Kabel an die LED? Das zählt ja quasi als Kondensator mit, der auch mit entladen werden will. Also: Entladezeit hochsetzen. Ich frag mich nur gerade warum da
Code:
  Portb.4 = 0                                               'Pillup abschalten, sonst geht's nicht !
  Waitms 20                                                 'Entladezeit 20ms (100ms) - je kleiner, je unempfindlicher
  Led_ladezustand = Pinb.4                                  'Ladezustand einlesen: '1' -> dunkel, '0' -> hell
drin steht. Wenn die Entladezeit verkürzt wird gibts doch leichter mal 'hell'-Meldungen? Unempfindlicher?? Auf jeden Fall soll ja bei dämmriger Beleuchtung das ganze sicher 'Hell' melden.

Spiel mal mit ein paar unterschiedlichen Werten beim 'waitms' rum.
 
OP
Hucky3000

Hucky3000

Geocacher
Hi !

Danke für die schnelle Antwort.

Das Kabel ist fast 1 Meter lang.
Ich probier das mit dem "Wait" mal aus...

Hucky
 
OP
Hucky3000

Hucky3000

Geocacher
Weiß nicht. Im dunklen Kellerflur klappte das ganz gut. Wobei man im eingebauten Zustand schon ziemlich na an der Wurzel sein muss. Kann auch damit zusammenhängen, dass der Körper der LED vom "Einbau" ein wenig vermackelt ist.
Ich wollte nicht unbedibngt noch ein Loch quer durch die Wurzel für einen LDR bohren um evtl. die ganze Steuerung zu ändern. Bei DER Bastelei ist uns schon der verlängerte Bohrer in der Wurzel abgebrochen. War das ein Spaß :(

Hucky
 

schnasemann

Geocacher
nimm doch einfach den neueren Code, der wertet die Spannung analog aus. Das sollte nicht so viele Probleme machen. Wobei die Anschlüsse zwischen Microcontroller und Kabel und Kabel und LED auf jeden Fall wasserdicht gestaltet sein müssen.
 
OP
Hucky3000

Hucky3000

Geocacher
neuerer Code ?

Habe ich was verpasst ? :eek:ps:

Die LED mit Kabel bis zur Dose ist wasserdicht !

Hucky
 

stonewood

Geowizard
Jepp, hast Du. :D
Zum Beispiel: http://www.geoclub.de/viewtopic.php?f=57&t=5753&start=1380, bzw. besser
http://www.geoclub.de/viewtopic.php?p=586619#p586619 mit dem Programm unter http://www.geoclub.de/viewtopic.php?p=596158#p596158

'LED only is back!'. :D

Dabei wird nicht die Kapazität gemessen, sondern die LED quasi als Solarzelle mißbraucht und (analog, per A/D-Wandler!) die Spannung gemessen die die gerade erzeugt. Hohe Spannung ist hell, niedrige Spannung dunkel.
 
OP
Hucky3000

Hucky3000

Geocacher
cool !!

Habs mal gerade überflogen.
Mal sehen wann ich Zeit habe (mir die Zeit nehmen ;) ) das mal zu testen...

Hucky
 
OP
Hucky3000

Hucky3000

Geocacher
So. Die Zeit nehm ich mir jetzt einfach - die Radiostation muss wieder an den Start.
Was muss ich bei den Fusebits eingeben ? Den standard vom "Kochbuch" ?

Hucky
 
OP
Hucky3000

Hucky3000

Geocacher
Hi !

Sieht so weit ganz gut aus. Die Fuse-Bits weichen teilweise vom "Kochbuch" ab. Habs jetzt wie im Link gemacht.
Mein SOS-Blinker geht aber garnicht mehr aus ?!
Wenn das Ding gestartet hat blink er 10mal und mehr. Auch wenn ich meine Hand drüber halte, Dachte der bekommt wieder Licht durch Reflexion, oder so.
Ich versteh das nicht :(

Code:
'===============================================================================

'*************************************
'***                               ***
'***           LED only            ***
'***          SOS-Morsen           ***
'***           02.12.09            ***
'***                               ***
'*************************************


'===============================================================================


$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 A As Byte
Dim Wert1 As Word
Dim Wert2 As Word
Dim Schwelle As Word
Dim Morse$ As String * 10                                   '10 Takte, die gemorst werden sollen
Dim S$ As String * 1                                        'Merken zum Morsen (aktueller Takt)

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 < 30 And Wert2 > Schwelle Then                     'Dunkelschwelle (30) festlegen, je kleiner umso dunkler
Gosub Morsen
End If

If Wert1 > 29 And Wert2 > 29 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

Morsen:

Config Portb.4 = Output
Portb.4 = 0

    Morse$ = "***---***"                                    'String aus 10 Zeichen * = kurz - = lang
    For A = 1 To 9                                          '10 Zeichen auslesen und auswerten
    S$ = Mid(morse$ , A , 1)                                'Teilstring auslesen
      If S$ = "*" Then                                      'wenn kurz blinken
        Portb.4 = 1                                         ' LED an
        Waitms 120                                          ' kurz warten
        Portb.4 = 0                                         ' LED aus
        Waitms 300                                          'lang warten
      Else                                                  'sonst lang blinken
        Portb.4 = 1                                         ' LED AN
        Waitms 550                                          'lange warten
        Portb.4 = 0                                         'LED Aus
        Waitms 300                                          'lang warten
      End If
    Next A
  Return
End

Hucky
 

schnasemann

Geocacher
Du hast also nun einen eigenen Code gestrickt. Das wäre mit der Teachin-Version auch gegangen.
Was mir auffällt:
1. die Dunkelschwelle von 30 halte ich für zu hoch. Bei meinen Tests hat sich eine 10-14 als brauchbar erwiesen.
2. Du testest das daheim im Zimmer. Wir (Menschen) bekommen Lichtänderungen exponentiell mit, dazu sind wir recht unempfindlich im Infrarotbereich. Anders Dein RL. Bitte im dunklen Keller oder sonstwo testen. Bei Tag reagiert mein RL Code sogar, wenn ich mein RL samt Kopf unter die doppelt gelegte Bettdecke lege - und für mich ist da schon dunkel und kein Unterschied feststellbar.

Also, mein Tipp an dieser Stelle: Erst durch Blitzen im Tagmodus die Schwelle für die Nacht herausbekommen, ein wenig Sicherheit draufrechnen (5 Digits). Dann den gesunden Kompromiss zwischen Auslöseempfindlichkeit und Reichweite durch den Hub definieren.
Beim Nachbau der RLs kommt es extrem auf die verwendete LED an.

Grüße,
schnasemann
 
OP
Hucky3000

Hucky3000

Geocacher
Habs nun endlich geschafft die defekte Station im Wald z uersetzten. Schaut gut aus !
Habs jetzt mit der "30" gemacht. Muss man mal bei Wind beobachten, ob es reicht die Schaltung anzusteuern wenn Licht-Dunkel-Wechsel durch Äste und Zweige entstehen.
Im Zimmer war wahrscheinlich irgendwo ein komische Schwellwert. Im Wals sieht das schon anders aus.
Funktioniert wesentlichbesser, als die Methode mit der Kapazitivmessung :)

Hucky
 
Oben