¿cómo se lee el recuento de ADC Hx711 de 24 bits?

0

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 }

    
pregunta mulesandip3

1 respuesta

1

Arduino shiftin () es fácil de migrar, por lo que parece la solución más sencilla.

Publiqué un conjunto de códigos hx711 aquí enlace

Tiene enlaces al trabajo original que realicé con el chip, así como al código descargable. Deberías poder ponerlo en funcionamiento fácilmente en cualquier chip.

    
respondido por el dannyf

Lea otras preguntas en las etiquetas