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

Fehler im Code f. Reaktivlicht?

torama

Geocacher
Hallo, ich habe wohl einen Bug im Code, aber kann ihn nicht richtig
lokalisieren. Grob baut der Code auf dem BASCOM auf lt. reaktivlicht.de

Die Eule soll nach dem kurzen Anleuchten 7x Blinken und wenns dunkel
bleibt auch 7x wiederholen. Es funktioniert auch ABER

nach ca. 2 Tagen hängt sich die Eule auf und reagiert nicht mehr und
jetzt nach 1 Woche funktioniert sie wieder von alleine. Ich vermutete
einen Überlauf oder so aber wo ?

Bitte kann mal einer checken?

Code:
' **********************************************
' *** 
' *** Nachteule
' *** 
' **********************************************

$regfile = "ATtiny13.DAT"
$crystal = 16000                                            'Frequenz des internen Oszillators

Config Portb = &B00011001                                   'Pinb.3,4 und .5 auf 'Ausgang', Rest auf 'Eingang' schalten
Portb = &B11100110                                          'Pullups zuschalten, außer für Pinb.3,4 und .5
Stop Adc                                                    'A/D-Wandler abschalten (Strom sparen)
Stop Ac                                                     'Analog-Komparator abschalten (Stromsparwilli)

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

Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim Led_ladezustand As Bit
Dim Hell As Bit
Dim Hell_2 As Byte

Do
 Gosub Led_abfrage

 If Led_ladezustand = 0 Then
  Hell = 1
  If B = 0 Then                                             
    Gosub Blinken                                           'Schon mal erstes Mal Blinken
  End If
 End If

 If Hell = 1 And B < 255 Then
  B = B + 1                                                 'Wenn Merker gesetzt wurde, Zähler für Lichtdauer erhöhen (bis max. 255)
 End If
 If B > 200 Then
  Gosub Abschalten                                          'Tagabschaltung
 End If

 If Led_ladezustand = 1 And Hell = 1 And B < 30 Then        'Wenn es wieder dunkel ist und der Lichtimpuls nur kurz war
  Hell_2 = 0                                                'zweiten Hell-Merker setzen
  For C = 0 To 3                                            'und 5 mal afragen
   Gosub Led_abfrage
   If Led_ladezustand = 0 Then
    Hell_2 = Hell_2 + 1                                     'ob es auch wieder dunkel ist
   End If
  Next C
  If Hell_2 = 0 Then
   Gosub Blinken                                            'erst dann blinken
  End If
  Hell = 0
  B = 0
 End If
 
 If Led_ladezustand = 1 Then                                'Bei Dunkelheit Merker und Zähler für Lichtdauer löschen
  Hell = 0                                                  'damit sich das Programm nicht aufhängt
  B = 0
 End If

Loop

Led_abfrage:
 Reset Watchdog
 Powerdown
 Portb.3 = 0
 Portb.4 = 1                                                'Portb.4 auf +Ub schalten, um die LED zu 'laden'
 Waitus 1                                                   'Ladezeit, kann ggf. noch verkleinert werden
 Config Portb.4 = Input                                     'Portb.4 nun zwecks Abfrage der LED-Ladung auf 'Eingang' schalten
 Portb.4 = 0                                                'Pullup abschalten, sonst geht's nicht!
 Waitms 4000
 Led_ladezustand = Pinb.4                                   'Ladezustand einlesen: '1' -> dunkel, '0' -> hell
 Config Portb.4 = Output                                    'Portb.4 wieder auf Ausgang schalten
 Portb.4 = 0
 Reset Watchdog
 Powerdown
Return

Blinken:
 For A = 1 To 7
  'Portb.3 = 1
  Portb.0 = 1                                               ' 2. Auge mitleuchten
  Reset Watchdog
  Powerdown
  'Portb.3 = 0
  Portb.0 = 0                                               ' 2. Auge mitleuchten
  Reset Watchdog
  Powerdown
 Next A
Return

Abschalten:
  Wdtcr = &B11110001
  Reset Watchdog
  Powerdown
  Wdtcr = &B11010101
Return

End

Der Code ist wie gesagt abgewandelt aus dem
Backbuch für Reaktivlichter und die Variablen habe ich dann natürlich so
belassen wie sie heißen.

Der Code funktioniert ja auch nur eben mal so 2 Tage und dann erst
wieder nach ner Woche.

Da die Helligkeit mit einer LED gemessen wird, war meine Vermutung, dass
es evtl. bei Temperaturen um 0°C eine Kennlinienverschiebung gibt, aber
naja...
 

Starglider

Geoguru
torama schrieb:
Der Code ist wie gesagt abgewandelt aus dem
Backbuch für Reaktivlichter und die Variablen habe ich dann natürlich so
belassen wie sie heißen.
Wenn du deine Änderungen farbig markieren würdest wäre es für die Leute die dir helfen möchten sehr viel einfacher den Fehler zu finden.
Möglicherweise findest du ihn auf diese Art sogar selbst.
 

Windi

Geoguru
Das liegt mit ziemlicher Sicherheit nicht am Programm.
Die LED-only Variante ist sehr feuchtigkeitsempfindlich.
Da reicht es wenn ein Hauch Wasser die LED-Beinchen berührt und schon geht die Lichterkennung nicht mehr.
Ich würde generell zu der Variante mit LDR raten.
Kannst du Feuchtigkeit als Fehlerquelle ausschliessen?
 

rainmuel

Geocacher
Servus,

überprüfe doch mal den Wert des Oszilators:
$crystal = 16000

Der kommt mir komisch vor... ist der nicht viel höher? So 113000?

VG R.
 

Windi

Geoguru
rainmuel schrieb:
überprüfe doch mal den Wert des Oszilators:
$crystal = 16000

Der kommt mir komisch vor... ist der nicht viel höher? So 113000?
Den Tiny kann man bis auf 16 kHz runtertakten. Das passt schon.
 

stonewood

Geowizard
Windi schrieb:
rainmuel schrieb:
überprüfe doch mal den Wert des Oszilators:
$crystal = 16000

Der kommt mir komisch vor... ist der nicht viel höher? So 113000?
Den Tiny kann man bis auf 16 kHz runtertakten. Das passt schon.
Kann schon, aber ist er auch so getaktet? Das Kochbuch geht ja auch von 128 KHz aus, was reell die 113000 sind. $crystal sollte immer die gefuste Frequenz sein, sonst geht z.B. waitms/waitus nicht richtig. Die Wartezeit dafür berechnet der Compiler anhand $crystal.

Das kann aber eigentlich nicht der Grund für den Aussetzer sein, schließlich läßt ein falsches $crystal den Tiny nicht abstürzen. Obwohl, da wird ein 'waitus/ms' bei der LED-Abfrage verwendet. Im Zusammenhang mit etwas Feuchtigkeit kann das dann zu lang/kurz sein.
 
OP
torama

torama

Geocacher
Windi schrieb:
Das liegt mit ziemlicher Sicherheit nicht am Programm.
Die LED-only Variante ist sehr feuchtigkeitsempfindlich.
Da reicht es wenn ein Hauch Wasser die LED-Beinchen berührt und schon geht die Lichterkennung nicht mehr.
Ich würde generell zu der Variante mit LDR raten.
Kannst du Feuchtigkeit als Fehlerquelle ausschliessen?
Hallo Windi,

danke für den Tipp, also das wäre durchaus möglich, die Trockenchips sind zumindest eingelaufen, also kommt bissl Feuchtigkeit durch den Ton irgendwie durch.

Ich bin am probieren, das würde auch erklären warum die Eule dann wieder drinnen funktionierte nach 2 Tagen hmm

@stonewood
Also die Werte stimmen schon, die Tests im Zimmer funktionierten ja...danke trotzden fürs draufschauen
 

Starglider

Geoguru
torama schrieb:
danke für den Tipp, also das wäre durchaus möglich, die Trockenchips sind zumindest eingelaufen, also kommt bissl Feuchtigkeit durch den Ton irgendwie durch.
Ton? Gebrannter Ton? Ohne Glasur?
Da stehen die Chancen gut das er porös ist.
 
OP
torama

torama

Geocacher
Ja, ist zwar gebrannter Ton, aber irgendwie kam trotzdem Feuchtigkeit reindiffundiert. Ich verpacke jetzt die Led und den µC in Gießharz und baue die Eule in ein "Gehäuse"...
 
OP
torama

torama

Geocacher
Also zusammenfassend:

- kein Fehler im Code gewesen
- LED Variante zu empfindlich gegenüber Feuchtigkeit
(-> zu unempfindlich bei Beleuchtung)
- lieber LDR Variante nehmen
- durch Feuchteblocker (Gießharz, Lacke, Klebepistole) verändert sich
die Kapazität der LED, die Zeiten müssen angepasst werden, was im Nachhinein schwer ist


Dieser Thread kann dann zu, danke an alle Helfer
 

Teddy-Teufel

Geoguru
Wie kommst Du auf Eule, blinken und dann hoch im Baum? Guckst Du hier. :D Sie hängt ca 10m hoch.
Habe keine Schwierigkeiten mit dem Vogel. Programmiert und gebaut ist alles für LED-Only in der Wiki auch LED-only analog genannt. Als Sensor benutze ich eine weiße LED. Beim Anleuchten blitzen dann die Augen zweimal weiß und dann x mal grün. Sie reagiert zuverlässig und hat schon so manchen Sturm überstanden, kürzlich habe die Funktion gescheckt, weil ich dachte daß die - 20°C negativ gewirkt haben. Es funktioniert jedoch noch alles bestens.
Den Code veröffentliche ich allerdings aus altbekannten Gründen nicht.
 
OP
torama

torama

Geocacher
@teddy

äh wieso ? Was sind denn das für "altbekannte Gründe"?
Das verstehe ich nicht, gibts da ein "Urheber"-Problem oder warum?

danke nochmal für die Infos per PN

73
 

Teddy-Teufel

Geoguru
torama schrieb:
@teddy
äh wieso ? Was sind denn das für "altbekannte Gründe"?
Das verstehe ich nicht, gibts da ein "Urheber"-Problem oder warum?
danke nochmal für die Infos per PN
73
Ich habe das noch einmal hervor gekrahmt. Urheberrechte in dem Sinne gibt es nicht, trotzdem hat es irgendwie einen negativen Touch.
 
Oben