Re: [問題] 串列輸入控制顯示器 (已追加IC情報)
※ 引述《odahawk (羊皮狼)》之銘言:
: ※ 引述《beminaru》之銘言:
: 根據你給的IC資料,可以看得出來是半工的SPI通訊。
: 一開始看你程式覺得奇怪的是 da_data(int a) 段
: SPI通訊特點是藉由Clock高至低或低至高的時候拿取資料。
: 注意圖2-2-2,你的IC則是Clock需至少維持tDS時間的Low與tDH時間的High
: 這段時間內的資料才視為有效。
: 所以程式應該改成:
: void da_data(int a) // set input data (DA)
: {
: for (i = 1; i <= 8; i++) // data length = 8 bits
: {
: cpb = 0; delay(0); // 這裡先拉為Low
: if(a & 0x01) //這邊送出有效資料
: da = 1;
: else
: da = 0;
: a >>= 1;
: cpb = 1; delay(0); // 拉為High 結束這一 bit
: }
: }
: 不知道你的MCU運作時間是多長,資料上要求是300ns
: 所以delay(0)的部分可有可無。
: 可以的話先用邏輯分析儀試驗這段是否能夠正常按照SPI模式傳訊。
借用上方程式說明
原PO的CS腳控制程式本身也是錯的
在第一頁裡面的波形圖中
你要輸入資料前要先將 CS PIN 拉成 low 狀態,且要在進入data clock前要先有最少
1us的時間延遲,而且不是delay後就拉回high狀態,這樣狀態是無法輸入的。
所以在進入da_data前,先將CSB=0; delay_us(1);(keil c不熟 delay 1us的語法
可能會有錯),等到資料都輸入完後再將 delay_us(1); CSB=1;即可完成一次的資料
輸入。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.145.35
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章