Re: [問題] 串列輸入控制顯示器 (已追加IC情報)

看板ASM (組合語言)作者時間15年前 (2009/09/18 23:02), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《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
文章代碼(AID): #1Aiw4JVT (ASM)
文章代碼(AID): #1Aiw4JVT (ASM)