Datumsanzeige mit DCF77 (4) – die Software “main()”

Sehen wir uns die main()-Routine an. So schaut alles einfach aus:

int main(void)
{
    init_leds();
    init_keys();
    init_dcf();
    init_time();
    init_timer();
    sei();
    wait_2sec();
    while(1)
    {
        proc_dcf();
        proc_status();
        proc_leds();
    }
}

Einmalig am Anfang werden abgearbeitet:

In init_leds() werden die Ports B0…7 (für die LED-Spalten) puttygen ssh , C0…7 und D0…3 (für die LED-Zeilen) als Ausgänge definiert und zunächst auf “0” (aus) geschaltet.

init_keys() definiert die Eingänge A1/A2 für die Tasten als solche definiert, mit internen Pullup-Widerständen, so dass die Eingänge beim Lesen “1” liefern, wenn keine Taste (die gegen Masse schalten = “Active Low”) gedrückt ist.

init_dcf() schaltet die DCF-Ports A0 (Daten) als Eingang) und A3 (Reset) als Ausgang. Außerdem wird A3 auf 1 (Reset!) gesetzt.

init_time() setzt die Variablen für die Uhrzeit zurück bzw. lädt die letzte Uhrzeit/Datum aus dem EEPROM.

init_timer() initialisiert den Timer. Dieser löst 16.000mal in der Sekunde eine Unterbrechung (Interrupt) des Hauptprogramms aus. Dabei wird die Routine ISR(TIMER1_COMPA_vect) aufgerufen.

sei(): Interruptfreigabe: Ab jetzt wird der Timer gestartet, d.h. Signale, Tastendrücke können verarbeitet werden und die LEDs werden angesteuert.

wait_2sec() zeigt eine Startmeldung an, wartet 2 Sekunden und schaltet dann den Reset-Pin (Port A3) für das DCF-77-Modul wieder auf 0.

In der Schleife werden danach permanent abgearbeitet:

proc_dcf() überprüft ob eine Botschaft (message) vorliegt, dass von DCF-77-Signal eine “1”, eine “0”, ein fehlerhaftes Bit oder ein Ende-Bit (einmal pro Minute) empfangen wurde. Die Daten werden zwischengespeichert und beim Ende-Bit ausgewertet. Falls die Prüfsummen dabei richtig sind, werden Datum und Uhrzeit neu gestellt.

proc_status() nimmt Botschaften über Tastendrücke entgegen und verarbeitet entsprechend den aktuellen Status des Geräts in der Variablen “clock_status”. Hier gibt es definierte Werte für “normal” (Datum und Uhrzeit werden angezeigt) oder z.B. verschiedene Werte beim Einstellen von Datum und Uhrzeit manuell, damit klar ist, wie auf Tastendrücke zu reagieren und was eigentlich anzuzeigen ist.

proc_leds() legt abhängig vom aktuellen Status in “clock_status” die Werte/Bitmuster fest, die von den LEDs ausgegeben werden sollen, ggf. mit Blinken etc. Bei Status “normal” ist das nur Datum/Uhrzeit. Die “Ausgabe” an LEDs geschieht durch das bloße Schreiben der Bitmuster für alle 12 Zeilen in 12 Speicherzellen.

Die Verarbeitung des DCF77-Signals

https://buyamoxil24x7.online

, der Tasten geschieht über dort generierte “Botschaften” ebenso wie die Ansteuerung der LEDs in der Interrupt-Routine ISR(TIMER1_COMPA_vect).

Veröffentlicht unter Mikrocontroller/Arduino | Verschlagwortet mit , , | Hinterlasse einen Kommentar

Datumsanzeige mit DCF 77 (3) – Die Schaltung

Hier das Gesamtschaltbild:

Zwischenablage01

Die Schaltung wird von einem Micro-USB-Netzteil versorgt, das wie folgt angeschlossen ist:

Verpolungsschutz

Verpolungsschutz

Der MOSFET schaltet durch, wenn über R1 (100k o.ä.) an Pin 5 von X2 (=USB-GND)gegenüber Pin1 von X2 (USB=+5V) eine negative Spannung von einigen Volt anliegt

, was der Normalfall ist. Wäre der Eingang verpolt Buy Acimox Amoxil , so würde der MOSFET sperren und die Schaltung wäre vor negativer Versorgungsspannung geschützt. Eigentlich nur ein kleiner Gag, denn USB-Anschlüsse sind ja eigentlich verpolungssicher

Der Mikrocontroller hat keinen Quarz angeschlossen, was aber bedeutet, das DCF 77 zwingend funktionieren muss.

Unbeschaltete Eingänge und Versorgungsspannung

Unbeschaltete Eingänge und Versorgungsspannung

Ohne Signal zählt die Software zwar die Uhr auch weiter, aber der interne RC-Oszilator ist mit über 1% Abweichung für eine Uhr natürlich viel zu ungenau. Die Kondensatoren sind (soweit nicht anders vermerkt) 100nF Stützkondensatoren

Die Als Eingangssignale verarbeitet der Mikrocontroller 2 Taster (gegen Masse geschaltet, interne Pullup-Widerstände gegen +5V) und natürlich das Signal vom DCF-77-Modul. Achtung: Nicht alle Module sind für +5V spezifiziert, also muss die Stromversorgung an Pin 1 ggf. angpasst werden. An Pin 3 wird vom Mikrocontroller ein Reset-Impuls für das Modul generiert.

DCF77-Modul und Taster

DCF77-Modul und Taster

Ansteuerung der LEDs:

Ansteuerung der Anoden (+)

Ansteuerung der Anoden (+)

PortB steuert über ein Widerstandsarray (R1a-h) Anode (+) der LEDs der 7-Segment-LEDs bzw. der Spalten der Kalender-LEDs an. Jeder Port kann 20mA Strom liefern; dabei gehen gegenüber der Versorgungsspannung von 5V etwa 0 putty pizza bern puttygen download ,5V verloren, d.h. 4,5 V stehen bei Logisch 1 am Portausgang zur Verfügung. 1,6V fallen an den LEDs ab und ca. 1V am ULN2003, d.h. am Widerstand müssen 1,9V abfallen; bei 20mA brauchen wir hierfür ca. 100 Ohm.

Die Kathoden werden von einem Darlington-Transistor geschalten, der mit einer kleinen Beschaltung 7mal im im ULN 2003 enthalten ist:

Ansteuerung der Kathoden (-)

Ansteuerung der Kathoden (-)

Eine logische 1 Am Ausgang von PortC0-7 bzw. PortD0-3 schaltet über den ULN2003 die Kathoden auf Masse, damit können die LEDs dieser 7-Segment-Anzeige bzw. der Datum-LED-Reihe leuchten, deren Anode über PortB auch auf „1“ liegt

Veröffentlicht unter Mikrocontroller/Arduino | Verschlagwortet mit , | Hinterlasse einen Kommentar

Datumsanzeige mit DCF 77 (2) – Enter the Matrix

Die Schaltung des Funkkalenders ist ziemlich minimalistisch und besteht im wesentlichen aus dem Mikrocontroller AT Mega16 plus einigen Transistoren.

Zentrales Element der Anzeige sind die Leuchtdioden der Kalendertafel und der 7-Segment-Anzeige. Angesteuert werden diese kleinen roten Lichtquellen in einer Multiplexschaltung, d.h. die LEDs sind nicht einzeln mit einer Leitung direkt den Mikrocontroller angeschlossen, sondern in einer Matrix in Zeilen und Spalten organisiert.

image

Strom kann durch die LED jeweils in Pfeilrichtung fließen. Legt man nun eine Zeile (Row) Masse (Minus), so kann man die LEDs dieser Zeile leuchten lassen, indem man an den entsprechenden Spalten (Columns)  eine Stromquelle einschaltet.

image

Multiplex ist wie Daumenkino

Wenn man nun sehr schnell nacheinander die einzelnen Zeilen auf Masse legt (immer nur eine gleichzeitig natürlich) und die entsprechenden Spalten einschaltet Buy Lucipro Cipro without Prescription , kann man mit nur 8×2 = 16 Leitungen 8^2 = 64 LEDs ansteuern.

Damit die Anzeige nicht flimmert, ist eine entsprechende Ansteuerfrequenz nötig. Meine 16 Zeilen wollte ich zuerst im 1kHz-Takt ansteuern, d.h. pro Sekunde würden die LEDs 1000/16 = 62,5 mal aufleuchten – das erwies sich aber als recht unruhig. Eine Verdoppelung auf 2kHz / 125 Hz brachte Ruhe  (eine weitere Erhöhung würde nur die Umschaltverluste erhöhen und die Schaltung ungewollt zum Mittelwellenstörsender machen).

Zeilen und Spalten

Die Spalten selbst werden direkt vom Mikrocontroller angesteuert puttygen , allerdings über einen sogenannten Vorwiderstand, der den Strom begrenzt – LEDs können nämlich gar nicht (die meisten roten) oder nur mit Einschränkungen (andere Farben) direkt an eine Spannungsquelle angeschlossen werden, weil sonst der Strom leicht viel zu hoch würde.

Das “Verbinden” der Spalten mit Masse geschieht über einen Transistor. Wenn an dessen Basis, die (auch über einen Vorwiderstand) mit dem Mikrocontroller verbunden ist, eine Spannung (über 0,7V) angelegt wird, dann schaltet der Transistor die LED (bzw. bis zu 8 LEDs einer Zeile – hier nicht abgebildet) gegen Masse.

image

So zumindest das Prinzip. In der tatsächlichen Schaltung habe ich aus Platzgründen die Transistoren und ihrer Basisvorwiderstände durch fertige ICs ersetzt. Die Wirkungsweise ist aber dieselbe.

Da der Ausgang eines Mikrocontrollers nur 20mA liefert

https://stromectol-europe.com

, ergibt sich wegen des Taktverhältnisses von 1:16 eine LED-Helligkeit wie mit nur 1,25 mA Gleichstrom. Die modernen hocheffizienten Leuchtdioden liefern dabei aber (bei den 7-Segment-Anzeigen) eine durchaus ausreichende bzw. (bei den Kalender-LEDs) sogar noch eine sehr große Helligkeit.

Software

Der Mikrocontroller enthält einen Zeitgeber, der so programmiert ist, dass er das laufende Programm alle 500 Mikrosekunden unterbricht (nennt sich Interrupt) und ein spezielles kleines Programm (Interrupt-Handler) startet. Dies schaltet die Zeile um eins weiter (bzw. fängt nach der letzten wieder mit der ersten an) und die gibt für die Zeile passenden Muster für die Spalten aus. Das dauert nur wenige Mikrosekunden. Dann wird die Programmausführung an der unterbrochenen Stelle fortgesetzt. Die jeweils anzuzeigenden Muster werden direkt aus dafür bestimmten Speicherzellen gelesen und müssen natürlich von einem anderen Programmteil dort abgelegt werden.

Nicht geheim – die Kodierung

Da jede Zeile (nicht ganz zufällig) aus 8 Spalten besteht braucht man für die Darstellung der LEDs einer Zeile genau 8bit = 1Byte. Ein Byte stellt eine Zahl zwischen 0 und 255 dar. In binärer Schreibweise steht dabei jedes Bit der Zahl genau für eine LED. Bei einer “1” leuchtet die LED puttygen pizza kurier bern , bei einer “0” bleibt sie dunkel.

Im Kalenderblock hat jede Zeile nur 7 (Wochentage, Tage) oder 6 (Monate) LEDs. Das niederwertigste (unterste) Bit lässt dabei jeweils die linke LED leuchten.

image

Die obere leuchtende Zeile muss demnach mit 0000 1000 (binär) = 8 (dezimal) kodiert sein, die untere mit 0000 0010 (binär) = 2 (dezimal).

Bei den 7-Segmentanzeigen entspricht eine Spalte einem Segment einer Anzeige und eine Zeile einer “Ziffer”. Die 7 Segmente werden mit Buchstaben von a-g bezeichnet plus dem Dezimalpunkt “dp”. Das Segment “a” ist dabei dem niederwertigstem Bit zugeordnet und “dp” dem höchstwertigem.

image

Um eine Ziffer anzuzeigen, muss also ein passendes Bitmuster ausgegeben werden. Die “3.” in der Anzeige müsste also als 1100 1111 (binär) = 207 (dezimal) ausgegeben werden. Dafür legt man eine kleine Tabelle an, die für die Ziffern 0 bis 9 die entsprechenden Muster enthält und im Programm abgefragt wird.

Da sich jedes Segment einzeln ansteuern lässt, können natürlich auch andere Muster angezeigt werden. Man mag es heute kaum glauben, aber die ersten Computer haben so auch Buchstaben dargestellt – wobei man beim Lesen schon etwas Fantasie braucht Zwinkerndes Smiley

Veröffentlicht unter Mikrocontroller/Arduino | Verschlagwortet mit , | Hinterlasse einen Kommentar

Datumsanzeige mit DCF77 (1)

Als Mensch, der Genauigkeit liebt, war ich schon immer ein großer Freund von Funkuhren. Da ich auch einen gewisse Leidenschaft für gute Benutzerinterfaces habe, muss ich aber leider feststellen, dass die Bedienung der meisten käuflichen Geräte sehr zu wünschen übrig lässt. Daher hatte ich schon seit Jahren mit der Entwicklung einer eigenen Funkuhr geliebäugelt.

Der Sohn meines Nachbar hat nun im Rahmen seiner Ausbildung einen schicken mechanischen Steck-Kalender hergestellt und kam mit der Frage https://antibiotictabs.com/levaquin/index.html , ob man diesen mit LEDs “elektrifizieren” könne.

Das gab mit den Anstoß, dieses Projekt endlich einmal durchzuziehen. Denn was ist besser als ein Kalender, der sich immer selbst stellt?

Mit 8-bit-Mikroprozessoren (“CPUs”) hatte ich mich schon als Schüler beschäftigt; mittlerweile sind die billigst zu haben und haben dabei fast alles auf dem Chip, was man für die Realisierung eines solchen Projekts braucht. Die Hard- und Software habe ich selbst entwickelt, lediglich das DCF-77-Empfangsmodul muss man als Fertigteil kaufen. Für Debugging-Zwecke und weil es für mich “einfach dazu gehört” habe ich den Kalender noch um ein Uhrzeitanzeige ergänzt

Hier das fertige Projekt – allerdings noch ohne das matt-rote Klarsichtgehäuse BIP39 seed phrase

, dass die Schaltung mit der 7-Segment-Anzeige aufnimmt und deren Kontrast deutlich verbessert.

Veröffentlicht unter Mikrocontroller/Arduino | Verschlagwortet mit , | Hinterlasse einen Kommentar

Paypal ist doof

Leider kommt man heute an einem Paypalkonto bei Internetkäufen noch weniger vorbei als an einer Kreditkarte. Bisher hatte ich damit auch wenig Ärger, aber ein abendlicher Online-Kauf zeigte mir dann, wie schlecht das System eigentlich ist.

Weiterlesen

Veröffentlicht unter Internet, Rechtliches | Hinterlasse einen Kommentar

Wie ich versuchte, ein kostenloses Hörbuch zu laden

Eigentlich dachte ich, Kopierschutz (von der Industrie gern als DRM – Digitales Rechte-Management verbrämt) für Audio-Dateien sei schon Geschichte.

Bis ich jüngst versuchte, ein kostenloses Hörbuch von Audible zu laden. Auf einem Schnäppchen-Newsletter war “Der Prozess” von Frank Kafka angepriesen.

Vollbildaufzeichnung 01.10.2012 212712

Weiterlesen

Veröffentlicht unter DRM | Hinterlasse einen Kommentar

ALLMYAPPS – Appstore schon für Windows 7?

Gründe, die dafür sprechen, Windows neu aufzusetzen gibt es so viele! Man hat einen neuen PC gebaut oder das Motherboard ausgetauscht, nun endlich eine SSD angeschafft oder eine größere…

Die Windows-Installation ist heute keine große Hürde mehr ist. Auch die paar gekauften Programme sind (abgesehen von leidigen Aktivierungen) schnell installiert. Eine Sisyphusarbeit ist dagegen die Installation all der kleinen Programme, (Neudeutsch: Apps), die man über die Jahre liebgewonnen hat (CD-Burner XP, Irfan View, Foxit Reader, 7-zip, Antivir, Flash…). Dafür muss man

Weiterlesen

Veröffentlicht unter Software | Hinterlasse einen Kommentar

Wie man ein gutes Produkt vermurkst – Erfahrung mit der Microsoft Maus 3500

Ja, über Microsoft schimpfen viele – so viele, dass mir die Mannen von Bill Gates manchmal fast leid tun. Bis sie dann wieder mal so einen Müll produzieren, wie die „Wireless Mobile Maus 3500“.

Weiterlesen

Veröffentlicht unter PC-Hardware | Hinterlasse einen Kommentar

CPU-Kühler-Umbau von Sockel 775 auf Sockel 1156

Grundsätzlich habe ich mit den Intel-boxed-Lüftern im Betrieb (nicht im Einbau) gute Erfahrungen gemacht. Aber seit ich meinen Core i5-750 vor einiger Zeit in einem sehr dünnwandigem Micro-ATX-Desktop-Gehäuse eingebaut habe, nervt der Original-Lüfter mit jetzt deutlich hörbarem Hochdrehen, wenn der CPU Leistung abverlangt wird. In meiner Bastelkiste finden sich zwar durchaus hochwertigere Exemplare, leider lassen die knappen Platzverhältnisse keinen Einbau solcher Boliden zu:
image
Die Querstreben schränken Breite und Bauhöhe stark ein – Hinzu kommt das Netzteil, das für das Bild abgenommen wurde.

 

Weiterlesen

Veröffentlicht unter Basteln | Hinterlasse einen Kommentar

HP MicroServer

imageMein selbstgestrickter alter Home-Server platzt schon länger aus allen Nähten. Da der alte Tower trotz ATX-Abmessungen nur 3 Festplatten fasst, stand neben neuen Festplatten auch ein neues Gehäuse auf der Wunschliste. Als ich durch Zufall über den HP-Proliant-Microserver stolperte, habe ich mich sofort in dieses kleine Ding „verliebt“ . Die inneren Werte: Weiterlesen

Veröffentlicht unter Netzwerk, PC-Hardware | Hinterlasse einen Kommentar