Forum: Compiler & IDEs ADC umrechnen


von Frank (Gast)


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);

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Frank (Gast)


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

von Rolf Magnus (Gast)


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:
1
uint16_t temp = 5 * ADC;
2
result = temp / 1023;
3
result1 = (temp * 10 / 1023) % 10;

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

von Frank (Gast)


Lesenswert?

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

von default (Gast)


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

von Zotteljedi (Gast)


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.

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
Noch kein Account? Hier anmelden.