Ich habe gerade ein Programm geschrieben, was mir eine an ADC-Kanal 0 anliegende Spannung auf einer dreistelligen Siebensegmentanzeige darstellen soll. Bei der Simulation stellte ich fest, daß offenbar meine Formel zur Umrechnung nicht das ausgibt, was ich erwarte. Ich verwende die Betriebsspannung als Referenz und muß daraufhin rechnen lassen: XVOLT= (5 Volt / 1024)*Messwert. Messwert läßt sich auch schön mittels Schieberegler im Simulator zwischen 0 und 1023 einstellen, aber XVOLT gibt mir Null aus. Offenbar schmeckt ihm das "5 /1024" nicht. Ich glaube, heute ist nicht mein Tag.... ;-( MfG Paul
Tja, ich vermute mal, dass BASCOM genau wie C standardmäßig in Ganzzahlen rechnet (was aus Ressourcengründen ja auch das einzig Sinnvolle ist). Und jetzt rechne bitte mal selber aus, was bei einer Ganzzahldivision von 5/1024 rauskommt...
Versuchs doch mal so: Xvolt = Messwert * 5 / 1024 oder besser so: Xvolt = Messwert * 5000 /1024 Faktor = 5 / 1024 Xvolt = Messwert * Faktor PS: Das Verfahren geht auch: Beitrag "Re: 16-Bit-Zahl ausgeben, nur wie?"
Danke erstmal an Euch. Es haut trotzdem nicht hin. Die erste Variante liefert bei 1023 XVOLT von 4. Die 2. liefert bei 1023 XVOLT von 3192. Die 3. liefert immer Null. Es kann natürlich auch sein, daß es in Natura funktioniert und mich bloß der Simulator zum Narren hält. MfG Paul
Wie wäre es damit (ASM)? - Messwert 10-bittig (rechtsbündig) in 2 Register einlesen - Messwert mit 125 multiplizieren (es entstehen 3 Bytes) - unteres Byte wegwerfen (durch 256 teilen) (jetzt sind es noch 2 Bytes) - Durch Subtraktionsmethode in 5 Ziffern zerlegen, wobei die beiden oberen (linken) Ziffern aufgrund des begrenzten Wertevorrates immer 0 sind, es entstehen also 3 (nutzbare) Ziffern - Ziffern ausgeben, erste Ziffer mit Dezimalpunkt Dazu solltest Du aber auf den Tiny24 verzichten und den billigeren Mega8 benutzen, dann hast Du Hardware-Multiplikation und genügend Pins, um auch den Dezimalpunkt mit auszugeben. ...
ber der ersten variente ist das ergebniss tatsächlich 4. bei der zweiten müsste es 4995 sein (siehe unten). die dritte ist das selbe wie du gemacht hast das ergebniss ist immer 0. der grund warum die zweite methode falsch ist müsste ein überlauf sein. 1023*5000 ist schließlich deutlich über 32000. caste das auf uint32_t dann sollte es funktionieren.
Die Idee von Hannes war der zündende Gedanke. Das habe ich jetzt so eingebaut und er bringt mir bei 1023 499 und bei 511 250. Ich bin entzückt! ;-))) MfG Paul
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.