[心得] Arduino與乙級檢定(V-USB)之整合應用

作者: dsplab (星野夢美)   2015-05-31 08:48:49
電腦硬體裝修乙級檢定第一站電路採用V-USB的方式,利用 ATMega8/8A
將USB訊號解析出來提供一個8位元輸出與2位元控制訊號,因為採用HID
人機介面的規格,所以免除了PC上的驅動程式,但還是提供一個 DLL檔
(USBIO.dll)供PC上程式設計使用與燒入ATMega8/8A的韌體(main.hex),
燒入時保險絲值建議為High為0xCC,Low為0xFF,Lock Byte為0x0F。
電腦硬體裝修乙級檢定第一站所需韌體與PC端測試程式之下載處如下:
勞動部勞動力發展署技能檢定中心-術科測試場地機具設備評鑑與補助
http://www.labor.gov.tw/home.jsp?pageno=201110210028
12000 - 電腦硬體裝修(乙級) - http://goo.gl/Sx5qVm
而Arduino發展系統則是在AVR晶片下,提供大量的應用程式碼與整合式
發展介面的環境,同時因為是開放式系統,所以一些相容的硬體與模組
也就應運而生!Arduino連接PC的方式是利用RS-232(COM)的方式,將編
譯好的程式碼利用事先燒入AVR晶片中的Bootloader,採用ISP方式燒入
快閃記憶體然後執行,因此只要將COM埠中的TXD,RXD,DTR (或RTS),GND
四隻腳,將其訊號轉成標準的TTL再連接AVR晶片的RXD,TXD,RESET,GND,
即可在Arduino整合發展系統(IDE)環境下,編譯與下載使用者的程式。
本文就是要將兩套系統合而為一,同時提供Arduino發展系統所需的硬體
電路與電腦硬體裝修乙級檢定第一站的相容電路,讓人可以使用Arduino
發展系統的程式開發與下載功能,執行Arduino所有的應用程式,也可以
將電腦硬體裝修乙級檢定第一站的韌體(main.hex)下載到ATMega8/8A中,
提供在PC上練習乙級檢定之10個題組的程式設計使用。
原始Arduino UNO的晶片是使用ATMega8/8A,操作頻率是16Mhz,但是電腦
硬體裝修乙級檢定第一站的V-USB電路卻是使用12Mhz,如果直接燒入供ISP
下載使用的Bootloader碼 (使用optiboot_atmega8.hex),在12Mhz晶振下
的Baud Rate會從117647 bps(誤差2.12%)降到88235 bps(誤差23.4%),將
無法正確與PC溝通,故必須修改原始的Bootloader碼,將Baud Rate調整到
115384 bps(誤差0.16%),同時因為ATMega8逐漸停產,改以ATMega8A取代,
不過因為不同批號生產的ATMega8A在燒入Bootloader碼後,開機時的暫存器
UBRRH不一定會清為零,如此將造成Baud Rate的設定錯誤,因此建議修改原
始Bootloader碼(optiboot_atmega8.hex)如下:
  位址    資料  原始的程式碼
000F0B(1E16)  82E0  LDI R24,0x02
000F0C(1E18)  8BB9  OUT UCSRA,R24
000F11(1E22)  80E1  LDI R24,0x10
  位址    資料  修改後程式碼
000F0B(1E16)  10BC  OUT UBRRH,R1
000F0C(1E18)  599A  SBI UCSRA,U2X
000F11(1E22)  8CE0  LDI R24,0x0C
先使用ATMEL的USB ISP燒錄器,將VCC、GND、SCK、MISO、MOSI、RESET共6
支腳,連接ATMega8/8A所對應的接腳,同時將12Mhz晶振與20pF電容連接在
ATMega8/8A所對應的接腳,執行燒錄程式(例如Progisp20),先讀入原始的
Bootloader碼 (optiboot_atmega8.hex),然後再參考上面所提到需要修改
的資料,設定保險絲值為High為0xCC,Low為0xFF,Lock Byte為0x0F,接者
就可以將修改後的Bootloader碼燒入ATMega8/8A中0x0F00~0FFF(0x1E00~
1FFF)的位置。
原始的Optiboot_ATMega8.hex    - http://ge.tt/1Ecf7QH2/v/0?c
修改後Optiboot_ATMega8_12Mhz.hex - http://ge.tt/3Yza8QH2/v/0?c
Arduino Uno 的電路圖       - http://goo.gl/sILWOm
Arduino-1.0.6 免安裝版      - http://goo.gl/5NR7Ah
電腦硬體裝修乙級檢定第一站電路  - http://ge.tt/9ykn9QH2/v/0?c
電腦硬體裝修乙級檢定第一站韌體  - http://ge.tt/6sA1AQH2/v/0?c
或從\Arduino-1.0.6\hardware\arduino\bootloaders\optiboot中也可以看
到Optiboot_ATMega8.hex,在正確燒入Bootloader碼後,可以參考 Arduino
Uno的電路圖與電腦硬體裝修乙級檢定第一站電路,從事個別的實驗。
其中在\Arduino-1.0.6\hardware\arduino\boards.txt,請增加以下資料:
##############################################################
YiJi.name=Arduino with ATmega8 for YiJi
YiJi.upload.protocol=arduino
YiJi.upload.maximum_size=7680
YiJi.upload.speed=115200
YiJi.bootloader.low_fuses=0xFF
YiJi.bootloader.high_fuses=0xCC
YiJi.bootloader.path=optiboot
YiJi.bootloader.file=Optiboot_ATmega8_12Mhz.hex
YiJi.bootloader.unlock_bits=0x3F
YiJi.bootloader.lock_bits=0x0F
YiJi.build.mcu=atmega8
YiJi.build.f_cpu=12000000L
YiJi.build.core=arduino
YiJi.build.variant=standard
##############################################################
如此就可以在Arduino整合發展系統(IDE)中的,「工具/板子」中找到新增的
資料「Arduino with ATmega8 for YiJi」,「工具/序列埠」請配合所使用的
COM編號,「工具/燒錄器」要選擇為「AVR ISP」,連接PC的RS-232再轉換成
為TTL的訊號後的TXD、RXD、DTR、GND,參考Arduino Uno 的電路圖,與燒入
Bootloader碼的ATMega8/8A連接後,即可將編譯好的程式碼下載到晶片中。
如果要燒入乙級檢定第一站電路的韌體main.hex,可以利用XLoader這套程式,
XLoader         - http://russemotto.com/xloader/XLoader.zip
XLoader的devices.txt檔 - http://ge.tt/4utFAQH2/v/0?c
記得在XLoader的devices.txt中加入新的資料如下:
YiJi(ATmega8);m8;stk500;115200;
選擇YiJi(ATmega8)與COM編號、Hex檔路徑與檔名,就可以利用Bootloader碼,
將乙級檢定第一站電路的韌體燒入晶片中,練習PC上10個題組的程式設計。
PS:請勿將RS-232的高壓訊號直接與ATMega8/8A連接,必須利用轉換電路,例如
MAX232、HIN232等電路轉成TTL的電氣標準後,才可與ATMega8/8A連接,或是使用
USB轉UART TTL的模組,例如FT232、PL2303、CP2102、CH340等也可以。
作者: soheadsome (師大狗鼻哥)   2015-06-02 09:57:00
乙級是有改過題目了?好像跟我高職時期內容不同
作者: MasterChang (我愛ASM)   2015-06-02 22:58:00
嗯...題目去年就改了。
作者: liang168 (小強)   2015-06-09 18:49:00
我考時是做Gal22v10 QBasic 還是最後一屆之後就改了

Links booklink

Contact Us: admin [ a t ] ucptt.com