精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ADXL345 與 PT32L007 IIC通訊源代碼分享

Rickluo ? 來源:Rickluo ? 作者:Rickluo ? 2024-06-07 10:04 ? 次閱讀

#include "PT32x007x.h"
#include "string.h"
#include "filter.h"

#include "gpio_i2c.h"

#define READ_ADDR 0xA7
#define DEVICE_ADDR 0xA6

u8 arry_write[8]={0x0B,0x08,0x08,0x80,0x00,0x00,0x00};
u8 arry_read[7]={0};

float anglex = 0.0 ;
float angley = 0.0 ;
float anglez = 0.0 ;

void Software_Delay(u32 val)//延時函數
{
while(val)
{
val--;
}
}
/*******************************************************************************
*Function: UART_GPIO_Config
*Description: 配置UART引腳
*Input: 無
*Return: 無

*Others:
該函數負責使能UART模塊相關引腳
*******************************************************************************/
void UART_GPIO_Config(void)
{
/* 配置UART管腳的復用功能 */
GPIO_DigitalRemapConfig(AFIOD, GPIO_Pin_5, AFIO_AF_0,ENABLE); //PD5 TX0
GPIO_DigitalRemapConfig(AFIOD, GPIO_Pin_6, AFIO_AF_0,ENABLE); //PD6 RX0
}

/*******************************************************************************
*Function: UART_Mode_Config
*Description: 配置UART
*Input: 無
*Return: 無
*Others:
該函數負責初始化UART模塊的工作及其工作方式
*******************************************************************************/
void UART_Mode_Config(void)
{
UART_InitTypeDef UART_InitStruct;

/*初始化UART0*/
UART_InitStruct.UART_BaudRate = 9600;
UART_InitStruct.UART_WordLengthAndParity=UART_WordLengthAndParity_8D;
UART_InitStruct.UART_StopBitLength=UART_StopBitLength_1;
UART_InitStruct.UART_ParityMode=UART_ParityMode_Even;
UART_InitStruct.UART_Receiver=UART_Receiver_Enable;
UART_InitStruct.UART_LoopbackMode=UART_LoopbackMode_Disable;

UART_Init(UART0, &UART_InitStruct);

/*開啟UART0的收發功能*/
UART_Cmd(UART0, ENABLE);
}

static void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;


/* 配置USART為中斷源 */
NVIC_InitStructure.NVIC_IRQChannel = UART0_IRQn;
/* 優先級*/
NVIC_InitStructure.NVIC_IRQChannelPriority = 1;
/* 使能中斷 */
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
/* 初始化配置NVIC */
NVIC_Init(&NVIC_InitStructure);

UART_ITConfig(UART0, UART_IT_RXNEI, ENABLE); // 使能串口接收中斷
//---------------------------------
// 使能串口
UART_Cmd(UART0, ENABLE);
}

/*******************************************************************************
*Function: UART_Driver
*Description: UART模塊驅動函數
*Input: 無
*Return: 無
*Others:
*******************************************************************************/
void UART_Driver(void)
{
UART_GPIO_Config();
UART_Mode_Config();
//
NVIC_Configuration() ;//串口接受
}

void I2C_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定義一個GPIO_InitTypeDef類型的結構體
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5; //選擇要控制的GPIO引腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OutPP; //設置引腳模式為通用推挽輸出
GPIO_InitStructure.GPIO_Pull = GPIO_Pull_Up; //無偏置
GPIO_Init(GPIOC, &GPIO_InitStructure); //調用庫函數,初始化GPIO

// /* 配置I2C管腳的復用功能 */
// GPIO_DigitalRemapConfig(AFIOB, GPIO_Pin_5, AFIO_AF_0,ENABLE); //PB5 I2C SDA
// GPIO_DigitalRemapConfig(AFIOB, GPIO_Pin_4, AFIO_AF_0,ENABLE); //PB4 I2C SCL
}
void I2C_Driver(void)
{
I2C_InitTypeDef I2C_InitStruct;
I2C_InitStruct.I2C_Acknowledge = I2C_Acknowledge_Disable;
I2C_InitStruct.I2C_Broadcast = I2C_Broadcast_Disable;
I2C_InitStruct.I2C_OwnAddress = 0x00;
I2C_InitStruct.I2C_Prescaler = 640-1;
I2C_Init(I2C,&I2C_InitStruct);
}


int main (void)
{
uint32_t time = 0 ;
uint16_t i=0;

UART_Driver();
I2C_GPIO_Config();
// I2C_Driver();

printf("start......rn");
adxl_i2c_write(0x31, 0x0B) ; //Software_Delay(100000) ;
adxl_i2c_write(0x2c, 0x08) ; //Software_Delay(100000) ;
adxl_i2c_write(0x2d, 0x08) ; //Software_Delay(100000) ;
adxl_i2c_write(0x2e, 0x80) ; //Software_Delay(100000) ;
adxl_i2c_write(0x1E, 0x00) ; //Software_Delay(100000) ;
adxl_i2c_write(0x1F, 0x00) ; //Software_Delay(100000) ;
adxl_i2c_write(0x20, 0x05) ; //Software_Delay(100000) ;

//////// I2C_EE_Write(0xc0, 0x38, 1);Software_Delay(100000) ;
printf("device id=0x%xn", adxl_i2c_read(0x00)) ;


//I2C_EE_Read(arry_read, 0x20, DEVICE_ADDR, 1);
sc7a20_filter_init() ; //初始化濾波
while(1)
{
time++;

if(time%5000==0)
{
ADXL345_ReadDates(&anglex, &angley, &anglez) ;
printf("x=%.2f y=%.2f z=%.2fn", anglex, angley , anglez) ;
}

// Software_Delay(100000) ;
}

}

#include "filter.h"
#include "math.h"
#include "string.h"
#include "stdlib.h"

extern short x ;
extern short y ;
extern short z ;

typedef struct FilterChannelTag{
int16_t sample_l;
int16_t sample_h;

int16_t flag_l;
int16_t flag_h;

} FilterChannel;

typedef struct Silan_core_channel_s{
int16_t filter_param_l;
int16_t filter_param_h;
int16_t filter_threhold;
FilterChannel sl_channel[3];
} Silan_core_channel;

Silan_core_channel core_channel;

void sc7a20_filter_init(void)
{
int16_t j = 0;

core_channel.filter_param_l = 4;
core_channel.filter_param_h = 16;
core_channel.filter_threhold = 50; //4G scale: 25; 2G scale: 50

for(j = 0; j < 3; j++)
{
core_channel.sl_channel[j].sample_l = 0;
core_channel.sl_channel[j].sample_h = 0;
core_channel.sl_channel[j].flag_l = 0;
core_channel.sl_channel[j].flag_h = 0;
}

}


static int16_t filter_average(int16_t preAve, int16_t sample, int16_t Filter_num, int16_t * flag)
{
if (*flag == 0)
{
preAve = sample;
*flag = 1;
}

return preAve + (sample - preAve) / Filter_num;
}

static int16_t silan_filter_process(FilterChannel* fac, int16_t sample)
{
if(fac == NULL)
{
return 0;
}

fac->sample_l = filter_average(fac->sample_l, sample, core_channel.filter_param_l, &fac->flag_l);
fac->sample_h = filter_average(fac->sample_h, sample, core_channel.filter_param_h, &fac->flag_h);
if (abs(fac->sample_l - fac->sample_h) > core_channel.filter_threhold)
{
fac->sample_h = fac->sample_l;
}

return fac->sample_h;
}

void filter_base_dates(void)
{
x = silan_filter_process(&core_channel.sl_channel[0], x);
y = silan_filter_process(&core_channel.sl_channel[1], y);
z = silan_filter_process(&core_channel.sl_channel[2], z);
}

wKgaomZiamiAYCJyAAQMvBfGYJw069.png


審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 通訊
    +關注

    關注

    9

    文章

    893

    瀏覽量

    34833
  • IIC
    IIC
    +關注

    關注

    11

    文章

    300

    瀏覽量

    38273
  • 源代碼
    +關注

    關注

    96

    文章

    2944

    瀏覽量

    66668
  • ADXL345
    +關注

    關注

    13

    文章

    69

    瀏覽量

    33831
收藏 人收藏

    評論

    相關推薦

    adxl345 klipper不識別

    ADXL345是一種MEMS加速度計,廣泛應用于許多領域,如運動追蹤、健康監測和自動導航等。然而,有時候我們可能會遇到ADXL345在klipper中不被識別的問題。本文將詳細介紹這個問題以及
    的頭像 發表于 01-07 15:47 ?872次閱讀

    ADXL345和MPU6050的區別

    ADXL345和MPU6050是兩種常見的加速度計和陀螺儀傳感器,用于測量物體的加速度和旋轉速度。它們在設計、性能和應用方面有一些區別。在本文中,我們將對ADXL345和MPU6050的區別進行詳細
    的頭像 發表于 01-04 11:30 ?7085次閱讀

    ADXL345運行時間長了i2c通訊不上怎么解決?

    stm32單片機通過i2c接口實時讀取adxl345的三軸加速度數據,發現剛上電的時候正常工作。運行一段時間,大概幾小時,i2c通訊失敗。 單片機手動復位后也不能通訊,必須把adxl345
    發表于 01-01 08:20

    ADXL345的x軸測出的加速度是離心加速度嗎?

    請問當ADXL345安放在一個旋轉物體的圓周上,而且ADXL345的x軸指向旋轉物體的圓心,ADXL345的x軸測出的加速度是離心加速度么?
    發表于 01-01 08:16

    ADXL345的采集頻率是多少?

    根據官網顯示ADXL345測量的加速度是包含重力的,我們的實驗需要的是設備本身的加速度值(除去重力),有什么辦法除去重力的影響嗎?或者有沒有其他的設備滿足這樣的要求? ADXL345的采集頻率是多少?實驗對采集頻率要求較高。 謝謝!
    發表于 01-01 07:54

    ADXL345的存儲時間是多少?

    常規的存儲條件下,ADXL345的存儲時間是多少???正常工作條件下的使用壽命是多少???ADXL345長時間保存后,使用前能夠進行失效檢測么????
    發表于 01-01 06:52

    ADXL345中斷清除不穩定怎么處理?

    使用stm8l驅動adxl345做運動檢測,設置運動中斷使能,其他中斷禁止,中斷引腳映射為INT2,并使用此引腳觸發stm8l的外部中斷,ADXL345的初始化函數如下
    發表于 01-01 06:41

    ADXL345數據輸出異常的兩個問題求解

    (1)ADXL345水平放置時,我采樣得到的Z軸的數據會有波動,情況如下: 13位數據的第九位為1,數據跳變了一個G。 (2)ADXL345的三軸加速度在采樣時,發現存在一定耦合,即晃動X軸
    發表于 12-29 07:45

    ADXL345采集失真的原因?

    本人使用ADXL345采集振動加速度。 ADXL345設置為3200HZ采集頻率,全分辨率,,并且使用SPI通信。 采集效果當振動超30HZ時,圖形失真,50HZ振動圖形如下(使用4點平滑處理
    發表于 12-29 07:13

    ADXL345無法檢測到落體運動如何解決?

    在用加速度傳感器ADXL345測量落體運動時,當初速度為0自由落體時,傳感器能夠正常檢測到。但是當初速度不為0或者旋轉時再扔出去,傳感器ADXL345就無法檢測到落體運動,請教如何解釋這一現象?如何解決?非常感謝,困擾我很長時間了
    發表于 12-29 06:45

    ADXL345串口發送“COMM_SendOneByte(0xA5);”發送到電腦上,串口助手的數據就不正常怎么解決?

    各位好!我用ADXL345出現問題,一籌莫展,查不出問題所在。 mcu用stc15w102,IIC讀寫。 主函數中如果沒有“devid = ADXL_ReadOneByte(0x00);”語句
    發表于 12-29 06:24

    ADXL345讀出的加速度數據不怎么變化是怎么回事呀?

    IIC驅動ADXL345,低電平中斷輸出,13位全分辨率,輸出右對齊,16g量程,靜止的時候測量數據是準確的,放到振動臺上測量時輸出的加速度數據不怎么變化,是怎么回事呀。
    發表于 12-28 07:18

    ADXL345 activity無法進入中斷怎么解決?

    最近在使用ADXL345,想使用ADXL345的activity中斷功能,讓單片機一直讀取中斷信號INT2,但一直無法進入activity中斷,請高手指點!!!。 程序如下; void
    發表于 12-28 06:55

    ADXL345的加速度值讀取異常是什么原因造成的?

    采用STM32L051與ADXL345做SPI通訊,采用IO口模擬SPI時序,目前是讀寫ADXL345的寄存器的數值是正確的,但是讀取數據寄存器的加速度值,數值異常,量程是4G,但是測
    發表于 12-27 08:28

    基于ADXL345加速度傳感器的傾角測量系統設計

    針對臨床穿刺手術操作中穿刺針桿插入角度容易出現偏差的困境,基于ADXL345加速度傳感器開發了一套傾角測量系統。首先給出了ADXL345加速度傳感器的傾角測量物理原理;其次給出了該套傾角測量系統
    的頭像 發表于 12-15 14:06 ?2480次閱讀
    基于<b class='flag-5'>ADXL345</b>加速度傳感器的傾角測量系統設計