PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 8-Digit 7-Segmentanzeige am ATM128 ...der Startschuss fehlt für Code



oderlachs
14.02.2016, 13:37
Hallo Freunde !

Ich muss mal wieder mit einer Frage aufwarten hier, weil ich einfach nicht aus die Pütt komme, wie ich es machen soll.

Ich möchte an einem ATmega128 ein 8-Digit 7-Segmentdisplay betreiben zur Datenanzeige.

Aber der Groschen klemmt so bei mir , das ich erst mal nicht den Start finde.

Es soll nach Möglichkeit in "C" codiert werden. (erst mal unwichtig)

Nun Fehlt mir der Anfang wie ich einen Zahlenwert in einzelne Zahlen zerlegen kann um sie binär über den Ausgangsport ans Display weiterzuleiten.
Ebenfalls muss ich auch noch binär(3 Leitungen) die Stelle der Zahl bzw Komma angeben.

Ich hoffe es kann mir wer hier mal einen "Gedankenanstoß" geben , ansonsten muss ich wohl das Vorhaben aufgeben.

Die gemeinsamen Anoden der 8 Anzeigen sind über ein Gatter verknüpft das 3 Eingänge hat : 2³ = 8

Hat wer einen Tip für mich, ich komme einfach nicht vom Flecke. Ich glaub das grösste Problem ist die Zerlegung der Zahl in die einzelnen Stellen.

Letztendlich soll das Display zu Temperatur/Feuchte Anzeige in der einen Variante und in der Anderen als 8 stell. Zähler dienen.

Gruss und Dank Gerhard

TiGePa
14.02.2016, 14:25
Hej,

erster spontaner Gedanke:
über itoa() in string verwandeln und dann jedes Zeichen des string per atoi() zurück in zahl/int
Ist definitiv nicht die beste Methode aber zumindesst ein erster Ansatz. Wie sind die Datentypen der Zahlen? Der Zähler ja sicherlich int/long, aber du sprichst auch von Komma also vermutlich die Temperatur in float...
Gibts da nicht schon fertige Bibs für sowas?
Gruss Tim

PS: über modulo 10 kommst du bei int ja immer an die letzte Ziffer, also sukzessiv y=x mod 10 -> letzte Ziffer, x=x/10 -> Ziffern weiter nach hinten rücken lassen. Bei float y: Genauigkeit n festlegen x=y*10^n, x als int deklariert gibt dir ja dann den 10^n fachen Wert an. Da die Genauigkeit n festgelegt ist, weist du wo das Komma hinmuss. Der Rest wie oben bei den int

Klebwax
14.02.2016, 17:18
Nun Fehlt mir der Anfang wie ich einen Zahlenwert in einzelne Zahlen zerlegen kann ...

UnterstesDigit = Zahl % 10 // Modulo
Zahl = Zahl / 10
ZweitesDigit = Zahl % 10
...

Dann eine Tabelle

uint8_t DigitTable = {
0b01010101; // Bitmuster, das wie eine 0 Aussieht
0b00000011; // Bitmuster für 1
.....
}

und dann DigitTable[digit] ausgeben. Man kann die Tabelle noch etwas länger machen, und mit Zahlen größer 10 andere Symbole darstellen, so - oder E oder was man sich für Error, overflow so ausdenkt. Wenn der Dezimalpunkt mit im Display quasi als achtes Segment ist, kann man einfach das passende Bit auf die richtige Stelle aufodern.

MfG Klebwax

oderlachs
14.02.2016, 17:46
Hallo Ihr Beiden !

Habt vielen Dank für Eure Anregungen, Es war schon die richtige Überlegung. Ich habe auch noch etwas gegooglet un HIER (http://maxembedded.com/2013/01/seven-segment-multiplexing/) was gefunden.
Ich kann das nicht komplett so nehmen, aber mir ging es ja nur um eine Anregung. So kann und muss ich meinenKopf selber noch anstrengen,
darum ging es mir ja auch, nichts Fertiges einfach zu übernehmen.
Nun werde ich das ganze erst mal mit Ganzzahlen versuchen um später dann Zahlen mit Komma zu verarbeiten.
Na mal sehen wie ich es hinbekomme. Ich melde mich wieder wenn ich weiter bin.

Heute brummt mir aber schon etwas der Kopf, um noch grosses zu Vollbringen.

Besten Dank und Gruss
Gerhard

Hier meine bisherige Arbeit (AVRStudio 4 Test mit STK500+ ATmega32) 31299

Unregistriert
15.02.2016, 07:24
Hallo Gerhard
mit Modulo kannst du es sehr gut berechnen. Kannst jede Stelle einer Zaghl ermitteln und einzeln darstellen. Dabei kannst du auch das Komma extra setzen
achim

oderlachs
15.02.2016, 09:49
Hallo Achim !

Ja ich werde es auch per Modulo machen, ich musste mich erst generell in solche Ansteuerung von 7Segm. einarbeiten darum ist mien bisheriger Code nur ein "Ringzähler" mit Anzeige sozusagen der immer eine Stelle in der Anzeige weiterschaltet, nach der "9".
Die Headerdatei habe ich extra geschrieben, wenn auch nicht unbedingt nötig, um mir die Übersichtlichkeit besser zu gestalten.
So habe ich es auch damals gelernt in der Ausbildung bei C, C++ und Java. Wahrscheinlich wollte der Dozent es auch übersichtlicher haben, wenn er die Arbeiten durchging. da habe ich es mir nun total angeeignet.

Werde weiter berichten wie ich das Problem der Anzeige entgültig löse...

Gruss und Dank

Gerhard
Hier (http://oderlachs.de/forum/7_segment/) ein paar Fotos vom Testaufbau, Schaltung folgt noch ....
15.02.2016 Update Code Programm liest bis zu 8-stellige Zahlen ein zum Test als Zufall(5-stellig) bzw Festzahlen Hier (http://oderlachs.de/forum/code/7_segment.zip) als Zipdatei