mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fading Funkuhr


Autor: Flo H. (mr-jones)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallooo Allerseits,
ich wollte mal mein Projekt hier vorstellen und mich bei allen bedanken 
die hier so kräftig posten...hier werden sie geholfen!!! Ich hatte mir 
schon immer mal überlegt so eine Rotor-Uhr zu bauen. Das ist aber doch 
schon ein etwas komplizierteres Unterfangen weshalb ich mir andere 
Gedanken gemacht habe und dabei kam folgendes heraus: Eine 
Pseudoanalog-Funkuhr bei der die Minuten im Fading-Betrieb angezeigt 
werden. Soll heißen es sind 4 LEDs für die Viertelstunden angeordnet 
wobei die LED auf deren Viertelstunde es zugeht immer heller und die 
vorige immer dunkler mit jeder Minute wird. Also lassen sich die Minuten 
so ungefähr abschätzen. Zusätzlich gibt es noch die 12 Stunden LEDs 
deren Funktion ich glaube nicht näher erläutern muss. Angesteuert werden 
die Stunden-LEDs einfach par Schieberegister und die Minuten-LEDs per 
Multiplexing mit der PWM des Mega8 den ich verwendet habe.
 Außerdem dachte ich noch an etliche Zusatzfunktionen so sind noch 3 
verschiedene Lauflichtfunktion mit implementiert sowie ein kleiner 
Equalizer.
 Zu den einzelnen Funktionen. Einstellen lässt sich alles über 2 Taster. 
Einer zum Modus verstellen und einer um in den Modi Einstellungen zu 
machen, wie die Uhrverstellung oder Geschwindigkeitsänderung. Die ersten 
beiden Modi sind die Stunden- und Minutenverstellung. Wenn hier 5 
Sekunden gewartet wird springt die Uhr automatisch zurück in den 
Normalbetrieb. Dabei lassen sich die Stunden und Minuten verstellen. 
Achtung es wird zwischen Vor- und Nachmittag unterschieden. Beim Start 
ist die Uhrzeit auf 0:00 Uhr.
 Die nächsten 3 Modi sind 3 Lauflichtfunktionen:
  1.) Stunden LED läuft im Kreis
  2.) 2 Stunden LEDs laufen im Kreis
  3.) Stunden LED läuft im Kreis, Minuten laufen in entgegengesetzter 
Richtung
 In diesen verharrt das Programm. Nach 5 Sekunden in den Funktionen 
springt man durch den Modus-Taster zurück in den Normalbetrieb. In den 
Funktionen lässt sich die Geschwindigkeit mit der Set-Taste ändern
Der Nächste Modus ist der Equalizer Modus. Hier leuchten die Minuten 
LEDs mit der Lautstärke der Umgebung mit. Der Rücksprung und die 
Einstellungen funktioniert genauso wie bei den Lauflichtern.
 Danach kann man die Uhr noch ausschalten bzw. die LEDs. Besonderheit 
daran ist noch ein einstellbarer Spannungsteiler mit LDR, damit die Uhr 
in der Nacht automatisch ausgeht, da es doch recht hell sein kann. 
Voreingestellt ist dieser Automodus erst ausgeschaltet. Dieser lässt 
sich dann im Dunkelmodus mit der Set-Taste de-/aktivieren egal ob man in 
den Dunkelmodus von Hand oder automatisch kommt. Angezeigt wird dies mit 
2 unterschiedlichen Minuten-LEDs und nach der Einstellung springt die 
Uhr sofort in den Normalbetrieb. Will man in der Nacht jedoch die 
Uhrzeit trotzdem sehen, wird diese mit einem kurzen Druck auf die 
Modus-Taste angezeigt und erlischt wieder vorausgesetzt die Uhr befindet 
sich im Automodus im Dunkeln ansonsten gelangt man in den DCF Modus 
(siehe nächster Absatz). Ist die Uhr im Automodus und es ist hell lassen 
sich die Funktionen ganz normal aufrufen. Nur mit jedem Verlassen und 
Aufrufen des Dunkelmodus mit der Modus-Taste wird jedoch auch der 
Automodus verlassen.
 Wenn die Modus-Taste im Dunkelmodus (nicht im Automodus!) gedrückt wird 
springt das Programm in den DCF Betrieb. Dieser muss mit einem 
Tastendruck der Set-Taste bestätigt werden, dann kann die Funkuhr-Zeit 
von Hand erfasst werden. Die Uhrzeit wird auch jede Nacht ab 4 Uhr neu 
geholt vorausgesetzt die Uhr ist im Dunkelmodus egal ob im Auto- oder 
Normalmodus.
 Das mal so im groben kann man damit alles machen. Der Speicher ist 
dadurch ziemlich ausgenutzt was vielleicht auch an meiner noch recht 
frischen Programmiererfahrung liegt. Aber irgendwann fängt jeder mal an. 
Ich wollte so viel wie möglich selbst machen. So ist die gesamte DCF 
Routine selbst geschrieben. Geht bestimmt auch einfacher und kleiner 
aber ich denke sie ist sehr sicher ( hatte glaube noch nicht eine 
falsche Uhrzeit dadurch). Ein paar Bugs hat es noch die ich aus 
zeitlichen Gründen noch nicht komplett ausgemerzt habe aber sie läuft 
doch schon relativ stabil (einige Wochen hat es schon im Autobetrieb 
wunderbar geklappt) und zur Not gibt’s ja noch die Reset-Taste. Hier 
habe ich mal noch 2 Bilder von 2 Uhren eins ist etwas verschwommen. Und 
natürlich auch den Quellcode für alle Interessierten. Um den ersten 
Schock vorweg zu nehmen, alle Funktionen stehen komplett in einem File, 
also das gesamte Programm. Irgendwie wollte das nicht so recht werden 
mit verschiedenen Headern und C Files deswegen Tschuldigung dafür aber 
ich habe so alles etwas kommentiert, was hoffentlich den Einstieg klarer 
macht. Aber wie gesagt ist halt schon nen größeres Hobby-Projekt wenn 
man den Code so anguckt. Hier ist auch noch das Layout in Eagle keine 
Ahnung ob daraus grad so eine Platine gemacht werden kann, ist nur zum 
abgucken gedacht! Falls das nicht klar ist, schicke ich die Datie gerne 
zu. Dann wünsche ich viel Spaß beim Nachbauen, Ändern oder noch 
Erweitern und freue mich über Kommentare!
Viele Grüße Flo

Autor: Bernhard R. (barnyhh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Minuten-Anzeige klingt einfach toll (super-turbo-oberaffengeil 
würden Kindergartenkinder sagen)!
Endlich jemand, der diesen Pseudogenauigkeitsfetischismus nicht 
mitmacht!

Viel Erfolg bei den nächsten Projekten!
Bernhard

Autor: Flo H. (mr-jones)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Danke!
wobei die Uhrzeit die wirklich läuft schon sehr exakt berechnet wird 
(siehe die ganzen Registerwerte) aus dem Grund, dass die Uhr eben auch 
ohne Funk lange stabil laufen soll.
 Habe nun noch ein paar Fehler im Schaltplan entdeckt. Vor allem die 
Reset-Eingänge der Schieberegister...sind ja in dem Fall low-activ also 
Vcc mit GND ersetzen!!! Und die Ansteuerung der Multiplexer war so nicht 
ganz korrekt. Ich gehe jetzt davon aus, dass der X Eingang dem Enable 
Entspricht und die PWM Spannung selbstverständlich an den Eingang des 
Mux muss. Außerdem ist noch die Versorgung der Chips mit drauf...Hoffe 
das stimmt jetzt dann alles so.
Grüße Flo

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Flo H. (mr-jones)

>      Fading_Layout_2.gif

Das ist aber ein Schaltplan und kein Layout ;-)

>Mux muss. Außerdem ist noch die Versorgung der Chips mit drauf...Hoffe
>das stimmt jetzt dann alles so.

Naja, mehr oder weniger

- die Tastenentprellung in Hardware ist überflüssig, kann man viel 
einfacher in Software machen
- dein 4 Bit Schieberegister sind nur bedingt OK. Ersten zu schwach 
(weil HEF4000 Serie, 75HC ist deutlich leistuingsfähiger) und zweitens 
eher unüblich. EIn 74HC595 oder 74HC165 sind hier das Mittel der Wahl
-Deine Multiplexer sind überflüssiger Balast, das kann man besser direkt 
per AVR steuern.
- auch alle anderen Digital-ICs brauchen 100nF an VCC/GND dicht am IC.
- Solche Sprüche wie ""ISP ist denke ich klar, den male ich nicht noch 
zusätzlich rein" kannst du dir sparen. Mach es ordentlich oder lass es.

Wo sind die LEDs und Vorwiderstände? Das ist keine guter Schaltplan, nur 
ein Fragment. Wie sie es zu tausenden im Internet gibt und die keiner 
wirklich braucht. Mach es richtig oder gar nicht.

Lies mal was über das Thema LED-Matrix und LED-Fading, dann 
siehst du vielleicht, wie man es besser macht.

MFG
Falk

Autor: Flo H. (mr-jones)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

> - die Tastenentprellung in Hardware ist überflüssig, kann man viel
> einfacher in Software machen

ja Tastenentprellung kann man mit Software machen. Da gibts ja auch ein 
schönes Beispiel, wofür man aber Timer braucht, wenn ich das richtig 
gesehen habe. Den einen wollte ich eben elegant dazu nutzen um mit der 
ISR die Modi auszuwählen um da das Programm kompakt zu halten und den 2. 
Taster mache ich ja per Software wofür ich aber für meine Variante 
(einfach Flanke prüfen und warten) ein sauberes Signal brauche...

> - dein 4 Bit Schieberegister sind nur bedingt OK. Ersten zu schwach
> (weil HEF4000 Serie, 75HC ist deutlich leistuingsfähiger) und zweitens
> eher unüblich. EIn 74HC595 oder 74HC165 sind hier das Mittel der Wahl

Jepp das stimmt, allerdings hatte ich die geschenkt bekommen und gerade 
da. Ich habs einfach mal versucht und das klappt erstaunlicherweise ganz 
gut. Wenn es nicht funktioniert eben stärkere verwenden.

> -Deine Multiplexer sind überflüssiger Balast, das kann man besser direkt
> per AVR steuern.

Wie? Die Idee war, dass ich die PWM einfach auf jede beliebige LED 
schalten kann und ich fand das so sehr gut gelöst. Und auch hier ist 
klar, dass für stärkere LEDs noch Transistoren oder sowas gebraucht 
werden mit Vorwiderständen. Das mit den Widerständen würdest du aber 
wissen, wenn du den Text über den Schieberegistern gelesen hättest! Das 
was da fehlt ist vielleicht die Info, dass die LEDs nach GND geschaltet 
werden müssen.

> - auch alle anderen Digital-ICs brauchen 100nF an VCC/GND dicht am IC.

Naja ich hab bei mir vllt 5mV Rauschen selbst bei etwas längeren Drähten

Und wie gesagt jeder kann die Schaltung ändern oder anpassen wie er es 
will und wenn was nicht klappt kann man ja fragen...
Grüße Flo

p.s. die Themen habe ich durchgelesen und mich trotzdem für diese Form 
entschieden

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Diese umständliche Muxerei kannst Du Dir sparen.

Führe einfach die 2 PWMs über Vorwiderstände auf je 2 LED-Anoden und die 
4 Kathoden an den MC zur Auswahl.
Spart obendrein noch nen Pin.

Ich würds allerdings mit SW-PWM und nur 4 Pins machen.


Peter

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Flo H. (mr-jones)

>gesehen habe. Den einen wollte ich eben elegant dazu nutzen um mit der
>ISR die Modi auszuwählen um da das Programm kompakt zu halten und den 2.
>Taster mache ich ja per Software wofür ich aber für meine Variante
>(einfach Flanke prüfen und warten) ein sauberes Signal brauche...

Alles faule Ausreden.

>was da fehlt ist vielleicht die Info, dass die LEDs nach GND geschaltet
>werden müssen.

Das ist kein Schaltplan.

>> - auch alle anderen Digital-ICs brauchen 100nF an VCC/GND dicht am IC.

>Naja ich hab bei mir vllt 5mV Rauschen selbst bei etwas längeren Drähten

[ ] DU hast den Sin der 100nF verstanden. Die MÜSSEN hin. Punkt.

>Und wie gesagt jeder kann die Schaltung ändern oder anpassen wie er es
>will und wenn was nicht klappt kann man ja fragen...

Der übliche Bastelmurks eben. Erwarte besser keinen Applaus.

>p.s. die Themen habe ich durchgelesen und mich trotzdem für diese Form
>entschieden

Lernresistenz ist ein Grundrecht.

MFG
Falk

Autor: Flo H. (mr-jones)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Peter,

ja das mit der Software PWM hatte ich auch im Hinterkopf. Ich wollte 
wahrscheinlich damals einfach noch was mit Hardware machen...

> Führe einfach die 2 PWMs über Vorwiderstände auf je 2 LED-Anoden und die
> 4 Kathoden an den MC zur Auswahl.

Joa aber dann habe ich doch trotzdem das Problem, dass die 2 LEDs die 
von einem Pin bedient werden nicht getrennt angesprochen werden können. 
Das geht mit den Mux aber klar auch mit SW.

Flo

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Flo H. schrieb:
> Joa aber dann habe ich doch trotzdem das Problem, dass die 2 LEDs die
> von einem Pin bedient werden nicht getrennt angesprochen werden können.

Ich habe Dich so verstanden, daß immer nur 2 benachbarte LEDs 
verschieden hell an sein sollen.
Also kannst Du jeweils 2 gegenüberliegende an eine PWM anschließen.


Peter

Autor: Klaus2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"von einem Pin bedient werden nicht getrennt angesprochen werden 
können."

Nöööööt! Auswahl über MC (Kathoden). Siehe oben!!!

Ich finds gut, denn es läuft und sieht bestimmt gut aus - nur wäre mir 
die Anzeige viel zu klein - das wäre was auf nem Steckbrett, ok...aber 
so? Man kann die LEDs kaum unterscheiden -> Pappe, Fädeldraht, Anzeige 
vergrößern...

Klaus.

Autor: Flo H. (mr-jones)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich habe Dich so verstanden, daß immer nur 2 benachbarte LEDs
> verschieden hell an sein sollen.

ja für den Uhrenbetrieb schon. Für diese Grundschaltung stimmt das, 
keine Frage. Aber für weitere Funktionen dachte ich eben, lasse ich mir 
das noch frei, dass die LEDs auch einzeln ansteuerbar sind.

@Klaus:
aber ich kann doch selbst mit der Kathoden-Ansteuerung nicht die LEDs 
die an einer PWM hängen verschieden ansteuern, es sei denn der Pin für 
die Kathode wird noch zusätzlich getriggert.
Die erste Uhr ist schwerer zu lesen von weitem das stimmt. Die 
Blau/Orange jedoch ist schön auseinander gezogen. Fehlt nur noch ein 
schönes Gehäuse.

Flo

Autor: Klaus2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ahhhh! das total dunkel-verwackelte bild habe ich nicht erkennen können, 
auf anhieb. aber jetzt ist es klar, ok. ja, die kathoden müssten 
natürlich zudem einzeln gesteuert werden.

Klaus.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.