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!
Quelltexte heißen *.c Wo ist der Schaltplan? Beschreibe mal in Worten, was das Programm überhaupt machen soll.
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:
1 | const uint16_t hex2led[10] { |
2 | 0b0000000000,...}; |
Nach dem Array fehlt ein "=" :-)
@ 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 ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.