Hallo zusammen
Ich habe eine Uhr auf dem ATMEGA8 programmiert (siehe Anhang),
allerdings habe ich es nicht ohne die selbsterstellte Funktion
"clear_all" geschafft,dass sich die LEDs "updaten". Deswegen ist es nun
so, dass ständig alle angeschalteten LEDs sich wieder aus- und
anschalten.
Meine Idee wäre ein Logikgatter, welches die Reihenfolge beachtet. Z.B.
immer wenn das zweite Signal eine 1 ist, dann leuchtet die LED
ansonsten, wird sie ausgeschaltet.
Ehrlichgesagt grübel ich schon seit Stunden danach und ich will es
einfach mal versuchen einen Experten zu fragen.
Vielen lieben Dank!
Hi,
in Deinem Makro-Zoo, werden die Bitmuster für Stunden und Minuten in die
selben Variablen des Arrays geschrieben. Das kann doch so nicht stimmen.
Vor allem, weil zwischen dem Setzen der Muster für die Stunden und dem
für die Minuten keine Ausgabe erfolgt.
Hi peda
Danke für die zeitnahe Antwort.
Die LED-Leiste zeigt eine vordefinierte Uhrzeit an und zählt ab dieser
hoch.
Dies wird mit 2 Timern erreicht, der eine zählt die 1 Sekunde hoch und
der andere steuert mein Schieberegister.
im oberen LED-Teil wird die Stundenzahl und im unteren die Minutenzahl
angezeigt, wobei der Doppelpunkt die Sekunden darstellt, sozusagen so:
13: (58. Sekunde)
59
13 (59. Sekunde)
59
14: (60. Sekunde)
00
(Es ist etwas her, dass ich das programmiert habe.)
Pepper schrieb:> Die LED-Leiste zeigt eine vordefinierte Uhrzeit an und zählt ab dieser> hoch.
Da sind wir kein bischen schlauer, als wie zuvor.
Warum kein Schaltplan?
Ich lehne mich mal ganz weit aus dem Fenster und vermute mal je 10 LEDs
pro Dekade hinter einigen 74HC595.
Da ist die übliche Herangehensweise, man manipuliert das gewünschte
Pattern in einem SRAM-Array und schiebt es nach jeder Änderung komplett
in die 74HC595. Bei Sekundenanzeige also einmal je Sekunde.
Ganz vergessen, sorry peda.
@fop
Ich hatte bereits was als Antwort geschrieben, doch war ich
zwischendurch verwirrt gewesen und versuche mich nun erst nochmal zu
sortieren.
@ Pepper (Gast)
>Pong-Uhr.txt (5,61 KB, 42 Downloads)
Quelltexte hängt man direkt als .c Datei an.
>Ich habe eine Uhr auf dem ATMEGA8 programmiert (siehe Anhang),>allerdings habe ich es nicht ohne die selbsterstellte Funktion>"clear_all" geschafft,dass sich die LEDs "updaten". Deswegen ist es nun>so, dass ständig alle angeschalteten LEDs sich wieder aus- und>anschalten.
Sicher, u.a. weil du unsinnigerweise mit voller Geschwindigkeit des AVRs
immer wieder die Zeit neu anzeigen willst. Außerdem ist die
Aktualisierung der neuen Zeit nicht synchron zum Zählen der Zeit.
Und dein Quelltext ist nicht sinnvoll strukturiert, vor allem fehlt die
Einrückung. Die ist SEHR wichtig!
Strukturierte Programmierung auf Mikrocontrollern>Meine Idee wäre ein Logikgatter, welches die Reihenfolge beachtet.
Das "Logikgatter" heißt hier Mikrocontroller.
Der Ablauf der Befehle beim Multiplexing ist nicht gut, da entstehen
Geisterbilder. Ich hab das mal korrigiert.
Die Dekodierung mit Dutzenden #defines ist auch nicht sonderlich toll,
das macht man besser mit einer Tabelle. Ist kompakter, übersichtlicher,
flexibler.
Weiterhin solltest du dich mal mit dem Konzept der lokalen Variablen
befassen ;-)
Dein Anzeigemuster durchschaue ich im Moment nicht so recht 8-0, aber
ich tippe mal, daß du die einzelnen Ziffern als senkrechte Punktketten
anzeigen willst. Bei dem hier verwendeten Spaltenmultiplexing ist das
mit einer Tabelle ideal!
Siehe Anhang.
Vielen lieben Dank, falk :-)
Ich hatte deinen Text + Code bereits vorhin angesehen, kam aber erst
jetzt
zum antworten.
Heute kriege ich nichts mehr rein in meinen Kopf, aber morgen probiere
ich da noch einmal dran rum.
Ich würde gern noch evt. Rückfragen morgen stellen, bevor der Thread
geschlossen wird.
Schönen Abend euch noch :-)
PS: Mir war nicht bewusst, dass der Code als Anhang mit *.c wie im
ATMEL-Studio erscheint. Das passiert mir nicht noch einmal !
Guten Morgen zusammen!
Ich habe den Code verstanden und finde deine Lösung weitaus eleganter
wie meine :-) Vorallem finde ich die Idee it der Tabelle genial. Nur
kann ich nicht nachvollziehen, wie das mit digitalen Anzeige da
funktionieren soll.
Z.B. bei der Darstellung der Zahl 4. Deine Methode ist so schön linear
und übersichtlich.
Für die Personen, die das Programm von falk nutzen wollen, müssen noch
etwas kleines korrigieren:
@ Pepper (Gast)
>Ich habe den Code verstanden und finde deine Lösung weitaus eleganter>wie meine :-)
Nicht wahr?
>Vorallem finde ich die Idee it der Tabelle genial.
Das ist eine Standardlösung.
>Nur kann ich nicht nachvollziehen, wie das mit digitalen Anzeige da>funktionieren soll.
Hast du das Programm mal laufen lassen?
Ja, hab ich :)
Bei deiner Lösung lässt sich jeder Zeitpunkt mit einen der 10
Array-Elementen abbilden.
Die zweite Zeile nutzt du für die Zehnerstellen, welche mit % und / sehr
gut ermittelt werden können.
Doch wenn wir nun zum digitalen springen kann es sein, dass z.B. die
Zahl 2 in 3 FOrmen vorkommen kann:
2X: XX: und 2X:
XX 2X 2X
Für eine Ziffer ( ich lasse die Nullen bei der 2 für die Lesbarkeit mal
weg:
00000111 1
000001 1 1
000001 111
Somit brauche ich nach meinem neuen Verständnis, wenn die Zahl 2
insgeamt 3 Spalten einnimmt, ein Array für 9 Elemente nur für die Zahl
2.
Glücklicherweise gibt es keine 3er Zehnerstellen bei Stunden :-)
@Pepper (Gast)
>Bei deiner Lösung lässt sich jeder Zeitpunkt mit einen der 10>Array-Elementen abbilden.
Das ist der Sinn der Sache.
>Die zweite Zeile
Nö, Spalte. Die Anzeige erfolg in Spalten, ebenso wie das Multiplexing.
> nutzt du für die Zehnerstellen, welche mit % und / sehr>gut ermittelt werden können.
Das hast du in deiner Version auch gemacht.
>Doch wenn wir nun zum digitalen springen kann es sein, dass z.B. die>Zahl 2 in 3 FOrmen vorkommen kann:
???
>2X: XX: und 2X:>XX 2X 2X
Was soll das darstellen?
>Für eine Ziffer ( ich lasse die Nullen bei der 2 für die Lesbarkeit mal>weg:>00000111 1>000001 1 1>000001 111>Somit brauche ich nach meinem neuen Verständnis, wenn die Zahl 2>insgeamt 3 Spalten einnimmt, ein Array für 9 Elemente nur für die Zahl>2.
Jetzt verstehe ich. Du willst die Zahlen normal als LED-Muster
darstellen, nicht nur als LED-Kette. Das kann man machen, das
Grundprinzip ist gleich.
Du brauchst dann halt ein 2D-Array, welches deine Codes für die Zahlen
enthält. Und dann brauchst du noch eine deutlich intelligentere
Funktion, welche deine Zahlen in die LED-Matrix kopiert. Das ist ein
wenig aufwendigere Bitmanipulation.
Dazu muss man ber erstmal festlegen, wie groß deine Zahlen werden
sollen. 3x3 oder eher 5x5? Bei 10x12 Pixel könnte man die Zahlen als 5x5
darstellen und hat noch Platz zwischen den 1er und 10er Stellen.
Vielen Dank, Falk :-)
Ich würde gern selbst noch ein wenig Ausprobieren, bevor ich die Lösung
präsentiert bekomme.
Alle meine Fragen sind nun beantwortet und der Rest wird eine Fleißsache
:-D
Danke Euch Allen fürs Lesen, das ist echt ein tolles Forum !
Ich wünsche noch ein sonniges Wochenende !
Ich hab mal mein PONG aus der Ramschkiste gekramt und bisschen damit
rumgespielt. Siehe Anhang. Die drei Beispiele sind alle für 8MHz
RC-Oszillatortakt gemacht. Beim Scroller kann man an beiden Reglern
drehen und die Laufschrift beeinflußen, kleine Überraschung ;-)