Hallo
@jschilli
Ich glaube, du hattest Recht mit deiner Vermutung, dass dies ein klassisches C-Problem sei. Trotzdem funzte es nicht einwandfrei. Problem:
Wenn ich diese Zeile schreibe:
result = readADC(0)/400;
Dann bekomme ich auf dem Display immer nur eine 0, 1 oder 2 angezeigt. Diese steht für 0V, 1V und 2V, allerdings nicht die Nachkommastellen. Außer dieser Zeile habe ich nichts geändert.
result = (unsigned int) ((unsigned long)readADC(0) * 256/102400);
Bei dieser Zeile genau das selbe.
Bei beiden Versionen kommt der Sprung von 0 auf 1 bzw. 2 im richtigen Moment. Also es scheint nicht mehr so große Abweichungen zu geben.
Durch Zufall bin ich dann auf diese Seite gestoßen (ich suchte Funktion die float in char konvertiert, wusste nicht ob itoa() dies auch kann):
https://www.roboternetz.de/phpBB2/pr...=20211&start=0
Mit dieser Zeile funzt das ganze jetzt mit der internen Referenzspannung einwandfrei:
result = (readADC(0)*320313/2)/65536;
Normalerweise hätte ich anstatt der 320313/2 diesen Wert nehmen müssen 164000,1564 (ich gehe davon aus, dass die interne Referenzspannung 2,56V beträgt). Jedoch sind meine Werte dann ungenauer. Deshalb nehme ich jetzt 320313/2. Dies Differenz zwischen meinem Multimeter und dem Mikrocontroller liegt bei 2-4 mV. Dies ist ein akzeptabler Wert, denke ich. Würde ich die 164000 nehmen, ist die Differenz zwischen 5-25mV.
Ich bedanke mich bei allen die mir geholfen haben
Gruß micro5
Lesezeichen