2024年4月22日 星期一

Win32DiskImager 在windows 11 中無法打開執行

 Win32DiskImager 在windows 11 中打不開嗎?  

1 可試看看用系統管理者權限開啟

2 如果有掛Goolge drive (Google 雲端硬碟)在本機的磁碟機中, 請將Google Drive程式關閉再執行。

2022年9月3日 星期六

RPi 設定GPIO接點作為開關機控制

如何用GPIO 作為RPi的實體開關機按鍵

RPi 没有像PC 的Power按鍵,   一般使用上有可能會偶遇SD卡磁損毀的情況, 雖然可以用OverLayFS(參考石頭成的這篇 Raspberry Pi OverlayFS 檔案系統使用備忘錄) 來避免檔案系統損毀, 但從另一個角度想想, 如果能增加實體按鍵, 可以利用Arduino 之類的單晶片電腦也就可以遠端控制 RPi 的開跟關囉! 

1 開機

RPi 正常開機只要送電就可以開機, 若用sudo poweroff 關機, 在没有關閉外部電源的情況下, RPi 也可以用PIN5(GPIO03)接地進行開機, 不須另外設定GPIO, 這個PIN腳本來也可以進行關機, 但因為 I2C 也用到這支腳, 通常開機後會因為受到I2C的設備而干擾造成無法使用來關機。 

2關機

為了能使用GPIO作為關機按鍵, 可以在 /boot/config.txt 中設定 GPIO 的腳位功能

例如:  設定 GPIO 21 腳位作為觸發關機 可在 /boot/config.txt 中增加一行如下

dtoverlay=gpio-shutdown,gpio_pin=21,active_low=1,gpio_pull=up

儲存檔案後重開RPi  , 此時, 短路 GPIO 的最後兩支腳Pin 39(GND),40(GPIO 21) 即可觸發關機動作。

經過測試,  在開機狀態下, GPIO03短接並不會像PC 的power 鍵按下會再觸發關機(可能原因如前述, I2C使用中),  此時將 GPIO 21, GPIO 03 接在一起, 接上遠端控制或環控, 就可以像PC的電源按鍵, 一鍵開關RPi 囉! 












參考

https://ppfocus.com/hk/0/hu0b06dc6.html

https://howchoo.com/g/mwnlytk3zmm/how-to-add-a-power-button-to-your-raspberry-pi

https://blog.driftking.tw/2019/11/%E6%9B%BFRaspberryPi%E6%B7%BB%E5%8A%A0%E9%96%8B%E9%97%9C_%E9%9B%BB%E6%BA%90%E7%87%88_%E7%A1%AC%E7%A2%9F%E7%87%88/

https://www.rocksaying.tw/archives/2019/Raspberry_Pi_OverlayFS_%E5%82%99%E5%BF%98%E9%8C%84.html


2021年6月9日 星期三

RPi的 RTC 時鐘使用方法

本篇參考老明的線上文件完成

RaspberryPi-RTC

Install DS3231 RTC on Raspberry Pi

URL如下
https://github.com/laomingOfficial/RaspberryPi-RTC
老明還有 Youtube    的說明影片
https://www.youtube.com/watch?v=xT2mPT57usQ

另外一個參考的好網頁
https://blog.gtwang.org/iot/raspberry-pi/raspberry-pi-ds3231-real-time-clock/

使用 RTC 主要目的是提供 RPi 有正確的實時時鐘

RPi 不像 PC, 它没有內建的時鐘晶片, 無法在關機後記錄時間, 未使用RTC時會在關機前將時間記錄在檔案中, 在下一次開機時載入,  也就是所謂的 Fake Clock,  所以RPi在關機一段時間後重開時, 系統時間會停在前次關機的時間, 若有網路還可以透過ntpdate校時動作校正系統時間(但若關機時間過長, ntpdate會因為時間差異過大造成校正不成功, 預設值是1000s ?) , 需另外手動設定時間後才能自動校時成功. 

安裝 RTC 後就像PC內建時鐘一樣, 直接讀取時鐘的模組即可得到真實時間(前提是RTC的電池有電唷)。

安裝及系統設定如下:

使用 DS3231 模組 (5Pin)

1 關機安裝在RPi 的 pin腳 1,3,5,7,9   (3.3v, GPIO2, GPIO3,GPIO4,GND, 圖的左上角)
   安裝DS3231

2 sudo i2cdetect -y 1 

  開機後偵測是否有連接到 DS3231 模組

   若尚未註冊, UU 的位置會出現 68, 表示在這個位置上有偵測到設備 
   可執行第3步, 將 i2c 的ds3231 模組註冊在 0x68的位置
   這個動作可在開機時完成, 參考第9步

3 echo 'ds3231 0x68 | sudo tee /sys/class/i2c-adapter/i2c-1/new_device 

   註冊 DS3231到RPi的i2c 設備中

4 sudo hwclock -r

  查詢RTC時間

5 sudo hwclock -s

   將RTC時間, 寫入系統時間

6 sudo ntpdate -u clock.stdtime.gov.tw 
   若有網路, 進行網路校時
   (注意若時間差異> 1000s, 需手動設定時間後再自動校時)

7 sudo hwclock -w

   將系統時間寫入 RTC 

8 假設有定時網路校時, 可在關機時將系統時間寫入 RTC

   需在 /etc/systemd/system-shutdown/  中放入有 sudo hwclock -w 指令 的 Script

9 開機時載入 RTC clock
   在 /etc/rc.local exit 0 之前加上這兩行
    echo 'ds3231 0x68' | sudo tee /sys/class/i2c-adapter/i2c-1/new_device
     sudo hwclock -s

其他 
ntpdate 的繼承者 chrony , 可同時校時也可以當Server, 有空再寫好了

開機時網路起來的時間有時會稍慢, 需加上等待時間30秒 sleep 30 再執行ntpdate

hwclock -w 執行時間約1秒, 故與真正時間仍有可能有1秒左右的誤差, 若需精密校時可能要考慮其他如從GPS模組讀入時間的作法

2010年8月5日 星期四

Arduino 類比端子的臨時用途--成為數位端子

Arduino 的數位端子只有14個, Digital 0~13, 其中 0,1 作為 Serial 上下傳資料使用時不能作為其他用途, 若使用的數位端子少還沒有問題, 但為了控制 像 8x8 的 LED 矩陣, 基本就有 16支腳時, 就有點捉襟見肘, 總得想法子擴充一下 IO
常用的 LED 矩陣控制做法有幾種:
1 用 74154之類 IC自己接電晶體驅動 LED
2 用 TLC 5940 , MBI 5026 , MAX 7221/7219 , 等等恆流LED驅動IC 也可以
上面的作法可以依需求要多少有多少 IO可是若是只比固定接腳多一點, 如單顆 8x8LED 只要 16支腳, 找顆上面的 IC 去擴充, 還要考慮用SPI 還是 I2C...., 只要能再多個 3~4 支腳, 為何要這麼麻煩呢?

正在為了那多出來的少少接腳傷腦筋 東市買駿馬,西市買韉,南市買轡頭,北市買長鞭.....
碰巧重新翻看 Arduino 的Example - Display- RowColumnScanning 這個8x8 LED 矩陣程式

其中 有一段
Pin numbers:
Matrix:* Digital pins 2 through 13,
* analog pins 2 through 5 used as digital 16 through 19
Potentiometers:
* center pins are attached to analog pins 0 and 1, respectively
* side pins attached to +5V and ground, respectively.
????
這是說 類比端子也可以當作數位輸出端子用的意思嗎?
沒錯A0 as D14
A1 as D15
A2 as D16
A3 as D17
A4 as D18
A5 as D19

找出 Virtual BreadBoard 的 VBB 看接線圖, 真是用類比端子當數位端子接... ^_^
不用假裝花木蘭東買西買了 ^_^



以後單顆 8x8 LED 矩陣, 簡單利用 類比端子擴充使用就好了

pinMode(14,OUTPUT);

就可以用 A0 當作 D14 了。

2010年3月5日 星期五

Arduino Duemilanove 初體驗

Arduino Duemilanove

圖片摘自
arduino.cc
以前讀書的時候想玩微控制器要花幾千到幾萬才搞的定
自已 DIY 要搞定 硬體測試板, 燒錄器, 編譯軟體........
想到就覺得... >_< , 還是用學校現成的就好了..... 但是時代在改變
過年前在網路上看到的小玩具(參考 arduino.tw 網站)

2010 年過完年之後
網路上訂購的 Duemilanove (ATMega168-20PU, 也可用ATMega 328P) 來了,
(補充說明: 最新版本是 UNO, 用的全是 ATMega328P )
最近手邊最有趣的事非這個新玩具莫屬

是的, 就是它, 讓 Alan 動手玩微控制器的美夢成真了
先記錄一下到手後作的第一件事, 燒一顆備用的 MCU 以免手笨毀了手邊的唯一一顆
參考網路上的資料
Burning the Bootloader without external AVR-Writer

是的! 免用燒錄器, 寫入Bootloader
文件中使用的是Diecimila, 但有註明可用於Arduino NG, Arduino Duemilanove
(ATMega328P Fuse bit 設定與 ATMega168 不太一樣)

利用 Arduino 的 USB Chip FTDI公司的 FT232R 的 bitbang 模式, 將Bootloader寫入 ATMega168-20PU, 連燒錄器也免了, 不用買 MK II , USBasp, ...啥都不用


只要將x3 的4支腳焊上, 杜邦線接一接(有兩種接法都可以,請注意順序, 務必參考上面或下面的資料喔....)
** Arduino UNO 目前還看不到類似的作法, 原廠的Forum 也說 UNO 暫不能拿來作為 ArduinoISP使用, Duemilanove 也較便宜, 有Duemilanove 的人就可以省下 USBasp的錢囉.....

接線的方式有兩種

接完線長這樣

或這樣

從網路上下載下列的程式
serjtag
解壓縮後 Copy 至 C:\Program Files
avrdude.conf 將此檔案複製到 serjtag 的安裝路徑"C:\Program Files\avrdude-serjtag\binary" 中
此檔案修改加入ATmega328P,168P and 88P的晶片資料
avrdude-GUI
解壓縮後 Copy 至 C:\Program Files, 是 avrdude 的圖形介面(需要有 .NET Framwork 2.0)....
進一步要設定配合avrdude

打開 C:\Program Files\avrdude-GUI-1.0.x\avrdude-GUI
依設定及測試步驟操作即可完成寫入 Bootloader 的工作

i 設定 avrdude 程式的路徑: C:\Program Files\Avrdude-serjtag\binary\avrdude.exe
ii 設定Programmer TYPE :當然是 FT232R Synchronous BitBang (diecimila)
iii 選擇Device : 依您的晶片選擇
(ATmega168 選擇如圖, ATmega328p 請下拉後另選 "ATmega 328P (m328p)")
iV 程式參數: -P ft0 -B 4800 (-P ft0 是設定用 BitBang 模式 -B 是設定速度 4800 baud)
請注意 Port 欄不要設定任何參數, 留空白即可

將您的 Arduino 接上即可測試是否正確接線及燒錄
1 測試
按下 Fuse 的 Read 鈕 若可正確讀到 Fuse 的3 個值即表示您的接線及程式設定正確
若不正確, 請檢查接線或將 -B 4800 刪掉 試試看....
2燒錄
插上一個新的MCU (記得先拔掉USB接頭),
重新接上 Arduino, 啟動 avrdude-GUI 按 Chip Erase後, 再按 Read 讀取 Lock Bit 的值(確認是3F)
Fuse 欄位設定 hFuse=CA, iFuse= DF, eFuse= 後按 Write (ATMega8 適用)
Fuse 欄位設定 hFuse=DD, iFuse= FF, eFuse= 00 後按 Write (ATMega168 適用)
Fuse 欄位設定 hFuse=DA, iFuse= FF, eFuse= 05 後按 Write (ATMega328P 適用)

載入Bootloader 的 Hex 檔 (C:\Program Files\arduino-00xx\hardware\bootloaders\atmega\ATmegaBOOT_168_diecimila.hex 也可用於 Duemilanove) 其他的Arduino Bootloader在不同資料匣(如 C:\Program Files\Arduino\arduino-00xx\hardware\arduino\bootloaders\optiboot\optiboot_atmega328.hex)
後按 Erase-Write-Verify 進行寫入
Lock Bit 欄位中寫入 "0F" 後按 Write
OK , 完成一顆新的 Arduino Ready 的 ATMega168-20PU/ATMega328p-pu 囉.....

將Arduino變身為真正的 AVR ISP 燒錄器
拿一個 Arduino 改造一下, 加上 供電的接腳, 即可將您的 Diecimila 或 Duemilanove 當成 AVR-ISP
接線修改如下:

Ya 一個現成的 USB介面 AVR 燒錄器(ISP) 就 OK 了
(** 我只拿來燒 過 ATMega168-20PU和ATMega328P-PU啦**)

詳細資料及照片來自於 Kimio Kosaka 的網站 , 我只是參考照做而已.... ^_^

Kimio Kosaka 還有另一篇大作 , "將 FTDI BitBang 整合進 Arduino IDE"

"FTDI Bitbang method" with the Arduino-IDE

這樣用 Arduino-IDE 就可以直接進行 Bootloader 燒錄囉....
(個人覺得, ardude-GUI , 就很好用了! 另外那篇, 有空再翻譯唄)
(這篇文章藝科資訊可能有人翻過, 不過要會員才給看, 不符合 Arduino 的開放精神喔... ^_^ )