LED-Multiplexen in C

theben

Neues Mitglied
27. Okt. 2009
2
0
0
Sprachen
Hallo ersmal das ist hier mein erster Eintrag im Forum. :hello:

Ich habe das Forum schon den halben Tag durchsucht und nichts passendes gefunden.

Aber nun erstmal zu meinem Problem:
Ich bin ein echter noob und mein erstes projekt soll ein Zähler (über Lichtschranke) mit vier stelliger 7 Segmentanzeige werden. Da ich mich nur etwas in Programmiersprache C auskenne und mit der herkömmlichen Assembler sprache auf kriegsfuß stehe. Bringen mir die zahlreichen erklärungen, im forum, mit assembler coode, nicht viel.
Ich möchte also einen wert mit einer Lichtschranke zählen und dann live auf einer vierstelligen 7 Segmentanzeige ausgeben. Wie ich was und wo hardware mäßig an schliese ist mir eigentlich schon klar aber wie programmiere ich das Multiplexing in C und brauche ich denn zum zählen der lichtschranken signale ein interrupt, weil ja das multiplexen ständig läuft?

also für ein paar anregungen wäre ich echt dankbar oder für ein C Programm als Grundgrüst.
 
Hallo Theben,

ein herzliches Willkommen bei uns im AVR-PRAXiS-Forum.

Ein Grundgerüst habe ich jetzt leider gerade nicht parat. Ich würde hier folgendermaßen vorgehen:

Das Multiplexen der 7Segment Anzeige würde ich in einer Timer-Interrupt-Routine erledigen. Die Multiplexrate sollte bei 20ms liegen, eventuell auch etwas kürzer. Bei vier Stellen wäre das eine Interruptperiodendauer von 5ms. Du suchst dir einen freien Timer aus und nutzt entweder den Overflow-Interrupt oder den Compare-Interrupt. In unserem Forum haben wir ein kleines Programm zum Berechnen der Reload- und Comparewerte und in dem Thread gibt es auch ein paar Erläuterungen zu dem Thema.

Tool: AVR-Timer-Calculator

Wechselt der Zustand des Lichtschrankensignals ausreichend langsam, kannst du das Signal pollen, das heißt permanent den entsprechenden Portpin abfragen und bei einem Wechsel des logischen Zustandes inkrementierst du deinen Zählerwert.
Du kannst aber auch einen externen Interrupt verwenden (Flanke des Interrupts einstellen). Bei jedem Interrupt inkrementierst du deinen Zähler.

Wenn du den Zähler änderst, würde ich auch gleich diesen Wert in die vier äquivalenten Werte für die vier 7Segment-Stellen wandeln. Diese vier Werte werden dann in der Timerinterrupt-Routine genutzt, um die 7Segment-Stellen anzusteuern. In jedem Timerinterrupt wechselt die aktive Stelle (1-2-3-4-1-2-3-4-...)

Ich hoffe, ich konnte dir ein bischen weiterhelfen.

Grüße,
Dirk
 
so viele interupts??? bohr dann muss ich mir ja das thema noch mal genauer zu gemüte ziehen. hat jemand nen link wo die dinger mal genauer beschrieben werden? meine einzigsten quellen waren bis jetzt das tutorium bei mikrocontroller.net und das buch AVR-RISC Embedded Software selbst entwickeln von Roman Mittermayr. Dort wird zwar so einigermaßen erklärt was interupts sind und was es für welche gibt aber nicht wie man sie einetzt und progremmiert.

Nagut dann werd ich wohl erstmal mein Projekt genauer vor stellen:

ich möchte einen Ballzähler bauen (genauer es ist Farbmonition zum Paintballspielen) der mir eine gweisse menge (140 stück) in einen zweiten Behälter ab füllt.
Also oben befindet sich ein großer Tank der mehrere 1000 Bälle fasst. Eine art Propeller schaufelt die Bälle in ein fallrohr,dieser Propeller nennt sich Hopper und kommt diereckt aus dem Paintballsport und schafft bis zu 20 bälle pro sekunde. Ein Ventil stoppt so zusagen die bälle im fallrohr. Porpeller und ventil werden also gleichzeitig über ein Relais an gesteuert.
So eine Lichtschranke soll nun die fallenden Bälle zählen und bei gewünschter anzahl zu machen. Gleichzeitig soll halt der aktuelle wert immer über eine 4stellige sieben segment anzeige dargestellt werden. Dazu kommen halt noch einzelne spielereien wie start knopf und eine auswahl von 2 verschiedenen anzahlen von bällen.

Die rechentechnische Arbeit soll ein ATMega8 übernehmen ein entwicklungboard ist grad mit der post zu mir unterwegs.

Wenn ich mir da für mein erstes Projekt nicht zu viel vor genommen habe...:(

Bin also für jede Anregung dankbar.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)