Hallo, ich habe einen ATMEGA8 mit Bascom programmiert. Er soll eine Spannung über die serielle Schnittstelle übertragen. Das funktioniert auch. Es soll die 5V Spannung gemessen und der tatsächliche Wert (wie oben angegeben) ausgegeben werden. Ich erhalte Werte von 0 bis 1023-- auch richtig. Rein theoretisch müßte ich doch als Teilungsfaktor " 204,6" einstellen. So: 1024 / 204,6 = 5V --> N = Getadc(2) / 205 um eine Voltausgabe zu bekommen.Funktioniert, ist aber sehr ungenau. Wo liegt MEIN Fehler? Grüß Ernst
Du rechnest wahrscheinlich mit Integern (Ganzzahlen), d.h. N kann nur 0, 1, 2, 3 oder 4 sein. Also entweder Fließkomma- oder besser Festkommazahlen benutzen: http://www.mikrocontroller.net/articles/Festkommaarithmetik
Ich lasse die korrekte Umrechnung immer von Wolfram-Alpha ausrechnen. Gebe dort die gesamte Formel für die Umrechnung inkl. Spannungsteiler ein, löse nach Spannung (allerdings meist Faktor 10 oder 100 wegen Festkomma) auf und dann bekommt man wunderschön einen Bruch a la: X=560*ADC/2560 Was man dann direkt so in C rechnen lassen kann. Je höher der Faktor in der Formel desto genauer wirds am Ende aber desto größer werden natürlich die Zahlen. Aber selbst uint32_t sollte nicht an seine Grenzen kommen. Sollte in Bascom ähnlich gut gehen. Hier ein Beispiel: solve x = (((y/10)/(10000+4700)×4700)×1024)/3.3 for y Spannungsteiler 10k und 4,7k. Referenzspannung 3.3 Volt. Spannung soll in 1/10 Volt Zurückgegeben werden. Ergebnis Wolfram-Alpha: y = (4851 x)/48128 gruß cyblord
Hallo, danke für Tips, lese mich mal ein. Mein Fehler war die falsche Gleichung. Richtig ist : 5 V / 1023 = Wert
Ernst schrieb: > Richtig ist : 5 V / 1023 = Wert dann brauchst du ja gar nicht mehr AD-wandeln: Wert = 0,00489V bzw. bei Integerrechnung Wert = 0
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.