PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Voltmessung mit Nachkommastellen



bennycy
21.07.2008, 16:12
Hallo!

Ich habe mir die c-control 2.0 von Conrad vor ein paar Tagen zugelegt und bin schon auf ein 1. Problem gestoßen.

Da der Compiler nur Ganzzahlen verrechnen kann, ist man auf den mod Befehl angewiesen. (beim googeln entdeckt)

Ich habe auf den Analog/Digitalwandler - Port[7] den Schleiferkontakt eines Potentiometers angeschlossen. Nun möchte ich, dass mir das Display die Spannung so genau wie möglich anzeigt, wie z.B. 4,002 V

So, und um dies zu realisieren muss man anscheinend mit dem mod Befehl rechnen.
Ich google jetzt schon seit Tagen, nach einer Sinnvollen Anleitung dafür, damit auch ich als Anfänger dies umsetzen und vor allem kapieren kann.

Doch leider finde ich nur Anleitungen und Beispiele, für Profis. Auf gut Deutsch, alles was ich bis jetzt dazu gefunden habe, kapier ich nicht.

Jetzt wäre ich sehr dankbar, wenn ihr mir helfen könnt. Wäre auch über Anleitungen, Links, Tipps usw. sehr dankbar.
Bin auf jedenfall noch ein Anfänger und "Dummie" in dem Gebiet O:)

Vielen Dank für die Infos!

Gruss Benny

Tido
21.07.2008, 16:37
Da der Wert von 4,002 V nicht dargestellt werden kann, musst du einen Wert erzeugen, der keine (dich interessierenden) Nachkommastellen enthält; in diesem Fall muss in deiner Rechnung zu den 4,002 V ein "* 1000" hinzugefügt werden.
Dann erhälst du statt 4,002 eben 4002.

Zur Anzeige gehst du folgendermaßen vor:
print wert/1000; 'Du teilst diesen Wert wieder durch 1000 --> Ausgabe =4
print ","; 'Ausgabe des Kommas
print wert mod 1000 'ergibt den Rest von wert/1000, also 002

Fertig!

Das ganze kann man dann auch in einer Zeile zusammenfassen:

print wert/1000 & "," & wert mod 1000

Bin gerade bei der Arbeit und ziemlich gestresst, ich hoffe, ich habe keinen Fehler eingebaut!

bennycy
21.07.2008, 17:01
Hallo!

Danke für die schnelle Antwort.
Habe jetzt folgendes Programm geschrieben:
----------------------------------------------------------------------
' Deklarationsteil
define poti ad[7]
lcd.init

' Programmteil
#loop
lcd.pos 1,1
lcd.print "dez=" & poti


lcd.pos 2,1
print ((poti / 51) & "," & (poti mod 51) & " V"

goto loop
-----------------------------------------------------------------------------

Nun erkläre ich mal folgende Programmzeile:
print ((poti / 51) & "," & (poti mod 51) & " V"

Wenn z.B. am A/D - Eingang 255 (Dezimal) anliegen macht die Zeile doch folgendes --> 255/51 = 5
--> 255 mod 51 = ,00
Also müssten auf dem Display 5,00 V stehen

Gut bei diesem Wert 255 steht auch tatsächlich 5,00 V auf dem Display.
Sobald ich aber das Poti herunterdrehe z.B. Wert 175 (Dezimal) stimmt der dazugehörige Voltwert nicht mehr überein.

Warum? Was mache ich falsch?

Danke für die Hilfe!

Gruss Benny

Tido
21.07.2008, 19:48
Hi,

eigentlich hatte ich hier nochmal eine komplette Erläuterung geplant.
Aber Tappi hat in seinem Post (anderes Forum, du weißt schon wo) schon alles wichtige dazu geschrieben!

Gock
21.07.2008, 21:46
...mal nebenbei...
Hab ich nicht irgendwo gelesen, dass die C-Control 2 mit 32Bit Fließkommazahlen umgehen kann?
Gruß

Tido
21.07.2008, 21:54
Er meint die M-Unit 2.0.

bennycy
22.07.2008, 15:26
Hallo Tido,

ja das stimmt Tappi hatt dies super erklärt, wofür ich auch sehr dankbar bin. Dachte mir nur, dass ich bei Roboternetz erklärungen aus einer anderen Sichtweise erhalte.
Sorry, ich bin halt nunmal Anfänger und finde, dass die A/D-Wandlung sehr wichtig für viele Steuerungsaufgaben ist.

Danke für die Infos!

Gruss Benny

Tido
22.07.2008, 15:40
Kein Problem,

aber besser als Tappi kann man es wohl (kaum) erklären, zumindest hat das alles Hand und Fuß.

bennycy
01.08.2008, 19:14
Hallo!

Hab mir jetzt den Advanced Controller bestellt, da dieser mit Fließkommazahlen rechnen kann.

Somit ist jetzt alles gelöst.
Trotzdem danke für die Beiträge.

Gruß Benny

Suggarman
05.08.2008, 14:19
Hab mir jetzt den Advanced Controller bestellt, da dieser mit Fließkommazahlen rechnen kann.

Das war überflüssig und falsch.

Beide C-Controls liefern die Auflösung nur mit 8 bit, also 256 Schritte von 0-5V. 4.002 wirst du also niemals messen.
Geschickter wäre es gewesen, die Unit 2.0 zu behalten und dazu z.B. einen 12-bit AD-Wandler über den I2C-Bus (z.B. Max127) zu kaufen.

Trotzdem viel Spaß beim Basteln.

Stefan

bennycy
05.08.2008, 22:17
Hallo!

Warum war das bitte überflüssig und falsch?

Dieser neue Controller kann mit Fließkommazahlen rechnen. Ist das kein Argument?
Ich berechne mit dem Teil ja nicht nur die Spannung, sondern auch den Strom und die Leistung. Wie soll ein Controller, der nur mit Integer Zahlen arbeiten kann, die Leistung von 2 AD-Werten berechnen.

Sorry, ist ja bestimmt gut von dir gemeint, aber ich bereue den Kauf sicher nicht.

Gruss Benny

Suggarman
06.08.2008, 13:09
Warum war das bitte überflüssig und falsch?


Überflüssig, weil es nur etwas Programmieraufwand mit der Unit 2.0 wäre und falsch, weil Du die gewünschte Genauigkeit nicht erreichen kannst.
Mit der Unit 2.0 mache ich Kurs- und Streckenberechnungen, bei denen ich selbst einen arctan mal brauche. Mit einer kleinen Tabelle errechne ich so mit ausreichender Genauigkeit meine Strecken und Kurse.

mfg

Stefan

hardware.bas
31.01.2009, 20:04
8bit sind nun mal max 256 Schritte, jedoch kann man den Messbereich
mit vorgeschaltetem Messverstärker z.B. mit OPV so einengen,
dass man beispielsweise nur zwischen 4 und 5 Volt misst. VG Micha