Merhaba arkadaşlar.Elimde aşağıdaki linteki ağırlık sensörü için kuvvetlendirici kart var. MCU için Dout ve SCK diye iki tane uç vermiş ama datasheete baktığımda hiç bir şey anlamadım. Daha önce bundan kullanan veya nasıl kullanacağımı bilen varsa yardımcı olabilir mi?
ağırlık sensörü kuvvetlendirici: http://www.robotistan.com/agirlik-sensor-kuvvetlendirici-load-cell-amplifier-hx711?gclid=Cj0KEQjwy4zLBRCOg6-4h6vs3cUBEiQAN-yzfg32o7iluVCC9QoySkTKkHT0xxaofYflPvuIs40wQpwaAs1F8P8HAQ
datasheet: https://cdn.sparkfun.com/datasheets/Sensors/ForceFlex/hx711_english.pdf
Teşekkürler..
spi protokolü diye araştırın yada hiç kasmayın arduino hx711 dşye araştırıp direk kullanın
Benim bunu pic16f877 ile okumam lazım. Arduino da HX711 library ile kullanmış.
Spi araştır pic icin
çok basit bir yapısı var
HX711 data hattını dinleyeceksin
Data low olunca Clock pinini 24 kere HI LOW yapıcaksın
her Clock HI dan sonra Datayı okuycaksın
bkz. ADC ve Kuvvetlendirici arasındaki fark
Datasheet in sonunda C için örnek kod vermiş. Micro C için aşağıdaki gibi kodları yeniden düzenledim ve sadece 24 bitlik "count" değişkenini UART üzerinden göndermeyi denedim. Şuan ekrana sayılar geliyor gerekli hesaplamaları yapıp son halini paylaşırım. Yardım için herkese teşekkürler...
sbit ADDO at RB0_bit;
sbit ADSK at RB1_bit;
char txt[11];
unsigned long yuk;
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);
}
void init(){
trisb=0x01; // SCK rb1 , DT rb0
portb=0; //
}
void main() {
init();
UART1_Init(9600);
while(1){
yuk=ReadCount();
LongWordToStr(yuk,txt);
if(UART1_Data_Ready())
UART1_Write(txt);
}
}
Alıntı yapılan: topuz - 12 Temmuz 2017, 11:43:00
Datasheet in sonunda C için örnek kod vermiş. Micro C için aşağıdaki gibi kodları yeniden düzenledim ve sadece 24 bitlik "count" değişkenini UART üzerinden göndermeyi denedim. Şuan ekrana sayılar geliyor gerekli hesaplamaları yapıp son halini paylaşırım. Yardım için herkese teşekkürler...
sbit ADDO at RB0_bit;
sbit ADSK at RB1_bit;
char txt[11];
unsigned long yuk;
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);
}
void init(){
trisb=0x01; // SCK rb1 , DT rb0
portb=0; //
}
void main() {
init();
UART1_Init(9600);
while(1){
yuk=ReadCount();
LongWordToStr(yuk,txt);
if(UART1_Data_Ready())
UART1_Write(txt);
}
}
2 gün önce bu projeyi bitirdik. Sana tavsiyem okuduğun count değerini 10 kere falan daha okuyup ortalamasini al ve o şekilde ekrana göster. Biz direk 1 kere okuyup lcd ye yazdırdiğimizda sacma değerler veriyordu ve bu değerler sürekli değişiyordu.Bunu önlemek içinde bubble sorting denilen yöntemi uygulayarak ortalamasini aldik ve o şekilde lcdye yazdirdik.Sonuc güzel oldu ve miligram cinsinden okuma yapmayi başardık
"Bubble Sort Algorithm" (bu bildiğimiz basit median alma) ile ortalama almanın ilgisi yoktur, bunlar ayrı işlemlerdir. İyi bir filtre için küçükten büyüğe sıralayıp belli sayıda ortanca değerin ortalamasını alabilirsiniz.
Hx711 hızlı tartım uygulamaları için oldukça yavaş kalıyor. Besleme düzgün ise stabil ölçümler almak mümkün
Uygulama yapmak isteyen arkadaşlar bu iki hususta dikkat etmeliler
15. pini lojik 1 yaptığınızda sensörden daha hızlı veri okuyabilirsiniz.
http://www.elektrocavus.com/HX-711-A-D-okuma-hizini-arttirma (http://www.elektrocavus.com/HX-711-A-D-okuma-hizini-arttirma)