![]() |
發布時間: 2023-7-21 07:31
正文摘要:最近在做手表,感覺大部分常見RTC要么太大,要么沒內置晶振(誤差大) 前幾周找到了一款芯片,看上去還不錯: 24小時制時讀出數據時要把最高位置零(&0x7f),否則讀出數據是錯誤的··· 3、IIC的應答要設 ... |
man1234567 發表于 2023-7-24 11:13 謝謝指導,之前寫的程序確實有忽疏 ![]() |
liixaofei5 發表于 2023-7-23 16:42 謝謝指導,問題解決了 ![]() |
先找個任意的IIC器件,調試成功后再上這個東東。 目前,標準的IIC驅動是通用的,RTC也就是讀寫而已,沒多復雜,好像3231和1307的通用。 實驗證明很多器件用STC準雙向I/O無需加上拉什么的也可以用。 也可以找廠家要DEMO,國產可參考“國芯”,說明書寫的是理想也可能是現實。 包括記得有些廠家宣傳可以免費給樣片,然而聯系過結果呵呵呵。 如果自己玩且對體積沒要求的話用8025的,幾毛錢的貨就非常好用。 還有就是,目前常見的8025、3231又大又蠢,甚至還有更過的內置了電池,這個小體積的有“核心技術”了 ? 建議仔細查一遍,廠家不給例程自己還調不過就過了罷。 |
if(Sys_Time.second==1)P0=0;else P0=1; 恰好能讀到1嗎?如果0秒后延時,2秒時才把時間讀回來,是不是就沒有反應了?這個看你的延時多長時間,按照12MHz1T估算你的延時,應該還是很多時候能進入的,但是也容易出現非預期的情況。 這條語句的第二個問題,如果延時不影響,當且僅當second==1時點亮/熄滅,也就是60秒鐘點亮/滅1秒,這個是你預期的效果?我覺得不確定能不能看清楚這個閃爍 關于調試的方法,你是怎么感覺進入死循環的,是測試出來的嗎?如果不是必須定位,找到出錯點,因為不能在線調試,可以注釋現在點亮指示燈的位置,在你覺得可疑的程序后面點亮指示燈,如果能點亮繼續找前面的程序。 |
Y_G_G 發表于 2023-7-22 17:13 好的,我試試 |
gqzjl 發表于 2023-7-22 12:03 已經告訴你了,你上傳的代碼中,你的端口設置是對的,就不要再去找端口的毛病了 SDA和SCL都要加上拉10K電阻!!!!!!! IIC可以驅動其它的IIC器件也不一定是對的!!!!! 為什么要叫你用24c01,這個器件是標準的IIC,不支持高速IIC的,在它上面運行正常了,在SD3078就能正常了 不要duang!duang!duang!先寫一堆幾千行的代碼,然后就進行驗證,那么多代碼,問題出在哪里你都不一定知道 "先驗證IIC從機地址對不對,先不管數據讀寫,先寫一個驗證代碼,向從機發送地址,看一下有沒有響應,可以用一個LED或者某個端口的電平來進行驗證" 1,什么其它的代碼都不要,只要端口設置和IIC寫入一個字節函數,外加一個延時函數,延時可以設定為1秒2,P0^1=0;//LED這個端口先滅燈 3,寫入從機地址 0x64 4,等待IIC從機應答,如果不應答就是死循環 5,P0^1 = 1;// while(1); 6,燒錄驗證,不要仿真!!!!!!!!! 以上6步,從P.01端口的電平信號就可以知道從機是否能響應主機的IIC信號了 低電平:說明從機沒有應答 高電平:說明從機已經應答,寫字節的IIC代碼是對的 再不行,把你的所有代碼,原理圖上傳 還是不行,那就放棄吧 |
夠長,把if判斷的值改成<20也一樣![]() ![]() ![]() |
看代碼,P0需要至少1分鐘才會有變化,測試時間夠長嗎 |
設置成開漏輸出,SDA接了上拉電阻后還是沒反應![]() 是我寫的驅動有問題嗎 |
可以看看數據手冊多試試 |
gqzjl 發表于 2023-7-21 12:56 看手冊是有上拉電阻的,你可以接個上拉電阻試試。 像DS1302的IO口必須接上拉電阻,準雙向IO口不行。 |
gqzjl 發表于 2023-7-21 12:56 時鐘和數據線必須要加10K的上拉電阻!!!!! 端口設置為標準雙向模式,也就是傳統的8051模式 |
lkc8210 發表于 2023-7-21 14:54 時序按照數據手冊寫的,為400k,我把它調到200k后也沒反應 ![]() |
注意電平轉換時間![]() |
Y_G_G 發表于 2023-7-21 12:32 單片機引腳設置為準雙向輸出,可以嗎 |
1,先驗證IIC代碼對不對,可能用24C01的IIC代碼和功能來進行驗證 2,先驗證IIC從機地址對不對,先不管數據讀寫,先寫一個驗證代碼,向從機發送地址,看一下有沒有響應,可以用一個LED或者某個端口的電平來進行驗證 3,如果單片機沒有內置上拉電阻,你就得在時鐘和數據端口上增加上拉電阻 |