- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 8 von 8

Thema: 7-Segment-Stellen berechnen

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.01.2006
    Ort
    Homberg (Efze)/Nordhessen
    Alter
    39
    Beiträge
    207

    7-Segment-Stellen berechnen

    Anzeige

    Powerstation Test
    Hallo zusammen,

    bin gerade an einem Programm für eine 5-Stellige 7-Segmentanzeige.

    Ich frage mich nun wie man das am effektivsten in Code umsetzen kann. Und zwar sieht das folgendermaßen aus:

    Der Wertebereich liegt zwischen 0 und 99999. Mein Controller kennt 5 Variablen von 0-9 die für die jeweilige Stelle stehen, es gilt nun diese 0 - 99999 in die entsprechenden Zehnerstellen aufzusplitten und an die Variablen zu übergeben.
    Man könnte zwar 10 If schleifen pro stelle nehmen um jede Stelle einzeln zu ermitteln, allerdings ist mein Speicher dann ruck zuck voll.

    Gibt es denn nicht da irgendeinen weg über Bitoperationen die Stellen einfacher zu berechnen? Vllt. hat jemand schon mal sowas gemacht...
    Grüße Paul

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    hmmm ... Du kannst die Zahl ja in einen String überführen und dann einfach
    den String Zeichen für Zeichen durch gehen, dann brauchst Du die Auswertung nur einmal und eine Schleife.
    Den ASCII jedes Zeichens in Zahl zurückverwandeln geht einfach per Subtraktion.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.05.2005
    Ort
    Berlin
    Beiträge
    316
    Ich würd das ganze wie folgt machen:
    Ermitteln der Stelle x : Division durch 10^x
    Ermitteln des Restes : Wert mod 10^x

    Das ganze kannst du in einer Schleife abarbeiten.
    Pseudocode:
    Code:
    input = 995;
    Anzahl_Stellen = 3;
    i = Anzahl Stellen - 1;
    while i>-1 do
    {
       Wert = input / 10^i;
       Ausgeben(Wert,i);
       input = input mod 10^i;
       i--;
    }
    Die Funktion Ausgeben gibt ein Digit an einer bestimmten Stelle aus.
    Das wäre dann ja nur noch eine simple Encoder-Funktion, die das entsprechende Anzeigemodul ansteuert.

  4. #4
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Ausdrücke wie 10^i sollte man unbedingt vermeiden. Es gibt da im Prinzip 2 Möglichkeiten:
    1) Man fängt vorne an und zieht in einer Schleife so oft Zahlen wie 1000 ab, bis man unter 1000 kommt. Bei 5 Stellen sind das dann ggf. halt while Schleifen. Das ist zwar nicht elegant, geht aber recht schnell, auch mit einem 8 Bit µC.

    2) Man fängt hinten an, so ähnlich wie es oben wohl gemeinst war: Teilen durch 10 mit merken des Restes. Vielfach gibt es dazu eine Spezielle Funktion. Der Rest ist dann die hintere Stelle. Das Wiederholt man bis man bei 0 angekommen ist. Das ist bei den meisten µC nicht ganz so schnell, aber dafür recht kurz. Wenn man die Routine für das Teilen in ASM schreibt ist das Verfahren auch recht schnell, weil man halt eine spezielle Routine für das Teilen durch eine 8 Bit Zahl nutzen kann, das ist auf eine 8 Bit µC deutlich schneller als die volle 32 Bit Arithmetik die die meisten Compiler da nutzen.

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.05.2005
    Ort
    Berlin
    Beiträge
    316
    Ich hab nie gesagt, dass ein Ausdruck wie 10^i in der Implementierung benutzt werden soll. Das ist Pseudocode!
    Der Threadersteller wird am besten wissen, wie er die Sachen dann umzusetzen hat. Wenn die Anzeige nur einmal in der Sekunde aktualisiert werden muss und ansonsten auch nur wenig gerechnet wird, dann wäre das Ausrechnen von 10^i nicht kritisch, weil dann eh genug Rechenzeit vorhanden ist. Dann muss man nicht solche Verrenkungen machen. Wenn es wahnsinnig schnell sein muss, wäre eine Lookup-Table wahrscheinlich das beste. Da wir diese Details aber nicht kennen, hat es mir gereicht, einfach 10^i zu schreiben. Ich denke, jeder weiß, was damit gemeint ist.

  6. #6
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    Hallo!

    Ich kenne zwar Cäh gar nicht, aber am einfachsten wäre Zahl in Sting umzuwandeln und einzelne Zeichen aus dem String an Anzeige übergeben (z.B. durch "look-up table").
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.01.2006
    Ort
    Homberg (Efze)/Nordhessen
    Alter
    39
    Beiträge
    207
    Hi Leute,

    vielen Dank für die Tips!

    Ich hab es erstmal mit der String-Methode versucht und das hat auf anhieb funktioniert, die Speicherbelegung ist akzeptabel und die Rechenzeit ebenfalls, also ich denke es sollte damit erst mal hinhauen!
    Grüße Paul

  8. #8
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    In C gibt funktionen wie Itoa() um Integer in einen String zu wandeln.

Ähnliche Themen

  1. At90USB Key Spannungsversorgung auf 5V Stellen
    Von LMP_LMP im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 27.02.2009, 07:40
  2. Drehstromheizlast stellen
    Von chris1280 im Forum Elektronik
    Antworten: 8
    Letzter Beitrag: 08.10.2008, 18:46
  3. print mit 6 Stellen
    Von TobiasBlome im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 17
    Letzter Beitrag: 18.03.2007, 01:02
  4. Taster zum Stellen wie bei Digitaluhr u.a.
    Von Millenniumpilot im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 12
    Letzter Beitrag: 07.09.2005, 05:02
  5. 8 Stellen LEDAnzeige
    Von the_Ghost666 im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 25.04.2005, 18:04

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress