• 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

Emalaith

Geocacher
soo wie ich mit erstaunen feststellen durfte kamen heute die neuen tinys bei mir an. Also gleich mal austesten ob das mit dem setzen der fusebits klappt.
der Chip wurde schon mal erkannt, die fusebits hab ich wie ein paar Beiträge vorher im Screenshot gesetzt.
Ein klick auf Write und Zack...
"Detected Micro does not match the selected Micro ATtiny13"
Jaa suuuper...
Ich werde mich mal mit dem Hersteller des Programmers in Verbindung setzen er soll mir mal die Belegung des 10poligen Kabels zukommen lassen.
Gibt es hier denn jemanden der einen HV-Programmer hat und mir die tinys wieder gerade biegen kann? Ich bin hier denn so langsam am verzweifeln.
Liebe, verzweifelte, Grüße
Ema

#Edit:
Ich kann Erfolg vermelden!!!
Hab gerade auf dem Windowsrechner mit viel mühe Das AVR Studio installiert und dort meldete es mir auch eine hilfreiche Warnung. es liegt am FuseBit DCBA, die 128kHz sind zu langsam für meinen ISP-Programmer. lass ich den auf Standard läuft das ding wie eine eins. Morgen löte ich mir dann einen Paralleladappter zusammen und hofe das ich vielleicht die tinys selber retten kann :) Ich bin grade super druff und freu mich wie ein kleines Kind zu Weihnachten...
Danke Danke Danke für eure ganze Hilfe, ich hoffe ich kann euch zu gegebener zeit auch mal helfen.
Viele liebe Grüße :)
Ema

#Edit2:
Welche Auswirkungen hat dies auf das spätere verhalten des tinys wenn ich den nicht auf 128kHz schraube?
 

kirby27b

Geocacher
Hi,

also ich habe das Problem auch, wenn ich die auf 128kHz setze will Bascom die nicht mehr. Das umgehe ich ( wenn ein neu Programieren erforderlich ist ) indem ich vorher mittels AVR-Studio den Tiny wieder auf 8MHz setze. Wenn AVR meggert das die Geschwindigkeit zu hoch ist setzt man zu erst die ISP-Clock ( unter Terget settings ) auf 1.21kHz dann drückt man auf den Button " WRITE " und schon kann man in AVR die Tahktfrequenz des kleinen Käfer wieder mittels Fuses hoch setzen das auch Bascon wieder darauf zugreifen kann. Gebe zu etwas Umständlich, aber so gehts halt und besser Umständlich als gar nicht.

Grüße
Olaf
 

Teddy-Teufel

Geoguru
kirby27b schrieb:
Hi,

also ich habe das Problem auch, wenn ich die auf 128kHz setze will Bascom die nicht mehr.
Ich verstehe nicht warum ihr diese Schwierigkeiten mit den 128kHz habt, ich programmiere seit 2007 mittels selbstgebauten Adapter und Bascom. Habe jedoch noch nie diese Schwierigkeiten gehabt und konnte die Fusebits setzen und schreiben und was nicht noch alles, ohne daß die Tinys (13, 24 und 85) ausgestiegen sind. :???:
 

Teddy-Teufel

Geoguru
Emalaith schrieb:
Das liegt wohl an dem ISP-Adappter ;) Für den ist das denn dann zu langsam... So hab ich das zumindestens verstanden.

Ema
Moin, so die Tinys sind wieder auf dem Rückweg, falls Screenshots von den Einstellungen für alle sechs gebraucht werden, brauche ich eine E-Mail-Adresse. Die Fusebits lauten jetzt 0,1,1,1, DCBA 9,6MHz. Den Attiny 13-5D hast Du wohl programmiert, er gibt an Port 4 Impulse aus.

Frohes Schaffen und Grüße von der Küste
 

stonewood

Geowizard
Teddy-Teufel schrieb:
Moin, so die Tinys sind wieder auf dem Rückweg, falls Screenshots von den Einstellungen für alle sechs gebraucht werden, brauche ich eine E-Mail-Adresse. Die Fusebits lauten jetzt 0,1,1,1, DCBA 9,6MHz. Den Attiny 13-5D hast Du wohl programmiert, er gibt an Port 4 Impulse aus.
?? Die laufen jetzt nicht wirklich mit 9,6 Mhz, oder? Bei zwei AA-Zellen?
tiny13 Datenblatt schrieb:
• Operating Voltage:
– 1.8 - 5.5V for ATtiny13V
– 2.7 - 5.5V for ATtiny13
• Speed Grade
– ATtiny13V: 0 - 4 MHz @ 1.8 - 5.5V, 0 - 10 MHz @ 2.7 - 5.5V
– ATtiny13: 0 - 10 MHz @ 2.7 - 5.5V, 0 - 20 MHz @ 4.5 - 5.5V
Die Standardeinstellung (9,6 Mhz, und CKDIV8 = 1,2 Mhz) ist ok, aber mit 9,6V laufen die Tinys nur bis 2,7V innerhalb der Spezifikation.
 

Teddy-Teufel

Geoguru
stonewood schrieb:
Die Standardeinstellung (9,6 Mhz, und CKDIV8 = 1,2 Mhz) ist ok, aber mit 9,6V laufen die Tinys nur bis 2,7V innerhalb der Spezifikation.
Ich habe sie nur so eingestellt, wie Emalaith sie haben wollte, er hatte mit seinem Adapter Schwierigkeiten und hat gebeten DCBA auf 9,6 einzustellen, bei allem Weiteren halte ich mich raus. :^^:
 

Emalaith

Geocacher
so werden diese wieder von einem Adapter erkannt ;)
damit läuft später kein RL ;)
Danke für deine Hilfe Teddy-Teufel

Edit: Die Tinys sind bei mir wieder alle heile eingetroffen. Nochmal vielen dank, werden auch alle wieder erkannt :p Werde mir bei Gelegenheit mal einen Programmer selber bauen.
 

nhedgehog

Geocacher
Da hier http://www.geoclub.de/viewtopic.php?f=57&t=50024 schon wieder übers "Ausmessen" :eek:ps: diskutiert wird und ich die Schnasemannsche Variante mit der Onboard-Programmierung (Reaktivlicht mit Teachin der Blinksequenz - LEDonly Version mit AD-Wandlung - für ATtiny13V) einfach genial fand, hier noch einmal meinen Senf dazu.

Problem:
1) Ich konnte trotz verschiedener Messungen nicht die ideale Taschenlampenschwelle (TaLaSchw) finden, die das Ding empfindlich genug zur Auslösung über weite Entfernungen macht und trotzdem nicht zu einer wilden Flackerei in der Dämmerung führt.
2) Eine Tagerkennung zum Energiesparen wäre auch nicht schlecht.
3) Der Programmierplatz im Attiny war schon randvoll.

Lösung:
In meiner Lösung hab ich versucht, die Vorteile der LDR-Variante mit der LED-only analog-Variante zu verknüpfen.
1) Nach verschiedenen Versuchen zeigte sich, daß die Lichtwerte der ausgemessenen LEDs (LW) sich am ehesten durch eine quadratische Formel ausdrücken lassen: Wert^2/50 oder sowas in der Art. War aber zu Speicherintensiv, daher hab ich die TaLaSchw durch Verdopplung des LW definiert und noch eine extra Dämmerungsschwelle eingefügt.
2) Falls in 254 aufeinanderfolgenden Meßzyklen der Tag kontinuierlich erkannt wurde, prüft das RL nur noch alle 8 Sekunden ob es Nacht ist. - Code stammt aus der LDR Variante
3) Das war das größte Problem. Wurde hauptsächlich durch andere Variablendefinitionen erreicht.

Code:
' Version 1.12 4.11.2010
' (c) geoclub & schnasemann


' Teachin Möglichkeit bei Tag und Brücken der Pins 5 und 6.
' Während Blinken Brücke entfernen, nach Blinkende mit Brücken von Pin 5 & 6 Muster einlernen
' Löschen und Umschalten auf Standardblinken durch Brücken der Pins über das Blinkende hinaus

' changelog
' 03.11.10 (nhedgehog) Speicheroptimierung (z.B.Variablen umdefiniert um Speicher zu sparen), Tagerkennung eingebaut, dynamische TaLaschwelle
' 31.10.09 Rundenblinker in die Dunkelphasenerkennung verschoben
' 03.11.09 Rundenzähler aus, Hub auf 14 gesetzt
' 07.11.09 Version 1.10. automatisches Erkennen des Programmierendes
' 28.02.10 Version 1.11, Bugfix Ausgabezähler Schieben

$regfile = "ATtiny13.DAT"
$crystal = 128000                                           'Reale Frequenz des internen 128kHz-Oszillators
$hwstack = 10                                               'default use 32 for the hardware stack
$swstack = 20                                               'default use 10 for the SW stack
$framesize = 20                                             'default use 40 for the frame
$eeprom                                                     'the following DATA lines data will go to the EEP file

Data &B00000000
Data &B01010101
$data


Stop Ac

Config Portb = &B11101110                                   'Portb.4 und Portb.0 auf 'Eingang' schalten
Portb = &B00000001                                          'keine Pullups zuschalten, nur PB0

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 Byte
Dim Wert2 As Byte
Dim Schwelle As Byte
Dim Anzahl As Byte
Dim Runde As Byte
Dim Merker As Byte
Dim Eepromz As Byte
Dim Zaehler As Byte
Dim Tagzaehler As Byte
Dim Teachin As Bit
Dim Entprell As Byte
Dim Result As Byte
Const Dunkelwert = 18                                       ' Wert, ab dem Nacht erkannt wird (18)
Runde = 0
Portb.1 = 0                                                 'Masse für portb.0

Do
If Tagzaehler >= 254 Then
'(   Config Portb.4 = Output                                  'im Tagmodus alle 8 sek flashen zum Test und Schlafen
    Portb.4 = 1
    Gosub Warte16ms
    Portb.4 = 0
')
   Gosub Warte8s                                            'Energiesparen wenn es hell ist nur alle 8 Sek. die LED checken
   Else
   Gosub Warte250ms                                         'im Dunkeln öfter
End If

Gosub Einlesen
Schwelle = 1.6 * Wert1                                      'Berechnungsformel für Taschenlampenschwelle, je dunkler, je empfindlicher
Schwelle = Schwelle + 4                                     ' für die kleinen LED's sonst zu empfindlich, die großen ohne

If Wert1 >= 15 Then                                         'Geflacker bei Dämmerung vermeiden
Schwelle = Schwelle + 8
End If

If Wert1 =< Dunkelwert Then
   Tagzaehler = 0                                           'Tagzähler auf 0 setzen wenn die Nacht beginnt
   If Wert2 >= Schwelle Then
   Gosub Blinken
   End If
   Else
   If Tagzaehler =< 254 Then                                'verzögerte Tagerkennung, damit die Tala nicht mit der Sonne verwechselt wird
   Tagzaehler = Tagzaehler + 1
   End If
End If


If Wert1 >= Dunkelwert Then                                 'bei Tag oder Dauerlicht
   Teachin = Pinb.0
   If Teachin = 0 Then                                      ' Teachin beginnt
      Gosub Blitz
      Teachin = Pinb.0                                      ' nicht mehr gedrückt, dann einlernen
      If Teachin = 1 Then
         Config Portb.4 = Output
         Portb.4 = 0
         Runde = 0
         For Eepromz = 1 To 62
            Merker = 0
            For Zaehler = 1 To 8                            'bitzähler
               Result = 0
               Rotate Merker , Left
               For Entprell = 1 To 5
                  If Entprell > 1 Then
                     Gosub Warte16ms
                  End If
                  Teachin = Pinb.0
                  If Teachin = 0 Then
                     Result = Result + 1
                     Portb.4 = 1
                  Else
                     Portb.4 = 0
                  End If
               Next Entprell
               If Result > 2 Then
                  Merker = Merker + 1
                  Runde = Eepromz                           ' Merken, wann als Letztes eine "1" getastet wurde
               End If
            Next Zaehler
            Writeeeprom Merker , Eepromz
         Next Eepromz
         If Runde < 62 Then
            Incr Runde
            Merker = &B01010101                             ' Zum Schluss magic byte an das Ende schreiben
            Writeeeprom Merker , Runde
         End If
         Gosub Blitz
      Else                                                  ' Teachin immer noch gedrückt
         Merker = &B01010101                                ' Magic byte schreiben, damit Programmierung löschen
         Writeeeprom Merker , 1
         Gosub Warte250ms
         Gosub Warte250ms
         Gosub Warte250ms
         Gosub Warte250ms
         Gosub Blitz
         Gosub Blitz
         Gosub Warte8s
      End If
   Gosub Blinken
   End If
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 5                                         'Anzahl des vorprogrammierten Blinkens (10)
   Portb.4 = 1
   Gosub Warte16ms
   Portb.4 = 0
   Gosub Warte250ms
Next Anzahl
Return

Einlesen:
Start Adc
Config Portb.4 = Output                                     'LED "entladen"
Portb.4 = 0
Gosub Warte16ms
Config Portb.4 = Input
Portb.4 = 0
cbi adcsra,7                                                'ADEN = 0
Gosub Warte16ms
sbi adcsra,7                                                'ADEN = 1
Wert2 = Getadc(2)                                           'Spannung der LED messen
Stop Adc
Return


Blinken:
Config Portb.4 = Output
Portb.4 = 0
For Eepromz = 1 To 62
   Readeeprom Merker , Eepromz                              'Byte lesen aus Eeprom
   If Merker = &B01010101 Then
      If Eepromz = 1 Then
         Gosub Blitz
      End If
      Exit For
   End If
   For Zaehler = 1 To 8                                     ' ansonsten bitweise schieben
      If Merker > 127 Then                                  ' und blinken
         Portb.4 = 1
         Gosub Warte64ms
         Portb.4 = 0
      Else
         Gosub Warte64ms                                    ' oder Pause
         nop
         nop
         nop
         nop

      End If
   Rotate Merker , Left
  Next Zaehler
Next Eepromz
Gosub Warte8s
Return

Warte8s:
Wdtcr = &B11110001                                          'Watchdog auf 8s einstellen
Reset Watchdog
Powerdown
Return

Warte16ms:
Wdtcr = &B11010000                                          'Watchdog auf 16ms einstellen
Reset Watchdog
Powerdown
Return

Warte64ms:
Wdtcr = &B11010010                                          'Watchdog auf 64ms einstellen
Reset Watchdog
Powerdown
Return

Warte250ms:
Wdtcr = &B11010100                                          'Watchdog auf 250ms einstellen
Reset Watchdog
Powerdown
Return
End
 

Anhänge

  • reaktivlicht_wdt_teachin_autoend_dynamisch.zip
    2,3 KB · Aufrufe: 21

schnasemann

Geocacher
nhedgehog schrieb:
Problem:
1) Ich konnte trotz verschiedener Messungen nicht die ideale Taschenlampenschwelle (TaLaSchw) finden, die das Ding empfindlich genug zur Auslösung über weite Entfernungen macht und trotzdem nicht zu einer wilden Flackerei in der Dämmerung führt.
2) Eine Tagerkennung zum Energiesparen wäre auch nicht schlecht.

Hallo,
manche Angaben verstehe ich nicht.

1.) Es wird immer, egal, wie man das machen will, die Problematik geben, dass ich entweder unempfindlicher werden muss oder Fehltriggerungen in Kauf nehmen muss. Damit muss man leben. Die von mir angegebenen Werte beziehen sich auf die von mir angegebene LED. Da ergeben sich bei unterschiedlichen Typen massiv andere Werte.
2) Tagerkennung hat die Grundsoftware. Sie blinkt nur nicht dabei. Weil ich das nicht wollte und weil es Strom kostet. Und Aufmerksamkeit auf sich zieht.

Mit der Float-Rechnung von 1.6*Wert1=Schwelle brauchst Du viel Platz!
Grüße,
Carsten
 

nhedgehog

Geocacher
schnasemann schrieb:
nhedgehog schrieb:
Problem:
1) Ich konnte trotz verschiedener Messungen nicht die ideale Taschenlampenschwelle (TaLaSchw) finden, die das Ding empfindlich genug zur Auslösung über weite Entfernungen macht und trotzdem nicht zu einer wilden Flackerei in der Dämmerung führt.
2) Eine Tagerkennung zum Energiesparen wäre auch nicht schlecht.

1.) Es wird immer, egal, wie man das machen will, die Problematik geben, dass ich entweder unempfindlicher werden muss oder Fehltriggerungen in Kauf nehmen muss. Damit muss man leben. Die von mir angegebenen Werte beziehen sich auf die von mir angegebene LED. Da ergeben sich bei unterschiedlichen Typen massiv andere Werte.
2) Tagerkennung hat die Grundsoftware. Sie blinkt nur nicht dabei. Weil ich das nicht wollte und weil es Strom kostet. Und Aufmerksamkeit auf sich zieht.

Mit der Float-Rechnung von 1.6*Wert1=Schwelle brauchst Du viel Platz!

Carsten

Hallo Carsten,
1) Also meine Messungen haben gezeigt, daß die Unterschiede so massiv gar nicht sind (Dunkelwert). Der Wert der dann bei (gefühlter) absoluter Dunkelheit gemessen wurde, der ist von LED zu LED sehr unterschiedlich (daher die Zeile):
Code:
Schwelle = Schwelle + 4
.
Das Problem mit der Messerei war aber bei mir, daß ich den Dunkelwert nicht wirklich genau bestimmen konnte, wegen des Streulichts der LaLa. Da ich finde, daß das RL im Stockdunkeln empfindlicher arbeiten soll als im Zwielicht, hab ich versucht das Ganze dynamisch zu lösen und dann auch noch eine Dämmerungsschwelle eingebaut. Ich find es so fehlerunanfälliger. Dynamisch mit der Float Rechnung, da ich die Empfindlichkeit im Dunkeln am Höchsten haben will. Braucht mehr Platz als Addition, aber den hab ich ja jetzt (bin auf 99%).
2) Tagerkennung ja, aber das Abschalten des Testzyklus auf 8s statt 250ms hab ich vermißt. Ob das nun wirklich Energie spart, ich hoffe mal.

Uwe
 

schnasemann

Geocacher
Du hast die 8s nur nicht gefunden ;-)
Sind in der else beim "IF Teachin=0". Runde wird nur nicht mehr ausgewertet. Sonst könnte man da an der Stelle auch den Tagesblinker reinsetzen.
Grüße,
Carsten

PS: Stelle doch bitte Deiner Version mit allen Erklärungen auch ins Wiki rein. Danke.
 

nhedgehog

Geocacher
schnasemann schrieb:
Du hast die 8s nur nicht gefunden ;-)
Sind in der else beim "IF Teachin=0". Runde wird nur nicht mehr ausgewertet. Sonst könnte man da an der Stelle auch den Tagesblinker reinsetzen.
Grüße,
Carsten

PS: Stelle doch bitte Deiner Version mit allen Erklärungen auch ins Wiki rein. Danke.


Die hab ich da natürlich gesehen, dachte aber die gehören einer anderen Funktion.
Bascom ist da wohl ein wenig unübersichtlich und ich nicht wirklich fit darin.
Ne Quatsch, jetzt erinner ich mich, die hab ich ganz zu Anfang rausgeschmissen, weil ich das Gefühl hatte, wenn die Taschenlampe zu lange draufgehalten wurde, daß das RL in den Tagmodus geht und dann wieder 8s vergehen, bis eine erneute Auslösung möglich ist. Da hält dann der gemeine Cacher natürlich die ganze Zeit die Lampe drauf und aktiviert darauf den Tagmodus unbeabsichtigt erneut. Das war es mir zu träge. Mit dem Zähler bis 254 jetzt soll ja dieses unbeabsichtigte Tagmodus-Rutschen verhindert werden.
Bzgl. der Wiki:
1) Mach ich später, da muß man sich doch aber wieder anmelden oder.
2) Willst Du auch den Code fürs Ausmessen der LED da drin haben? Siehe hier:
http://www.geoclub.de/viewtopic.php?f=57&t=50024
Muß aber noch etwas gesäubert werden
Gruß,
Uwe
 
Oben