PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ADC-Wert berechnen mit Bascom



MarkusH
26.09.2004, 18:37
Hallo!
Ich würde gerne mit dem ADC eines Atmega8 die Spannung berechnen die von einem Infrarotsensor kommt. Technisch gesehen funktioniert das alles, nur mit der umrechnung hab ich probleme. Wenn ich das richtig verstanden hab muss ich doch ADCwert * Vcc/1024 rechnen. 5/1024 wären dann 0,0048. Warum finde ich in Bascom keine variable die vernünftig mit kommazahlen umgehen kann? Der bringt mir jedes mal einen fehler beim kompilieren oder nimmt den ADCwert einfach mal 0 weil er die kommastellen abrundet.

Kann mir irgendjemand helfen?

26.09.2004, 19:39
Gibts in dem Bascom keine Datentypen wie float oder double?

Ansonsten kannste ja in mV rechnen :-)

Einfach 5*ADC, sollte näherungsweise stimmen :)

MarkusH
26.09.2004, 19:52
nein, es gibt nur bit, byte, integer, word, long, single, string und die ganze palette noch mit XRAM oder ERAM davor. bit, byte, single und integer lassen eben keine kommazahlen zu und mit word und string kann man anscheinend nicht rechnen?! Hab ich irgendwas verpennt? Das muss doch irgendwie möglich sein.

MarkusH
26.09.2004, 19:59
oh, korrektur O:) , mit word und string kann man doch rechnen aber eben nur ganzzahlig oder mach ich was falsch?

Vari1 = 1
Vari2 = 0.15
Vari1 = Vari1 + Vari2
Print Vari1

Da kommt dann 1 raus egal welchen variablentyp ich nehme.

Frank
26.09.2004, 20:21
Du mußt den Datentyp SINGLE nehmen, damit kannst du fein mit Gleitkommazahlen rechnen.

Joerg
26.09.2004, 23:29
Hallo Markus,

Gleitkommaverarbeitung ist auf einem 8bit Controller immer ein wenig mit Vorsicht zu genießen. Sicher, der Compiler kann das und erzeugt auch richtigen Code dafür, dennoch sollte man vorher genau überlegen, ob man auch wirklich eine Gleitkommarechnung braucht.

Im vorliegenden Fall kannst du z.B. den ADC-Wert statt mit 5 mit 50 multiplizieren. Man erhält als Ergebnis einen um den Faktor 10 höheren Wert. Bei der Ausgabe muss man dann halt das Komma an der richtigen Stelle setzen. Dafür spart man Unmengen an Ressourcen ein, die man vielleicht an anderer Stelle dringend braucht. Und Integerarithmetik ist viel schneller als Gleitkomma.

HTH und Viele Grüße
Jörg

30.10.2004, 13:28
so mich auch mal zu wort meld !!!
hab auch n Problem mit dem Komma, ich will die Temp ermitteln und die natürlich 2 stellig hinter dem Komma anzeigen !!! ihr habt davon geredet die Zahl mit nem Multiplikator zu berechnen und das komma dann einzusetzen an die richtige stelle ??? wie soll das gehen ??? NET GANZ PEIL WIE ICH NE VARIABLE DANN ZERTEILEN SOLL

Joerg
30.10.2004, 13:53
hab auch n Problem mit dem Komma, ich will die Temp ermitteln und die natürlich 2 stellig hinter dem Komma anzeigen !!!

Ganz einfach, du rechnest immer mit dem 100-fachen des Wertes und setzt das Komma immer an die zweite Stelle von rechts.

Als Alternative kann man für die 8-Bit Controller, egal ob Atmel oder PIC(AXE) auch einen Gleitkomma-Coprozessor einsetzen z.B. den hier: http://www.micromegacorp.com/umfpu.html

edit: Link korrigiert

Viele Grüße
Jörg

Hellmut
30.10.2004, 22:39
Für rechenintensive Anwendungen und über I2C ansprechbar interessantes Bauteil Jörg. Hast du schon Routinen um diesen unter AVR zu nutzen?

Joerg
30.10.2004, 23:38
Hallo Hellmut,

die FPU arbeitet nicht mit I2C, das wäre viel zu langsam, sondern mit SPI. Aber auch SPI ist hardwareseitig im AVR unterstützt.

Programmbeispiele für AVR habe ich noch nicht, nur bislang für PICAXE.
Ist aber sicherlich kein Problem sowas zu machen.

Viele Grüße
Jörg