溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

點陣大屏語音感應時計——DS3231高精度時鐘模塊

發(fā)布時間:2020-06-25 15:08:20 來源:網絡 閱讀:607 作者:ianon 欄目:開發(fā)技術

  DS3231高精度時鐘模塊倒是又便宜又好用,SDA/SCL兩個IO口就能搞定基本功能,不過在使用鬧鈴中斷輸出的時候遇到了問題,那就是鬧鈴中斷只會輸出一次,之后始終保持低電平。

  這個問題數據手冊上沒有明說,在網上搜索了很久,一點信息都沒有找到,只好自己折騰。

  經過反復嘗試,最終確認DS3231的鬧鈴中斷輸出正確使用方式如下:

  • 首先是初始化,設定鬧鈴時間和允許中斷輸出

void DS3231_Init_Alarm2()    {    
    I2C_Start();    
    I2C_PutByte(DS3231_Write);    
       I2C_PutByte(DS3231_CONTROL);    
    I2C_PutByte(0x0);  // INTCN=1,A2IE=1,enable interrupts, alarm 2 output    
    I2C_PutByte(0x0);    
    I2C_Stop();

    I2C_Start();    
    I2C_PutByte(DS3231_Write);    
       I2C_PutByte(DS3231_ALARM2MINUTE);    
    I2C_PutByte(0x0);        // 分,A2M2=0    
    I2C_PutByte(0x80);        // 時,A2M3=1    
    I2C_PutByte(0x80);        // A2M4=1,DY=0    
    I2C_Stop();

    I2C_Start();    
    I2C_PutByte(DS3231_Write);    
       I2C_PutByte(DS3231_CONTROL);    
    I2C_PutByte(0x06);  // INTCN=1,A2IE=1,enable interrupts, alarm 2 output    
    I2C_PutByte(0x0);    
    I2C_Stop();    
}

  我這里使用的是鬧鈴2,每小時整點時輸出中斷

  • 在觸發(fā)中斷后,要關閉相應的鬧鈴中斷輸出(A2IE=0)

void Perhour_ExtInt1() interrupt 2 using 1 {    
    EX1 = 0;    
    DS3231_Disable_Alarm2();

    ……    
}    

void DS3231_Disable_Alarm2()   
{    
    I2C_Start();    
    I2C_PutByte(DS3231_Write);    
       I2C_PutByte(DS3231_CONTROL);    
    I2C_PutByte(0x4);  // INTCN=1,A2IE=0,    
    I2C_PutByte(0x0);    
    I2C_Stop();    
}    

  • 在合適的時候,重新初始化鬧鈴

  這里合適的時候很重要,如果立即重新初始化,中斷條件仍滿足,繼續(xù)觸發(fā)中斷,將導致下一次鬧鈴失效。也就是說至少要在1秒之后,我是在單片機進入掉電模式前重新初始化。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI