Forum: Mikrocontroller und Digitale Elektronik PIC Messwerte für Ausgabe aufbereiten


von Michael (Gast)


Lesenswert?

Hallo,

Ich erhalte von einem Temperatursensor Messwerte. Nun würde ich diese 
gerne als Prozentangabe auf einem Display anzeigen lassen.

Beispielsweise wenn ich bislang acht Werte erhalten habe und einmal die 
Temperatur zu hoch war 12,5% (wobei die Nachkommastelle egal ist 12% 
oder 13% wären auch okay).

In der Theorie ist das soweit kein Problem (Werte*100/Anzahl). 
Allerdings frage ich mich, ob man sich hierbei das Leben irgendwie 
einfacher machen kann.

Da das Programm in Assembler geschrieben ist, wäre eine Multiplikation 
mit 100 bereits aufwendig aber eine Division mit einer veränderlichen 
Variablen noch komplizierter.

Gibt es hier einen Trick?

Danke!


Michael

von Max H. (hartl192)


Lesenswert?

Wenn es wirklich nur 8 Werte sind könnte man das mit einer Art 
if-Abfrage lösen. Die Division könnte man wenn die Anzahl eine 2er 
Potenz ist mit Shifts realisieren, eine 8bit*8bit Multiplikation wäre 
auch auf einem PIC12/PIC16 kein Hexenwerk, falls du eine suchst: 
Beitrag "Re: PIC-Assembler-Anfängerfrage"

Welchen PIC verwendest du? Ein PIC24 könnte Multiplikation und Division 
in Hardware, ein PIC18 könnte Multiplikation in Hardware.

: Bearbeitet durch User
von Michael (Gast)


Lesenswert?

Ich verwende einen PIC16 - leider ohne Multiplizierer.

Alle paar Minuten kommt im festen Takt ein neuer Wert hinzu. Der Divisor 
ist somit variabel.

Über Shifts habe ich auch schon nachgedacht, genauso wie eine 
Wertetabelle im Flash-ROM. Einen Ansatz wie ich damit Speicherplatz 
und/oder Rechenzeit, im Gegensatz zur stupiden Version (C-Code von einem 
Compiler übersetzen lassen und das Ergebnis in das Assembler-Programm 
integrieren), einsparen könnte, ist mir aber leider nicht aufgefallen.

von Wolfgang (Gast)


Lesenswert?

Michael schrieb:
> Da das Programm in Assembler geschrieben ist, wäre eine Multiplikation
> mit 100 bereits aufwendig aber eine Division mit einer veränderlichen
> Variablen noch komplizierter.

Und was spricht gegen C?
Abgesehen davon gibt es doch auch für Assembler die 
Bibliotheksfunktionen und bei deiner Datenrate hast du doch alle Zeit 
der Welt. Statt der Division durch eine Variable könntest du auch eine 
Multiplikation mit einer variablen Größe und die Division durch eine 
Konstante verwenden (z.B. 1/7 ist etwas 146/1024).

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.