Dokumentation Geocaching-Magnetbake / Reaktivlicht (W006D004) von Jochen Wienstroth steht unter einer Creative Commons: Namensnennung - Keine kommerzielle Nutzung - Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz. |
Detailbeschreibung W006Z003 | Zurück zur Magnetbake W006Z003 Homepage-Startseite |
Hinweis: Zur Verbesserung der Lesbarkeit empfiehlt es sich, diesen Frame einzeln ohne die Navigationsleiste auf der rechten Seite anzuzeigen. Je nach Browser findet sich das passende Menü unter Rechtsklick » Aktueller Frame » Frame in neuem Fenster/Tab öffnen.
Übersichts-Schaltplan Magnetbake Atmel W006Z003V003
IC1 - AtTiny24A-PU | Zurück zur Magnetbake W006Z003 Listenanfang |
Sowohl aus Gründen der Wartungsfreundlichkeit, als auch für bessere Lötbarkeit des Reed-Kontakts S1 empfiehlt es sich, den Prozessor auf einen 14poligen Präzisionssockel zu setzen. Dieser ist als X3 in der Stückliste enthalten und auch im Bestückungsdruck auf der Oberseite angedeutet. Wenn man den Prozessor sockelt dann muss man beim Einlöten des Reed-Kontakts S1 nicht darauf achten die überschüssige Pinlänge des Anschlusses der unter dem Prozessor landet vor dem Löten zu kürzen, und man muss auch nicht darauf achten erst den Reed-Kontakt und dann den Prozessor einzulöten weil man sonst nicht mehr an das Lötauge des Reedkontakts drankommt.
C1 - 100nF X7R | Zurück zur Magnetbake W006Z003 Listenanfang |
LD2 - Kingbright SC39-11SRWA | Zurück zur Magnetbake W006Z003 Listenanfang |
R2 - 100R THT0207 | Zurück zur Magnetbake W006Z003 Listenanfang |
R1 - 10k THT0207 | Zurück zur Magnetbake W006Z003 Listenanfang |
S1 - MK6-7-B | Zurück zur Magnetbake W006Z003 Listenanfang |
Kratzjumper X4 (Leiterplattenmerkmal) | Zurück zur Magnetbake W006Z003 Listenanfang |
Der Grund für dieses "Bauteil" liegt darin, dass meine Schaltung den Dezimalpunkt mit einer Leitung des ISP-Steckverbinders ansteuert, um genau zu sein mit der Clk-Leitung. Das merkt man auch daran dass beim Programmieren des Prozessors der Dezimalpunkt leicht mitflimmselt. Üblicherweise verursacht das keinerlei Probleme, die meisten Programmiergeräte die mir untergekommen sind können problemlos den Strom treiben, den der Dezimalpunkt in diesem Falle zusätzlich zieht, insbesondere wenn die Schaltung beim Programmieren mit 3V versorgt wird. Wenn man allerdings die Schaltung mit 5V versorgt so kommt es schonmal vor dass der Programmiervorgang fehlschlägt weil das Programmiergerät auf der Clk-Leitung nicht genügend Strom bereitstellen kann um am Prozessor für einen ausreichenden High-Pegel zu sorgen, insbesondere wenn R2 sehr niederohmig gewählt ist.
In diesem Falle kann man dann entweder den Kratzjumper X4 rasch mit einem Cutter zwischen den beiden Lötpads durchtrennen, die Schaltung programmieren, und nach erfolgreicher Programmierung X4 mit einem dicken Lötzinnklecks auf den beiden Pads wieder schließen - oder gleich einen zusätzlichen Widerstand in 0603 einlöten der den Strom nur des Dezimalpunkts zusätzlich verringert.
Ganz ehrlich: Meine Empfehlung ist stattdessen einfach mit 3V zu programmieren und dadurch dem ganzen Ärger aus dem Weg zu gehen. Aber man weiß ja nie. In 99% aller Fälle kann man diesen X4 glaube ich getrost ignorieren.
Jumper K1/4 -> K1/6 (kein Lebenszeichenblitz) | Zurück zur Magnetbake W006Z003 Listenanfang |
Jumper K1/1 -> K1/6 (Ausgabe Auslösungszähler) | Zurück zur Magnetbake W006Z003 Listenanfang |
Wichtig: Die Reihenfolge | Zurück zur Magnetbake W006Z003 Listenanfang |
Reed-Kontakt S1 | Zurück zur Magnetbake W006Z003 Listenanfang |
Wenn man vorhat den Prozessor NICHT zu sockeln, dann sollte man vor dem Einlöten des Reed-Kontakts den Anschluss, der hinterher unter dem Prozessor liegt mit einem Seitenschneider so weit kürzen dass er bündig mit der Platinenoberseite abschließt. Zinn, das der Kapillareffekt in das Bohrloch für den Anschlusspin hineinzieht hält diesen nach dem Löten noch mehr als ausreichend. So sieht ein frisch eingelöteter Reedkontakt mit unter dem Prozessor gekürzten Pin aus:
Wenn man den Arbeitsschritt des Pin-Kürzens vergisst ist das kein Weltuntergang, es führt allerdings dazu dass später der Prozessor entweder sehr hoch oder sehr schief in seiner Position sitzt wenn man ihn nicht sockelt.
Widerstände R1, R2 | Zurück zur Magnetbake W006Z003 Listenanfang |
Pfostenleiste (Programmierstecker) K1 | Zurück zur Magnetbake W006Z003 Listenanfang |
Kondensator C1 | Zurück zur Magnetbake W006Z003 Listenanfang |
7Segment-Anzeige | Zurück zur Magnetbake W006Z003 Listenanfang |
Prozessor | Zurück zur Magnetbake W006Z003 Listenanfang |
Wer mag, kann sich jetzt noch zwei Lötnägel für die Stromversorgung einlöten - je nachdem welche Batterie mit oder ohne Halter verwendet sind sind diese relativ praktisch und ausreichend stabil um auch mal an dickeren Batterieanschlüssen die gesamte Platine zu halten.
Ausgabetext | Zurück zur Magnetbake W006Z003 Listenanfang |
;***************************************************************************** ;***************************************************************************** ;* Auszugebende Nachricht * ;***************************************************************************** ;***************************************************************************** BOTBEG: ; Anfang auszugebende Nachricht ;***************************************************************************** #ifndef GENATDW ; Nachricht nur im Normalbetrieb einbauen ;***************************************************************************** .equ FLCONF = 0b00010010 ; Konfigurationsbyte Flash ; |||||||+--------- Bit0: reserviert, bitte 0 lassen ; ||||||+---------- Bit1: MUX18, Mux 1:8 für konst. Helligkeit ; |||||+----------- Bit2: LDRTST, LDR-Test: Helligkeitsmessung ; ||||+------------ Bit3: REAKTIV, 0=Magnetbake, 1=Reaktivlicht ; |||+------------- Bit4: BLEND, Ausgabe per Segment-Einblendung ; ||+-------------- Bit5: UPSDWN, Ausgabe "auf dem Kopf" ; |+--------------- Bit6: JWUPSD, LD2 180° gedreht eingelötet ; +---------------- Bit7: JWREAK, Reaktivlicht RC á la JWie ;.equ ADAUER = 80 ; Anzeigedauer jedes Zeichens x10ms, (NORMAL) .equ ADAUER = 5 ; Einblendedauer pro Segment x10ms, (BLEND) ; Beispiel: 80 = 800ms Anzeigedauer ;.equ PDAUER = 5 ; Pausenzeit nach jedem Zeichen x10ms, (NORMAL) .equ PDAUER = 60 ; Haltezeit nach jedem Zeichen x10ms, (BLEND) ; Beispiel: 5 = 50ms Pausenzeit .equ DSCHWELL = 48 ; Dunkel-Schwelle: Bei kleinerer Helligkeit ; schaltet Reaktivlicht in Nachtmodus .equ HSCHWELL = 128 ; Hell-Schwelle: Bei größerer Helligkeit ; schaltet Reaktivlicht in Tagmodus .equ SPRUNG = 5 ; Sprunghöhe: Höherer Sprung löst Reaktiv- ; licht im Dunkelmodus aus. .db FLCONF, ADAUER ; Flash-Config, Anzeigedauer ablegen .db PDAUER, DSCHWELL ; Pausen-Dauer, Dunkel-Schwelle ablegen .db HSCHWELL, SPRUNG ; Hell-Schwelle, Sprunghöhe ablegen .dw ((BOTEND-BOTBEG-4)<<1) ; Länge des Strings (automatisch errechnet) ;***************************************************************************** ; Eigentlicher Ausgabe-String ;***************************************************************************** .db "HALLO FINDE N48*51.493 E002*17.670 und H=324" .db "PIEPS " ;***************************************************************************** ; Ende eigentlicher Ausgabe-String ;*****************************************************************************Fangen wir mal oben bei der ASCII-Malerei an. Mit dem "Konfigurationsbyte Flash" kann man verschiedene Konfigurationsoptionen, die die Software mit sich bringt ein- oder umschalten. Der Atmel-Assembler hat leider keine elegante Möglichkeit "Einzelbits" als Variable anzulegen, daher das Hilfskonstrukt mit einer als 8Bit-Binärwert angelegten Byte-Variable und der ASCII-Malerei darunter die anzeigt, welches Bit des Wertes welche Funktionalität mit sich bringt. Da der Platz für Kommentare hinter der ASCII-Malerei nicht besonder groß ist hier eine etwas ausführlichere Erklärung der einzelnen Optionen:
Bit1: MUX18 Mit diesem Konfiguratonsbit schaltet man das 1:8 Multiplexen der Anzeige ein,
so dass immer nur maximal ein einzelnes Segment leuchtet und so den vollen Strom durch den
Vorwiderstand R2 abbekommt. Das angesteuerte Segment wird mit 1kHz Takt gewechselt, so dass
sich insgesamt eine Refresh-Frequenz für das Zeichen von 125 Hz ergibt was ausreichend
flimmerfreie Darstellung ermöglicht. Auf diese Weise erscheinen alle Zeichen auf der Anzeige
gleichmäßig hell unabhängig davon wie viele Segmente das Zeichen benutzt - eine "1" ist genauso
hell wie eine "8". Nachteil: Durch das doch schon recht hohe Verhältnis von 1:8 beim Multiplexen
kommen die Anzeigen doch schon in einen Bereich, wo das Verhältnis Segmentstrom zu
Segmenthelligkeit langsam etwas nichtlinear wird. Auch der Innenwiderstand der Portpins als
Ausgang macht sich hier langsam bemerkbar wenn der gesamte Strom immer auf einem einzigen
Ausgangspin liegt und sich nicht verteilt. So kommt es dass eine gemultiplext dargestellte "8"
immer etwas dunkler ist als eine statisch dargestellte "8". Meiner persönlichen Meinung nach
ist das aber immer noch mehr als hell genug und wiegt den hässlichen Schönheitsfehler dass bei
statischer Darstellung alle Zeichen unterschiedlich hell sind je nachdem wieviele Segmente
benutzt sind mehr als auf.
Wobei wir dann auch schon bei der anderen Ausgabeoption sind die genutzt wird wenn dieses
Konfigurationsbit 0 ist: Hier werden alle benutzten Segmente gleichzeitig angesteuert, der
Strom durch den Widerstand R2 verteilt sich dann gleichmäßig auf alle Segmente. Dies bringt
maximale Helligkeitseffizienz und ist zusätzlich auch als Option gedacht für Menschen die
jedem Segment der Anzeige einen eigenen Vorwiderstand spendieren.
Bit2: LDRTST Mit diesem Konfigurationsbit schaltet man bei Reaktivlichtern einen Debug-Modus ein, der nichts anderes macht als ständig hintereinander durch ein Leerzeichen getrennt den gemessenen Helligkeitswert des LDR auszugeben. So kann man 1.) testen, ob die Helligkeitsmessung überhaupt funktioniert, und 2.) entscheiden, ob eventuell eine Feinanpassung des Werts von R1 oder der in der Software hinterlegten Schaltschwellen für Hell- und Dunkelmodus sinnvoll sind. Die Ausgabe der gemessenen Helligkeit erfolgt als Hex-Zahl, eine Umrechnung nach dezimal muss wieder selbst mit dem Taschenrechner vorgenommen werden.
Bit3: REAKTIV Wie der Name schon erahnen lässt schaltet man mit diesem Konfigurationsbit um ob es sich um ein Reaktivlicht (Bit=1) oder eine Magnetbake (Bit=0) handelt. Man sollte tunlichst nicht versuchen eine Schaltung mit einem LDR in der Software als Magnetbake zu konfigurieren, der in diesem Fall als Digitaleingang konfigurierte Pin wird bei anliegenden analogen Spannungen im digitalen Niemansland vermutlich fiese Querströme ziehen. Eine Schaltung mit Reedkontakt als Reaktivlicht konfiguriert könnte durchaus problemlos funktionieren - wird aber allein aus Stromverbrauchsgründen nicht empfohlen.
Bit4: BLEND Animierte Zeichen für Spielkinder. Mit diesem Bit gibt man an, ob die
Ausgabe der einzelnen Zeichen "springend" von Zeichen zu Zeichen mit Pause dazwischen
("NORMAL", Bit=0) oder "einblendend" Segment für Segment nacheinander ("BLEND", Bit=1)
erfolgen soll. Wenn das Bit=0 ist und damit eine "NORMAL"-Ausgabe gewünscht ist wird
jedes auszugebende Zeichen für eine Zeit ADAUER angezeigt, und anschließend für eine
Zeit PDAUER die Anzeige ausgeschaltet (Um eine Unterscheidung von "Doppelbuchstaben" zu
ermöglichen). Ganz klassisch. Wenn die Ausgabe einblendend gewünscht ist dann wird bei
jedem Zeichenwechsel die Anzeige gelöscht, und dann nacheinander für die Anzeigedauer
ADAUER jeweils ein Segment nach dem anderen hinzugefügt. Gestartet wird mit dem Dezimalpunkt,
anschliessend Segment g, Segment f, ..., bis Segment a. Für den Betrachter
sieht das aus einiger Entfernung so aus als würde sich das Zeichen von der Mitte aus
langsam "gegen den Uhrzeigersinn" aufbauen. Wenn alle Segmente eingeblendet sind wird
anschließend das Zeichen noch für die Zeit PDAUER auf der Anzeige gehalten bevor zum
nächsten Zeichen gewechselt wird.
Dieses Bit ist eigentlich ein "Überbleibsel" - ich hatte ursprünglich versucht eine Art
"scrollende Darstellung" wie bei meiner DotMatrix-Magnetbake (W006Z005) zu realisieren,
aber alle Versuche in diese Richtung sahen durch die maximal möglichen 3 Scrollschritte...
scheiße aus. Dann stand ich da und dachte mir "jetzt hast du schon dieses Konfigurationsbit
und diese Animationsroutine in Software - dann musst du auch irgendwas damit machen".
Woraufhin ich noch ein wenig rumprobiert habe, festgestellt habe dass für meinen Geschmack
dieses "Einblenden" ganz hübsch ist, und dass "linksrum" irgendwie besser aussieht als
"rechtsrum" - und so ist es jetzt da. Auch wenn es wirklich nur Spielerei ist. Ich mag
sie ganz gerne.
Bit5: UPSDWN "Upside-Down". Wenn dieses Bit auf 1 gesetzt wird dann wird die Ausgabe auf der Anzeige "auf den Kopf gestellt". Das ist ganz nützlich wenn man sich akribisch an den Bestückungsplan gehalten hat, seine Schaltung mit einer Batterie in einen Petling einbaut, diesen auf seinen Deckel hübsch auf den Schreibtisch stellt - und dann feststellt dass jetzt bei der Ausgabe irgendwie alle Zeichen falschrum sind. Wenn man den Dezimalpunkt NICHT nutzt (oder damit lebt dass dieser jetzt "links oben" und nicht wie üblich "rechts unten ist) dann kann man dieses Manko so umgehen.
Bit6: JWUPSD "Upside-Down á la JW". Wenn man (wie ich ;)) gerne Petlinge auf ihren Deckel stellt, aber auch gerne den Dezimalpunkt (z.B. für Koordinatenangaben) mitnutzt, dann gibt es die Möglichkeit die Anzeige LD2 mutwillig ENTGEGEN dem Bestückungsdruck einzulöten - so dass der Dezimalpunkt dann auf der Seite des Prozessors liegt. Durch Absicht oder Zufall liegen die beiden gemeinsamen Kathoden der Anzeige genau in der Mitte der jeweiligen Pinreihe so dass die Anzeige das mitmacht, und mit dieser Softwareoption kann man die Ansteuerung der Segmente so vertauschen dass dann wieder alles passt. Achtung: Damit das funktioniert muss SOWOHL das Bit "UPSDWN" ALS AUCH das Bit "JWUPSD" gesetzt sein.
Bit7: JWREAK "Reaktivlicht á la JW". Irgendwie hat es mich immer schon gestört dass der übliche LDR/R-Spannungsteiler tagsüber richtig Strom "verheizt" obwohl der LDR hier gar nicht gebraucht wird. Um dieses Manko zu beseitigen (ok, und weil ich dort einen Portpin zu wenig hatte um den Spannungsteiler schaltbar zu machen) habe ich für die DotMatrix-Bake ein Verfahren zur Helligkeitsmessung erfunden, das stattdessen mit einem LDR/C-Glied arbeitet. Und aus "Gleichteilegründen" natürlich auch hier noch mit in die Software gepackt. Abgesehen von mir wird dieses Bit vermutlich niemals jemand auf 1 setzen - die zugehörige Beschaltung ist auch nicht auf dieser Platine als Bestückungsoption vorgesehen. Kinder, lasst dieses Bit bitte immer auf 0.
Die Zahl hinter dem .equ ADAUER = ... gibt (wie bei Bit4: BLEND beschrieben) die
Anzeigedauer jedes einzelnen sichtbaren Zeichens in Vielfachen von 10ms an.
Persönliche Erfahrungswerte für den Normalmodus: 600ms pro Zeichen kommen dem Programmierer,
der die Botschaft schon kennt EWIG langsam vor und sind dem Dosensucher, der sie zum ersten Mal
sieht zu schnell. 800ms bis 1s sind ein halbwegs praxistauglicher Wert, länger als 1s pro Zeichen
ist dann wirklich zum arg gemütlichen Mitschreiben....
Vorschläge für praxistaugliche Wert sind hier jeweils für den NORMAL-Modus und den BLEND-Modus
angegeben und praktischerweise einfach auskommentierbar.
DSCHWELL, HSCHWELL und SPRUNG sind nur bei Reaktivlichtern von Interesse, hier werden
die Helligkeiten konfiguriert bei denen ein Reaktivlicht vom Tag- in den Nachtmodus schaltet
und welchen Helligkeitssprung im Nachtmodus nach oben man mindestens verursachen muss
damit das Reaktivlicht auslöst.
Wichtig ist hier, dass DSCHWELL immer kleiner sein muss als HSCHWELL. Die vorliegenden Werte
haben sich durch experimentieren als ganz praxistauglich erwiesen - natürlich kann auch hier
noch beliebig gespielt werden.
Die eigentliche Nachricht kann einige Zeilen darunter dann in Klartext angegeben werden (die Beispiel- Nachricht führt den Dosensucher zu einem touristisch sehr attraktiven Ziel). Nichtdarstellbare Zeichen (immer wieder beliebt: k,x,m,w und viele mehr) werden als Leerzeichen ausgegeben. Als Zeichensatz ist nur klassisches 7Bit-ASCII implementiert, daher folgende Ausnahme: Das "°"-Zeichen scheint für Dosensucher ganz praktisch zu sein, liegt aber ausserhalb des 7Bit-Raumes und wurde daher kurzerhand auf das "*"-Zeichen gemappt. Die obigen Koordinaten erscheinen also auf der Anzeige als "N48°51.493 E002°17.670". Wer einen Ort westlicher als Greenwich zeigen möchte, muss sich was einfallen lassen - etwas klügeres als "-" ist mir bisher auch noch nicht als Idee gekommen. Wer der Übersichtlichkeit wegen seine Nachricht im Quellcode auf mehrere Zeilen aufteilen will, kann das wie oben gezeigt tun - im Beispiel erscheint das "PIEPS" bündig ohne Leerzeichen hinter dem "H=324". Hinweis: Der Atmel-Assembler kann solche Datenkonstanten nur 16Bit-wortweise ablegen und gibt daher eine Warning aus, wenn man eine ungerade Anzahl Buchstaben pro Zeile hinterlegt. Die Warning kann man entweder ignorieren (es wird bei der Ausgabe automatisch ein Leerzeichen angefügt) oder umgehen, indem man ungerade Buchstabenanzahlen selbst nach hinten mit Leerzeichen auffüllt (das ist das Leerzeichen hinter dem PIEPS). Die maximale Länge der auszugebenden Botschaft beträgt 254 Zeichen - das dürfte mehr als genug sein.
Character-ROM | Zurück zur Magnetbake W006Z003 Listenanfang |
.equ SYM_8 = SEG_a | SEG_b | SEG_c | SEG_d | SEG_e | SEG_f | SEG_g ; "8" ; a ; -------- ; | | ; f| |b ; | g | ; -------- ; | | ; e| |c ; | d | ; --------Nehmen wir einfach mal an, man wäre Markenfetischist und wollte sich das Logo einer seltsamen Klamotten- Firma selbst bauen, das aussieht wie eine volle Tankanzeige mit dem Wort "SPRIT" daneben. Dann löscht man zuerst aus der Definition hinter dem .equ alle Segmente raus, die man nicht braucht - und passt danach dann das untendrunter als Kommentar gemalte Symbol an, damit man im Quellcode schon sieht, was nachher rauskommt:
.equ SYM_ESP = SEG_a | SEG_d | SEG_g ; Klamotten-Symbol ; a ; -------- ; ; ; g ; -------- ; ; ; d ; --------Natürlich hat das Ganze einen eigenen Namen bekommen (SYM_ESP), damit man es nachher wiederfindet. Diesen Namen trägt man nun unten in der Tabelle an der Stelle des Zeichens ein, das er ersetzen soll. Ich hab mir mal spontan das Dollar-Zeichen ausgesucht als Eselsbrücke dass dieser Mode-Mist eh immer zu teuer ist:
; 0x20+ ; 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 ; Leer ! " # $ % & ' .db SYM_leer, SYM_leer, SYM_Anf, SYM_leer, SYM_leer, SYM_leer, SYM_leer, SEG_bDiese Zeile editieren wir nun zu:
; 0x20+ ; 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 ; Leer ! " # $ % & ' .db SYM_leer, SYM_leer, SYM_Anf, SYM_leer, SYM_ESP, SYM_leer, SYM_leer, SEG_bund finden damit an fünfter Position der Zeile (oder mit dem Wert 0x24) unser teures Firmenlogo wieder. Das erscheint jetzt immer genau dann auf der Anzeige, wenn im Ausgabetext ein $ enthalten ist. So einfach ist das.... Viel Spaß beim Malen - und ich hoffe, die Firma mit der Tankanzeige verzeiht mir, dass ich sie als (schlechtes) Beispiel an den Haaren herbeigezogen habe. Wobei ich mir gar nicht sicher bin, ob sie dieses Logo heute noch verwenden - zumindest in meiner Jugend, den wilden 80ern, war das noch durchaus gängig.
Fuses | Zurück zur Magnetbake W006Z003 Listenanfang |
Fuse-Einstellungen für Magnetbaken-Software W006S003V004
Ihr müsst also sehen, wie ihr diese Werte (Low=0x62, High=0xDE, Extended=egal) in euren Prozessor
reinbekommt. Viel Vergnügen dabei.
Hinweis1: Der Programmiertakt des Bausteins muss langsamer
als ein Viertel des Prozessortaktes sein - da in meinem Fall der Prozessor mit 1MHz und mit
Vorteiler :8 betrieben wird, muss der Programmiertakt langsamer als 250kHz sein. Bei meinem
Programmer war der nächstlangsamere und passende Takt 125kHz. Die Software selbst ist glücklicherweise
recht kurz, so dass ernsthafte Programmierzeiten selbst bei so gemächlichem Takt nicht entstehen....
Hinweis2: Im Download-Archiv ist inzwischen nur noch eine Version (aktuell V004) enthalten, die o.g.
Werte gelten für diese V004. In dieser Version ist über ein Konfigurationsbit einstellbar ob die Anzeige
gemultiplext angesteuert werden soll oder statisch, man muss dafür nicht mehr wie früher unterschiedliche
Software-Versionen verwenden.
Programmablauf ab PowerOn | Zurück zur Magnetbake W006Z003 Listenanfang |
Wenn die Software beim PowerOn durch einen internen Reset gestartet wird, werden als allererstes die PIO- Pins des Prozessors je nach Funktionalität als Ein- oder Ausgang definiert.
Anschließend liest die Software die Fuse-Bits des Prozessors und vergleicht diese mit Sollwerten. Der Sollwert für die Low-Fuses ist 0x62, wird dieser nicht gefunden schaltet die Software das unterste (Low=unterstes) SEG_d an und erhängt sich bewusst in einer Endlosschleife. Der Sollwert für die High-Fuses ist 0xDE, wenn dieser nicht gefunden wird schaltet die Software das oberste (High=oberstes) SEG_a an und erhängt sich bewusst in einer Endlosschleife. Die Extended-Fusebits sind egal und werden daher nicht abgetestet.
Wenn die Fuses erfolgreich kontrolliert wurden, wird als nächstes getestet, ob es sich um einen echten PowerOn oder um einen Reset nach BrownOut handelt. Bei einem echten PowerOn-Reset wird eine Copyright- Meldung "I was here" in hoher Geschwindigkeit auf der Anzeige ausgegeben, bei einem Reset nach BrownOut entfällt diese Nachricht. Hintergrund: Für den Fall, dass jemand die Magnetbake an Solarzellen aus einem GoldCap betreiben möchte (wozu gibt es schließlich den Ultraenergiesparmodus) wäre es irgendwie ungeschickt, wenn die Software nach einem Reset durch absaufende Goldcap-Spannung als Erstes mal selbst wieder Zeichen ausgeben möchte - die den GoldCap sofort wieder bis zum Brownout entladen. Aus einer solche "Endlosschleife" gäbe es selbst bei noch so viel Sonne auf der Solarzelle kein Entkommen. Daher die Lösung, die Copyright-Nachricht nur bei echten PowerOns auszugeben und nicht bei Brownouts - es nervt den Anwender auch nicht ganz so sehr.
Als letzter Schritt, bevor die Bake "scharf" geschaltet wird, wird kurz nachgesehen, ob der Jumper zum Deaktivieren des Lebenszeichen-Blitzes gesetzt ist. Wenn er nicht gesetzt ist, wird der Watchdog- Timer aktiviert, um mit seiner Hilfe (und einem Software-Teiler :2) alle 16s einen Lebenszeichen-Blitz auf dem Dezimalpunkt abzusetzen. Wenn der Jumper gesteckt ist, entfällt dieser Schritt.
Nun ist die Bake "scharf" und kann durch eine Flanke an PA2 aktiviert werden. Der Bake ist es egal, ob es sich um eine steigende oder eine fallende Flanke handelt, jede Flankenart löst die Anzeige aus. Wenn eine Flanke kommt, während die Anzeige noch aktiv ist, wird diese ignoriert - es kommt also nicht zu "Doppelauslösungen" direkt hintereinander. (Klassisches Beispiel: Während die Anzeige noch läuft, nimmt der Dosensucher schon den Magneten vom Reedkontakt weg. Die Anzeige läuft bis zu Ende durch, löst aber trotz der zwischenzeitlich stattgefundenen fallenden Flanke NICHT erneut aus.)
Das war´s dann auch "schon"... ;)
Dokumentation Geocaching-Magnetbake / Reaktivlicht (W006D004) von Jochen Wienstroth steht unter einer Creative Commons: Namensnennung - Keine kommerzielle Nutzung - Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz. |