Forum: Mikrocontroller und Digitale Elektronik ADC Werte als Prozentwert ausgeben


von Daniel L. (grorkef)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich habe heute Versuch eine Prozentanzeige für den ADC Wert zu 
schreiben. Ich hab nach langem ausprobieren und durch lesen den Code 
geschrieben der im Anhang ist.

Die Prozentberechnung habe ich im Forum gefunden. Leider verstehe ich 
nicht ganz wie das funktioniert besonders diese lsr,ror,lsr,ror Abfolge. 
Es wäre nett wenn mir das jemand erklären könnte.

Außerdem würde ich mich sehr über Verbesserungsvorschläge freuen.

MFG Daniel L.

von Karl H. (kbuchegg)


Lesenswert?

Daniel L. wrote:
> Hallo,
>
> Ich habe heute Versuch eine Prozentanzeige für den ADC Wert zu
> schreiben. Ich hab nach langem ausprobieren und durch lesen den Code
> geschrieben der im Anhang ist.
>
> Die Prozentberechnung habe ich im Forum gefunden. Leider verstehe ich
> nicht ganz wie das funktioniert besonders diese lsr,ror,lsr,ror Abfolge.

Die Sequenz
1
  lsr adhigh
2
  ror adlow

schiebt alle Bits im gedachten 16 Bit Register adhigh/adlow um 1 Stelle 
nach links. Effektiv ist das eine Division durch 2
1
  lsr adhigh
2
  ror adlow
3
  lsr adhigh
4
  ror adlow

ist also effektiv eine Division durch 4.

Das Ergebnis der Multiplikation * 100 findet sich in den Registern 
ergebnis3/ergebnis2/ergebnis1 als 24 Bit Zahl wieder. Dadurch, dass nur 
ergebnis3/ergebnis2 weiterverwendet werden, wird das Ergebnis schon mal 
durch 256 dividiert. Eine weitere anschliessende Division durch 4 ergibt 
daher eine Division durch 4*256 = 1024

von Christopher G. (cbg)


Lesenswert?

Karl heinz Buchegger wrote:
> Die Sequenz
>
>
1
>   lsr adhigh
2
>   ror adlow
3
>
>
> schiebt alle Bits im gedachten 16 Bit Register adhigh/adlow um 1 Stelle
> nach links. Effektiv ist das eine Division durch 2

Es verschiebt die Bits nach rechts nicht links. Wahr wohl ein 
Schlampigkeitsfehler denn sonst passts (und Moderator :) ).

von Karl H. (kbuchegg)


Lesenswert?

Christopher G. wrote:
> Karl heinz Buchegger wrote:
>> Die Sequenz
>>
>>
1
>>   lsr adhigh
2
>>   ror adlow
3
>>
>>
>> schiebt alle Bits im gedachten 16 Bit Register adhigh/adlow um 1 Stelle
>> nach links. Effektiv ist das eine Division durch 2
>
> Es verschiebt die Bits nach rechts nicht links.

Ooops. Danke für die Korrektur.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.