msp430 ve adxl345 ile 3 boyutlu ivmeölçer

Başlatan osmanakgull, 06 Mayıs 2024, 14:58:32

osmanakgull

projemde her bir ekseni belli etmek üzere 3 adet led kullanıyorum daha önce böyle bir proje yapmış birisi var ise bana yardımcı mi olabilir ya da farklı bir şekilde 3 boyutlu ivmeölçer yapan sensör farketmez ayrıca şöyle bir kod yazdım doğrulugundan emin değilim kontrol edebilir misiniz
Kod: C/C++
#include "io430.h"
#include <stdint.h>


#define ADXL345_ADDR    0x53 // ADXL345'nin I2C adresi
#define LED1 BIT0  // Örnek olarak P1.0
#define LED2 BIT6  // Örnek olarak P1.6
#define LED3 BIT7  // Örnek olarak P2.7

void I2C_init(){
    // I2C modülünü baslatma islemi
    UCB0CTL1 |= UCSWRST;            // I2C modülünü sifirla
    UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // Master mod, I2C modu ve senkron mod ayarlari
    UCB0CTL1 |= UCSSEL_2;      // SMCLK'yi I2C saat kaynagi olarak ayarla
    UCB0BR1 = 10;                   // I2C saat frekansini ayarla  UCB0BR1
    UCB0CTL1 &= ~UCSWRST;           // I2C modülünü etkinlestir
    UCB0I2CSA = ADXL345_ADDR;       // ADXL345'nin I2C adresini ayarla
}

void I2C_start(){
    // I2C baslangiç isareti gönderimi
    UCB0CTL1 |= UCTR + UCTXSTT; // Veri gönderme modunda baslangiç isareti gönder
    while (UCB0CTL1 & UCTXSTT); // Gönderme tamamlanana kadar bekle
}

void I2C_write(uint8_t data){
    // I2C veri yazma islemi
    UCB0TXBUF = data;             // Veriyi I2C veri iletim buffer'ina yaz
    while (!(IFG2 & UCA0TXIFG)); // Verinin gönderilmesini bekle
}

void I2C_stop(){
    // I2C durdurma isareti gönderimi
    UCB0CTL1 |= UCTXSTP;         // Durdurma isareti gönder
    while (UCB0CTL1 & UCTXSTP);  // Durdurma isareti tamamlanana kadar bekle
}

void ADXL345_init(){
    // ADXL345 sensörünü baslatma ve konfigürasyon
    I2C_start();                  // I2C baslangiç isareti gönder
    I2C_write(0x2D);              // Power Control Register adresine yaz
    I2C_write(0x08);              // Standby modunu devre disi birak ve ölçüm moduna geç
    I2C_stop();                   // I2C durdurma isareti gönder
}

void readAccelData(int16_t *accelData){
    // ADXL345'ten ivme verilerini okuma
    uint8_t rawData[6]; // Raw veri için dizi
    I2C_start();        // I2C baslangiç isareti gönder
    I2C_write(0x32);    // Veri okuma baslangiç adresini belirt
    I2C_start();        // Yeniden baslatma gönder
    I2C_write(0x33);    // Okuma modunda adres gönder
    for (int i = 0; i < 6; i++) {
        if (i == 5)
            rawData[i] = UCB0RXBUF; // Son okunan byte için ACK olmayan durumu ayarla
        else
            rawData[i] = UCB0RXBUF; // Veriyi oku ve ACK gönder
    }
    I2C_stop();         // I2C durdurma isareti gönder

    // Veriyi isleme
    accelData[0] = (int16_t)(((uint16_t)rawData[1] << 8) | rawData[0]); // X ekseni ivmesi
    accelData[1] = (int16_t)(((uint16_t)rawData[3] << 8) | rawData[2]); // Y ekseni ivmesi
    accelData[2] = (int16_t)(((uint16_t)rawData[5] << 8) | rawData[4]); // Z ekseni ivmesi
}

void LED_control(int16_t x, int16_t y, int16_t z) {
    // LED'leri kontrol etme
    if (x > 1000)
        P1OUT |= LED1; // LED1'i yak
    else
        P1OUT &= ~LED1; // LED1'i söndür

    if (y > 1000)
        P1OUT |= LED2; // LED2'yi yak
    else
        P1OUT &= ~LED2; // LED2'yi söndür

    if (z > 1000)
        P2OUT |= LED3; // LED3'ü yak
    else
        P2OUT &= ~LED3; // LED3'ü söndür
}

int main(void) {
    WDTCTL = WDTPW | WDTHOLD;   // Watchdog Timer'i durdur

    P1DIR |= LED1;  // LED1 çikis olarak ayarlandi
    P1DIR |= LED2;  // LED2 çikis olarak ayarlandi
    P2DIR |= LED3;  // LED3 çikis olarak ayarlandi

    I2C_init();     // I2C baslatma islemi
    ADXL345_init(); // ADXL345 sensörünü baslatma islemi

    int16_t accelData[3]; // Ivme verilerini saklamak için dizi

    while (1) {
        readAccelData(accelData);   // Ivme verilerini oku
        LED_control(accelData[0], accelData[1], accelData[2]); // LED'leri kontrol et
    }   
}

mehmet

#1
Elimde MPU-6050 ve G2452 G2553 bulunmakta.
Pek fazla vaktim yok, biraz beklerseniz
yardımcı olabilirim.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

osmanakgull

hocam 9 gün sonra projenin teslim tarihi var siz ne zamana kadar yardım edebilirsiniz gerçekten çok çaresizim projeyi yapamazsam dersi geçemem

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"