• 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

moenk

Administrator
Teammitglied
So langsam wäre ich für ein Forum für Elektronik-Basteleien. Wer möchte das moderieren, Sir Vivor? Die vorhandenen Beiträge könnten dann da rüber und etwas aufgeteilt werden.
 
OP
S

Sir Vivor

Geocacher
Windi schrieb:
Sir Vivor schrieb:
Und, hat Monty die kleinen 'Leichen' in Empfang genommen? :lol:
Jawoll hat er. Jetzt muss ich nur noch bis zum nächsten Stammtisch warten bis ich sie wiederbekomme. Glücklicherweise haben wir schon in 3 Wochen unsere Weihnachtsfeier. Ich werd mir aber noch einen großen Schwung bestellen.
Mensch, klasse! Dann kannst Du die Tiny's nach der 'Reparatur' ja wieder (weiter) benutzen. Und die paar Tage zu warten, dürfte ja nicht ganz so schlimm sein... Tja, die Fuse-Bits. Es gibt sogar eine Kombination, an der Du knapp vorbeigeschrammt bist, die die Tiny's total gekillt hätte (im Datenblatt zu finden unter 'Errata'):

3. Device may lock for further programming

Special combinations of fuse bits will lock the device for further programming effectively
turning it into an OTP device. The following combinations of settings/fuse bits
will cause this effect:

- 128 kHz internal oscillator (CKSEL[1..0] = 11), shortest start-up time
(SUT[1..0] = 00), Debugwire enabled (DWEN = 0) or Reset disabled
RSTDISBL = 0
.

...

Problem fix/ Workaround

Avoid the above fuse combinations. Selecting longer start-up time will eliminate the
problem.

Windi schrieb:
Das Reaktivlicht hat übrigens am Stammtisch großen Anklang gefunden.
Das freut mich! Ich denke, wir haben auch schon fast erreicht, was wir wollten. Durch den geringen Bauteil- und Verdrahtungsaufwand nebst (fast) fertiger Software kann das nun nahezu jeder nachbauen, der mag. ;-)

moenk schrieb:
So langsam wäre ich für ein Forum für Elektronik-Basteleien. Wer möchte das moderieren, Sir Vivor? Die vorhandenen Beiträge könnten dann da rüber und etwas aufgeteilt werden.
Ich weiß nicht, ob sich ein eigenes Forum dafür lohnt; ich fand diesen und auch die anderen Elektronik-Threads (ewiger Blinker, analoges reaktives Licht) unter 'Nightcaching' eigentlich ganz gut aufgehoben... Übrigens vielen Dank für das in mich gesetzte Vertrauen bezüglich der Moderation, aber ich habe noch ein eigenes Forum, dem ich meine volle (Administrator-)Aufmerksamkeit widmen möchte.

Viele Grüße,

Sir Vivor
 

Windi

Geoguru
Das mit den Errata-Kombinationen hatte ich im Forum der AVR-Freaks schon entdeckt. Bei einem Tiny 13 V wär es ja nicht so schlimm wenn man ihn schießt. Kostet ja nur ca. 1,50 €. Übler wäre so etwas bei einem Chip der Mega-Serie.
Ich war am Freitag bei uns im Conrad. Ich war schon sehr in Versuchung dort ein paar weitere AVRs mitzunehmen. Als ich dann die Preise gesehen habe habe ich es lieber sein lassen. Die kosten bei der Apotheke Conrad mehr als das doppelte wie bei CSD.

Ein Elektronik-Subforum fände ich gar nicht mal so schlecht. Klar liegt der Haupteinsatzbereich bei Nachtcaches. Aber gerade durch den Microcontroller kann man sehr leicht verschiedene Schaltungen realisieren die man auch am Tage verwenden kann.

Wenn Sir Vivor die Moderation nicht machen will biete ich mich halt an.
 

Monty

Geocacher
AVR Preise sind beim Reichelt sehr günstig, er hat halt nicht alle im Programm.

Also, bei dem Tiny mit den ausgelöteten Beinchen habe ich angefangen. Ich habe ihn in den STK500 hinein gesteckt und ein paar mal hin und her programmiert, bis eine Erfolgsmeldung kam (musste noch einige Kabelbrücken für High Voltage Serial Programming stecken), deswegen kann ich nicht mehr sagen, wie es anfangs programmiert war.

Die 3 Tinys mit den "sauberen Beinchen" hatten komischer weise eine externe Clock Quelle Programmiert. Vermutlich konnten sie deswegen nicht mehr angesprochen werden. Ich habe diese nun auf 128kHz programmiert. Es lag also nicht am Fuse Bit (SPI ausgeschaltet oder ähnliches) und auch nicht an der unglücklichen Kombination mit
The following combinations of settings/fuse bits will cause this effect:
- 128 kHz internal oscillator (CKSEL[1..0] = 11), shortest start-up time (SUT[1..0] = 00), Debugwire enabled (DWEN = 0) or Reset disabled RSTDISBL = 0.
es sei denn, der Tiny stellt den Fuse dann von selbst auf externe Clock (CKSEL=00) um, was ich nicht glaube.

Sollte es also bei den nächsten Tinys wieder nicht klappen, dann versuche einfach mal eine externe Clock drauf zu geben, dann sollten sie wieder ansprechbar sein :wink:

Ich gebe die Tinys dem Alex mit, dieser könnte evtl. den Sascha treffen, dann den Günther und so weiter, oder soll ich sie bis zum Weihnachtstreffen aufheben?
 

radioscout

Geoking
Die Idee mit dem Elektronik-Subforum gefällt mir. Ich habe in diesem und dem Blauen Forum vor langer Zeit einige Vorschläge für Cache-Elektronik beschrieben, aber die findet wahrscheinlich keiner mehr.
 

Windi

Geoguru
Monty schrieb:
Ich gebe die Tinys dem Alex mit, dieser könnte evtl. den Sascha treffen, dann den Günther und so weiter, oder soll ich sie bis zum Weihnachtstreffen aufheben?
Vielen Dank fürs entsperren. Bring sie mir doch einfach zur Weihnachtsfeier mit.
Woher kennst Du eigentlich die Tamara?
 
OP
S

Sir Vivor

Geocacher
Moin,

söderle, wieder ein Stück 'Programm' fertig: Der Teach-In-Modus!

Das Programm (siehe Anhang) tut nun, nach Anlegen der Betriebsspannung oder einem Reset, folgendes:

- 10 x kurz blinken, 1 x lang blinken (Teach-In-Anfang)
- Teach-In-Sequenz aufzeichnen (-> EEPROM)
- 3 x kurz blinken (Teach-In-Ende)
- Hauptschleife: Blinken (Standart- oder Teach-In-Sequenz) nach Auslösung durch kurze Lichtimpulse (Windi-Filter v1)

Die Teach-In-Sequenz (Aufzeichnung und Wiedergabe) dauert, wie die bisherige normale Blinksequenz, ungefähr 5 Sekunden. Das, was man während der Lernphase per Taschenlampe eingibt (Abtastinterval ca. 80 ms), wird später 1:1 wieder ausgegeben. Wird die LED während der gesamten Teach-In-Phase jedoch nicht beleuchtet, dann wird zum Blinken einfach die Standart-Blinksequenz genommen. Wer also keine Lust auf Teach-In hat, läßt die LED während der Aufzeichnung einfach dunkel...

Viel Spaß beim weiteren Herumexperimentieren!

Code:
'============================================================
'
' ************************************
' ***                              ***
' *** Reaktiv-Tiny v0.1 28/11/2005 ***
' ***                              ***
' ************************************
'
' µC: ATtiny13
' +Ub: 3,43 V
' I: 58 µA
' Reichweite Dorcy:
' Reichweite 4D-MagLite:
'
'============================================================

$regfile = "ATtiny13.DAT"
$crystal = 113000                                           'Reale Frequenz des internen 128kHz-Oszillators

Config Portb = &B00011000                                   'Pinb.3 und .4 auf 'Ausgang', Rest auf 'Eingang' schalten
Portb = &B11100111                                          'Pullups zuschalten, außer für Pinb.3 und .4

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

Dim A As Byte
Dim B As Byte
Dim Led_ladezustand As Bit
Dim Led_lichtcode As Byte
Dim Lichtcode_valid As Bit
Dim Hell As Bit

Lichtcode_valid = 0                                         'Merker löschen (EEPROM-Inhalt wird beim Blinken nicht verwendet)
Gosub Blinken                                               '10 x kurz blinken
Portb.3 = 1                                                 ')
Wait 1                                                      '} 1 x lang blinken (Teach-In-Anfang)
Portb.3 = 0                                                 ')
For A = 1 To 63                                             '63 Bytes des EEPROM's haben wir zur Verfügung
    Gosub Led_abfrage
    If Led_ladezustand = 0 Then                             'Wenn LED beleuchtet wurde, dann
        Led_lichtcode = 255                                 'Lichtcode-Byte setzen
        Lichtcode_valid = 1                                 'Merker setzen (EEPROM-Inhalt wird beim Blinken verwendet)
    Else                                                    'andernfalls
        Led_lichtcode = 0                                   'Lichtcode-Byte löschen
    End If
    Writeeeprom Led_lichtcode , A                         'Lichtcode-Byte in's EEPROM schreiben
    Waitms 65                                               '65 ms warten
Next A
For A = 1 To 3                                              ')
    Portb.3 = 1                                             ')
    Waitms 50                                               '} 3 x kurz blinken (Teach-In-Ende)
    Portb.3 = 0                                             ')
    Waitms 50                                               ')
Next A                                                      ')

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 < 50 Then Gosub Blinken       'Wenn es wieder dunkel ist und der Lichtimpuls nur kurz war, dann blinken
    If Led_ladezustand = 1 Then                             'Bei Dunkelheit Merker und Zähler für Lichtdauer löschen
        Hell = 0
        B = 0
    End If
Loop

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                                             'Pullup abschalten, sonst geht's nicht!
    Waitms 20                                               'Entladezeit 20 ms - je kleiner, je unempfindlicher
    Led_ladezustand = Pinb.4                                'Ladezustand einlesen: '1' -> dunkel, '0' -> hell
    Config Portb.4 = Output                                 'Portb.4 wieder auf Ausgang schalten
    Portb.4 = 0                                             'Portb.4 auf Masse schalten
Return

Blinken:
    Portb.3 = 0
    Portb.4 = 0
    If Lichtcode_valid = 0 Then                             'Standart-Blinksequenz (ohne EEPROM-Inhalt)
        For A = 1 To 10
            Portb.3 = 1
            Waitms 50
            Portb.3 = 0
            Waitms 500
        Next A
    Else                                                    'Blinksequenz mit EEPROM-Inhalt
        For A = 1 To 63
            Readeeprom Led_lichtcode , A
            If Led_lichtcode = 255 Then
                Portb.3 = 1
            Else
                Portb.3 = 0
            End If
            Waitms 90
        Next A
    End If
Return

End

Es grüßt...

...Sir Vivor
 
Sir Vivor schrieb:
Moin,

söderle, wieder ein Stück 'Programm' fertig: Der Teach-In-Modus!

Das Programm (siehe Anhang) tut nun, nach Anlegen der Betriebsspannung oder einem Reset, folgendes:

- 10 x kurz blinken, 1 x lang blinken (Teach-In-Anfang)
- Teach-In-Sequenz aufzeichnen (-> EEPROM)
- 3 x kurz blinken (Teach-In-Ende)
Wie währe es mit einer Art Schreibschutz? es kann ja passieren das irgendein Tier / Cacher / Muggle etc... versehentlich oder absichtlich die Stromversorgung kappt oder den Chip resettet... - evtl könnte man dazu die Ports B1 und B2 nutzen - zur Programmierung werden die Beiden kurzgeschlossen (z.B.Steckbrücke, oder aber im Wald ein schweizer Messer) - das macht dann auch den Batteriewechsel im Wald einfacher...
chm

Edit: hab mal versucht das in Code zu fassen, ist aber mangels Hardware (im Moment) ungetestet...
Code:
Check_write_prot:
Dim eeprom_write_prot as bit 
	Config Portb.1 = Input                    'Schalte Portb.1 als Eingang
	Portb.2 = 1                                        'setze Portb.2 auf VCC
	eeprom_write_prot = Pinb.1         'eeprom_write_prot enthält bei aufgehobenen schreibschutz 1, ansonsten 0 
	Config Portb.1 = Output                 'Portb.1 zurücksetzen
	Portb.2 = 0                                        'Portb.2 auf Masse setzen
Return
 

Windi

Geoguru
Ich werde meine Schaltung in Wachs eingießen. Falls ich den Teach-In-Modus überhaupt verwende könnte ich mir höchstens vorstellen ihn per Magneten über einen Reed-Kontakt zu aktivieren.
 
Windi schrieb:
Ich werde meine Schaltung in Wachs eingießen. Falls ich den Teach-In-Modus überhaupt verwende könnte ich mir höchstens vorstellen ihn per Magneten über einen Reed-Kontakt zu aktivieren.

Man braucht die Schaltung ja nur einmal anlernen - die Daten werden dann sicher im EEPROM gespeichert - ich find es nur ein wenig ungünstig das auch beim Reset / Batterietod das Gelernte verloren geht - und wenn jemand den AVR nicht programmieren kann so hat er auf jeden Fall die Möglichkeit einen bestimmten Blinkcode einzustellen - z.B.: langsam blinken links, schnell blinken rechts und dauerhaft leuchten geradeaus.
chm
 
OP
S

Sir Vivor

Geocacher
Moin,

ok, ich werde das nachher mal umsetzen. Ob man das dann per Reed-Kontakt oder 'Schweizer Armee'-Messer bewerkstelligt, sei jedem selbst überlassen... ;-)

Es grüßt...

...Sir Vivor
 

moenk

Administrator
Teammitglied
radioscout schrieb:
Die Idee mit dem Elektronik-Subforum gefällt mir. Ich habe in diesem und dem Blauen Forum vor langer Zeit einige Vorschläge für Cache-Elektronik beschrieben, aber die findet wahrscheinlich keiner mehr.
Gibts ausser Windi noch Freiwillige für so ein Forum? Da wären dann auch Deine Bauanleitungen schön geordnet zu finden. Für jede Bauanleitung oder bei größeren auch für jeden Meilenstein ein Fred, das hätte doch mal was.
 

alex3000

Geowizard
Hmm, vielleicht eher eine Bastelecke? Nicht nur Elektronik-Basteleien, sondern auch Optik (Reflektoren), Cachebehälter etc.? Nur mal so als Vorschlag.
 

Schnueffler

Geoguru
@Windi und die anderen Bastler
Kann mir jemand von Euch 2 fertige Schaltungen incl LED verkaufen? Ich habe leider keine Ahnung von solchen Elektronikbasteleien und von dieser Programmierung (mir fehlt dazu auch die Hardware), würde aber ein Reaktivlicht gerne bei meinem neuen Cache, den ich gerade plane, einsetzten!
 

radioscout

Geoking
Gibts ausser Windi noch Freiwillige für so ein Forum? Da wären dann auch Deine Bauanleitungen schön geordnet zu finden. Für jede Bauanleitung oder bei größeren auch für jeden Meilenstein ein Fred, das hätte doch mal was.[/quote]
Mach ich.
 

Lotti

Geomaster
Froih, wetterbedingt erst heute, ist die liebevoll verpackte Sendung von CSD angekommen. In diesem Sinne:

AFK, Volkmar
 

Lotti

Geomaster
Hilfe,

wenn ich beim BASCOM-AVR IDE den Programmer einstellen will, bekomme ich eine Fehlermeldung:
Code:
The HW-Stack, SW-Stack and frame space may not exceed the chip memory

also irgendwas läuft bei mir falsch (Win-XP auf einem Toshiba Notebook)

Gruss Volkmar

PS: muss die Batterie beim programmieren angeschlossen sein?
 

Starglider

Geoguru
Ich glaube da muss irgendwo noch der Chiptyp auf "ATtiny13" umgestellt werden. Aber frage mich nicht in welchem Menü, ich benutze BASCOM nicht.
 
OP
S

Sir Vivor

Geocacher
Moin,

Schnueffler schrieb:
@Windi und die anderen Bastler
Kann mir jemand von Euch 2 fertige Schaltungen incl LED verkaufen? Ich habe leider keine Ahnung von solchen Elektronikbasteleien und von dieser Programmierung (mir fehlt dazu auch die Hardware), würde aber ein Reaktivlicht gerne bei meinem neuen Cache, den ich gerade plane, einsetzten!
Ich werde in den nächsten Tagen mal eine Art Bausatz zwecks Verkauf fertigstellen und das dann hier bekannt geben, ok?

Lotti schrieb:
Hilfe, ... also irgendwas läuft bei mir falsch (Win-XP auf einem Toshiba Notebook) ... PS: muss die Batterie beim programmieren angeschlossen sein?
Hast Du die Druckerschnittstelle auch richtig konfiguriert? Und: Ja, die Batterie(n) müssen logischerweise angeschlossen sein. Wie soll der Tiny den sonst laufen bzw. funktionieren? In Bascom braucht man nicht extra den Tiny 'einstellen', das tut man im Quelltext bzw. im Programm mit der Zeile '$regfile = "ATtiny13.DAT"'.

Es grüßt...

...Sir Vivor
 
Oben