Hallo Ich möchte eine Spannung mittles des ADC eines Mega8 messen und als Spannungswert mit 2 Nachkommastelle auf einem LCD anzeigen lassen. Dazu habe ich mir folgende Formel überlegt: Referenzspannung: 3 Volt Spannungsteiler am ADC 1 Eingang: 27,1 kOhm zu 5,1 kOhm 10 Bit ADC = 1024 Werte Formel: ADCwert*3*27,1/(1024*5,1) Nun habe ich mir überlegt das es sinnvoll wäre die Spannung in Vor-und Nachkommateil aufzuteilen um die Int to ACSII wandlung besser durchführen zu können Also wollte ich die Fol#rmel *100 nehmen und den Vorkommateil mit Ergebnis/100 und den Nachkommateil mit Ergebnis%100 zu berechnen. Aber immer wenn ich beides (Vor-und Nachkommateil) berechnen möchte sagt mir der Compiler das der Speicher des AVR voll ist. Bei nur einer Berechnung (z.B. nur Vorkommateil) ist der AVR schon zu ca 80% belegt... Das kann ja nicht richtig sein oder? Wie kann man diese berechnung geschickt lösen, am besten ohne floats und printf Funktion? Wäre sehr dankbar für Denkanstösse, oder auch beispielprogramme. Programmiert wird das ganze in C im AVR Studio. MFG Olli
>Formel: ADCwert*3*27,1/(1024*5,1)
Was soll das sein, fehlt da nicht was?
Ich vermute mal folgenden Anschluss:
R1
Signal ---XXXX----+-----ADC
|
X
R2 X
X
|
GND -----------+-----GND
Dann wäre die Formel dazu:
Mit deiner Referenzspannung und den Widerstände ist so also eine Messung von ca. 19V((27.1+5.1)/5.1=18.9V) möglich, ich schätze aber mal du wolltest ca. 16V (27.1/5*3=15.9V) messen können, oder? ;) Zu Berechnung im AVR kann ich leider nichts sagen, habs nur mit PICs zu tun.
Hallo Ich habe mich im ersten Beitrag leider versehen. Du hast natürlich vollkommen recht! Die 2. Möglichkeit ist richtig. Der Wert 27,7 war von mir schon addiert worden. Die Schaltung stimmt auch. Bei mir: R1= 22k R2= 5,1k Uref= 3V Maximal sollten ca 15,9V zu messen sein, es liegen aber immer nur ca 12V an, also sollte das kein Problem darstellen. MFG Olli
Achso, na das erklärt es ja ;) Was für einen AVR hast du denn? Hat der vielleicht einen Hardwaremultiplikator? Vielleicht lässt sich dieser nutzen um den Speicher recht leer zu halten. SW braucht halt zum Multiplizieren immer ein wenig Speicher, da kanns schonmal zügig eng werden. Vielleicht lässt sich eine Routine implementieren, die zunächst den ADC-Wert mit hundert multipliziert, diesen Wert speichert und dann den von der Multiplikation verwendeten Speicher wieder frei gibt um die Modulo-Operation auszuführen.
Hallo Vielen Dank @ Falk Brunner! Die Festkommaarithmetik hat mir soweit geholfen das ich nur noch ca 10% des Speichers vom Mega8 brauche! MFG Olli
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.