Hi, Wie würdet ihr folgende Anforderung realisieren? - Jumbo-LED-Anzeige, 9stellig, welche innerhalb von 10 Stunden auf 500.000.000 hochzählt, das macht ca. 1800 Zählungen / sek - Die "10" Stunden können auch 9,5 oder 10,5 sein, muß also einstellbar sein. - Es soll die Möglichkeit eine Presets geben, d.h. wenn nach zwei Stunden der Strom ausfällt möcht ich das ganze manuell von 100.000.000 weiterlaufen lassen - bei 500.000.000 soll das Ganze anhalten Gegeben sind ein ATM128 und die 7-Segment Anzeigen, dazwischen ist alles offen. Programmiert wird in BASCOM (weil vorhanden). Any Ideas? :-)
Einen Timer so einstellen, dass er dir den nötigen Takt zur Verfügung stellt. Einen anderen benutzt man dann zum Multiplexen der Anzeigen. Die Anzeigen kann man bestimmt auch über einen MAX7219 (oder so ähnlich) ansteuern lassen. Ein paar Taster einlesen, mit denen man die einzelnen Stellen auswählen und einstellen kann. Eine Starttaste. Fertig!
Ich bin ein bischen neugierig: Was soll das werden? :)
@Techniker: Das Ganze gibt ne Anzeige: "Wir haben heute schon xxx.xxx.xxx. Bauteile hergestellt" @Rahul: Generell macht's das Multiplexen natürlich einfacher, aber macht es das Ganze nicht auch dunkler? Der Max 7219 hat leider "nur" 8 Stellen, d.h. man bräuchte zwei davon kaskadiert... oder lässt das letzte Digit immer auf "8", da bei Zählfrequenzen von 1800 Hz ja nicht wirklich noch was davon zu lesen sein wird. :-) Das mit dem seriellen Signal was er braucht hab ich noch nicht ganz kapiert... Wie bekomm ich das am Besten gebacken? Wie greif ich denn die binären Code des Zählers ab? Mit Registern hatte ich bisher wenig zu tun... :-/ Das ganze ohne MAX 7219 zu machen ist dann eigentlich der nächste Schritt, oder? Wenn gemultiplext wird , kann ich das ja locker vom M128 emulieren lassen....
Von dem ATmega128 würd ich erstmal 40 Pins abknipsen und 126kB Flash mit Nullen füllen, weil die braucht man nicht dafür. Man könnte natürlich auch gleich nen ATtiny2313 nehmen. In der Codesammlung ist ne Ansteuerung für Jumbo-LEDs, braucht man nur auf 9 Digits erweitern. Bei 1,8kHz Zählfrequenz, würde ich die untersten 3 Digits fest auf Null verdrahten, sonst sieht man da nur ein nervöses Geflackere. Kein Mensch kann bei 1,8kHz was ablesen, 2..5Hz sind ergonomisch. Das einzige Problem sehe ich darin, in Bascom zu programmieren. Peter
Für die Ausgabe würde ich einen festen Takt nehmen (z.B. 2 Aktualisierungen pro Sekunde). Sonst wirds ein wenig zu flackerig...
@Johnny m.: Gute Idee, dann haben wenigstens alle LEDs ihr Daseinsberechtigung.... g @Peter: Ich hol schonmal die Kneifzange :-) ATM 128 deswegen, weil ich ihn erstens schon habe und zweitens noch ein kleines Display dranhängt, an dem ich einen quasi Kontrollbildschirm habe.... hat mir jemand noch ne Idee, wie man das prinzipiell in BASCOM lösen kann?
Also, mit Basskomm konkret kann ich Dir nicht helfen, aber die prinzipielle Vorgehensweise hängt eigentlich nicht an der Programmiersprache fest. Du brauchst im Prinzip zwei Timer, von denen der eine den Ausgabetakt erzeugt (also z.B. ein paar 100 ms) und der andere als Impulszähler arbeitet. Der Zähltakt kommt dann an den Takteingang von dem Zähler (Pin Tx). Irgendwo brauchts dann eine Zählvariable, in der die Überläufe des Zählers erfasst werden (wenn Du zum Zählen einen 8-Bit-Timer benutzt, der alle 256 Ereignisse überläuft, dann sollte es für 5*10^8 eine 32-Bit-Variable sein, bei einem 16-Bit-Timer reichen 16 Bit). Bei beiden Timern die Overflow-Interrupts freigeben. Im Überlauf-Handler des Zählers wird die Zählvariable für die Überläufe erhöht, in der vom Timer für den Ausgabetakt wird ein Flag gesetzt, das dafür sorgt, dass aus dem Hauptprogramm heraus die Anzeige entsprechend geupdated wird. Um den aktuellen Zählerstand zu berechnen, nimmt man einfach die Zählvariable für die Überläufe des Zählers mal dem Überlaufwert (bei einem 8-Bit-Zähler 256, bei einem 16-Bit-Zähler 65536) und addiert den aktuellen Stand des Zählregisters vom Timer hinzu. Das nur als Idee, geht eigentlich in jeder Programmiersprache....
Es ist eigentlich alles schon in meinem Jumbo-Beispiel drinne: - ein Timer zum Multiplexen, Entprellen, Tastenrepeatfunktion und Zeittakt. - eine Anzeigeroutine - eine Stellroutine - eine Dimmfunktion Fehlt nur noch den Zähltakt und die Digit-Anzahl anzupassen und auf den Endwert zu vergleichen. Das Dumme ist nur, ist eben alles in C. Peter
@Peter: Ja, habs mir schon angeschaut, echt schade .. :-( Hätte ich mehr Zeit, würd ich mich jetzt wirklich in C einarbeiten... geht aber momentan nicht. Vielleicht über XMAS :-) Aber dieses Projekt muß Ende nächste Woche fertig sein, die (umständliche) Lösung mit 9 Digits x 4Pins für BCD-Codes wäre auch eine Möglichkeit... einfach nur Zählen lassen, jede einzelne Ziffer als BCD ausgeben, Treiberbaustein dahinter, nix Multiplex sondern Dauerleuchten ... dann wären die 40 Pins des M128 wenigstens gerechtfertigt.... und ich könnte die Kneifzange stecken lassen. :-) Kann mir noch jemand was zur Helligkeitsreduzierung durch Multiplexen sagen?
Wenn du 9-fach multiplext und damit immer nur eine Anzeige an ist, dimensioniere die Widerstende so, dass etwa der neunfache Strom durch jedes Segment fließt. Dominik
Aber erst wenn das Programm sauber läuft! Solange du entwickelst würde ich die Widerstände für Dauer-an auslegen. Man weiss ja nie was da kommt, und mit neunfachem Strom hat man so ne LED auch schnell mal abgeschossen. Sebastian
Genau, der Mittelwert muss bei Multiplex so liegen, wie der Dauerstrom bei Nicht-Multiplex. Ganz einfach. Allerdings muss man auf die Pulsbelastbarkeit der LED's achten. Ich denke, bei 9 Stellen gäbe es da noch keine Probleme. Die Ansteuer-Treiber müssen natürlich auch die höheren Ströme abkönnen. Wenn du genügend Pins hast und wenig Zeit, dir was einfallen zu lassen, würde ich auf Multiplex verzichten. Hardware lötet man in wenigen Stunden zusammen. Programmerstellung und Fehlersuche bei Multiplexsteuerung kann schonmal eine Nacht dauern. Wir hatten auch mal so ein Projekt, ein Geburtstagsgeschenk für einen Kollegen, was an einem Nachmittag fertig werden musste, inkl. Hardwareaufbau und Software. 16 Leuchtdioden, für jede Arbeitsstunde eine. Am Anfang des Tages drückte man drauf und startete damit. Jede Stunde blinkte dann die nächste Leuchtdiode. Es war jemand, der immer zu lange arbeitete und damit erzogen werden sollte... War ne nette Spielerei und hat tatsächlich in der kurzen Zeit zu zweit geklappt, in letzter Minute natürlich noch neue Software-Releases... Ich glaube, er hat aber auch später immer bis zur letzten Leuchtdiode gearbeitet :-)
Wenn du für jede Stelle ein Latch spendierst und den Zähler im Interrupt gleich in BCD realisierst, kannst du das Ganze mit extrem kleinem Aufwand und sehr wenig Code für sehr viele Stellen realisieren. BASCOM kenn ich auch nicht, habe sowas aber schon in C gemacht. Displayaktualisierungen mache ich in 1/3-Sekunden-Intervallen, geht auch bei LCDs noch gut abzulesen.
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.