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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.