女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

如何使用PSoC 6制作完整的測試系統來與BMI160進行通話

設計idea ? 來源:互聯網 ? 作者:佚名 ? 2018-05-24 09:04 ? 次閱讀

我一直在研究一系列PSoC 6項目,以準備一些新視頻并在Embedded World上使用。對于其中一個項目,我需要一個動作敏感的遙控器......并且我們很方便地將一臺博世BMI160運動傳感器放到了CY8CKIT-062-BLE開發(fā)套件隨附的新CY8CKIT-028-EPD屏蔽罩上。

在本文中,我將向您展示如何使用PSoC 6制作完整的測試系統來與BMI160進行通話。步驟是:

  1. 克隆博世BMI160驅動程序庫

  2. 創(chuàng)建一個新的PSoC 6項目并添加驅動程序庫

  3. 為博世驅動程序創(chuàng)建HAL

  4. 創(chuàng)建主要固件并進行測試

克隆博世BMI160驅動程序庫

當我開始這個時,我知道董事會有一個運動傳感器,但我不知道是什么樣的。我假設它是基于I2C的傳感器,所以我連接了橋接控制面板并探測I2C總線。但是這就是它所說的:

橋梁控制面板

那么......到底什么?然后,我看了看董事會,試圖弄清楚發(fā)生了什么......低下,看看......我的電路板是在添加運動傳感器之前完成的原型。這里是:

這里是一塊帶有傳感器的電路板。

當我插入該板并使用Bridge Control Panel進行測試時,我會得到:

接下來我做的就是看原理圖。OK,您可以看到慣性測量單元(IMU)是連接到I2C總線的BMI160。另一件很酷的事情是,devkit團隊連接了兩條中斷線。這些線路通常用于IMU向PSoC 6發(fā)送信號(例如,用戶可能開始移動)。

查看原理圖后,下一步是查看BMI160數據表并嘗試弄清楚如何與設備進行連接。通常這些設備有一堆寄存器,其位數字段的數量令人難以置信。這一直是這個過程中不好玩的部分。但是這次當我去博世網站上的BMI160設備頁面時,有一個按鈕顯示“文檔和驅動程序”,當您點擊它時,會有一個鏈接到BMI160驅動程序的GitHub。得分了!

要做到這一點,你只需要“git [email protected]BoschSensortec / BMI160_driver.git”

使用博世BMI160驅動程序庫創(chuàng)建新的PSoC 6項目

所以,讓我們繼續(xù)測試它。首先創(chuàng)建一個新的PSoC 63項目

使用空白示意圖

給它一個名字

添加Retarget I / O和FreeRTOS(從構建設置菜單中)

添加一個UART和一個I2C主控

要使I2C成為主設備,您需要雙擊并將其更改為主設備

然后分配引腳

運行“構建 - >生成應用程序”來獲得您需要的所有PDL固件。

編輯stdio_user.h以使用UART(掃描stdio_user.h找到正確的位置)

#include"project.h"
/*Mustremainuncommentedtousethisutility*/
#defineIO_STDOUT_ENABLE
#defineIO_STDIN_ENABLE
#defineIO_STDOUT_UARTUART_1_HW
#defineIO_STDIN_UARTUART_1_HW
將“BMI_driver”目錄添加到CM4項目的包含路徑。(要進入此菜單,請右鍵單擊該項目并選擇“構建設置”)

將Bosch Driver文件添加到項目中

為博世驅動程序創(chuàng)建HAL

使用博世驅動器很簡單。你所需要做的就是更新HAL。

  1. 提供寫入I2C寄存器的功能

  2. 提供讀取I2C寄存器的功能

  3. 提供延遲指定毫秒數的功能

  4. 創(chuàng)建一個結構來保存初始化信息和函數指針

該器件實現了賽普拉斯所稱的“EZI2C”協議,該協議也稱為I2C EEPROM協議。該器件被組織為一系列寄存器。每個寄存器都有一個從0-> 0xFF(單字節(jié)地址)的地址。要寫入注冊表,您需要

  1. 發(fā)送I2C啟動

  2. 發(fā)送7位I2C地址

  3. 發(fā)送一個寫入位(aka a 0)

  4. 發(fā)送要寫入的寄存器地址(不要將I2C地址與內部BMI160地址混淆)

  5. 發(fā)送您想要寫入的8位值

  6. 發(fā)送一個停止

EZI2C的一個很酷的事情是,它可以跟蹤地址,并在每次寫入時自動遞增寄存器地址。這意味著您可以編寫一個地址序列,而無需為每個地址執(zhí)行完整的事務。

鑒于引入寫函數很簡單:

staticint8_tBMI160BurstWrite(uint8_tdev_addr,uint8_treg_addr,uint8_t*data,uint16_tlen)
{

Cy_SCB_I2C_MasterSendStart(I2C_1_HW,dev_addr,CY_SCB_I2C_WRITE_XFER,0,&I2C_1_context);
Cy_SCB_I2C_MasterWriteByte(I2C_1_HW,reg_addr,0,&I2C_1_context);
for(inti=0;i

為了閱讀你做一個類似的交易來寫。具體的步驟是:

  1. 發(fā)送I2C啟動

  2. 發(fā)送7位I2c地址

  3. 發(fā)送一個WRITE位aka 0

  4. 發(fā)送您想要讀取的寄存器地址

  5. 發(fā)送I2C重新啟動

  6. 讀一個字節(jié)

  7. 發(fā)送NAK

  8. 發(fā)送一個停止

讀取事務與寫入類似,您可以通過發(fā)送ACK繼續(xù)讀取連續(xù)字節(jié)。您讀取的最后一個字節(jié)應該是NAK,以告訴遠程設備您正在讀取。鑒于代碼也很簡單。

//ThisfunctionsupportstheBMP180libraryandreadI2CRegisters
staticint8_tBMI160BurstRead(uint8_tdev_addr,uint8_treg_addr,uint8_t*data,uint16_tlen)
{

Cy_SCB_I2C_MasterSendStart(I2C_1_HW,dev_addr,CY_SCB_I2C_WRITE_XFER,0,&I2C_1_context);
Cy_SCB_I2C_MasterWriteByte(I2C_1_HW,reg_addr,0,&I2C_1_context);
Cy_SCB_I2C_MasterSendReStart(I2C_1_HW,dev_addr,CY_SCB_I2C_READ_XFER,0,&I2C_1_context);
for(inti=0;i

我的讀寫功能都有一個錯誤。那個錯誤是?沒有錯誤檢查。我看到了一些間歇性的奇怪現象,其中I2C總線被鎖定,最終需要重置才能修復。這可以通過檢查I2C功能上的錯誤代碼來防止。

既然我們有讀寫功能,我們可以設置我們的設備:要做到這一點:

  1. 設置一個類型為bmi160_dev的結構

  2. 初始化函數指針

  3. 初始化設備的設置

  4. 最后發(fā)送設置

staticstructbmi160_devbmi160Dev;

staticvoidsensorsDeviceInit(void)
{

int8_trslt;
vTaskDelay(500);//guess

/*BMI160*/
bmi160Dev.read=(bmi160_com_fptr_t)BMI160BurstRead;
bmi160Dev.write=(bmi160_com_fptr_t)BMI160BurstWrite;
bmi160Dev.delay_ms=(bmi160_delay_fptr_t)vTaskDelay;

bmi160Dev.id=BMI160_I2C_ADDR;//I2Cdeviceaddress

rslt=bmi160_init(&bmi160Dev);//initializethedevice
if(rslt==0)
{
printf("BMI160I2Cconnection[OK].
");
bmi160Dev.gyro_cfg.odr=BMI160_GYRO_ODR_800HZ;
bmi160Dev.gyro_cfg.range=BMI160_GYRO_RANGE_125_DPS;
bmi160Dev.gyro_cfg.bw=BMI160_GYRO_BW_OSR4_MODE;

/*SelectthepowermodeofGyroscopesensor*/
bmi160Dev.gyro_cfg.power=BMI160_GYRO_NORMAL_MODE;

bmi160Dev.accel_cfg.odr=BMI160_ACCEL_ODR_1600HZ;
bmi160Dev.accel_cfg.range=BMI160_ACCEL_RANGE_4G;
bmi160Dev.accel_cfg.bw=BMI160_ACCEL_BW_OSR4_AVG1;
bmi160Dev.accel_cfg.power=BMI160_ACCEL_NORMAL_MODE;

/*Setthesensorconfiguration*/
bmi160_set_sens_conf(&bmi160Dev);
bmi160Dev.delay_ms(50);
}
else
{
printf("BMI160I2Cconnection[FAIL].
");
}
}

創(chuàng)建主要固件并進行測試

最后,我通過運行打印出加速數據的無限循環(huán)來測試固件。

voidmotionTask(void*arg)
{
(void)arg;
I2C_1_Start();
sensorsDeviceInit();
structbmi160_sensor_dataacc;

while(1)
{

bmi160_get_sensor_data(BMI160_ACCEL_ONLY,&acc,NULL,&bmi160Dev);
printf("x=%4dy=%4dz=%4d
",acc.x,acc.y,acc.z,);
vTaskDelay(200);
}
}

現在你應該有這樣的:

最后整個節(jié)目一舉成名

#include"project.h"
#include"FreeRTOS.h"
#include"task.h"
#include
#include"bmi160.h"

staticstructbmi160_devbmi160Dev;

staticint8_tBMI160BurstWrite(uint8_tdev_addr,uint8_treg_addr,uint8_t*data,uint16_tlen)
{

Cy_SCB_I2C_MasterSendStart(I2C_1_HW,dev_addr,CY_SCB_I2C_WRITE_XFER,0,&I2C_1_context);
Cy_SCB_I2C_MasterWriteByte(I2C_1_HW,reg_addr,0,&I2C_1_context);
for(inti=0;i
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • PSoC
    +關注

    關注

    12

    文章

    175

    瀏覽量

    93044
  • BMI160
    +關注

    關注

    1

    文章

    7

    瀏覽量

    8148
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    使用羅德與施瓦茨RTE1104示波器進行電源完整測試

    電源完整性(Power Integrity, PI)測試在現代電子系統設計中至關重要。隨著電子設備對電源質量的要求越來越高,電源噪聲和瞬態(tài)變化對系統性能的影響愈發(fā)顯著。本文將詳細介紹如
    的頭像 發(fā)表于 04-23 16:51 ?194次閱讀
    使用羅德與施瓦茨RTE1104示波器<b class='flag-5'>進行</b>電源<b class='flag-5'>完整</b>性<b class='flag-5'>測試</b>

    普源DHO3000系列示波器電源完整測試

    整個系統的性能和可靠性。普源DHO3000系列示波器憑借其卓越的性能和豐富的功能,成為進行電源完整測試的絕佳工具。本文將詳細探討基于普源DHO3000系列示波器的電源
    的頭像 發(fā)表于 04-15 14:45 ?194次閱讀
    普源DHO3000系列示波器電源<b class='flag-5'>完整</b>性<b class='flag-5'>測試</b>

    技術資訊 | 信號完整測試基礎知識

    本文重點信號完整測試需要從測試電路板和原型獲取實驗數據并加以分析。在理想的工作流程中,還會仿真信號完整性指標,并將其與實際測量值進行比較。
    的頭像 發(fā)表于 04-11 17:21 ?1176次閱讀
    技術資訊 | 信號<b class='flag-5'>完整</b>性<b class='flag-5'>測試</b>基礎知識

    是德科技發(fā)布LPDDR6完整解決方案,助力內存設計與測試

    近日,是德科技正式推出了針對LPDDR6(第六代低功耗雙倍數據速率內存標準)的完整設計和測試解決方案,旨在引領內存系統技術創(chuàng)新的新潮流。 該解決方案覆蓋了從設計到
    的頭像 發(fā)表于 02-13 10:39 ?366次閱讀

    基于PSOC6的智能環(huán)境監(jiān)控系統

    本項目是基于PSOC6進行開發(fā),它具有以下特性Psoc6-evaluationkit-062S2是RT-Thread聯合英飛凌推出的一款集成32位雙核CPU子系統(ARMCortex-
    的頭像 發(fā)表于 01-07 19:54 ?694次閱讀
    基于<b class='flag-5'>PSOC6</b>的智能環(huán)境監(jiān)控<b class='flag-5'>系統</b>

    為什么活動現場都是使用內部通話系統而不是對講機?

    無論多好的對講機,本質的核心技術采用半雙工通信,同一個頻道下聽和說無法同時進行,且通話時需要長按PTT按鍵,這對于直播現場的崗位很不適用,如導播需要雙手操作切換臺,攝像師需要操作攝像機等,這個時候
    發(fā)表于 12-16 16:19

    即時通話軟件音頻傳輸質量測試方案

    一、方案概述 度緯科技本套測試方案的核心目的是通過POLQA(Perceptual Objective Listening Quality Assessment)主觀音質評價測試反映即時通話
    的頭像 發(fā)表于 12-03 14:34 ?602次閱讀
    即時<b class='flag-5'>通話</b>軟件音頻傳輸質量<b class='flag-5'>測試</b>方案

    基于公網的全雙工無線導播通話系統在廣電行業(yè)如何應用?

    無線全雙工通話系統在廣播電視制作中已廣泛應用,用于演播室導播與攝像師之間的溝通,主持人輔助提醒,現場制作轉播車以及EFP系統等。全雙工
    的頭像 發(fā)表于 11-26 15:10 ?503次閱讀
    基于公網的全雙工無線導播<b class='flag-5'>通話</b><b class='flag-5'>系統</b>在廣電行業(yè)如何應用?

    TIKOOL太酷內通助力央視廣播電視臺實現遠程tally/云Tally/云通話系統

    中央廣播電視臺亞太總站CMG采用HIVE云制作平臺,通過TIKOOL(太酷)HY系列內部通話系統解決多主機組網、靈活連接、多Tally信號類型等技術難題,實現云通話、云Tally。
    的頭像 發(fā)表于 11-25 17:20 ?600次閱讀
    TIKOOL太酷內通助力央視廣播電視臺實現遠程tally/云Tally/云<b class='flag-5'>通話</b><b class='flag-5'>系統</b>

    如何調優(yōu)DS160PR410實現出色的信號完整

    電子發(fā)燒友網站提供《如何調優(yōu)DS160PR410實現出色的信號完整性.pdf》資料免費下載
    發(fā)表于 09-20 09:39 ?6次下載
    如何調優(yōu)DS<b class='flag-5'>160</b>PR410實現出色的信號<b class='flag-5'>完整</b>性

    能否使用PSoC6 Pioneer套件上的KitProg2對安裝在獨立PCB上的PSoC6 uC進行編程?

    我有一個使用 PSoC6 Pioneer Kit 制作原型的項目。 從原型中我創(chuàng)建了一個安裝了 CY8C6347BZI-BLD53 的獨立 PCB。 我能否使用 PSoC6 Pioneer 套件上的 KitProg2 對安裝在獨
    發(fā)表于 08-01 06:23

    如何同時使用多個Jlink對多個psoc6進行編程?

    我想同時使用多個 Jlink 對多個 psoc6 進行編程。 我遇到了以下問題 1.OpenOCD 無法識別 JLINK 驅動程序,因此必須將目錄更改為 winusb 您有什么好辦法可以通過
    發(fā)表于 07-22 07:18

    使用psoc6 ble開發(fā)板在進行OTA分區(qū)實現時,運行的程序地址和啟動地址不一樣是怎么回事?

    大家好,我使用psoc6 ble開發(fā)板在進行OTA分區(qū)實現時,選用swap mode direct-xip啟動方式,在做測試時,遇到了下圖中的現象,啟動的位置在second slot,但代碼運行后是primary的內容。
    發(fā)表于 07-04 08:05

    CY8C5888LTI-LP097讀取psoc creator 4.4中的bmx160 imu 9軸傳感器模塊,對電路板進行編程后putty什么也沒顯示,為什么?

    我正在嘗試使用 putty 中的 cypress CY8C5888LTI-LP097 讀取 psoc creator 4.4 中的 bmx160 imu 9 軸傳感器模塊。 但在對電路板進行編程后,putty 什么也沒顯示。
    發(fā)表于 07-04 06:28

    PSoC 6是否有辦法在main_cm4p.c中訪問內部時鐘?

    你好,我是 PSoC 6 的初學者。 預期輸入變量為周期數、頻率、脈沖重復頻率和振幅。 現在,我正在執(zhí)行頻率和脈沖重復頻率。 我計劃使用內部時鐘制作這個代碼。 因為
    發(fā)表于 06-04 13:08