PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ubat



RobbyMartin
04.04.2010, 14:35
hallo dieser auschnitt aus dirks code um die ubat zahl auf dem lcd auszugeben

nun meine frage dort kommt immer ein wert wie z.B. 0823 kann man das nicht so ausgeben 08,23 ?? das wäre viel übersichtlicher da es die akkuspannung ungefähr ausdrückt

void readUbatSensor(void)
{
uint8_t ubatSens[2];
uint16_t ubat;

I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 21); // Start with register 21 (UBAT_L)...
I2CTWI_readBytes(I2C_RP6_BASE_ADR, ubatSens, 2); // and read 2 registers

ubat = ubatSens[0] + (ubatSens[1]<<8);

setCursorPosLCD(0, 6);
writeIntegerLengthLCD(ubat, DEC, 4);


}

Lg
martin

Furtion
04.04.2010, 18:35
Hi,

ich kenn mich nicht mit dem Robby aus, denke aber, dass es sich bei dem
Wert nicht um die Akkuspannung handelt sondern um den 10bit Wert des
ADCs. Daher müsstest du den noch umrechnen. (Kann mich natürlich auch
irren).

RobbyMartin
04.04.2010, 19:23
das stimmt das es der adc wert ist aber die stimmen fast überein und um das feintuning kümmere ich ich später nur ich will es irgendwie als kommazahl ausgeben

lg
martin

Furtion
04.04.2010, 19:39
Hi,

wenn du die funktion hast:
"writeIntegerLengthLCD(ubat, DEC, 4); "
da steckt ja schon quasi drinne, dass du ein Int schreibst und keine
Gleitkommazahle (double o.ä.).
Daher würd ich schauen ob es iwas mit wirteDoubleLCD() gibt oder du
wandelst dir den int in einen string um und baust noch ein Punkt
dazwischen.

Dirk
04.04.2010, 19:55
Hallo RobbyMartin,

sieh dir 'mal in der Demo "RP6Control_08_I2CMaster.c" die Funktion "batteryVoltageLow()" an. Da wird gezeigt, wie die Spannung ausgegeben werden kann.

Gruß Dirk

RobbyMartin
04.04.2010, 20:11
habe das jetzt mit batteryvoltagelow versucht aber ich kann es nich kompelieren es kommt immer eine fehlermeldung

void readUbatSensor(uint8_t isVoltageLow)
{
if(isVoltageLow)
{
// Send Battery voltage to UART:
writeIntegerLengthLCD((((adcBat/102.4f)+0.1f)), DEC, 6);
showScreenLCD(" . ", "");
writeIntegerLengthLCD((((adcBat/1.024f)+10)), DEC, 11);

}

}


vielleicht findet ihr ja den fehler oder meinen denkfehler

lg
martin

Dirk
04.04.2010, 20:54
Hallo Martin,

du brauchst die Funktion doch nicht komplett zu übernehmen, sondern nur die Ausgabe auf LCD:

// Send Battery voltage to LCD:
writeIntegerLengthLCD((((ubat/102.4f)+0.1f)), DEC, 2);
writeCharLCD('.');
writeIntegerLengthLCD((((ubat/1.024f)+10)), DEC, 2);
writeStringLCD_P("V");

Gruß Dirk