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 ?
Hallo ! Das stimmt alles Ich glaube aber eher der Gedanke der dir fehlt
ist, dass du das ganze nicht ganzzahhlig sondern in floats rechnen
musst. Also bei der Berechnung einfach in floar konvertieren dann pfeift
das ;-)
L.g. michi
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.
Wini schrieb:> Mit 5V * Momentan Wert / 255 geht es ja leider nicht :(> Jemmand eine Idee ?
Rechne in milliVolt: 5000*ADC / 256
Oder in centiVolt: 500*ADC /256
Michael Rathmair schrieb:> Hallo ! Das stimmt alles Ich glaube aber eher der Gedanke der dir fehlt>> ist, dass du das ganze nicht ganzzahhlig sondern in floats rechnen>> musst. Also bei der Berechnung einfach in floar konvertieren dann pfeift>> das ;-)
Das klingt gut.
Und wie konvertiere ich das ?
Sry bin noch Anfänger ^^
Arbeite mit dem PIC16F887
Ich habe gerade das hier gefunden!
Das sollen wohl Makkros sein.
Kann mir bitte jemmand erklären wie man die benutzt ?
Muss ich die in mein Projekt einbinden (MPLAB)?
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... ;-)
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 :(
Lothar Miller schrieb:> Denn TEILEN durch 256 ist> idR. schneller als Teilen durch 32.
Rein aus Interesse.
Wieso denn dass? Sind doch beides Schiebeoperationen?
NopNop schrieb:> Rein aus Interesse.> Wieso denn dass? Sind doch beides Schiebeoperationen?
wenn ich mich nicht täusche, kann man bei /256 einfach das hintere Byte
"abschneiden", und der Compiler das "merkt", dürfte das vermutlich
schneller gehen als mehrmals Schieben...
NopNop schrieb:> Wieso denn dass? Sind doch beides Schiebeoperationen?
/256 ist bei 8-Bit Prozessoren eine "Ignorier"-Operation.
Einfach das unterste Byte ignorieren... ;-)
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.
Lothar Miller schrieb:> NopNop schrieb:>> Wieso denn dass? Sind doch beides Schiebeoperationen?> /256 ist bei 8-Bit Prozessoren eine "Ignorier"-Operation.> Einfach das unterste Byte ignorieren... ;-)
Gut zu wissen...danke.
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 :(
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)
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.
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?
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.