BLIT2008-Board-DCF77
Aus BraLUG-Wiki
Inhaltsverzeichnis |
Hardware
Schaltplan
Beschreibung
Oben ist der Schaltplan für ein DCF77-Zusatzboard. Kernstück ist ein ATtiny45 (es sollten aber alle aus der gleichen Baureihe, ATiny25/45/85, funktionieren), der autonom das DCF77-Signal eines handelsüblichen DCF77-Modules (z.B. von ELV) decodiert und bereitstellt. Natürlich besteht wieder der Anspruch, dass diese Baugruppe an den TWI-Bus des Basis-Boards angeschlossen werden soll, was allerdings dahingehend nicht so einfach ist, dass es kein Hardware-TWI in dem ATtiny gibt. Aber man soll ja, laut Atmel USI dafür benutzen. Unten aufgeführte Software setzt dies entsprechend um.
Die Schaltung weist keine Besonderheiten auf. Der ATtiny wird ohne Quarz betrieben, also der interne RC-Oszillator gibt den Takt vor. Die externen Bauelemente reduzieren sich damit auf das absolute Minimum, die angeschlossene LED ist eigentlich schon Luxus. Die Firmware ist mitteln geeigneter Programmierhardware auf den Controller zu laden. Die Fuse-Bits brauchen nicht umprogrammiert werden und verbleiben auf den Default-Werten ((lfuse=0x62; hfuse=0xDF)).
Software
- tiny_cs_blink: eigentlich ein sinnloses Programm, aber ganz nützlich, um die Hardware des Tiny-Boards zu testen (dazu muss es via TWI-Bus am BLIT-Board angeschlossen sein). Das Programm besteht aus 2 Teilen:
- Der Tiny-Board-Teil ist in den ATtiny45-Mikrocontroller zu laden. Innerhalb eines Timer-Overflow-Interruptes werden fortlaufend das LED-Pin und das INT-Pin invertiert. Damit blinkt zum einen die LED im Takt des Interruptes und auf der INT-Leitung des TWI-Busses wird ein Impuls erzeugt.
- Im Programm für das BLIT-Board wird lediglich der INT1-Interrupt definiert. Innerhalb der zugehörigen ISR geht die LED auf dem BLIT-Board bei jedem eingehenden Impuls auf der INT-Leitung des TWI-Bus an bzw. aus. Dazu muss natürlich der Jumper auf dem Tiny-Board geschlossen sein. Die Blinkfrequenz der Basis-Board-LED ist halb so hoch wie auf dem Tiny-Board, ist ja auch logisch, wenn mann sich die Programme ansieht... :-).
- tiny_twi: uff, nach ein paar frustrierenden Stunden habe ich es jetzt wohl halbwegs verstanden, wie das mit TWI über USI funktioniert. Wir erinnern uns (bzw. schauen ins Datenblatt...), ein ATtiny25/45/85 hat kein Hardware-TWI sondern nur USI, wo man aber TWI aufsetzen kann (lt. Application Node und Programmbeispiel von Atmel). Vorliegendes Programm setzt dies entsprechend um:
- Tiny-Board: in diesem Teil der Firmware befindet sich die USI-TWI-Slave-Umsetzung. Vordergründig läuft hier ein Timer-Overflow-Interrupt, der zyklisch eine Variable hochzählt und gleichzeitig ein Signal auf der Interruptleitung des TWI-Busses ausgibt.
- BLIT-Board: dieser Teil der Firmware wird aktiv, wenn am Interrupteingang des TWI-Bus ein Signal anliegt. In diesem Fall liest das Board, als TWI-Master, die internen Werte des Tiny-Boards aus und zeigt diese auf dem angeschlossenen LCD an.
- Tiny_dcf77: hier ist das, was ich eigentlich wollte, ein DCF77-Decoder als TWI-Slave. Das Paket besteht aus 2 Teilen:
- Die Tiny-Firmware realisiert den eigentlichen DCF77-Decoder sowie TWI-Slave. Datum/Uhrzeit sind relativ komfortabel via einem TWI-Master, in unserem Fall das BLIT-Basisboard, abfragbar.
- Die Basisboard-Firmware stellt den TWI-Master in diesem System dar, der Datum/Uhrzeit vom Slave abfragt und auf dem angeschlossenen LCD ausgibt.