sábado, 27 de junho de 2015

HX711 3ª Parte

HX711 ADC 24bits Exemplo Código C (data sheet).

O código C exemplo do data sheet: (Comentado)

Reference Driver(C)
 //------------------------------------------------------------------- 
sbit ADDO = P1^5; 
sbit ADSK = P0^0;
unsigned long ReadCount(void){ 
     unsigned long Count; 
     unsigned char i;
     ADDO=1; 
     ADSK=0;                                  \\Coloca SCK em 0 
     Count=0;                                    \\ Zera a variável Count 
     while(ADDO);                            \\ Aguarda o pino DT ir para 0 - baixo
     for (i=0;i<24;i++){                      \\Loop para ler os 24 bits
                 ADSK=1;                       \\Coloca SCK em 1
                 Count=Count<<1;           \\Desloca para a esquerda a variável Count
                 ADSK=0;                       \\Coloca SCK em 0
                 if(ADDO) Count++;        \\Testa se DT = 1 se for incrementa a variável Count
           }
     ADSK=1;                                    \\Coloca SCK em 1
     Count=Count^0x800000;             \\Count = Count XOR 0x80 00 00
     ADSK=0;                                     \\Coloca SCK em 0
     return(Count);                                \\Retorna o valor da conversão para o código principal
 } 

O mesmo código adaptado para usar em testes no ARDUINO.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
const int DOUT = A5;      // Pino DT placa HX711
const int hxSCK = A4;     // Pino SCK placa HX711

void setup() {
  Serial.begin(9600);
  pinMode(hxSCK, OUTPUT);
  pinMode(DOUT, INPUT);
  // reseta o conversor HX711
  digitalWrite(hxSCK, 1);  
  delay (200);
  digitalWrite(hxSCK, LOW); 
  // -------------------------
   Serial.println(" INICIO");
}

void loop() {
  
     Serial.print(Converte());
     Serial.println(" AMOSTRA");
     delay (1000); //Aguarda 1 segundo

}


unsigned long Converte(){
 unsigned long CAPTURA = 0;  
  digitalWrite(hxSCK, LOW); 
  while (digitalRead(DOUT)==1) ;
  for (int i=0; i<24; i++){             // loop 24 pulsos
        digitalWrite(hxSCK, HIGH); 
        CAPTURA = CAPTURA<<1;
        //delayMicroseconds(10); 
        digitalWrite(hxSCK, LOW);
        if(digitalRead(DOUT) == 1) CAPTURA++;
        } 
   // pulso extra 25 pulsos próxima leitura do HX711 canal A ganho 128***     
   digitalWrite(hxSCK, HIGH); 
   delayMicroseconds(10); 
   digitalWrite(hxSCK, LOW);
   //-------------------------------------------------------
 CAPTURA ^= 0x00800000; 
  
 return CAPTURA;
}
Esquema de ligação:

Nenhum comentário:

Postar um comentário