Creative Commons License Dokumentation Geocaching-Magnetbake / Reaktivlicht (W006D003) 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.


Schaltplan

Bevor ich auf die einzelnen Bauteile eingehe, hier eine verkleinerte Übersicht des Gesamtschaltplans in der Version W006Z003V002. Der Schaltplan ist im downloadbaren Dokumentationsarchiv in erheblich größerer und besserer Auflösung als PDF enthalten, diese Version hier dient nur der Übersicht:

Übersichts-Schaltplan Magnetbake Atmel W006Z003V002

Übersichts-Schaltplan Magnetbake Atmel W006Z003V002

IC1 - AtTiny24A-PU

Zurück zur Magnetbake W006Z003    Listenanfang   
Kernstück der Schaltung. Welche Version des Tiny24 eingesetzt wird, ist prinzipiell relativ egal. Es tut sowohl die Version AtTiny24A-PU, als auch AtTiny24V-10PU. Der AtTiny24A-PU ist momentan bei Reichelt der Billigste, daher habe ich diesen verwendet.
Ein wichtiger Punkt ist allerdings zu beachten: Es gibt vom Tiny24 wohl verschiedene Versionen des verwendeten Dies (Siliziums) im Inneren. Meine Software nutzt ein Feature, das erst relativ spät implementiert wurde: Das softwareseitige Abschalten des Brown-Out-Detektors, während der Prozessor schläft und wartet, bis er per Interrupt-on-Pin-Change aufgeweckt wird. Nur durch Nutzung dieses Features ist der relativ niedrige Ruhestromverbrauch von ca. 110nA bei gleichzeitiger Benutzung des EEPROMs möglich. Und dieses Feature war wohl nicht "von Anfang an" von Atmel implementiert und wurde erst in der Die-Revision E nachgereicht.
Es ist also darauf zu achten, dass nur Prozessoren von Die-Revision E (oder aktueller - wenn da noch was kommen sollte) eingesetzt werden. Meine ältesten AtTiny24V-Exemplare sind von 2009, die sind schon alle Revision E. Die Gefahr, "aus Versehen" einen älteren zu erwischen ist also relativ gering, es sei denn, man hat zu Hause noch ein paar ältere Schätzchen. Laut Atmel ist die Die-Revision auf der Unterseite des Chips gekennzeichnet, allerdings habe ich bisher nirgendwo ein Dokument gefunden, das die diversen Markierungen auf der Unterseite erklärt. Ich vermute mal, das relativ groß gedruckte kleine "e" ist die Revisions-Bezeichnung.... Wer da Genaueres weiß: Ich bin für jegliche Informationen dankbar. Der uralte AtTiny24 (ohne Buchstabe dahinter) ist nicht einsetzbar, da die Fuses den Brown-Out-Detektor auf 1,8V legen und der Original-Tiny24 das so weit ich weiß nicht konnte. Es ist nicht möglich, einfach eine höhere Brown-Out-Schwelle zu definieren, dann verweigert die Software wegen falsch sitzender Fuses den Dienst ;)

C1 - 100nF X7R

Zurück zur Magnetbake W006Z003    Listenanfang   
Ja, diverse Leute meinen, den könnte man auch weglassen, weil er eh nichts tut. Tut euch und dem Prozessor was Gutes und spendiert ihm einen Abblock-Kondensator möglichst nah an den Betriebsspannungs-Pins. Auch wenn in den meisten Fällen die Schaltung auch ohne tut, so tut sie mit doch deutlich stabiler.
Und wenn man diesen Kondensator schon nutzt, dann kann man auch gleich ein "richtiges" Keramikmaterial (wie X7R oder notfalls auch X5R) nehmen, das macht preislich auch keinen Unterschied. Diese beiden Materialien zeichnen sich durch relativ niedrigen Innenwiderstand aus, das bügelt die doch etwas größeren Sprünge im Stromverbrauch der Schaltung zumindest ein wenig glatt und beruhigt den ansonsten recht ängstlichen Brown-Out-Detektor.
Angenehmer Nebeneffekt: Beim Betrieb ohne Lebenszeichen-Blitz ist der Stromverbrauch der Schaltung so klein, dass sie problemlos mehrere Minuten aus dem 100nF-Kerko leben kann und so höchstwahrscheinlich im Falle eines Batteriewechsels gar nicht mitbekommt, dass zwischendurch mal die Spannung weg war. Spart die Aufwachmeldung beim Programmstart.

LD2 - Kingbright SC39-11SRWA

Zurück zur Magnetbake W006Z003    Listenanfang   
Die ursprünglich verwendete Anzeige war mir zu groß, daher bin ich da eine Bauform kleiner geworden. Stolperfalle: Diese Anzeige (in 10mm Ziffernhöhe) hat ein völlig anderes Pinning als die im Reaktivlicht-Wiki vorgeschlagene Type. Also nicht wundern, wenn das beim Fädeln völlig anders aussieht. Eine vernünftige Pin1-Markierung an der Anzeige habe ich bis heute nicht gefunden, also am sinnvollsten die Orientierung über die Position des Dezimalpunkts festlegen. Der sitzt diagonal gegenüber Pin1.

R3 - 150R 1206

Zurück zur Magnetbake W006Z003    Listenanfang   
Die einzige ernsthafte Variation zur bekannten Schaltung aus dem Reaktivlicht-Wiki. Irgendwie konnte ich mich so gar nicht damit anfreunden, dass bei der Original-Schaltung der Dezimalpunkt nicht nutzbar war. Da die diversen Pins des ISP-Steckverbindes einfach zu schade sind, um sie für die normale Funktionalität unbenutzt zu lassen, hab ich mich da mal bedient.
Allerdings habe ich nicht die geringste Dokumentation bei Atmel gefunden, was man sich so an elektrischen Eigenschaften für die an den ISP-Pins liegende "normale" Funktionalität wünscht, daher war ich hier mal etwas vorsichtig und habe einen "Angstwiderstand" eingefügt. Der hat nebenbei noch den angenehmen Nebeneffekt, dass er den Strom für den Dezimalpunkt noch etwas reduziert, der sonst doch arg hell erscheint.
Der Original Atmel AVRISP MK2 kann den Dezimalpunkt beim Programmieren locker treiben, aber da gerade für die Hobbybastler unglaublich viele unglaublich schwindlige Programmierlösungen auf dem Markt sind, kann man da wenn man ängstlich ist den Widerstand erstmal weglassen und erst nach der Programmierung und Funktionsüberprüfung einlöten und bis dahin auf den Dezimalpunkt verzichten.
Wer den Dezimalpunkt gleichzeitig mit den Segmenten nutzen möchte, der kann auch statt R3 einfach eine Drahtbrücke einlöten.

R2 - 150R 1206

Zurück zur Magnetbake W006Z003    Listenanfang   
Dieser Widerstand bestimmt die Helligkeit der Anzeige und damit maßgeblich den Stromverbrauch des Gesamtgerätes. Wer Strom sparen will, kann hier noch etwas hochohmiger werden (auf Kosten der Helligkeit), wer andere Farben für die Anzeige einsetzen möchte (die üblicherweise im Wirkungsgrad nicht ganz so gut sind wie die SRWA-roten), kann hier noch etwas niederohmiger werden. Verlustleistung ist aufgrund der relativ niedrigen Betriebsspannung des Systems und der im Vergleich dazu recht hohen Flusspannung der Anzeigen kein Thema, die 250mW, die ein 1206er abkann langen da für gewöhnlich allemal. Seit Software-Version V002 wird die Anzeige im Multiplex-Betrieb angesteuert, so dass unabhängig davon, wie viele Segmente ein Zeichen nutzt, alle Zeichen gleich hell erscheinen. Dabei sind jetzt alle Zeichen so hell, wie früher die "8" war. Wem das zu dunkel ist, der kann im Widerstand hier problemlos runtergehen auf 100R oder auch 82R - je nach Betriebsspannung. Ich empfehle 20mA Segmentstrom nicht zu überschreiten.

R1 - 10k 1206

Zurück zur Magnetbake W006Z003    Listenanfang   
Die Originalschaltung wünscht sich (leider) den Schaltkontakt (ehemals LDR) plusschaltend, sonst hätte ich auf diesen Widerstand verzichten können, da auch der Tiny interne Pullups hat, die man für Schaltkontakte, die Interrupts auslösen, sehr gut hätte verwenden können. Um aber nicht zu viele Inkonsistenzen zwischen den einzelnen Schaltungsvarianten zu haben, hab ich mich dann mal an die Vorlage gehalten und nur den Wert verändert. 10k halten den Porteingang sauber Low, und durch das Schließen des Schaltkontakts wird ein Flankensprung nach oben ausgelöst, der wiederum die Textausgabe startet.
Der Wert dieses Widerstandes ist an sich relativ unkritisch, er sollte nicht zu hochohmig sein, damit der Eingang des µC in Ruhe wirklich ein sauberes Low hat, und er sollte aber auch nicht zu niederohmig sein, damit im Falle eines versehentlich geschlossen gelassenen Schalters S1 (zusammenbappen oder verklemmen bei anderweitiger mechanischer Auslösung) nicht der Querstrom durch Schalter und R1 die Batterie leerlutscht.
Wer dauerhaften Stromfluss bei geschlossenem Schalter verhindern will, kann in Reihe zum Schalter noch einen "Flankendetektor" bestehend aus einer Parallelschaltung von (Hausnummer) 100nF und 1M schalten. Dann fließt wirklich nur in dem Moment, in dem der Kontakt geschlossen wird nennenswerter Strom - und ca. 100ms nach Öffnen des Schalters ist die Schaltung wieder auslösebereit. Das grenzt aber fast schon an Luxus.
Hinweis: Die Software ist bewusst so programmiert, dass sowohl bei einer steigenden Flanke, als auch bei einer fallenden Flanke eine Nachricht ausgelöst wird (es sei denn, die nächste Flanke kommt, während gerade schon eine Nachricht angezeigt wird). Damit ist sie völlig flexibel nutzbar auch mit Auslösekontakten, die in Ruhe geschlossen sind.

S1 - MK6-7-B

Zurück zur Magnetbake W006Z003    Listenanfang   
Dies ist der mechanische Schaltkontakt, der die Bake auslöst. Prinzipiell ist es hier egal, ob man einen Reed-Kontakt oder einen Mikroschalter nimmt - wichtig ist nur, dass es sich wirklich um einen schaltenden Kontakt handelt. Der Eingang PA2 des µC ist als Digitaleingang konfiguriert (nur so funktioniert der Trick mit dem Interrupt-on-Pin-Change), der Versuch mit der vorliegenen Software aus der Schaltung ein Reaktivlicht zu machen, indem man S1 durch einen LDR und R1 durch einen erheblich hochohmigeren Widerstand ersetzt wird also gleich mehrfach grandios scheitern. Wer unbedingt ein Reaktivlicht möchte, muss da (erstmal auf längere Sicht) auf anderer Leute Software ausweichen.
Bei der Auswahl des Reed-Kontakts ist zu beachten, dass sich der Hersteller Meder da unterschiedliche Selektierungen nach Auslöseempfindlichkeit gönnt und die "ganz billigen" da schonmal relativ undankbar sind. Ein eventuelles Prellen des Schalters ist völlig unkrititsch und wird in Software problemlos abgefangen. Auch die Strombelastbarkeit des Schalters ist völlig unkritisch, allerdings gibt es einige (mechanisch sehr große) Mikroschalter, die einen gewissen MINDESTstrom brauchen, um die Kontakte "sauber zu halten". Bei Reedkontakten passiert einem das aber definitiv nicht...

Jumper K1/4 -> K1/6 (kein Lebenszeichenblitz)

Zurück zur Magnetbake W006Z003    Listenanfang   
Ein ganz netter Gag - sowohl für die Funktionalität, als auch zum klassischen Schwanzlängenvergleich "meine Koordinatenanzeige braucht weniger Ruhestrom als deine". Der "moderne" 6polige ISP-Steckverbinder ist zwar bei weitem nicht so praktisch multifunktional wie der "alte" 10polige - dafür aber ein wenig kleiner. Nun ja, man nimmt, was man bekommt. Eine klassische Jumperkappe im Raster 2,54mm passt nach dem Programmieren wunderbar zwischen Pin4 und Pin6 dieses Steckverbinders. Für Menschen, die ihre Technik gerne besonders unauffällig oder besonders stromsparend möchten oder einfach nur zu faul sind, die Leitung für den Dezimalpunkt noch zu ziehen gibt es die Möglichkeit, den Lebenszeichen-Blitz auf dem Dezimalpunkt zu deaktivieren. Genau das tut man, indem man auf diese Pins einen Jumper steckt.
Der Zustand des Pins wird nur beim Einschalten der Versorgungsspannung oder bei einem Reset eingelesen, nicht während des Betriebs, daher ist nach Ziehen oder Stecken des Jumpers ein Neustart erforderlich. Falle: Ohne Lebenszeichen-Blitz braucht die Schaltung so wenig Strom, dass sie nach Entfernen der Versorung "in Ruhe" locker noch längere Zeit (bis zu Minuten) aus dem 100nF-Glättungs-Kerko C1 leben kann. Um ganz sicher zu sein, dass der Prozessor auch wirklich neu startet entweder einen echten Reset auslösen oder die Anzeige auslösen oder die Spannung über C1 einfach kurzschließen.
Ein gesetzter Jumper kann während des Betriebs ruhig auf Pin4 und Pin6 steckenbleiben und benötigt keinen weiteren Strom. Bei meinem Exemplar habe ich mit gestecktem Jumper einen Ruhestrom von etwa 110nA bei 22°C Umgebungstemperatur und 3,6V Betriebsspannung gemessen. Das ist schon... verdammt wenig.

Jumper K1/1 -> K1/6 (Ausgabe Auslösungszähler)

Zurück zur Magnetbake W006Z003    Listenanfang   
Die Schaltung zählt intern im EEPROM die Anzahl ihrer Auslösungen mit. Statistikfreunde können sich diesen Zählerstand auch anzeigen lassen: Wenn man z.B. mit einer Krokostrippe eine Verbindung von Pin1 nach Pin6 des ISP-Steckverbinders legt, dann wird nach der nächsten Auslösung der Bake der Zählerstand des Auslösezählers in hexadezimaler Form ausgegeben. Da das Ganze nur zu Debug-Zwecken dient, hab ich mir eine aufwendige Umrechnung nach dezimal gespart, Division durch 10 ist in Assembler... igitt. Einen Taschenrecher zur Umrechnung von Hex nach Dez hat so ziemlich jeder Mensch auf seinem Rechner.
Der Zähler ist ein 16Bit-Zähler, d.h. nach 65535 Auslösungen läuft er über und fängt wieder bei 0 an, aber das dürfte den wenigsten Menschen passieren.... Zurückgesetzt wird der Zähler entweder durch ein Chip Erase beim Neuprogrammieren oder durch ein explizites EEPROM-Erase per Programmiertool.
Vor dem Zählerstand wird noch ein Unterstrich (SEG_d) ausgegeben, um den 4ziffrigen Zählerstand von der eigentlichen Ausgabenachricht zu trennen.


Aufbauanleitung

SMD-Bauteile

Zurück zur Magnetbake W006Z003    Listenanfang   
Da die Platine doch recht kompakt gehalten und eng bestückt ist, funktioniert die Bestückung nur, wenn eine bestimmte Reihenfolge eingehalten wird - sonst kommt man eventuell an den einen oder anderen Lötpunkt später nicht mehr heran.

Zuallererst sollten die SMD-Bauteile bestückt werden. Diese sind am Kleinsten und man braucht am ehesten "Rangierplatz" um mit dem Lötkolben an die entsprechenden Lötpads heranzukommen. Im Gegensatz zu klassichen bedrahteten Bauteilen haben SMD-Teile keine Löcher, die sie irgendwie beim Löten fixieren und verhindern, dass sie wegrutschen. Die meisten Menschen haben dann auch noch irgendwie eine Hand zu wenig, um gleichzeitig das Bauteil, den Lötkolben und das Zinn zu halten. Daher sollte man sich den Lötprozess eines SMD-Bauteils in mehrere Schritte aufteilen:

  1. Benetzen EINES Lötpads mit etwas Zinn
  2. Anheften des Bauteils
  3. Verzinnen des zweiten Lötpads
In Bildern sehen die 3 Schritte nacheinander dann folgendermaßen aus:

Die 3 Schritte des SMD-Lötens
3 Schritte, um SMD-Bauteile zu löten

Am Anfang ist es etwas gewöhnungsbedürftig, dass man beim SMD-Löten erheblich weniger Zinn und dafür im Zweifelsfalle etwas mehr Flussmittel braucht als beim THT-Löten, aber üblicherweise gewöhnt man sich zumindest bei so großen SMD-Bauformen doch relativ schnell daran. Hinweis: Auf der Unterseite glänzt die Platine so, weil ich sie direkt beim "Wareneingang" mit Lötlack SK10 eingesprüht habe. Das erleichtert das Löten der SMD-Bauteile nochmal ungemein und sorgt für eine noch bessere Lagerfähigkeit der Platinen.

Reed-Kontakt

Zurück zur Magnetbake W006Z003    Listenanfang   
Als nächstes sollte der Reed-Kontakt bestückt werden, da seine Anschlüsse später unter anderen Bauteilen liegen und man daher nicht mehr an die Lötstellen kommt, wenn Prozessor und 7Segment-Anzeige bestückt sind. Gerade weil sie nachher unter anderen Bauteilen liegen sollte man hier eventuell schon vor dem Verzinnen wenn der Kontakt in der Platine steckt die überstehenden Drahtenden abkneifen, damit später weder Prozessor noch Anzeige auf diesen aufsitzen:

Einlöten des Reed-Kontakts mit gekürzten Pins
Einlöten des Reed-Kontakts mit gekürzten Pins

Pfostenleiste (Programmierstecker)

Zurück zur Magnetbake W006Z003    Listenanfang   
Das Einlöten der Pfostenleiste ist relativ unkritisch, die Löcher für der Pfostenleiste sind bewusst recht eng, so dass diese eventuell mit etwas Kraft eingesetzt werden muss. Das hat wiederum den Vorteil, dass man sich nicht beim Löten die Finger verbrennt, während man versucht die Pfostenleiste am Herausfallen aus der Platine zu hindern.

Wichtig: Hier wirklich nur die ganz einfachen Pfostenleisten verwenden, für eine Wannenstiftleiste mit Verpolungsschutz sind die Bauteile zu eng positioniert, die passt hier nicht. Damit man sich später beim Programmieren nicht merken muss, wie herum der Programmierstecker auf die Platine gesteckt werden muss, ist auf der Platinenoberseite eine dreieckige Pin1-Markierung zwischen den Lötpunkten für die Betriebsspannung und der Stiftleiste angebracht, die auch bei bestückter Stiftleiste zu sehen ist. Zusätzliche Sicherheit geben die Nummerierungen der Kontakte im Lötstoplack.

Einlöten von Pfostenleiste / Programmierstecker
Einlöten von Pfostenleiste / Programmierstecker

Wichtiger Hinweis: In der vorherigen Platinenversion W006L003V001 (alle Restbestände abverbraucht, aktuell nur noch W006L003V002 verfügbar) war die Stiftleiste um 180° gedreht positioniert, ebenso die Polarität der beiden Versorgungsspannungs-Lötnägel vertauscht. Wer beide Versionen der Platinen im Einsatz hat, sollte hier Vorsicht walten lassen und darauf achten, Stecker und Betriebsspannung bei den Platinen jeweils unterschiedlich anzuschließen. Die Platinen haben eine Versionskennung in Kupfer auf Ober- und Unterseite, am Einfachsten sind sie jedoch folgendermaßen zu unterscheiden: Die "neue" Version W006L003V002 hat kleine Kupferflächen bewusst ohne Wärmefallen auf der Unterseite bei Pfostenleiste und Lötnägeln, die "alte" Version W006L003V001 hat diese nicht.

7Segment-Anzeige

Zurück zur Magnetbake W006Z003    Listenanfang   
Die 7Segment-Anzeige hat am Gehäuse keine ordentliche Pin1-Markierung, dafür sind die Leuchtbalken und der Dezimalpunkt im Bestückungsdruck angedeutet und die deckungsgleiche Positionierung damit kein Problem. Die Anschlusspins der Anzeige sind relativ lang und sollten nach dem Einlöten gekürzt werden. Wenn man beim Reed-Kontakt vergessen hat, dessen Anschlusspins zu kürzen, sitzt die Anzeige eventuell etwas schief auf diesen auf.

Einlöten der 7Segment-Anzeige
Einlöten der 7Segment-Anzeige

Prozessor

Zurück zur Magnetbake W006Z003    Listenanfang   
Als letztes Bauteil wird der Prozessor eingelötet. Da die Platine bewusst den ISP-Steckverbinder implementiert, kann man diesen im Prinzip guten Gewissens direkt und ohne Sockel einlöten, um etwas Bauhöhe zu sparen. Wer Angst hat, sich ausgerechnet dann den Prozessor zu verfusen oder ihn zu töten, kann natürlich auch einen Sockel vorsehen. Der Standard-Reichelt-Präzisionssockel GS14P ist niedrig genug, um die bestückte Platine mit Sockel und Prozessor noch in übliche Petlinge zu bekommen. Die Sockelung des Prozessors hat einen weiteren angenehmen Nebeneffekt, der zum Vorteil gereicht: Ein gesockelter Prozessor verhindert, dass der ISP-Programmierstecker falschherum eingesteckt wird, da dessen Rastnase bei FALSCHER Orientierung mit dem Prozessor kollidiert, bei RICHTIGER Orientierung jedoch elegant zwischen den beiden Lötnägeln für die Versorgungsspannung landet. Bei richtiger Orientierung sollten zusätzlich die Spitzen des Dreiecke als Pin1- Markierung von Platine und Steckverbinder zueinander zeigen.

Einlöten eines Sockels für den Prozessor
Einlöten eines Sockels für den Prozessor

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.


Software

Ausgabetext

Zurück zur Magnetbake W006Z003    Listenanfang   
Der bei einer Auslösung auszugebende Text kann vom Anwender relativ komfortabel im "Assembler"-Quellcode MBake.asm selbst in Klartext editiert werden. Dazu muss gegen Ende der Datei der folgende Abschnitt gefunden werden:
;*****************************************************************************
;*****************************************************************************
;*                           Auszugebende Nachricht                          *
;*****************************************************************************
;*****************************************************************************
BOTBEG:                         ; Anfang auszugebende Nachricht
;*****************************************************************************
#ifndef	GENATDW                 ; Nachricht nur im Normalbetrieb einbauen
;*****************************************************************************
.equ ADAUER = 80                ; Anzeigedauer jedes Zeichens x10ms,
                                ; Beispiel: 80 = 800ms Anzeigedauer
	.db ADAUER, low(((BOTEND-BOTBEG-1)<<1))
                                ; Anzeigedauer jedes Zeichens,
                                ; Länge des Strings (automatisch errechnet)

	.db "HALLO FINDE N48*51.493 E002*17.670 und H=324"	
	.db "PIEPS "
;*****************************************************************************
Die Zahl hinter dem .equ ADAUER = ... gibt die Anzeigedauer jedes einzelnen sichtbaren Zeichens in Vielfachen von 10ms an. Persönliche Erfahrungswerte: 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....
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   
Für kreative Köpfe, die gerne selbst Zeichen malen und für Spielkinder, äh, Mühsterieh-Freunde, die gerne seltsame Sonderzeichen definieren liefere ich das Zeichensatz-ROM zum Selbstbauen mit. In der Datei CharROM.inc darf sich Jeder nach Herzenslust austoben, der neue Zeichen definieren möchte oder meine hässlich findet oder Fehler von mir korrigieren möchte. Solltet Ihr entsprechende Ergebnisse weiterverbreiten wäre ich dankbar, wenn ich entsprechend den Lizenzbedingungen CC-BY-NC-SA als Ursprungs-Urheber auch in den modifizierten Dateien erwähnt werde.
Grobes Vorgehen, um sich selbst ein (neues) Zeichen zu definieren: Zuerst sucht man sich im oberen Teil der Datei die Stelle, an der die "8" definiert wird und nimmt sich diese per Kopierpaste als Vorlage, um daraus ein neues Zeichen zu bauen. Die hier:

.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_b
Diese 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_b
und finden damit an fünfter Position der Zeile (oder mit dem Wert 0x24) unser teures Firmenlogo wieder. 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   
Ahhh, der Quell ewiger Unfreude - da sind wir nun also endlich... Aus Gründen, die mir nicht nachvollziehbar sind schafft es die Firma Atmel bis heute nicht, es möglich zu machen, dass man die nötigen Fuse-Settings gleich im Quellcode seiner Software mit angibt. Man muss sie immer "zu Fuß" nachtragen (es sei denn, man nutzt das in der Microcontrollerei relativ ungebräuchliche ELF-Format, das recht aufwendig zusammenzubauen ist), und zu allem Überfluss sieht das Menü zur Fuse-Einstellung bei jeder Programmiersoftware und jedem Programmiergerät völlig anders aus. Und damit die Not auch noch richtig schön groß wird gibt es auch noch die Möglichkeit, sich seinen Prozessor zu "verfusen" (ich liebe dieses Wort....), so dass man hinterher gar nicht mehr drankommt. Je nach Programmiergerät. Langen Elends kurzer Sinn: Das ist alles gar nicht mal so einfach mit den Fuses bei Atmel. Microchip kann das besser.
Nichtsdestotrotz ist natürlich so eine Fuse-Einstellung eine zum Betrieb eklatant wichtige Sache. Meine Software ist darauf ausgelegt, mit EXAKT EINER bestimmten Fuseeinstellung zu funktionieren. Ihr müsst also zusehen, wie ihr diese Einstellung mit eurem Programmiergerät in den Prozessor reinkriegt - sonst weigert sich die Software zu tun. Bei meinem Programmiergerät (AVRISP MK2 an AVRStudio 4.18.692) sieht das Fuse- Programmiermenü folgendermaßen aus:

Fuse-Einstellungen für Magnetbaken-Software

Fuse-Einstellungen für Magnetbaken-Software

Ihr müsst also sehen, wie ihr diese Werte (Low=0x62, High=0xDE, Extended=egal) in euren Prozessor reinbekommt. Viel Vergnügen dabei. Hinweis: 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....

Hinweis: Im Download-Archiv sind neuerdings zwei verschiedene Versionen enthalten, die o.g. Werte gelten für V002 mit Multiplex-Betrieb des Displays für gleichbleibende Helligkeit. Wer die V001 mit unterschiedlicher Helligkeit des Zeichens je nach Anzahl genutzter Segmente schöner findet, findet die entsprechenden ANDEREN Fuse-Werte in einem LiesMich.txt und als Bild im jeweiligen Software-Ordner.

Programmablauf ab PowerOn

Zurück zur Magnetbake W006Z003    Listenanfang   
Nur so "just for info" bzw. zum besseren Verständnis der Funktionalität der Software hier eine Beschreibung, was im Prozessor alles passiert, bis die erste Auslösung kommt:

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"... ;)

Zurück zur Magnetbake W006Z003    Homepage-Startseite

Creative Commons License Dokumentation Geocaching-Magnetbake / Reaktivlicht (W006D003) von Jochen Wienstroth steht unter einer Creative Commons: Namensnennung - Keine kommerzielle Nutzung - Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz.

Letzte Änderung: 2016-04-09 JWie