Forum: Mikrocontroller und Digitale Elektronik Zählen bis 500Mio und Ausgabe über 7-Segment


von micha b (Gast)


Lesenswert?

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? :-)

von inoffizieller WM-Rahul (Gast)


Lesenswert?

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!

von Der T. (Gast)


Lesenswert?

Ich bin ein bischen neugierig: Was soll das werden? :)

von micha b (Gast)


Lesenswert?

@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 Peter D. (peda)


Lesenswert?

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

von johnny.m (Gast)


Lesenswert?

Für die Ausgabe würde ich einen festen Takt nehmen (z.B. 2
Aktualisierungen pro Sekunde). Sonst wirds ein wenig zu flackerig...

von micha b (Gast)


Lesenswert?

@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?

von johnny.m (Gast)


Lesenswert?

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....

von Peter D. (peda)


Lesenswert?

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

von micha b (Gast)


Lesenswert?

@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?

von Dominik T. (dom) Benutzerseite


Lesenswert?

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

von Sebastian (Gast)


Lesenswert?

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

von Winfried (Gast)


Lesenswert?

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 :-)

von Sonic (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.