ADXL345 3 Yön Sensör hakkında

Başlatan ertsen, 09 Ocak 2013, 20:51:24

salih18200

Sensörün yanılmıyorsam 32'byte'lık fifoya sahip. Fifoyu örnekleme hızından yavaş okursanız fifo dolar ve siz eski değerleri görmüş olursunuz. Farklı modlları var fifonun bakmak lazım.

sadogan

Alıntı yapılan: ertsen - 16 Ocak 2013, 19:39:59
arkadaşlar bi yardım edin bir haftadır işin içinden çıkamadım.
okuduğum değer sensör sabit olmasına rağmen sürekli değişiyor ve öyle birbirine yakın değerler de değil.
Video linki:
video 2013 01 16 19 51 58
Hocam sorunu aşabildinizmi ?

ertsen

malesef aşamadık. sürekli farklı değerler alıyoruz.

artapon

http://www.dosya.tc/server26/CuiiAv/ADXL345.rar.html

hocam yukarıda verdiğim linkteki kodları bir deneyin... umarım işinize yarar...
Aldanma İnsanların Samimiyetine, Menfaatleri İçin Gelirler Vecde, Vaad Etmeseydi Allah cenneti, O'na Bile Etmezlerdi Secde!   (NFK)

ertsen

Arkadaşlar teşekkür ederim cevaplar için. artapon hocam gönderdiğin program CCS için değil herhalde. htc.c dosyası ccs de yok. yinede register ayarları için fikir verebilir. teşekkürler

artapon

Alıntı yapılan: ertsen - 17 Ocak 2013, 18:35:55
Arkadaşlar teşekkür ederim cevaplar için. artapon hocam gönderdiğin program CCS için değil herhalde. htc.c dosyası ccs de yok. yinede register ayarları için fikir verebilir. teşekkürler


Hitech C derleyicisi için yazılmış her C kodu #include <htc.h> ile başlamalıdır. PIC16F serisi orta sınıf (Mid-Range) PICler için onun yerine #include <pic.h> de yazabilirsiniz.

umarım işine yarar benimde elimde 5 tane adxl 345 var yeni aldım. sen uygulamanı yap. bende ilk fırsatta uygulamamı yapacağım. ama şuan vaktim pek yok. hocam işi iyi öğrenin sonra ben takıldığım yerde sizi ararım  :)
Aldanma İnsanların Samimiyetine, Menfaatleri İçin Gelirler Vecde, Vaad Etmeseydi Allah cenneti, O'na Bile Etmezlerdi Secde!   (NFK)

ertsen

En kısa zamanda tekrar deneyeceğim. Genelde pes etmem ama adxl345 beni aştı gibi.

salih18200

Sensörün örnekleme frekansı birde ekrana yazma sürelerinizi öğrenebilirmiyim..

ertsen

Alıntı yapılan: salih18200 - 17 Ocak 2013, 18:58:31
Sensörün örnekleme frekansı birde ekrana yazma sürelerinizi öğrenebilirmiyim..

Salih18200 hocam. Örnekleme frekansı derken herhalde nekadar aralıklarla veri aldığımı soruyorsunuz. Bu süreden bağımsız olarak, hiç hareket yokken dahi değişik rakamlar geliyor. Açıkcası registerlerin durumu hakkında çok bilgim yok. Ben bu ürünü sipariş verdiğimde, Ds1307 deki gibi hazır bir kütüphanesi olduğunu ve rahatlıkla verileri okuyabileceğimi düşündüm. Daha önce hiç register ayarları ile uğraşmadığım için bunu anlamak şu anda biraz zor geliyor. Aslında anlamaktan ziyade birçok registeri kontrol etmek sıkıntılı geldi. Yine de kendimize göre bişeyler yazdık ama tutmadı :)

Birde şöyle bir durum var. 5V giriş gerilimini bir pot ile gerilim bölücü yapıyorum ve 3.3V 'a ayarlıyorum. Ancak Adxl345 ten yanıt alamıyorum. Yavaş yavaş artırdığımda cevap geliyor ama bu arada giriş voltajı 4,5-5 V'a gelmiş oluyor.


Yazdığım kod:
adxl345.h
#define ADXL345_ADR   0xA6 //Write           0xA7//Read
#define BW_RATE       0x2C
#define POWER_CTRL    0x2D
#define DATA_FORMAT   0x31
#define FIFO_MODE     0x38

#define ADXL345_xLSB  0x32
#define ADXL345_xMSB  0x33
#define ADXL345_yLSB  0x34
#define ADXL345_yMSB  0x35
#define ADXL345_zLSB  0x36
#define ADXL345_zMSB  0x37
#define BIR           0x01

#define RTC_SDA  PIN_C7 //C4
#define RTC_SCL  PIN_C6 //C3

#use i2c(master, sda=RTC_SDA, scl=RTC_SCL)


void adxl345_init(void)
{

i2c_start(); 
i2c_write(ADXL345_ADR);
i2c_write(POWER_CTRL);
i2c_write(0x00);
i2c_stop();
delay_ms(1);

i2c_start();
i2c_write(ADXL345_ADR);
i2c_write(DATA_FORMAT);
i2c_write(0x01);
i2c_stop();
delay_ms(1);

i2c_start(); 
i2c_write(ADXL345_ADR); 
i2c_write(FIFO_MODE); 
i2c_write(0x40);
i2c_stop();
delay_ms(1); 

i2c_start(); 
i2c_write(ADXL345_ADR);
i2c_write(BW_RATE); 
i2c_write(0x0c); 
i2c_stop(); 
delay_ms(1); 

i2c_start(); 
i2c_write(ADXL345_ADR); 
i2c_write(POWER_CTRL); 
i2c_write(0x08); //Measurement mode  
i2c_stop();
delay_ms(1);
}


Main ise:

                     
#include <18F2550.h>

#fuses  HSPLL,NOWDT,NOPROTECT,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN      // dont change
#use    delay(clock=48000000)  
#include "LCD_FLEX.c" 
#include "adxl345.c"


void main ()
{
   int i;
   signed int16 values[6];   
   signed int16 acc_data_x;
   
    lcd_init();  
    adxl345_init();
   delay_ms(1);

while(true) {

 i2c_start();
 i2c_write(0xA6);    //SDO pini topraklı ise A6 write modu ve a7 read mode
 i2c_write(0x32);    //X0 yani lsb_x     
 i2c_start();
 i2c_write(0xA7);   //SDO pini topraklı ise A6 write modu ve a7 read mode
 values[0]=i2c_read();
 i2c_stop();
 
 
 i2c_start(); 
 i2c_write(0xA6);    //SDO pini topraklı ise A6 write modu ve a7 read mode
 i2c_write(0x33);    //X1 yani msb_x 
 i2c_start(); 
 i2c_write(0xA7);    //SDO pini topraklı ise A6 write modu ve a7 read mode
 values[1]=i2c_read();
 i2c_stop();


acc_data_x =(int16)((values[1] << 8 ) + values[0]);

lcd_gotoxy(1,1);
printf(lcd_putc,"X0:%x",values[0]);
lcd_gotoxy(7,1);
printf(lcd_putc,"X1:%x",values[1]);
lcd_gotoxy(1,2);
printf(lcd_putc,"X:%x",acc_data_x);

output_toggle(PIN_C0); // programın çalışıp çalışmadığını kontrol ediyorum.

delay_ms(300);

   }
}

salih18200

adxl345.h dosyasındaki satır yerine
i2c_write(BW_RATE); 
i2c_write(0x0c);



bunu kullanının 0x0c yerine 0x05 yazmış olacaksınız
i2c_write(BW_RATE); 
i2c_write(0x05);

ertsen


Dediğiniz düzenlemeyi yaptım. şu anda sensörden düzgün veri alabiliyorum ancak sırasıyla FF ve gelen sayı değeri değişiyor. Bu FF sayısını nasıl iptal edebiliriz?

video 2013 01 17 20 05 01


Alıntı yapılan: salih18200 - 17 Ocak 2013, 19:42:11
adxl345.h dosyasındaki satır yerine
i2c_write(BW_RATE); 
i2c_write(0x0c);



bunu kullanının 0x0c yerine 0x05 yazmış olacaksınız
i2c_write(BW_RATE); 
i2c_write(0x05);


Murat Mert

S.A.
Sanki veriler 16 bit gibi geliyor 2 bayt ı sırayla gösteriyor gibi yada başka bir veri araya giriyor.
mert07

salih18200

hocam sorun sensörün ürettiği dataları sen senkron bir şekilde ekranda gösteremiyorsun, ff geldiğinde sensör henüz veri üretmemiş oluyor. Verilere ekranda bakmak çok mantıklı değil açıkçası datasheet karıştırmanız lazım biraz. Eklediğin videolara bakarak net bir şekilde sorunu görebiliyorum. Ama siz sistemin alt yapısını bilmediğiniz için her adımda yardıma ihtiyaç duyacaksınız, yardımda bir yere kadar. Biraz datasheet karıştırmanız lazım.

Sorun daha öncede bahsettiğim gibi buraya yoğunlaşmalısın
Alıntı yapılan: salih18200 - 16 Ocak 2013, 20:24:37
Sensörün yanılmıyorsam 32'byte'lık fifoya sahip. Fifoyu örnekleme hızından yavaş okursanız fifo dolar ve siz eski değerleri görmüş olursunuz. Farklı modlları var fifonun bakmak lazım.

ertsen

Haklısınız her adımda yardım olmuyor. Bundan sonrasını kendim hallederim inşallah. Çok teşekkürler. 

sadogan

Hocam SPI bağlantı yaparsanız yardımcı oabilirim