#8067
Picmicro675
Partecipante

Ciao Ther
> Hai provato a scriverlo e vedere cosa fa?
Tradotto l’ho anche tradotto. Ho migliorato anche il caso che si blocca ad aspettare che il DOUT (dato pronto) non cambia. Ho messo il timeout almeno se ci sono errori sconosciuti ci si riesce a venirne via.

Sub readHX711
    Clear timed_out                 ' reset the flag
    Clear avrg                      ' average variable counter
    Clear cnti                      ' reset value
    Clear ADSK                      ' lowering the clock pin
    ' next instruction gives a little delay before reading the input
    Clear cntn                      ' reset value
    Repeat                          ' loop over the wanted samples
      While ADDO = 1                ' probing the data pin to wait the start
        If cnti < 250 Then          ' counting a time-out in case the cell fails
          DelayUS 50                '  for one round
        Else                        ' if exceeds
          Set timed_out             ' flag a no ready signal
          Return                    ' leave the subroutine
        End If
        Inc cnti                    ' keep counting track
      Wend                          ' end of wait ADD0
      Clear coun                    ' resetting the variable for the result
      Clear cnti                    ' reset the counter
      Repeat                        ' counting for 24 bits
        Set ADSK                    ' ticking the serial clock
        coun = coun << 1            ' shift left the variable
        Clear ADSK                  ' reset the clock
        coun.0 = ADDO
        Inc cnti                    ' keep counting track
      Until cnti > 23               ' loop for the next bit
      Clear ADSK                    ' reset the clock (ending communication)
      @Nop                          ' a small delay
      Set ADSK                      ' reset the clock high
      avrg = avrg + coun - offset   ' sum the sample to the average value
      Inc cntn
    Until cntn >= MAXSAMPLES
    coun = avrg / MAXSAMPLES        ' calculate the average
EndSub

Per la cronaca eccola qui. Ho aggiunto anche una media che si definisce nella testata del programma quanti cicli fare (al momento ne ho dati 40, ma abbiamo la possibilità di andare fino a 255).
Tenuto conto che l’ offset è da calcolare il punto di zero che include il valore di tara. In maniera teorica lo zero è a VCC/2 e sarebbe 2^23. Per quello meno di quello sarà negativo.
Ancora non ho fatto le prove fisiche, solo una simulazione e non ho idea esattamente se sono valori razionali. Sarei curioso di capire cosa si può fare con il GAIN che poi non è letto durante i 25 bit, credo. Piuttosto dovrebbe dare l’informazione per il ciclo successivo.
Ad ogni modo ho il PIC e arduino per fare delle prove, manca solo la voglia di mettere insieme un prototipo. Andrò un po per le lunghe.

Ho visto qualcosa del sorgente e si vede l’uso dell’SPI per la comunicazione. Per quello che sto facendo si usa solo un bit banging (come in arduino del resto) e si sta bene con una frequenza se tenuto il clock nei limiti descritti dal foglio dati. Poi il resto dei componenti e come l’esempio dei fogli dati e ho preso il modulino.

Grazie delle informazioni…

Devo solo mettermi alla prova

  • Questa risposta è stata modificata 3 anni, 5 mesi fa da Picmicro675.
  • Questa risposta è stata modificata 3 anni, 5 mesi fa da Picmicro675.