Balkenanzeige LCD

Gast #314207
Lesenswert?

ich kenn mich zwar nicht mit deinem verwendeten prozessor aus, noch weiß
ich nicht wie deine hardware aussieht, aber ich würde sagen :

subtrahiere von deinem ad-wert den wert x ab. wenn das ergebnis kleiner
als 0 ist (N-Flag oder C-Flag) setzt du balken eins ansonsten setzt du
balken eins zurück. dasselbe machst du 10 mal (mit jeweils nem anderen
wert und nem anderen balken) und dann sollte deine balkenanzeige
laufen.

gruß
rene
Gast #314209
Lesenswert?

geht auch noch anders :

nimm deinen ad-wert schneide alles ab bis auf die obersten vier bits,
schiebe diese nach ganz unten, multipliziere diesen wert mit 10 und
schiebe wieder um 4 bit nach rechts. dann hast du deinen ad-wert von
0-10 begrenzt und mußt nur noch entsprechend dem wert die anzahl von
leds setzen.

bsp mit 8 bit ad-wert:

x  = 10101010 (dez. 170, also 66% deines max-wertes)
schieben
x1 = 00001010
multiplizieren
x1 * 10 = 01100100
schieben
y = 0110 (dez. 6)
ausgabe und fertig
Gast #749511
Lesenswert?

Hi,
warum dieses schieben um 4 ? das ist doch einen Division durch 16.
Ich habe das selbe mathematische Problem.
Bei mir ist die Balkenanzeige fuer 128 Balken und mein Wert x ein 16 bit 
Integer. Mein max. Wert ist auch nicht konstant. Ich programmiere es in 
C.
1
// time_act/divcount = time_max / 100
2
divcount = (time_act * 100)/time_max;
3
divcount = divcount * 128;
viele Fragen:
Ist es richtig oder geht das auch noch einfacher?

Muss ich es auf die konstante 100(Prozent) beziehen oder kann ich es 
auch auf einen andere konstante wie 128 oder 64 beziehen?

Gibt es nicht einen überlauf bei time_act * 100 ? wird doch zu gross 
fuer integer, wenn time_act > 655,35 ist? Geht es auch noch anders?

Vielen Dank
Daniel
Gast #749578
Lesenswert?

PS:
mein richtiger Code ist nun
1
    // time_act / divcount = time_max /100
2
    divcount = (time_act * 100) /time_max;
3
    divcount = divcount * LINES;
4
    divcount = divcount / 100;

Begrenzt auf time_max < 655,35 sonst kommt muell raus

Daniel
#749933
Lesenswert?

Wozu zuerst mit 100 multiplizieren um dann durch 100 zu teilen?
1
  divcount = time_act * LINES / time_max;

> es geht hier nicht um Prozentrechnung sondern nur um
> die Verhaeltnisrechnung.
> habs verstanden,

anscheined nicht.

> Bei 100 heisst es nun mal eben Prozentrechnung :).

Und ansonsten heist es Schlussrechnung, bzw. der berühmte
Dreisprung.
5 Äpfel kosten 12 Euro. Wieviel kosten 8 Äpfel


       5  .........  12
       8  .........   x
      ------------------
              8 * 12
        x = ---------
                5


time_max wird in LINES Elementen dargestellt, wieviele Elemente
benötigt man für time_act


      time_max   .........   LINES
      time_act   .........     x
     ------------------------------
             time_act * LINES
        x = ------------------
                 time_max



( Merkspruch:   Die 3 Elemente ohne dem x bilden ein Dreieck.
                -> Zahl über x, mal Stumpf durch Spitz

                   Spitz           Zahl
                   Stumpf            x )

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren