Pic & HX711

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1627
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Pic & HX711

Post by WhiteHead »

Nabavio sebi ovo s ebay-a:
https://www.ebay.com/itm/10KG-Scale-Loa ... 2749.l2649
Pokušavao pročitati sa ovog HX711 neki podak sa I2CREAD naredbom na način kako se čita RTC (DS1307), ali ne dobijem ništa.
Na net-u je mnogo primjera za ARDUINO, koristeći neke gotove biblioteke i s code-om u C-u, a za bilokakvu verziju BASIC-a nema ništa.
Ako neko ima iskustva s ovim, svaki savjet je dobrodošao
Hvala !
Ako kaniš pobijediti, ne smiješ izgubiti
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Pic & HX711

Post by pedja089 »

Pa ne mozes sa I2C dobiti nista, kad taj IC ne koristi I2C protkol.
On koristi nesto kao SPI...
https://www.mouser.com/ds/2/813/hx711_e ... 022875.pdf
Imas clock i data pin.
HX711 spisti Dout na 0, kada je spreman da se podatci procitaju. Znaci moras cekati pvo to. Zatim sa shiftin iscitas 25-27 bita u zavisnosti kako hoces da bude sledece merenje.
U datasheet imas cak i ovaj C kod

Code: Select all

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); 
Taj kod bukvalno mozes prepisati u picbasic ako izbacis zagrade, tacka zareze i promenis definisanje promenljivih.
Ako ti ne bude islo, daj ovde dokle si stigao, pa cu nastaviti.
Inace mislim da je bio kod na picbasic.co.uk, medjutim izgleda da im forum ne radi.
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1627
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: Pic & HX711

Post by WhiteHead »

Hvala na brzom odgovoru.
Forum picbasic.co.uk je juče radio, ali nisam uspio ništa pronaći na temu ovog HX711.
Vidio sam kod u ASM i C-u u datašitu, ali ni sa jednim nisam nikako dobar.
Probat cu prevesti onaj C kod u PBP, ako zapne javim.
Ako kaniš pobijediti, ne smiješ izgubiti
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Pic & HX711

Post by pedja089 »

Sretno :)
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1627
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: Pic & HX711

Post by WhiteHead »

Ma nema šansi da skontam ovaj C.
Srećom našao sam code u proton-basicu i preveo ga u PBP
Međutim sada imam problem kako 24-bitni podatak "strpati" u 16-bitni word.
Probao sam da dobijem bilokakvu promjenu vrijednosti ali ne ide tako da nisam siguran dali mi je HW u redu.
Evo koda:

Code: Select all

Symbol dataa = PORTB.2
Symbol clock = PORTB.3    
input dataa
output clock
i=0
LoadCellA:
 dataa = 1
 clock = 0
 Hx711Cnt = 0
 While dataa = 1 : Wend
 For i = 0 To 23
   High clock
   Hx711Cnt = Hx711Cnt <<1
   Low clock
    if dataa=1 then Hx711Cnt=Hx711Cnt+1
 Next
 High clock
 Hx711Cnt = Hx711Cnt xor 8388608
 gram=8388608-Hx711Cnt
 gram=gram-124000
 Low clock
 'prikaz
 LCDOUT $FE, 1 'prikaz na LCD
 LcdOut $FE,$80, "Tara-",dec(gram)
 pause 1000
GoTo LoadCellA
end
Ako kaniš pobijediti, ne smiješ izgubiti
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1627
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: Pic & HX711

Post by WhiteHead »

I još jedno pitanje.
Dali ova dva pin-a, ili samo ovaj ulazni, pull-upovati
Ako kaniš pobijediti, ne smiješ izgubiti
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Pic & HX711

Post by pedja089 »

Mislim da ne treba ni jedan. Jer clock pin drzi PIC u definisanom stanju, a Data pin drzi HX.
Taj proton nece da radi, 8388608 ne moze da stane u 16 bita...
Tako da je rezultat ko zna sta.
Isto tako taj proton je samo prepisan c kod.

Code: Select all

Symbol dataa = PORTB.2
Symbol clock = PORTB.3   
input dataa
output clock
HXW var word 'zajedno ce dati 24 bita
HXb var byte
i VAR BYTE

LoadCellA: 
 clock = 0 
 While dataa = 1 : Wend
 For i = 0 To 24'Ovde menjaj broj impulsa prema onoj tablici da li je ulaz a il b i koje pojacanje
   High clock
   PAUSEUS 10
   if i<16 then
        HXW.0[i] = dataa 'Ovde imas prvih 16 bita  
   elseif i<24 then
        HXb.0[i-16] = dataa 'Ovde nizih 8 bita
   endif
   Low clock
   PAUSEUS 10    
 Next
  
 'prikaz
 LCDOUT $FE, 1 'prikaz na LCD
 LcdOut $FE,$80, "Tara-",dec5(HXW)
 LcdOut $FE,$C0, "Tara-",dec5(HXb)
 pause 1000
GoTo LoadCellA
end
Ovaj kod trebao bi da ti prikaze u 2 promenljive prvih tih 24 bita koja ocitas. Plus posljae odgovarajuci broj impulsa da podesi prema tabeli sa 4 strane datasheeta.
Kad to proradi, onda cemo videti kako prebaciti u grame rezultat.
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1627
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: Pic & HX711

Post by WhiteHead »

Probao, dobijem brojeve 65535 i 00255, odnosno sve skupa 24 binarne jedinice, i očitanje se ne mijenja s teretom na mjernoj ćeliji.
Najgore je to što nisam siguran ni u ispravnost HW-a (kinezi).
Probao sam i onaj "proton" kod u PBP s tim da sam čitao samo prvih 16 bita u promjenjivu "word", ali i tu dobijem neki stabilan broj koji se ne mijenja.
Moram dobro provjeriti HW pa onda dalje, a probat ću "nabaviti" i proton IDE i compiler pa da uradim hex iz toga, ovdje: http://www.protonbasic.co.uk/showthread ... Read-HX711 kažu da to radi.
Hvala na pomoći Peđa.
Ako kaniš pobijediti, ne smiješ izgubiti
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Pic & HX711

Post by pedja089 »

Ne znam koji pic koristis, da nema kakvih analognih gluposti koje treba iskljuciti? Da nije zamenjen clock i data?
Probaj napraviti test program da samo prebaci stanje sa ulaza na izlaz, pa dodaj led vidi da li je bar taj deo ok.
Ako je to ok, onda polako dalje...
Inace ako koristis 18f imas 32bit long promenljive, pa ovih 24 bita nije problem nikakav za sracunati.
EDIT:
Probao menjati onaj broj impulsa sa 24 na 25 il vise? Da probas selektovati drugi ulaz i pojacanje?
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1627
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: Pic & HX711

Post by WhiteHead »

Koristim 16F628/648 dosta toga do sada sam uradio s tim pic-ovima, a evo šta stoji u konfiguraciji:

Code: Select all

#CONFIG
 __config _INTRC_OSC_NOCLKOUT & _WDTE_ON & _PWRTE_ON & _MCLRE_OFF & _LVP_OFF
#ENDCONFIG
CMCON=7         'iskljuceni analogni komparatori - DIGITALNI I/O 
DEFINE OSC 4
Probao i sa 16F88, ali nikako nisam uspio natjerati njegov interni oscilator da radi ispravno (čini mi se da radi na 100-tinjak Hz)
Mislim da je HW oko pic-a OK, na iste pin-ove sam kačio RTC i čitao sa I2CREAD.
Sumnjam na ispravnost sklopa sa HX711 ili mjerne ćelije.
Sutra na poslu nastavljam istragu. Javit ću rezultate.
Ako kaniš pobijediti, ne smiješ izgubiti
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Pic & HX711

Post by pedja089 »

Ako je I2C radio, onda nema sta oko pica. Gledaj dalje.
Probaj dodati pull up iako ga nigde ne vidim da je potreban. Pogotovo sto PIC cita sve 1.
Ono sta me jako buni je sto ocigledno detektuje da je data pin otisao sa 1 na 0... To bi znacilo da nesto radi...
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1627
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: Pic & HX711

Post by WhiteHead »

Onaj proton-basic code radi.
Taj code sam "preradio" u PBP s tim da čita samo 16 bita i isto radi.
Promijenio sam po analogiji brojeve s kojim se radilo u XOR funkciji i oduzimanju i funkcioniše.
Još trebam skalirati dobivenu vrijednost da dobijem tačno očitanje u gramima i to je to, mislim da je ovih 16 bita sasvim dovoljno.

Code: Select all

LoadCellA:
 dataa = 1:clock = 0: Hx711Cnt = 0
 While dataa = 1 : Wend
 For i = 0 To 15
   High clock
   Hx711Cnt = Hx711Cnt <<1
   Low clock
   if dataa=1 then Hx711Cnt=Hx711Cnt+1
 Next
 High clock
 Hx711Cnt = Hx711Cnt^32768' ovdje je u protonu XOR isao sa 8388608
 gram=32768-Hx711Cnt 'ovdje se u protonu oduzimalo od 8388608
 gram=gram-65000
 Low clock
 LCDOUT $FE, 1 'prikaz na LCD
 LcdOut $FE,$80, "Tara=",dec(gram)
 pause 500
GoTo LoadCellA
Ako kaniš pobijediti, ne smiješ izgubiti
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Pic & HX711

Post by pedja089 »

E sad mi nije jasno sta sam zeznuo. Jer i onaj moj kod je isti kao taj u protonu. Samo umesto silnih siftovanja itd koristi direktan pristup bitovima.
Al kakogod, bitno da radi.
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1627
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: Pic & HX711

Post by WhiteHead »

Ma bitno je da radi, i ja sam umoran da tražim grešku (čitavu sedmicu se zaje*avam s ovim).
Nego, da bih dobio grame potrebno je da dobivenu vrijednost množim sa 1.163, čini mi se da je to bilo negdje na forumu.
Ako ti nije teško samo par smjernica da mi daš, ja sam probao Gram=Gram*1163/1000 ali onda pokazuje nešto bezveze, izgleda da ode van opsega od 16 bita.
Ako kaniš pobijediti, ne smiješ izgubiti
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Pic & HX711

Post by pedja089 »

Iz manuala:
b VAR WORD
c VAR WORD
dummy VAR WORD
b = 500
c = 1000
DISABLE ' Necessary if On Interrupt used
dummy = b * c ' Could also use ** or */
a = DIV32 100
ENABLE
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1627
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: Pic & HX711

Post by WhiteHead »

Da, to je to. Sada je sve OK.
Pedja, još jednom hvala na velikoj pomoći.

Ako nekom zatreba evo kod-a:

Code: Select all

 Hx711Cnt var Word
 I var Byte
 GraM var word
 GraMM var word
 SigN var byte
 
Symbol dataa = PORTB.2
Symbol clock = PORTB.3    
input dataa
output clock

I=0
LoadCellA:
 dataa = 1:clock = 0: Hx711Cnt = 0
 While dataa = 1 : Wend
 For i = 0 To 15
   High clock
   Hx711Cnt = Hx711Cnt <<1
   Low clock
   if dataa=1 then Hx711Cnt=Hx711Cnt+1
 Next
 High clock
 Hx711Cnt = Hx711Cnt^32768
 gram=32768-Hx711Cnt
 'gram=gram-65477' dovodjenje izmjerene vrijednosti na nulu za koristenu mjernu celiju
 IF gram.15 THEN  'ako je tezina ispod nule
     gram = ~gram + 1'  izvrsi operaciju NOT i uvecaj za 1
     Sign = "-" 'postavi ispred minus
  else
     Sign=" "    
  ENDIF
'skaliranje za upotrijebljenu celiju***************************************
disable 'onemoguci interapt
gram=gram*11627   'skaliranje (ide preko 16 bita)
 gramm=div32 10000 ' dijeljenje s 10000 i "vadjenje" prvih 16 bita
 enable  'omoguci interapt

 LCDOUT $FE, 1 'prikaz na LCD
 LcdOut $FE,$80, "Tara=",sign,dec(gramm)
 pause 100
GoTo LoadCellA
end
Ako kaniš pobijediti, ne smiješ izgubiti
Post Reply