Pic & HX711
Moderators: pedja089, stojke369, [eDo], trax
Pic & HX711
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 !
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
Re: Pic & HX711
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
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.
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);
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.
Re: Pic & HX711
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.
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
Re: Pic & HX711
Sretno
Re: Pic & HX711
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:
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
Re: Pic & HX711
I još jedno pitanje.
Dali ova dva pin-a, ili samo ovaj ulazni, pull-upovati
Dali ova dva pin-a, ili samo ovaj ulazni, pull-upovati
Ako kaniš pobijediti, ne smiješ izgubiti
Re: Pic & HX711
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.
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.
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
Kad to proradi, onda cemo videti kako prebaciti u grame rezultat.
Re: Pic & HX711
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.
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
Re: Pic & HX711
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?
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?
Re: Pic & HX711
Koristim 16F628/648 dosta toga do sada sam uradio s tim pic-ovima, a evo šta stoji u konfiguraciji:
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.
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
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
Re: Pic & HX711
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...
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...
Re: Pic & HX711
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.
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
Re: Pic & HX711
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.
Al kakogod, bitno da radi.
Re: Pic & HX711
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.
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
Re: Pic & HX711
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
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
Re: Pic & HX711
Da, to je to. Sada je sve OK.
Pedja, još jednom hvala na velikoj pomoći.
Ako nekom zatreba evo kod-a:
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