Ich lese erfolgreich den externen ADC-Wert mit ATmega32-A.
Unsigned int adc;
adc = AD7798_16(0x58, 0xFFFF); // read register
printf("ADC value is %d\r\n", adc);
Ich erhalte den ADC-Wert als Dezimalzahlenbereich zwischen "0 bis 65535". Ich möchte es mit der folgenden Formel in eine analoge Spannung umwandeln.
Code = 2 N – 1 × [( AIN × GAIN / VREF ) + 1]
wobei:
AIN die analoge Eingangsspannung ist.
N = 16 für den AD7798 und N = 24 für den AD7799.
Ich habe die Formel und Berechnung vereinfacht
// Formel zur Berechnung der analogen Spannung aus dem digitalen Ausgang: Code = 2N – 1 × [(AIN × GAIN/VREF) + 1] // GAIN / VREF = 1 / 2,5 => 0,4 // 0,4 Ain = ((adc /
32768 ) - 1)
Schwimmer Ain;
Ain=(((((float) adc) / 32768) - 1) / 0,416);
printf("Wert:%.2f [v]\r\n", Ain);
Die obige Formel gibt immer einen negativen Wert zurück. Ich möchte diesen negativen Wert drucken. Ich habe es wie oben versucht, aber es funktioniert nicht. Wie drucke ich den Ain-Wert? hier ist adc ein vorzeichenloser Wert, also konvertiere ich in Float.
Ich habe es auch so versucht
Ain = (((adc / 32768.0) - 1) / 0.416);
printf("value:%.2f [v]\r\n", Ain);
aber ich kann diesen Wert nicht drucken.
Die AVR-Bibliotheken unterstützen standardmäßig nicht das Drucken von Fließkommawerten. Dies dient dazu, Platz in ihren Umgebungen mit begrenzten Ressourcen zu sparen. Sie müssen den Compiler und den Linker anweisen, die Unterstützung für dieses Feature zu aktivieren.
Aus der avr-libc -Dokumentation auf vfprintf()
:
Da die vollständige Implementierung aller genannten Funktionen ziemlich umfangreich wird,
vfprintf()
können drei verschiedene Varianten von mithilfe von Linker-Optionen ausgewählt werden. Die Standardeinstellungvfprintf()
implementiert alle erwähnten Funktionen mit Ausnahme von Gleitkommakonvertierungen. Eine minimierte Version vonvfprintf()
ist verfügbar, die nur die sehr einfachen Umwandlungsfunktionen für Ganzzahlen und Zeichenfolgen implementiert, aber nur die zusätzliche Option # kann mithilfe von Umwandlungs-Flags angegeben werden (diese Flags werden korrekt aus der Formatspezifikation geparst, aber dann einfach ignoriert). Diese Version kann mit den folgenden Compiler-Optionen angefordert werden:
-Wl,-u,vfprintf -lprintf_min
Wird die volle Funktionalität inklusive der Fließkomma-Konvertierungen benötigt, sollten folgende Möglichkeiten genutzt werden:
-Wl,-u,vfprintf -lprintf_flt -lm
(Hervorhebung von mir)
Da Sie CodeVisionAVR verwenden, wie wir im Chat besprochen haben , haben sie diese Option in ihr Konfigurationsfenster integriert, wie auf Seite 4, Schritt 9 dieses Tutorials zu sehen :
eingebettet.kyle