Aquí tengo dos opciones, pero ambos me están dando un problema, ¡cualquiera sabe por favor ayuda!
op_1) hago mi propia función c para leer el recuento que es similar a la función Arduino shiftIn () pero no sé cómo hacerlo ... Actully Arduino ya tiene una biblioteca preparada para hx711 24bit ADC y en esa biblioteca obtengo la siguiente función que me devuelve adc_count
lectura larga (nula) { // espera a que el chip esté listo while (! is_ready ()) { // No hará nada en Arduino pero evitará los reinicios de ESP8266 (problema de vigilancia) rendimiento(); }
unsigned long value = 0;
uint8_t data[3] = { 0 };
uint8_t filler = 0x00;
// pulse the clock pin 24 times to read the data
data[2] = shiftIn(DOUT, PD_SCK, MSBFIRST);
data[1] = shiftIn(DOUT, PD_SCK, MSBFIRST);
data[0] = shiftIn(DOUT, PD_SCK, MSBFIRST);
// set the channel and the gain factor for the next reading using the clock pin
for (unsigned int i = 0; i < GAIN; i++)
{
digitalWrite(PD_SCK, HIGH);
digitalWrite(PD_SCK, LOW);
}
// Replicate the most significant bit to pad out a 32-bit signed integer
if (data[2] & 0x80)
{
filler = 0xFF;
} else
{
filler = 0x00;
}
// Construct a 32-bit signed integer
value = ( static_cast<unsigned long>(filler) << 24
| static_cast<unsigned long>(data[2]) << 16
| static_cast<unsigned long>(data[1]) << 8
| static_cast<unsigned long>(data[0]) );
return static_cast<long>(value);
}
aquí en esta función han usado la función siftin () ¿Cómo implementar esto usando lenguaje c?
op_2) He escrito mi propia función de lectura () que devuelve el recuento de adc pero obtengo un valor de basura ...
lectura larga sin firmar (nula)
{
cuenta larga sin firmar, dout;
uint8_t i;
cuenta = 0;
dout = 0;
if(isready() == 1)
{
GPIO_ResetBits(GPIOC,PD_SCK);
}
else
{
for(i=0;i<24;i++)
{
GPIO_SetBits(GPIOC,PD_SCK);
delay(1);
GPIO_ResetBits(GPIOC,PD_SCK);
dout = GPIO_ReadInputDataBit(GPIOC,DOUT);
count = (count | dout) << 1;
delay(1);
}
} GPIO_SetBits (GPIOC, PD_SCK); GPIO_ResetBits (GPIOC, PD_SCK); cuenta = cuenta > > 1; recuento de devoluciones }