ADXL345 ivme sensörü uygulaması

Başlatan ertsen, 20 Ocak 2013, 15:08:30

Mucit23

#15
Hocam Datasheette I2C modu anlatılırken CS high konumunda olmalı diyor.

mesaj birleştirme:: 10 Mayıs 2014, 12:45:08

Yok arkadaşlar I2C çalışıyor.

ADXL345'in Register Map'inde DEVICE_ID registerinin default değeri 0xE5(11100101) olarak verilmiş. Ben DEVICE_ID registerini okuyorum aynı şekilde 0xE5 değeri geliyor.

Başka registerleride okuyorum yine yazılan değerler veya default değerleri geri okuyabiliyorum.

Sensör çalışıyor, I2C çalışıyor. O halde neden data göndermiyor bana bu velet.

     accel_data[0]=adxl345_read(32); //Read X axis(LSB)
     accel_data[1]=adxl345_read(33); //Read X axis(MSB)
     accel_data[2]=adxl345_read(34); //Read Y axis(LSB)
     accel_data[3]=adxl345_read(35); //Read Y axis(MSB)
     accel_data[4]=adxl345_read(36); //Read Z axis(LSB)
     accel_data[5]=adxl345_read(37); //Read Z axis(MSB)

     xaxis=(int16)((accel_data[1]<<8)|accel_data[0]);
     yaxis=(int16)((accel_data[3]<<8)|accel_data[2]);
     zaxis=(int16)((accel_data[5]<<8)|accel_data[4]);


Burada yanlış birşeymi yapıyorum?

Konu sahibi nasıl çalıştırmış anlamıyorum. Kütüphane aynı, init kodları aynı? Neyi atlıyorum çok merak ediyorum ???

Mucit23

Yukarıdaki kodlardada sıkıntı yok.

Yahu bu ne iştir, ivme ölçer çalışıyor, Register okuması yapabiliyorum. I2C de problem yok. Fakat X,Y ve Z eksen bilgilerini okuduğumda hep sıfır okuyorum. İvme ölçerin değer göndermesi için başka birşeymi yapmam gerekiyor? Fikri olan yokmu

z

#17
 accel_data[n] degerleri sifirdan farklimi?

Sensor enable, calibration vs gibi durumlar varmi?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Mucit23

Hocam Eksenler ile ilgili bütün değerler sıfır geliyor. Ama buna rağmen örneğin POWER_CTL registerine init aşamasında 0x08 yazılmışsa main içerisinde aynı registeri okuyorum 0x08 geliyor. DEVICE_ID registerini okuyorum datasheette yazdığı gibi 0xE5 geliyor.

Main programındada düzenli olarak okuma yapılıyor. Yani programda aksamalarda olmuyor.

Acaba sensörün içine ivme ölçer yerleştirmeyimi unuttular.  :-X  :o :-\


z

Registerlere baktim da standby modu falan var. Bence init rutinin eksik. Dokumandaki registerleri okuyup init edilmesi unutulan bir register varmi bakmalisin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Mucit23

Hocam iyide uyku modunu ayarlayan POWER_CTL registerini init işleminde geçiriyorum. 3. bit Measurement biti Bu biti set etmişim.
(ADXL345_POWER_CTL=0x08)

Anlamadığım nokta şu, Bu çipi ilk kullanan ben değilim. Başkalarının kullandığı kodları kullanıyorum. Millet çatır çatır çalıştırıyorken ben aynı kodlarla anlamsız problemlerle karşılaşıyorum.

Harbiden elektronik biraz şans işi diye düşünmeye başladım. Belliki bu alanda şansım yok

Haydi çık şimdi işin içinden. Yardıma ihtiyacım var  :-\

z

Donanimsal bir sorunun olabilir. Ne bileyim cipin dekuplaj kapasitesi varmi diye en bastan didiklemek lazim.

Boyle bir sorunla karsilassam oncelikle init ettigim registerleri bir de okurdum gercekten de istedigimi yazmisim mi diye.

Ip uclari verebilir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Mucit23

#22
Hocam okuma yapıyorum yazdığım değerleri geri veriyor.

Arkadaşımda üzerinde Yine ADXL345 bulunan farklı bir modül var. Gidip onu aldım. Birde onunla deneme yapayım.

Edit; Yok oda aynı şekilde çalışıyor. Arada hiçbir fark yok.

İnternetteki çoğu kütüphaneyi inceledim. Arduinocular da aynı şekilde init etmişler. Sadece DATA_FORMAT ve POWER_CTL registerlerinde işlem yapmışlar.

Daha önce bu çiple uğraşan kimler var. Ben şu kodları kullanarak çalıştırdım diyen kimse yokmu? Farklı kütüphaneleri incelemem lazım.

artapon

#23
usta ben arduino da çalıştırdım. eğer biraz beklersen kodları bulup paylaşayım. gayet güzel bir şekilde çalışıyordu.

mesaj birleştirme:: 13 Mayıs 2014, 14:49:04


http://s3.dosya.tc/server22/aXGU2X/inoile_vme_l__m_veRfileKablosuzKontrol.docx.html

http://s3.dosya.tc/server22/23LaGi/B_L_M6.-PROGRAMKODLARI.docx.html

yukarıdaki iki link işini görecektir...

bu benim tez konumdu. dosyalarda gerekli açıklamayı bulabilirsin...

mesaj birleştirme:: 13 Mayıs 2014, 00:54:42

ayrıca bu chipte ekstra olarak I2C yoluna direnç bağlamanıza gerek yok.

ADXL345 Modülü Açık Şeması:



Ayrıca dökümanda Modülü mikrdenetleyiciye nasıl bağanacağı ile alakalı açıklama mevcut. bağlantı şekli çok önemli... çünkü chip buna göre ID alıyor...

İyi Çalışmalar...
Aldanma İnsanların Samimiyetine, Menfaatleri İçin Gelirler Vecde, Vaad Etmeseydi Allah cenneti, O'na Bile Etmezlerdi Secde!   (NFK)

vitruvius

Mucit23, hocam son durum nedir? Uzaktan takipteydim, bir gelişme var mı?

Mucit23

Hocam ertesi gün sakin kafayla bakınca kodları inceleyince gördüm. adreslerde hata vardı. Şimdi okuma konusunda sıkıntı yok.

Birşey sorayım. CCS nin make16 komutu nasıl çalışıyor?

     xaxis=make16(accel_data[1],accel_data[0]);
Bu kodla
     xaxis=(int16)((accel_data[1]<<8)|accel_data[0]);
Bu kod farklı sonuçlar veriyor.

Make16 doğru çalışırken benim yaptığım düzgün çalışmıyor

sadogan

xaxis=(int16)accel_data[1]<<8|accel_data[0];

Bu şekilde çalışmıyor mu ?

Mucit23

Yok o şekilde iki adet işaretli tam sayı 16 bit olarak birleşmiyor

make16 ile sonuçta yerçekimi etkisinde eksenlerden +280 ile -280 arası bir değer alıyorum

make16 yerine kendim birleştirsem aldığım değerler sürekli pozitif ve anlamsız oluyor.

mistek

@mucit23

Ben şu şekilde kullanıyormuşum.
   

int16_t adxl345_data_x=0;

int16_t adxl345_msb_x = i2c_read(ADXL345_ADR, ADXL345_xMSB);
int16_t adxl345_lsb_x = i2c_read(ADXL345_ADR, ADXL345_xLSB);

adxl345_data_x = ((adxl345_msb_x << 8) + adxl345_lsb_x);
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

sadogan

#29
2 adet işaretli tam sayı birleştirmekten kastın aslında 16 bit olan bir sayıyı
8 bit 8 bit okuyup 16 bit sayı elde etmek deyilmi yapmaya çalıştığın işlem bu.
Olmayan bir kaç örenek verebilirmisin.