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);
> 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.
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
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; |
Danke jetzt geht es!!! Kannst Du mir noch die Zeile erklären? result1 = temp % 10;
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
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.