Hallo zusammen, ich lese mit Bascom einen ADC-Kanal meines Tiny26 in einem Loop aus: $crystal = 1000000 $regfile = "at26def.dat" Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , Rs = Porta.4 , E = Porta.5 Config Lcd = 16 * 2 Config Adc = Single , Prescaler = Auto Dim Temp_adc_spannung As Word Start Adc Do Temp_adc_spannung = Getadc(0) Cls Lcd Temp_adc_spannung Waitms 20 Loop End Klappt auch problemlos. Die Spannung wir errechnet mit Spannung = ADC * Vref / 1024 Richtig ?? Welche Datentyp muss ich der Variablen Spannung zuordnen um nachher z.B. 3,68 V ins LCD schreiben zu können. Wichtig ist jedoch, dass ich Programmspeicher spare. Worauf muss ich achten ?? Vielen Dank!!! Daniel
Hi, eins vorweg, ich hab keine Ahnung von Basic. Damit möglichst wenig gerechnet werden muß würde ich Festkomma-Rechnung verwenden. 1. Möglichkeit: Spannung= ADC *(vref*10000/1024); Damit erhälst du einen Wert der in 2 Byte passt. Anstatt 3,68 erhälst du 36800. Die Kommasetzung erfolg erst bei der Ausgabe. Der geklammerte Ausdruck wird vom Kompiler ermittelt und benötigt keinen Speicher. 2. Möglichkeit Spannung= ADC* (vref*6400/1024)/64; Anstatt 3,68 erhälst du 368, die Berechnung benötigt wieder nur einen 2 Byte großen Zwischenspeicher. Den Divisor 64 kann der Kompiler mit Shiftbefehlen realisieren. Kommasetztung erfolg wiederum erst bei der Ausgabe. HTH Werner
hi, wie werner schon schreibt, die kommasetzung erst bei der ausgabe. nicht gerade superelegant aber geht bestens: Anzeige = Format(str(DRUCK) , "0.0") + " bar" hab ich so bei einer drucksteuerung gemacht wobei z.B. der wert 25 als 2,5 bar ausgegeben wird. Anstatt dem format-befehl kannst du auch den 'fusing' verwenden, das programm ist aber mit format am kleinsten. gruss, harry
Hallo Werner, hallo Harry, vielen Dank für eure Antworten. Leider komme ich jedoch noch nicht so ganz weiter und hab da noch ein zwei Fragen: a=b*c*d/e Kann Bascom das nicht ?? Bekomme da immer einen Fehler. Welchen Datentyp muss ich wählen ?? Hab da ein echtes Platzproblem im Tiny26. Ich lese einen 10Bit-ADC mit einer Vref von 5V. Vielen Dank !! Daniel
Hallo Daniel! Mit dem Problem habe ich mich bei Bascom auch schon rumgeschlagen... Würde das Problem so lösen: a=b*c a=a*d a=a/e Wenn mir einer erklären kann, wie es anders geht, wäre ich ihm verdammt dankbar!!! Würde nämlich auch ganz geren größere Formel rechnen können! mfg Stephan
ganzleiserufend FastAvr... ist zwar an anderen Stellen blöd, aber sowas kann er echt gut Gruß Axel
Kommt wie immer darauf an, welche Werte die Variablen haben. Theoretisch ist die Multiplikation kommutativ, aber in der Praxis sieht's wie immer anders aus: Wenn es bei den Zwischenergebnissen Underflows, Overflows, Rundungen ... gibt, stimmt hernach nichts mehr. Es kommt also meist doch auf die richtige Reihenfolge an. Gib doch mal ein paar Beispiele von flaschen Variablen und Ergebnissen.
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.