sbit ADDO = P1^5;
sbit ADSK = P0^0;
unsigned long ReadCount(void){
unsigned long Count;
unsigned char i;
ADDO=1;
ADSK=0;
Count=0;
while(ADDO);
for (i=0;i<24;i++){
ADSK=1;
Count=Count<<1;
ADSK=0;
if(ADDO) Count++;
}
ADSK=1;
Count=Count^0x800000;
ADSK=0;
return(Count);
} #define HX711_DO PIN_a0
#define HX711_CLK PIN_a1
unsigned long ReadCount(void){
unsigned int32 Count;
unsigned char i;
unsigned int8 A_1,A_2,A_3;
output_bit( HX711_DO, 1);
output_bit( HX711_CLK, 0);
Count=0;
while(input(HX711_DO));
for (i=0;i<24;i++){
output_bit(HX711_CLK, 1);
Count=Count<<1; //estoy un poco confundido con esta linea por que empieza a desplazar bits antes de recivir el primer dato
output_bit( HX711_CLK, 0);
if(input(HX711_DO)) Count++;
}
output_bit( HX711_CLK, 1);
Count=Count^0x800000; // eso no logro entenderlo
output_bit( HX711_CLK, 0);
return(Count);
}
for(;;)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"valor= %Lu ",count);
output_high(pin_b3);
count=ReadCount();
}
} Hola, veo que te metiste en uno de esos problemas fáciles, ja..ja :D :D
Por lo que veo de su hoja de datos, bastante mala por cierto, es que el protocolo de salida de datos es parecido a I2C (pero no lo es) , lo que lleva a decirte que deberás respetar al dedillo todo lo que implica tiempos de las señales, eso quiere decir flancos de bajada, de subida y tiempo de mantenimiento de las señales en ON y OFF.
Si usara SPI o I2C (en ese orden los protocolos mas usados en conversores A/D para celdas de carga en serio) no deberías preocuparte por esos tiempos, ya que la mayoría de los PICs tienen alguno de ellos, y si no el CCS, mágicamente, lo implementa, esa es una de sus fortalezas respecto a los demás compiladores, aunque no sea ANSI 100%.
Respecto a la otra duda que tienes, sobre porque la comparación, es para saber si el valor es negativo o positivo.
Así lo dice en la hoja de datos, de manera escueta...
Output Data Rate and Format
When using the on-chip oscillator, output data rate is typically 10 (RATE=0) or 80SPS (RATE=1).
When using external clock or crystal, output data rate is directly proportional to the clock or crystal frequency.
Using 11.0592MHz clock or crystal results in an accurate 10 (RTE=0) or 80SPS (RATE=1) output data rate.
The output 24 bits of data is in 2’s complement format.
When input differential signal goes out of the 24 bit range, the output data will be saturated at 800000h (MIN)
or 7FFFFFh (MAX), until the input signal comes back to the input range.
Para poder ayudarte mas, deberias subir tu esquema completo (aunque sea a mano alzada) para saber que esta bien y que no.
Ahh, me olvidaba!!
La variable que deberás utilizar para recibir el dato debería ser de 32 bits, revisa bien el código y el manual de CCS, no recuerdo si la variable Long es de 32 bits, capaz que si, pero si no lo es, estarias perdiendo datos continuamente.
Se puede armar un tipo de variable de 24 bits, pero mejor si lo evitas. :D :D
Saludos
Por lo que veo de su hoja de datos, bastante mala por cierto, es que el protocolo de salida de datos es parecido a I2C (pero no lo es)
Count=Count^0x800000; eso es una or Exclusiva no? no entiendo bien su funcion ahi
Lamento desilusionarte Killejc, el SPI son 4 señales, y la version mas facil es 3 señales, no dos, pero como este equipo usa la lectura y la escritura tendria que usar tres señales como minimo.
https://es.wikipedia.org/wiki/Serial_Peripheral_Interface