Themabewertung:
  • 1 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Binäruhr, Bastelprojekt
#1
Hallo zusammen,

diese Zeit, in der Wetterbedingt kaum etwas unternommen werden kann, wird halt gebastelt.
So ist mir die Idee gekommen, mal eine Binäruhr aufzubauen.

Bei der Binäruhr werden die 'Ziffern' in Form von aufleuchtenden LED's an den Stellen der 2-er Potenzen dargestellt, also z.B. für 10 Minuten:

2⁰ = 1: Dunkel
2¹ = 2: Hell
2² = 4: Dunkel
2³ = 8: Hell
2⁴ = 16: Dunkel
2⁵ = 32: Dunkel

Mein Versuchsaufbau sieht so derzeit so aus:

   

Hier war es 21:40 Uhr, Februar 05

In der Realität sind die Segmente der LED-Zeilen um einiges heller als im Bild, der Kamerablitz hat das Bild etwas 'verblassen' lassen.

Auf dem am oberen Bildrand teilweise erkennbaren Steckboard befindet sich ein DCF77-Empfänger, den hatte ich noch rumliegen.

Der Arduino-Nano links unten tut eigentlich nichts anderes, als das vom DCF-Empfänger kommende Signal zu decodieren und die Informationen an die insgesamt vier Portexpander PCF8574 weiterzuleiten.

Denkbar wäre auch, ein ESP32 oder ESP8266-basiertes Board zu verwenden und die aktuelle Zeit samt Datum aus einem Zeitserver zu holen.

Final aufbauen möchte ich mir das Ganze mit 8mm-Leuchtdioden.
Einen ersten Leiterplattenentwurf habe ich mir schon gemacht.
Das war eine schöne Übung, um mit KiCAD etwas vertrauter zu werden.

   

Allerdings werde ich, um das ganze beim Datum besser lesbar zu machen, Monat und Tag noch vertauschen.


Viele Grüße

Martin
Zitieren
#2
Hallo Martin,

das Projekt erinnert etwas an die "Berlin-Uhr".

Gruß, Dietmar
Zitieren
#3
Morgen,

ich finde die Bastelei sehr interessant ! Es gibt ja neben der Berlin-Uhr weitere interessante Umsetzungen von Uhren mit unkonventionellen Anzeigen. Das schult auch das Gehirn.

(An meinem Synchronschalterprojekt hab ich als Zählerüberwachung auch 4 LED für die Überwachung des Zählers dran, da sich das Zählen aber im Bereich mehrerer hundert Hz abspielt, sieht man nur Dauerlicht mit unterschiedl. Helligkeit je nach Tastung, aber zum Beurteilen der ordentlichen Arbeit des Zählers reicht es trotzem, wenn der Zähler unregelmäßig arbeitet, schwankt auch die Helligkeit der LEDs... das war sogar der Fall und es war gut, die binäre Anzeigekontrolle zu haben).

Beim Ansteuern von LED mit CMOS sollte man an die begrenzte Stromtragfähigkeit der Ausgänge denken, aber 10mA sind da schon drin, wenn ichs richtig in Erinnerung hab... die Bargraphen haben 10mA Nennstrom ?
Mit superhellen LED hat man aber heute schöne Möglichkeiten ohne die störende Transistorschaltstufe auszukommen.

Gruß Ingo
Zitieren
#4
Man kann das auch sehr schön mit "adressierbaren LED Streifen" machen.
Vorteil: weniger Verdrahtung, Platine nicht erforderlich, Farbwechsel ...

Nachteil: Es wird keine KiCad Erfahrung gesammelt, bereits vorhandene Bauteile bleiben liegen ...

-Joe
Zitieren
#5
Hallo zusammen,

so eine Binäruhr habe ich mal irgendwo gesehen, ich kann mich nur nicht mehr erinnern, wo das war.
Seitdem spukt mir die Idee im Kopf herum.

Die Strombelastung der PCF8574 ist kein Problem, die können lt. Datenblatt 20mA je Kanal.

Ich betreibe die LED aktuell mit 330Ohm Vorwiderstand an 5V Betriebsspannung.
Mal sehen, ob das auch für die final vorgesehenen 8mm-LED's reicht.


Viele Grüße

Martin
Zitieren
#6
...achso, I²C-Expander, das ist natürlich schon next level ^^

Gruß Ingo
Zitieren
#7
Hallo zusammen,

nun ist sie endlich fertig, die Binäruhr:

   

Aufnahmedatum 16.11.2021.

Um die Helligkeit der 8mm-LED zu erhöhen, habe ich die Vorwiderstände noch etwas reduziert, sie sind jetzt 220 Ohm.
'Angetrieben' werden die LED's von insgesamt 4 Portexpandern PCF8574, die können 20mA je Ausgang bei einem Summenstrom von 100mA.

Mir wurde zwar der 16-fach Expander MCP23017 vorgeschlagen, der verträgt aber nur 120mA Summenstrom und das wird dann bei bestimmten Kombinationen doch recht eng.


Viele Grüße

Martin
Zitieren
#8
Hallo Martin, 
die finde ich Cool die Uhr.
Echt GUT GELUNGEN.  :-)

Nun habe ich eine Frage. 
Wie machst Du das mit der sechzigsten Sekunde, denn Du schreibst Ansteuerung mit einem DCF 77-Empfänger.
Ich will mir eine Funkuhr mit sieben Segment-Anzeige bauen und bleibe bei der letzten Sekunde hängen. 
OK,ich weiß das ich noch eine zweite Uhr brauche die die Zeit übernimmt wenn mal ein Funktionsausfall ist.
Aber mein Wissen geht in diesem Bereich nicht so weit.
Kannst Du mir bitte weiterhelfen. 

Mit freundlichem Gruß Heiko
Zitieren
#9
...einfach wunderschön !! leider für mich nicht praktikabel, meine Kinder hätte die beste Ausrede der Welt, wenn sie mal wieder die Spiele- oder Filmzeit überschritten haben ^^ "Papa, bin beim Ablesen um ein M...LSB verrutscht"

.... aber echt cool sowas !

gruß Ingo
Zitieren
#10
Eine schöne und lehrreiche Bastelarbeit.
Macht richtig Appetit auf eigene Elektronikbasteleien.

Gruß
Wilhelm
Niemandes Herr, Niemandes Knecht,
so ist es gut, so ist es recht

von Fallersleben
Zitieren
#11
Hallo Heiko,

die Stunden/Minuten- sowie Tag/Monat/Jahr-Informationen liefert ein DCF77-Plugin für den Arduino, und zwar als Integer-Werte.
Dass es bei Minute 60 einen Übertrag bei der Stunde gibt sowie die Minuten wieder auf 00 gestellt werden müssen erledigt das Plugin.
Ich musste also nichts anderes tun als die gelieferten Werte invertiert (255 - WERT) an die Portexpander weiterzureichen.

Für eine Siebensegmentanzeige müsstest Du also die Zehner- und Einer-Werte separieren und jeweils an einen Dezimal-zu-Siebensegment-Decoder weiterleiten.

Du würdest also 4 Portleitungen für die Zifferndarstellung benötigen sowie je nach dem was Du alles anzeigen möchtest eine entsprechende Anzahl an Portleitungen zum Multiplexen.
Ich denke, ein Arduino-Nano sollte das schaffen.

Für Internetfähige Controllerboadrs, wie z.B. den ESP32 oder dem Arduino-Nano-RP2040, gibt es auch Softwareplugins für die Arduino-IDE, mit deren Hilfe sich die Zeitinformationen per WIFI von einem Zeitserver holen lassen.


Viele Grüße

Martin
Zitieren
#12
Hallo Martin, 

DANKE für die schnelle Antwort. 
Ich möchte bei der einfachen Variante bleiben und kein Internet verwenden. 
Den Empfang, OK.
Was einen BCD-Eingang für  Siebensigmentanzeige angeht, geht auch seinen Gang.
Nur wie mache ich das praktisch mit dem Signal für die  Übernahme auf die zweite Uhr?

Oder sehe ich da was falsch? 

Mit freundlichem Gruß Heiko
Zitieren
#13
Hallo Heiko,

nun, Du benötigst für jede Ziffer zunächst einen BCD zu Siebensegment-Decoder, z.B. einen 74LS48 für Siebensegmentanzeigen mit gemeinsamer Kathode.
Die gemeinsame Kathode der Anzeigen wird dann aber nicht direkt auf Masse gelegt, sondern über einen Transistor geschaltet (Multiplexing).

Wenn wir mal annehmen wollen, dass Du nur Stunden und Minuten darstellen möchtest, sieht der Ablauf so aus:

- Zeit einlesen (aus DCF77)
Anzeigeschleife:
- Nur Wert für Stunden-Zehner (z.B. 2 bei 21 Uhr) BCD-Codiert auf die vier Portleitungen legen
- Nur Transistor für Stunden-Zehner schalten
- Nur Wert für Stunden-Einer (z.B. 1 bei 21 Uhr) BCD-Codiert auf die vier Portleitungen legen
- Nur Transistor für Stunden-Einer schalten
- Nur Wert für Minuten-Zehner (z.B. 5 bei Minute 58) BCD-Codiert auf die vier Portleitungen legen
- Nur Transistor für Minuten-Zehner schalten
- Nur Wert für Minuten-Einer (z.B. 8 bei Minute 58 Uhr) BCD-Codiert auf die vier Portleitungen legen
- Nur Transistor für Minuten-Einer schalten
Ende der Anzeigeschleife

Die Anzeigeschleife muss so schnell laufen, dass sich auf Grund der Trägheit des menschlichen Auges ein stehendes Bild ergibt, es muss also jede Stelle mindesten 20 mal pro Sekunde angesteuert werden.

Den Wert für die Zehner bekommst Du durch eine Ganzzahldivision durch 10.
Der Minutenwert ist dann der Rest der Ganzzahldivision.

Das sieht dann bei Arduino so aus (die Variablen Minute, Minute_Zehner und Minute_Einer sind als Ganzzahl (Integer oder Byte) deklariert):

Minuten_Zehner = Minute / 10;
Minute_Einer = Minute % 10;

Die letzte der beiden Anweisungen ist die Modulo-Funktion, diese liefert den Rest einer Ganzzahldivision.
Wenn Minute den Wert 58 enthält, hat die Variable Minuten_Zehner nach diesen Anweisungen den Wert 5, die Variable Minute_Einer den Wert 8.

N.B.: Hier im Forum gab es mal einen Lehrgang zum Arduino.
Schau dort mal nach.
Ich müsste mich sehr täuschen, wenn dort nichts zum Thema Multiplexing drin stehen würde.


Viele Grüße

Martin
Zitieren
#14
Hallo Heiko,

sorry, das mit der zweiten Uhr habe ich missverstanden!

Bei dem von mir eingebundenen Softwaremodul läuft die Uhr auch dann weiter, wenn der Empfang von DCF77 mal gestört ist.
Nur ist ein stellen dann nicht möglich, und die Genauigkeit ist dann natürlich auch nicht so gut.

Bei meinem ersten Versuchsaufbau hatte ich am Ausgang des DCF77-Empfängers wegen eines Schaltungsfehlers meinerseits nur ein sehr verwaschenes Signal, so dass eine Synchronisation nur alle paar Minuten erfolgreich war.
Die Uhrensoftware lief aber unbeeindruckt mit dem internen Timer des Arduino weiter.

Zu Debuggingzwecken habe ich mir auch die von der DCF77-Software gelieferte Uhrzeit über die serielle Schnittstelle ausgegeben.
Die Uhr startet sofort am 01.01.1970 um 0:00 Uhr und läuft dann solange 'frei', bis erstmals eine Synchronisation stattgefunden hat, sie bleibt also nicht einfach stehen.

Das von mir verwendete DCF77-Modul benötigt u.U. mehrere Minuten bis zur ersten Synchronisation, läuft dann aber stabil.

Die Software habe ich von hier: https://netcoast.ch/DCF77/DCF77.html


Viele Grüße

Martin
Zitieren
#15
Hallo Martin, 
vielen DANK. 
Ich werde mich 
Mit dieser Sache weiter beschäftigen und mir so einen Arduino bestellen um die Sache weiter zu führen. 
Schreibst Du mir bitte wie ich den Arduino programmiere da es Neuland für mich ist.
Jetzt schon vielen DANK. 

Mit freundlichem Gruß Heiko
Zitieren
#16
Hallo Heiko,

hier im Forum gibt es einen mehrteiligen Einsteigerkurs für ATMega-Contoller: https://www.radio-bastler.de/forum/forum...hp?fid=136
Ich würde Dir empfehlen, diesen mal durchzuarbeiten.

Die Programmiersoftware (IDE) kannst Du von hier für alle gängigen Betriebssysteme herunterladen: https://www.arduino.cc/

In vielen Linux-Distributionen ist die Arduino-Software auch bereits in den Repositories enthalten und kann direkt von dort aus installiert werden.

Schau' Dich mal bei den einschlägigen Bauteilehändlern um.
Es gibt nämlich auch zahlreiche Arduino-Clones, die sind bedeutend günstiger als das Original.
Bei Pollin z.B. gibt es einen Arduino-Nano-Clone für unter 10,-€

Der Arduino-Nano ist vor allem auch deshalb interessant, weil er sich auf ein Steckbrett stecken lässt, s. auch meinen Testaufbau im ersten Beitrag.

In dem oben genannten Einsteigerkurs gibt es auch eine Stückliste, welche Bauteile für den Kurs benötigt werden.


Viele Grüße

Martin
Zitieren
#17
Hallo Martin, 
Ich DANKE Dir erstmal, auch wenn ich es schon wieder schreibe  :-)
Ich habe lange gesucht, eigentlich sehr lange. 
Bis ich dies gefunden habe. 
Doch ich habe, und mich sehr gefreut. 
Habe gleich alles gelesen,von Aufgabe 1bis 6.
Werde mir auch die Aufgaben Anschauen und Stück für Stück vornehmen. 
Eine Siebensegmentanzeige war ja auch dabei.
Nun hast Du mir den Link hier reingezogen, voll Cool. 
Ich Hoffe nur ich komme mit dem Englisch zurecht, kann ich nicht. 
Mache mir jetzt noch einen Rechner zurecht und Linux oder so drauf. 
Welches ist deiner Meinung nach geeignet? 

Mit freundlichem Gruß Heiko
Zitieren
#18
Hallo Martin,
Ich nochmals. 
Sehe ich es richtig, 
Auf Deiner fertigen Uhr ist es 20.21Uhr?

Heiko
Zitieren
#19
Hallo Heiko,

zum Programmieren des Arduino brauchst Du kein Linux auf dem Rechner, das geht genau so gut mit Windows.
Lediglich die Installation ist unter Linux etwas einfacher.

Ein Linux lässt sich auch parallel zu einem bestehenden Windows installieren, allerdings sollten dem Linux schon etwa 30+ Gigabyte Festplattenplatz zur Verfügung gestellt werden können.
Das Basissystem selbst benötigt zwar nur etwa 3,5 GB, aber es sollen ja auch Programme installiert und Anwenderdaten gespeichert werden können.
Ich selbst arbeite sehr gerne mit LUBUNTU (aktuelle Version 20.04), das läuft auch auf älterer Hardware recht flott.

Die Benutzeroberfläche des Arduino lässt sich auf Deutsch umstellen.
Der 'Wortschatz' der Programmiersprache, ein modifiziertes C++, ist eben in Englisch, wie bei allen anderen Programmiersprachen auch.

Das installieren der Programmiersoftware ist ja im Lehrgang beschrieben.

Es gibt auch viele Deutschsprachige Bücher zum Arduino, ebenso zahlreiche 'Programmschnipsel' im Internet.
Des weiteren existiert im Internet auch ein deutsches Arduino-Forum, dort ist auch eine Suche nach Problemstellungen möglich, oftmals gibt es dort bereits eine Lösung für bestimmte Probleme.

Und ja, zum Zeitpunkt der Aufnahme war es 20:21 Uhr.


Viele Grüße

Martin
Zitieren
#20
Hallo Martin,
Super die Infos.
Habe mich heute mit dem Rechner beschäftigt,jedoch will er nicht richtig.
Ich denke das die Festplatte defekt ist und ich mir morgen eine andere besorge und dann sehen wir weiter.
Berichte dann weiter.
Bis dahin,mit freundlichen Gruß Heiko
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Nachbildung Berlinuhr, Bastelprojekt Radiobastler 19 4.951 07.02.2022, 22:27
Letzter Beitrag: Garagenloeter
  Zwölfeckuhr, neues Bastelprojekt Radiobastler 0 894 10.12.2021, 01:42
Letzter Beitrag: Radiobastler

Gehe zu: