Binär/ASCII zum realen Wert

Gast #2185790
Lesenswert?

Hallo ihr,

ich habe einen Problem. Ich möchte eine Digitale Spannungsanzeige mit 
einem PIC realisieren.

Ich habe es bereis geschaft ein 8bit Datenwort aus dem ADC rauszuholen 
und in seine Zehnerstellen zu zerlegen.


5V = 255 usw.


Jetzt zu meiner Frage. Wie bekomm ich daraus jetzt den Momentanen 
Spannungswert.

Mit 5V * Momentan Wert / 255 geht es ja leider nicht :(
Jemmand eine Idee ?
#2185807
Lesenswert?

Wini schrieb:
> Mit 5V * Momentan Wert / 255 geht es ja leider nicht :(
> Jemmand eine Idee ?

geht schon nur is das in Assembler nich so simpel.

Wini schrieb:
> Mit 5V * Momentan Wert / 255 geht es ja leider nicht :(
> Jemmand eine Idee ?

Nimm die, wahrscheinlich auch in Deinem mir leider unbekannten Pic,
vorhandene VRev. dann hast Du nur noch mit den Faktoren 4,8 o. 16
zu tun.
Ich messe dann halt meist so oft und addiere das ganze, verringrt die 
Messfehler.
Moderator (Firma: Titel) Persönliche Seite #2185936
Lesenswert?

Philipp Klostermann schrieb:
> Aber das Kürzen nicht vergessen:
> 5000 * ADC / 256 = 625 * ADC / 32
Das bedeutet nich unbedingt den kürzeren Code. Denn TEILEN durch 256 ist 
idR. schneller als Teilen durch 32.
Interessant ist also, ob bei der Multiplikation (625 statt 5000) vorher 
mindestens soviel Zeit eingespart wurde... ;-)
Gast #2185967
Lesenswert?

Warum soll mir langweilig sein ? ^^


Ich verstehe gerade nur nicht (würde auch mit Millivolt rechnen) wie ich 
dem Pic sagen soll, Rechne jetzt mit Kommastellen ! ^^


Wie gesagt bin jetzt erst seid 3 Wochen dabei :D


Sry wenn ich nerve :(
#2185991
Lesenswert?

Wini schrieb:
> Warum soll mir langweilig sein ? ^^

nix für ungut.

Dir fehlen die absoluten Grundkenntnisse im Umgang mit Binärzahlen
und Rechnen in Assembler.
Das kann und will Dir hier sicher keiner beibringen.
Internet, Bücher ist hier das Stichwort oder Du wechselst zu einer 
Hochsprache wie C, Pascal o. BASIC (Wo wir dann aber wieder bei 
Internet, Bücher etc. wären :))
Obwohl ich eine Grundkenntnis in Assembler für unabdingbar zum 
erfolgreichen Programmieren eines mC's halte.
Gast #2186019
Lesenswert?

NopNop schrieb:
> Dir fehlen die absoluten Grundkenntnisse im Umgang mit Binärzahlen
>
> und Rechnen in Assembler.
>

Wohl möglich :,(
Kann mir gerade nicht so wirklich vorstellen wie ein mC mit Kommastellen 
rechnet.

Ich kenne momentan nur das rechnen mit ganzen zahlen die den Wert 255 
nicht überschreiten. (da fehlt mir wohl noch so einiges)


> Das kann und will Dir hier sicher keiner beibringen.
>
Eine kurze Erklärung reicht mir ^^


> Internet, Bücher ist hier das Stichwort oder Du wechselst zu einer
>
> Hochsprache wie C, Pascal o. BASIC

Wenn das so einfach wäre ^^


> Obwohl ich eine Grundkenntnis in Assembler für unabdingbar zum
>
> erfolgreichen Programmieren eines mC's halte.

Ist rechnen mit Kommastellen noch Grundkenntnisse ?
Dann fehlen die mir wirklich. Tut mir leid das ich hier so unvorbereitet 
reinschreibe :(
#2186354
Lesenswert?

Wini schrieb:
> NopNop schrieb:
>> Dir fehlen die absoluten Grundkenntnisse im Umgang mit Binärzahlen
>>
>> und Rechnen in Assembler.
>>
>
> Wohl möglich :,(
> Kann mir gerade nicht so wirklich vorstellen wie ein mC mit Kommastellen
> rechnet.

Mit Kommestallen, also echten Floating Point, ist das aufwändig.
Aber das musst du ja auch nicht. Das Stichwort ist ja schon gefallen: 
Fixed Point Arithmetik. Also einfach einem geeigneten Vielfachen. Bei 
dir zb 1000

> Ich kenne momentan nur das rechnen mit ganzen zahlen die den Wert 255
> nicht überschreiten. (da fehlt mir wohl noch so einiges)

Dann wird dein nächster Punkt auf deiner Lernliste darin bestehen, dass 
du dich mit 16 Bit Arithmetik vertraut machen musst. Denn ein 
Zahlenbereich 0 bis 255 ist dann schon sehr einschränkend. Aber mit 0 
bis 65536 sieht es dann schon besser aus. Dann kann man auch in 
Millivolt rechnen (also einfach dem Tausendfachen des Volt-Wertes)
Gast #2186562
Lesenswert?

Lothar Miller schrieb:
> Interessant ist also, ob bei der Multiplikation (625 statt 5000) vorher
> mindestens soviel Zeit eingespart wurde... ;-)

Das stimmt wohl, mir ging es eher um die Bereichsüberschreitung, und da 
haben wir in beiden Fällen mehr als 16 Bit (18, bzw. 20 Bit) im 
Zwischenergebnis. (Da hatte ich nicht aufgepasst.)
Wenn man das vermeiden will, bleibt, von Millivolt auf Centivolt 
umzusteigen, also
ADC * 500 / 256
bzw.
ADC * 250 / 128 (Zwischenergebnis maximal (0xF909)
oder
ADC * 125 / 64
wenn man eh' nicht das letzte Byte ignorieren kann, da man nicht mehr 
durch 256 teilt.
Gast #2186925
Lesenswert?

Gut,

dann werde ich mich mal ransetzen.
War gestern schon ein wenig deprimiert ;) (aber naja...was will man 3 
Wochen programmieren schon erwarten)


Kennt jemmand gute Bücher über das Thema (PIC programmierung, vlt sogar 
über den PIC16F887)

Hab das Buch Mikrocontroller für Einsteier und Unterlgagen Elabo.




Und noch eine Frage: Ist es einfacher sowas in C zu programmieren ?
Und wo liegen die Nachteile es in C zu programmieren?
#2187830
Lesenswert?

Wini schrieb:

> Und noch eine Frage: Ist es einfacher sowas in C zu programmieren ?

Ja.
Denn dein Compiler weiß, wie man in 16 (oder 32) Bit rechnet und setzt 
das dann ein. Im Grunde ersetzt dir der Compiler viel Wissen, dass du 
auf Assemblerebene brauchst um Programme schreiben zu können. Der 
Compiler entlastet dich von vielen Details.

> Und wo liegen die Nachteile es in C zu programmieren?

Ein Laufzeitpenalty. Der liegt bei C-Anfängern etwas höher, aber mit ein 
wenig Übung bewegt sich der Penalty im (kleinen) einstelligen 
Prozentbereich. Und natürlich muss man auch C lernen, was etwas 
umfangreicher ist als die Assemblerbefehle auswendig zu lernen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren