Ağırlık sensörü okuma

Başlatan topuz, 10 Temmuz 2017, 11:28:02

topuz

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..

skara1214

spi protokolü diye araştırın yada hiç kasmayın arduino hx711 dşye araştırıp direk kullanın
Herkes ölür ama herkes gerçekten yaşamaz

topuz

Benim bunu pic16f877 ile okumam lazım. Arduino da HX711  library ile kullanmış.

skara1214

Herkes ölür ama herkes gerçekten yaşamaz

magnetron

ç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

comme_il_faut

bkz. ADC ve Kuvvetlendirici arasındaki fark

topuz

#6
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);
 }
}

emre94

#7
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

comme_il_faut

"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.

universitelim54

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

ziyaretci

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