mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit ADC-Umrechnung bei Attiny24


Autor: Paul Baumann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe gerade ein Programm geschrieben, was mir eine an ADC-Kanal 0 
anliegende Spannung auf einer dreistelligen Siebensegmentanzeige 
darstellen soll. Bei der Simulation stellte ich fest, daß offenbar meine
Formel zur Umrechnung nicht das ausgibt, was ich erwarte. Ich verwende 
die Betriebsspannung als Referenz und muß daraufhin rechnen lassen:
XVOLT= (5 Volt / 1024)*Messwert.

Messwert läßt sich auch schön mittels Schieberegler im Simulator 
zwischen
0 und 1023 einstellen, aber XVOLT gibt mir Null aus. Offenbar schmeckt 
ihm
das "5 /1024" nicht.

Ich glaube, heute ist nicht mein Tag.... ;-(

MfG Paul

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, ich vermute mal, dass BASCOM genau wie C standardmäßig in 
Ganzzahlen rechnet (was aus Ressourcengründen ja auch das einzig 
Sinnvolle ist). Und jetzt rechne bitte mal selber aus, was bei einer 
Ganzzahldivision von 5/1024 rauskommt...

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuchs doch mal so:

Xvolt = Messwert * 5 / 1024

oder besser so:
Xvolt = Messwert * 5000 /1024



Faktor = 5 / 1024
Xvolt = Messwert * Faktor



PS:
Das Verfahren geht auch:
Beitrag "Re: 16-Bit-Zahl ausgeben, nur wie?"

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erstmal an Euch. Es haut trotzdem nicht hin.
Die erste Variante liefert bei 1023    XVOLT von 4.
Die 2. liefert bei 1023    XVOLT von 3192.
Die 3. liefert immer Null.

Es kann natürlich auch sein, daß es in Natura funktioniert und mich bloß 
der Simulator zum Narren hält.

MfG Paul

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wäre es damit (ASM)?

- Messwert 10-bittig (rechtsbündig) in 2 Register einlesen
- Messwert mit 125 multiplizieren (es entstehen 3 Bytes)
- unteres Byte wegwerfen (durch 256 teilen) (jetzt sind es noch 2 Bytes)
- Durch Subtraktionsmethode in 5 Ziffern zerlegen, wobei die beiden
  oberen (linken) Ziffern aufgrund des begrenzten Wertevorrates immer
  0 sind, es entstehen also 3 (nutzbare) Ziffern
- Ziffern ausgeben, erste Ziffer mit Dezimalpunkt

Dazu solltest Du aber auf den Tiny24 verzichten und den billigeren Mega8 
benutzen, dann hast Du Hardware-Multiplikation und genügend Pins, um 
auch den Dezimalpunkt mit auszugeben.

...

Autor: Andreas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ber der ersten variente ist das ergebniss tatsächlich 4.
bei der zweiten müsste es 4995 sein (siehe unten).
die dritte ist das selbe wie du gemacht hast das ergebniss ist immer 0.

der grund warum die zweite methode falsch ist müsste ein überlauf sein. 
1023*5000 ist schließlich deutlich über 32000. caste das auf uint32_t 
dann sollte es funktionieren.

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Idee von Hannes war der zündende Gedanke. Das habe ich jetzt so 
eingebaut und er bringt mir bei 1023 499 und bei 511 250.

Ich bin entzückt! ;-)))

MfG Paul

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.