Gast
#314206
hallo ich will einen registerwert, zb von ner adwandlung als balken(0-10) auf nem lcd anzeigen lassen. wie kann ich in aseembler am einfachsten sagen bis zu wert x 1 balken ab wert y 2balken usw? sepp
|
Anzeige
|
Balkenanzeige LCD
Gast
#314206
hallo ich will einen registerwert, zb von ner adwandlung als balken(0-10) auf nem lcd anzeigen lassen. wie kann ich in aseembler am einfachsten sagen bis zu wert x 1 balken ab wert y 2balken usw? sepp
Gast
#314207
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
#314208
hmmm gute idee ich dachte nämlich so: teste ob registerwert kleiner als x wenn nein > 1balken. ich will übrigens nen amtmega 8 oder 16 verwenden
Gast
#314209
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
#314210
Danke!!
Gast
#749511
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.
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
#749550
Hi, habs verstanden, es geht hier nicht um Prozentrechnung sondern nur um die Verhaeltnisrechnung. Bei 100 heisst es nun mal eben Prozentrechnung :). Daniel
Gast
#749578
PS: mein richtiger Code ist nun
Begrenzt auf time_max < 655,35 sonst kommt muell raus Daniel Wozu zuerst mit 100 multiplizieren um dann durch 100 zu teilen?
> 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 schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|