mikrocontroller.net

Forum: Compiler & IDEs ADC umrechnen


Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Kann mir jemand sagen, warum die Nachkommastelle bei dem Programm nicht
richtig angezeigt wird? Die Erste Stelle ist O.K.. Der ADC Rohwert
istauch O.K. Wenn ich den ADC Eingang auf 5Volt lege zeigt er1023 bei
0Volt 0. Als Kontolle habe ich ein Multimeter angeschlossen. Benutzt
wird ein Meg8 mit externer Ref.
gruss
Frank
result =(5*ADC)/1023;
result1 = result+ADCH;

_delay_ms(600);
LCD_Print(0,0,"Volt: %i,%i ",result,result1);
LCD_Print(1,0,"ADC WERT:%i",ADC);
_delay_ms(600);

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Kann mir jemand sagen, warum die Nachkommastelle bei dem Programm
> nicht richtig angezeigt wird?

Nur, wenn du uns zuerst erklärst, wie dein Algorithmus da eigentlich
funktionieren soll.  Ich finde ihn jedenfalls sehr eigenwillig und bin
nicht der Meinung, dass dabei jemals irgendwas wie eine sinnvolle
Nachkommastelle herauskommen könnte.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich will ich nur den ADC Wert auf ein LCD bringen und zwar in
Volt.
Ich habe einen Spannugsteiler mit einem LDR und ein 150ohm Widertsand.
Das Umwandel funzt ja schon nur kriege ich kein ordentliches ergebnis
zustande (Nachkommastelle). Wie muss man es sonst machen?
Frank

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube, Jörg wollte wissen, wie du auf die Idee gekommen bist, daß
"result1 = result+ADCH;" irgendetwas ergeben könnte, das auch nur
ansatzweise was mit der Nachkommastelle zu tun hat.

So könnte es gehen:
uint16_t temp = 5 * ADC;
result = temp / 1023;
result1 = (temp * 10 / 1023) % 10;

oder noch etwas optimiert (eine Multiplikation weniger):
uint16_t temp = (50 * ADC) / 1023;
result = temp / 10;
result1 = temp % 10;

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke jetzt geht es!!!
Kannst Du mir noch die  Zeile erklären?
result1 = temp % 10;

Autor: default (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch es mal hiermit (ohne Berücksichtigung von eventuellen Überläufen
bei der Multiplikation)

result =(5*ADC)/1023;
result1 = ((5*ADC - result*1023)*10)/1023

Autor: Zotteljedi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Kannst Du mir noch die  Zeile erklären?
> result1 = temp % 10;

Mit dem Modulo-Operator erhältst Du den Rest einer ganzzahligen
Division. Hast Du also z.B. 501 und möchtest das als 50,1 darstellen,
ist 501/10 der Teil vor dem Komma und 501%10 der Teil danach.

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.