mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Balkenanzeige LCD


Autor: seppe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: seppe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: seppe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke!!

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
// time_act/divcount = time_max / 100
divcount = (time_act * 100)/time_max;
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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

habs verstanden, es geht hier nicht um Prozentrechnung sondern nur um 
die Verhaeltnisrechnung. Bei 100 heisst es nun mal eben Prozentrechnung 
:).

Daniel

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS:
mein richtiger Code ist nun
    // time_act / divcount = time_max /100
    divcount = (time_act * 100) /time_max;
    divcount = divcount * LINES;
    divcount = divcount / 100;

Begrenzt auf time_max < 655,35 sonst kommt muell raus

Daniel

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wozu zuerst mit 100 multiplizieren um dann durch 100 zu teilen?
  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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.