hi! also ich lese mit nem atmega16 (programmiert per bascom ;) ) einen ad wandler kanal aus und muss diesen um einen sinnigen wert auf einem lcd display darzustellen ja umrechnen. der a/d wandler wert liegt ja als binärwert vor?! und ich brauche es halt als normalen zahlenwert mit entsprechendem umrechnungfaktor (wegen ad eben usw.) der umrechnungsfaktor wäre -> * 0.48828125 habe folgende codeschnippsel ausgetestet... nr 1# endwert = getadc(0) * 0.48828125 nr #2 binarwert = Getadc(0) endwert = Binval(binarwert) * 0.48828125 und denn eben -> Lcd "Wert: " ; endwert aber er zeigt mir immer 0 :( der wert vom direkt auf das lcd gelegten binärwert ist 25, also sollte die rechnung irgendwas um 12,20703125 bringen. oder so =D
Hi, auf welchen Bereich willst du den ADC denn skalieren? Wenn es z.B. 0-100% sein sollen, dann ist das ja im Grunde eine Division durch 1024 und anschliessende Multiplikation mit 100. So wird das aber relativ schwierig, daher solltest du die Sache umdrehen: Erst mit 100 multiplizieren (mul-Befehl) und dann durch 1024 dividieren, was eigentlich dem entspricht, einfach das unterste Byte wegzulassen und den Rest um zwei Bits nach rechts zu schieben (lsr, bzw. ror).
'endwert' ist vermutlich int16, und der Multiplikator wird als 0 interpretiert, sodass das Ergebnis auch 0 ist. Wenn Du 'float' rechnen willst, mußt Du dies dem Compiler mitteilen: cast verwenden.
Henning verwendet Bascom, kann man damit auch casten? Am besten, Du verwendest FixedPoint-Arithmetik. D.h. du multiplizierst den ADC-Wert 25 mit 48828125 -> 1220703125 und schmuggelst auf dem Display nach 12 ein Komma rein: 12,20703125 Bei geringerer Genauigkeit, dafür Integer und schneller: 25*488=12200 -> 12,200 siehe Threads Rechnen mit AVR http://www.mikrocontroller.net/forum/read-1-343046.html und Multiplikation http://www.mikrocontroller.net/forum/read-1-288423.html Hättest Du mir der Suche auch leicht selbst finden können.
Henning spielt Bass in einer Combo ? In Basic gibt es doch auch Unterschiede in den Variablen, weiß nur nicht mehr, wie die heißen.
probier mal dim f as single f = GetAdc(0) f = f* 0.44444 usw Bascom castet nicht richtig automatisch. Leider gibt es auch keine Warnmeldung.
hallo bernd, das geht schonmal net... dann kommt "source variable does not matsch target variable" @profi: danke für die links, werde mich mal versuchen aber irgendwie will der avr mal wieder net so wie ich das will... :(
also ich weiss nicht warum aber irgendwie bringt die multiplikation mit 488 einen wert von -321. versteh nur ich das nicht??
ich kenn zwar bascom überhaupt nicht, aber versuche: dim a,b,c as "unsigned 16 bit" <-- weiß nicht, wie das in Bascom heißt a=25 b=488 c=a*b print a,b,c Ergebnis sollte 25 488 12200 sein Dann würde ich c in ein String umwandeln, die ersten beiden Buchstaben des Strings (12), dann ein Komma und die letzten drei Buchstaben des Strings (200) ausgeben. Wenn das mal klappt, können wir überlegen, ob und wie man die letzte Umwandlung in maschinennahen Befehlen oder Assembler hinkriegen kann (wenn's zeitkritisch ist).
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.