{ AlaMode } 完全兼容於 Arduino 可直接嵌入 Arduino 擴充板的 Raspberry Pi (樹莓派) 擴充板
AlaMode 入門套件 - 在樹莓派開發你 (妳) 熟悉的 Arduino
樹莓派連線 AlaMode 的 RTC 模組 |
本文是接續 "AlaMode: Get Started (中文入門說明)",指令可以連貫下來。不過對於要在樹莓派設定其他 RTC 晶片的使用者,卻可視為獨立的使用說明。
本篇所使用的作業系統版本是:2013-02-09-wheezy-raspbian。不一定要跟我一樣,因為步驟只要對了就可以。
AlaMode 與樹莓派間的通訊連接有 I2C、SPI 和串列 UART 這幾種,其中程式燒錄使用串列通訊,而 RTC 晶片與樹莓派使用 I2C 通訊協定且為 Slave。
要瞭解 AlaMode 首先就是要看懂與清楚電路圖,才能正確連接外掛線路與使用,下面提供一個另外匯出為 PDF 清晰的 AlaMode 電路圖,給需要了解線路的看倌一個方便。
下載或觀看清晰的 AlaMode 電路圖 (原始電路圖使用 KiCAD 繪製,可以上網找原始檔案,不過下載不方便,請使用版本控制軟體 (建議 SmartSVN) 同步下載 )
AlaMode 的 RTC 晶片 ( DS3231 ) 在樹莓派中如何設置 ? 有兩種方法:一種是手動設置,但每次都要自行輸入指令才能開啟,不過對於熟悉整個開啟 RTC 流程很有幫助;另一個就是自動模式,藉由修改三個系統檔案,使其相關檔案與設定能在樹莓派開機時自動載入。
詳細設定說明,就請繼續往下看!
AlaMode 的 RTC 晶片 ( DS3231 ) 是使用 I2C 與設莓派做通訊且做為 Slave,由於整段線路 ( SDA 和 SCL @ Page1:ATMEGA328-PU, Page3:DS3231N, Page4:BCM2835_GPIO )上已使用了 10K 上拉電阻 (Page1:ATMEGA328-PU),因此可以直接使用;而在訊號通訊方面,樹莓派與 AlaMode 的通訊傳輸使用 level shifter ( TXS0108 ) 做為中介,將 5V0 與 3V3 的訊號做雙向自動轉換。
因此,若是使用其他 RTC 模組或是晶片時 ( 使用 I2C 通訊 ),首先就是必須知道該 RTC 模組是否已裝上了上拉電阻,因為樹莓派在其 I2C 接腳 ( P1, 接腳 3 和 5) 已預先裝上 (如下圖),所以必須撤掉 RTC 模組上的這兩個上拉電阻才能使用。另外就是需要知道通訊準位,若是不同就必須要做電壓準為準位才能使用。
以上就是使用 RTC 與樹莓派做連接必須注意的地方,提供給不是使用 AlaMode 的使用者做參考。
Raspberry Pi Model B revision 2 (512 MB), GPIO P1 |
看過上面的介紹之後,使用 AlaMode 上的 RTC 只要負責通訊部分就好,不需要注意到硬體線路這一塊,而須注意到的是,您必須手動安裝軟體,以及手動設定系統時間到 RTC 晶片,之後才可以設定為自動模式,否則拔掉網路線之後 RTC 的時間還是不會正確的。
RTC 手動開啟與測試方法:
在手動設定 RTC 之前,樹莓派一定要插上網路線,且 AlaMode 必須裝上 CR1625 的鈕扣電池再往下做;另外,建議您與本文一樣使用 SSH 連線至樹莓派,直接使用終端機做指令操作。
下面是手動設置 AlaMode 的 RTC 設定流程。同一層的方塊完成之後才能到下一個步驟,因為上一步驟的設定與結果影響下一步驟的設定;每一個小方塊上方的文字就是設定指令;沒有箭頭符號的小方塊,表示這些指令使用上並無特別順序,可用來測試 RTC 設定之後的結果。
AlaMode 的 RTC 手動設定流程 |
接下來,就將此手動設置步驟分述如下:
手動和自動前置步驟 - 開啟樹莓派 I2C 功能與安裝 I2C 套件:
這一步驟是手動與自動模式設定時一定要先做的步驟,因此都在此說明。
手動與自動前置步驟流程圖 |
輸入下面指令,打開限制樹莓派 I2C 通訊的檔案
pi@raspberrypi ~ $ sudo nano /etc/modprobe.d/raspi-blacklist.conf
如下面截取畫面,將 spi-bcm2708 與 i2c-bcm2708 前面都加上 # 符號,修改後存檔 ( Ctrl + O ) 離開 ( Ctrl + X )
修改 /etc/modprobe.d/raspi-blacklist.conf |
接著輸入下面指令 (下面指令是一連貫的),先更新套件列表 ( 如果已經更新過了,這一行可以跳過 ) 再確認軟體版本( 文中是安裝 3.1.0-2 ),然後安裝 i2c-tool 套件
pi@raspberrypi ~ $ sudo apt-get update
... << 中間省略 >> ...
pi@raspberrypi ~ $ sudo apt-cache show i2c-tools
Package: i2c-tools
Version: 3.1.0-2
Architecture: armhf
Maintainer: Aurelien Jarno <aurel32@debian.org>
Installed-Size: 218
Depends: libc6 (>= 2.13-28), perl, adduser, udev | makedev
Suggests: libi2c-dev, python-smbus
Conflicts: lm-sensors (<< 1:3.0.0-1)
Homepage: http://www.lm-sensors.org
Priority: extra
Section: utils
Filename: pool/main/i/i2c-tools/i2c-tools_3.1.0-2_armhf.deb
Size: 59528
SHA256: 90c4f138b8b7a3836580e79888a46f9575d1fbbd08d309b84e8ce214a6c38e16
SHA1: c7ace4a833c4b0555daf723a751beff014865f43
MD5sum: 10114c1ae5ef1d949d2aca6fc10893ba
Description: heterogeneous set of I2C tools for Linux
This package contains a heterogeneous set of I2C tools for Linux: a bus
probing tool, a chip dumper, register-level access helpers, EEPROM
decoding scripts, and more.
pi@raspberrypi ~ $ sudo apt-get install i2c-tools
正在讀取套件清單... 完成
正在重建相依關係
正在讀取狀態資料... 完成
The following packages were automatically installed and are no longer required:
libblas3gf liblapack3gf
Use 'apt-get autoremove' to remove them.
建議套件:
libi2c-dev python-smbus
下列【新】套件將會被安裝:
i2c-tools
升級 0 個,新安裝 1 個,移除 0 個,有 0 個未被升級。
需要下載 59.5 kB 的套件檔。
此操作完成之後,會多佔用 223 kB 的磁碟空間。
下載:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main i2c-tools armhf 3.1.0-2 [59.5 kB]
取得 59.5 kB 用了 1s (38.2 kB/s)
選取了原先未選的套件 i2c-tools。
(讀取資料庫 ... 目前共安裝了 64296 個檔案和目錄。)
解開 i2c-tools(從 .../i2c-tools_3.1.0-2_armhf.deb)...
執行 man-db 的觸發程式 ...
設定 i2c-tools (3.1.0-2) ...
/run/udev or .udevdb or .udev presence implies active udev. Aborting MAKEDEV invocation.
pi@raspberrypi ~ $ sudo modprobe i2c-dev
pi@raspberrypi ~ $ sudo i2cdetect -y 1
Error: Could not open file `/dev/i2c-1' or `/dev/i2c/1': No such file or directory
pi@raspberrypi ~ $ sync;sync;sudo init 6
pi@raspberrypi ~ $ Connection to 192.168.1.5 closed by remote host.
Connection to 192.168.1.5 closed.
Command terminated. Press <RETURN> to exit this tab...
安裝好 i2c-tools 之後,若以為直接就可以執行 i2cdetect 那就錯了!因為 I2C 硬體還未被開啟,所以就是重開機使其生效。
手動 - 載入 I2C 與 RTC 模組:
i2c-dev 模組的載入可以使用指令 i2cdetect 來偵測 RTC 晶片所在的 I2C 位址,這位址會使用在產生 DS1307 裝置於系統的指令中,使用之前須先再載入 rtc-ds1307 模組。完成模組載入的工作之後,hwclock 指令就可以使用了。
載入 u2c-dev 和 rtc-ds1307 模組 |
樹莓派重新開機完成後,再次使用 SSH 連線後,依序輸入下面指令
- Line 01 - 02:載入 i2c-dev 模組,再使用指令 i2cdetect 指令尋找 RTC 位址 RPi Model B Rev. 1.0:$ sudo i2cdetect -y 0
- Line 12:載入 rtc-ds1307 模組
- Line 13 - 15:輸入指令建立 DS1307 裝置於系統 ( I2C 的位址就是用在這裡 ) 於 Line 14,不同版本的樹莓派輸入指令不一樣
- Line 17:確認 RTC 裝置是否新增完成且已可正常使用 正常的情形之下,您會看到類似 Line 25 - 27 的輸出文字
RPi Model B Rev. 2.0:$ sudo i2cdetect -y 1
RPi Model B Rev. 1.0:echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device
RPi Model B Rev. 2.0:echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | pi@raspberrypi ~ $ sudo modprobe i2c-dev pi@raspberrypi ~ $ sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- pi@raspberrypi ~ $ sudo modprobe rtc-ds1307 pi@raspberrypi ~ $ sudo bash root@raspberrypi:/home/pi# echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device root@raspberrypi:/home/pi# exit exit pi@raspberrypi ~ $ dmesg | tail [ 8.813576] bcm2835 ALSA chip created! [ 8.818671] bcm2835 ALSA chip created! [ 8.822116] bcm2835 ALSA chip created! [ 17.553276] bcm2835-cpufreq: switching to governor ondemand [ 17.553305] bcm2835-cpufreq: switching to governor ondemand<6>[ 17.833829] smsc95xx 1-1.1:1.0: eth0: link up, 100Mbps, full-duplex, lpa 0x41E1 [ 20.219443] Adding 102396k swap on /var/swap. Priority:-1 extents:1 across:102396k SS [ 154.693573] i2c /dev entries driver [ 798.145944] rtc-ds1307 1-0068: rtc core: registered ds1307 as rtc0 [ 798.145987] rtc-ds1307 1-0068: 56 bytes nvram [ 798.146039] i2c i2c-1: new_device: Instantiated device ds1307 at 0x68 |
手動 - 讀取、手動設定和寫入系統時間:
RTC 晶片一旦通電或是加上電池後,如果沒去設定它,時間就會從 2000 年一月開始。而所有的動作都可以經由 hwclock 這個指令完成,更多的資料請輸入指令 man hwclock
經由 I2C 讀取、手動指定和寫入系統時間到 RTC 晶片的方法 |
接續著上一節的指令繼續輸入:
- Line 28:讀取 RTC 的時間 (這之前已經有設定過了)
- Line 30:手動設定時間 ( 如果沒接網路時可自行輸入時間,注意 set 和 date 前面是兩個 '-' )
- Line 33:再次讀取 RTC 模組時間,確認真的有寫入成功
- Line 35:如果樹莓派有接網路,可以使用網路自動對時的功能,將所讀到的網路時間寫入到 RTC 晶片中
- Line 37:再次讀取 RTC 模組時間,確認已經寫入系統時間
28 29 30 31 32 33 34 35 36 37 38 | pi@raspberrypi ~ $ sudo hwclock -r 2013年03月25日 (週一) 16時52分44秒 -0.619568 seconds pi@raspberrypi ~ $ sudo hwclock --set --date="2013-03-25 12:34:56" pi@raspberrypi ~ $ sudo hwclock -r 2013年03月25日 (週一) 12時35分15秒 -0.424018 seconds pi@raspberrypi ~ $ date 一 3月 25 17:35:51 CST 2013 pi@raspberrypi ~ $ sudo hwclock -w pi@raspberrypi ~ $ sudo hwclock -r 2013年03月25日 (週一) 17時36分03秒 -0.927838 seconds pi@raspberrypi ~ $ |
這樣就完成了手動的設定與測試。緊接著,若是想將上面的手動輸入過程變成開機後就自動載入模組與建立 DS1307 裝至於系統,就繼續下面網頁的說明。
RTC 自動載入設定:
如下圖,是 RTC 自動載入的設定流程。可以清楚了知道,左下方塊必須先完成才能繼續右邊方塊的動作。
AlaMode 的 RTC 自動載入設定流程 |
RTC 自動載入的設定方法,就是將下面三個文字檔案修改好,重開機確認 RTC 正常運作就可以了。
輸入下面指令依序開啟下面三個檔案做修改,修改後存檔 ( Ctrl + O ) 離開 ( Ctrl + X )
pi@raspberrypi ~ $ sudo nano 檔案完整目錄與名稱
- /etc/modprobe.d/raspi-blacklist.conf 這個上面就已經設定過了,請參閱上面手動模式的說明。
- /etc/modules 開機時要自動載入的模組設定。只要載入 i2c-dev 和 rtc-ds1307 兩個模組就可以了
- /etc/rc.local 這是系統管理者使用的 script,在系統所有正常的服務啟動之後執行,在執行結束之後切換到多使用者運作層級,是開機最後執行的程式。
/etc/modules 檔案內容 |
因為 DS1307 裝置必須先建立才能使用,因此希望在開機的時候讓樹莓派自動幫忙處理。打開 /etc/rc.local 檔案,輸入下面在 fi ... exit 0 之間的程式碼
/etc/rc.local 檔案內容 |
pi@raspberrypi ~ $ sync;sync;sudo init 6
開機完成之後再使用 SSH 連線至樹莓派,並輸入下面指令確認最後三行出線的訊息是否包含 RTC 的資訊 (應該跟下面的列表類似)
pi@raspberrypi ~ $ dmesg | tail [ 8.818638] bcm2835 ALSA chip created! [ 8.823526] bcm2835 ALSA chip created! [ 8.827814] bcm2835 ALSA chip created! [ 8.947288] i2c /dev entries driver [ 17.709265] bcm2835-cpufreq: switching to governor ondemand [ 17.901742] smsc95xx 1-1.1:1.0: eth0: link up, 100Mbps, full-duplex, lpa 0x41E1 [ 19.751812] Adding 102396k swap on /var/swap. Priority:-1 extents:1 across:102396k SS [ 20.656161] rtc-ds1307 1-0068: rtc core: registered ds1307 as rtc0 [ 20.656190] rtc-ds1307 1-0068: 56 bytes nvram [ 20.656224] i2c i2c-1: new_device: Instantiated device ds1307 at 0x68
之後,即使沒插上網路線也可以讀的到正確的時間了。至於要如何使用程式讀到 RTC 的資料,請參閱 "AlaMode User Guide.pdf" Page 16, Example 3:DS2321 Temperature Copensated Real Time Clock.
以上,就是 AlaMode 的 RTC 模組在樹莓派中的設置!
Have fun !
沒有留言:
張貼留言
留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!
發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?
不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !