mikrocontroller.net

Forum: Analoge Elektronik und Schaltungstechnik Bascom aus ADC-Wert Spannung errechnen


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Werner Hoch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: harry (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Stephan Titz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: AxelR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ganzleiserufend FastAvr...
ist zwar an anderen Stellen blöd, aber sowas kann er echt gut


Gruß Axel

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.