投稿類別 : 工程技術類 篇名 : 作者 : 陳旻楷 國立東勢高工 資訊科高三甲班 指導老師 : 朱孝深老師
壹 前言 一 研究動機 在擔任選手訓練期間, 即有許多的想法 因為當時已公佈比賽所使用到的零件與部分電路圖, 因此所能製作的功能也被侷限到這些電路與零件內, 而熟悉這些零件的使用方法與腳位的規劃也變得相當重要 而競賽也順利結束了, 這次的研究便是將工科技藝競賽所學與猜想的題目加以整合, 引此包含了許多功能 二 研究目的 ( 一 ) 理解 ATMEGA8 腳位與內部計時器 中斷的規劃方式 ( 二 ) 理解矩陣鍵盤如何進行掃描 ( 三 ) 理解 LTC106 的串列傳輸方式 ( 四 ) 理解各鍵盤掃描 蜂鳴器 LCD 與程式碼的執行時間 週期應如何配合 ( 五 ) 了解 LCD 自定義圖形 顯示位置應如何撰寫程式碼 三 研究方法 因為 ATMEGA8 相關書籍與資源於國內相當稀少, 因此不會的大多是自國外網 站 論壇查詢所得, 而再查詢不到的便會利用課餘時間向老師請教與學習 貳 正文 一 研究設備與零件 研究所使用的電路零件請參考 ( 表一 ), 研究設備與軟體請參考 ( 表二 ) 表一 : 研究設備與零件 設備名稱 規格 可變電阻 10K 歐姆精密型 25 轉 陶瓷電容 20pF 0.1uF 電阻 68 1.5K 2.2K 4.7K 歐姆 電解電容 100uF/50V USB 插座 USB Femle Type B Connector 石英振盪晶體 12MHz USB 纜線 一端為 A 接頭端為 B 之纜線串列式 RGB LED LTC106-F8 萬用 PC 板 10x16 公分 輕觸開關 6.2mm x 6.6mm 單心線 AWG 30 蜂鳴器 5V 無源式 焊錫 0.6mm 60% 錫 LCD 模組 16x2 字 ( 含背光 ) IC ATMEGA8-16PU 電晶體 2SA1015 ( 表一資料來源 : 研究者繪製 ) 1
設備名稱 桌上型電 腦 表二 : 研究設備與軟體 規格 Intel Core I5 四核心 CPU 軟體 WinAVR -20100110 8GB DDR3 記憶體 Notepad ++ Windows 7 64 位元 Visual Basic 6.0 AVRdudess 燒錄軟體 USB 介面通訊函式庫 二 研究理論 ( 一 ) ATMEGA8 單晶片微處理機 ATMEGA8 是由 ATMEL 公司所設計之 8 位元 AVR 單晶片微處理機, 它具有 8Kbyte 的可程式記憶體與 512Byte 的 EEPROM 用來放置固定不變的資料 它具有許多豐富強大的功能, 價格卻相當便宜, 因此在當時受到許多單晶片使用者的喜愛 1. 中斷計時器 Timer ATMEGA8 是由 ATMEL 公司所設計之 8 位元 AVR 單晶片微處理機, 它具有 8Kbyte 的可程式記憶體與 512Byte 的 EEPROM 用來放置固定不變的資料 它具有許多豐富強大的功能, 價格卻相當便宜, 因此在當時受到許多單晶片使用者的喜愛 2. USB 雙向通訊 在 ATMEGA8 中具有 3 個定時器 ( 計數器 ), 包含二個 8 位元計數器和一個 16 位元計數器 在本實驗中一共使用了二個定時器 一個用來產生頻率使蜂鳴器發出固定頻率的音調, 另一個則用來作鍵盤掃描 LCD 顯示和時間計數 ( 二 ) LTC-106 串列式 RGB LED LTC-106 與一般 RGB LED 的控制方式有相當大的不同, 一般 RGB LED 只需要對 R G B 三支接腳加上電壓, 透過加入不同的電壓值來產生不同的顏色, 而 LTC-106 只有一支輸入接腳, 透過不的同 HIGH LOW 訊號時序, 和 1 個重置訊號來控制 LED 的顏色 LTC-106 信號的傳輸在 RESET 訊號結束之後, 和另一個 RESET 訊號之 2
前, 一共 24 位元的訊號封包, 包含 R( 紅色 ) G( 綠色 ) B( 藍色 ) 三組色階, 每 個色階有八個位元, 訊號傳輸格式和時序圖如下 ( 圖一 ) 所示 圖一 :LTC106 LED 的控制時序 ( 圖一資料來源 : 研究者繪製 ) ( 三 ) 矩陣鍵盤的掃描 在此電路中一共使用了 9 個輕觸開關, 但是這麼一來就使用了 9 個 IO 接腳, 相當浪費 IO 接腳, 這時利用矩陣掃描的方式即可減少使用 IO 接腳的 數量 矩陣掃描的原理是先將直行或橫列的其中一排當作輸出端送出高態或低態 訊號 另外一排則當作輸入端, 接收剛剛送出的訊號 掃描完畢後再互相交換 掃描一次, 即可了解按鍵被按下的情形 ( 四 ) LCD 的顯示方式 LCD1602 採用並列的方式進行通訊, 包含 RS R/W EN 這 3 支接腳用 來傳送控制訊號, 和 8 位元的匯流排 (DB0~DB7) 用來傳送顯示資料 在標頭檔 lcd.c 中定義了 DISP_Chr( ) 和 DISP_Str( ) 這兩個函式, 前者用來顯示單個字元或單個自定義圖案, 後者則用來顯示字串 在 LCD 中第一排的位址為 0x80 第二排為 0xC0 例如要在 LCD 的第 1 排第 1 個位置顯示 HELLO!, 第 2 排的第 7 個位置顯示 WORLD!, 則程式碼即如下 ( 圖二 ) 所示, 顯示結果及位置則如 ( 圖三 ) 所示 圖二 :LCD 字串顯示程式碼 圖三 : 顯示結果及位置 3
三 設計說明 ( 一 ) 電路設計 在此電路中, 其中的兩隻腳 PD2 和 PD4 被作為 USB 與 PC 端溝通使 用, 因此在電路設計中, 無法將此二腳位當作一般輸入輸出使用 零件連接線 路圖如 ( 圖四 ) 所示 圖四 : 零件連接電路圖 在電路圖中可以得知, 矩陣鍵盤 LCD 已使用完了大部分的接腳, 剩餘 PD5 和 PC6 則用來連接 LTC-106 和蜂鳴器, 但是需要注意的是 PC6 腳位, 在未做規劃的情況下, 預設被當作 RESET 重設接腳使用, 因此再燒錄韌體程式碼時, 需要特別做規劃設定, 設定方式如圖 ( 五 ) 所示 圖五 : 將 PC6 當作一般 IO 接腳的設定方式 4
( 二 ) 軟體設計 1 USB HID 的資料傳送 USB 的資料傳送一次能夠八個位元組, 在此程式中僅用到 1 到 4 個 位元組資料 相關程式碼如下 ( 圖五 ) 圖六 :HID 資料傳送程式碼 2 USB HID 的資料接收 資料的接收則使用了 8 個位元, 第一個位元用來當作判斷旗標, 旗標 為 1 時接收時間資料, 旗標為 3 時接收崗位號碼 相關程式碼如下 ( 圖 六 ),( 程式碼較長無法完全列出 ) 圖七 :HID 資料接收程式碼 5
四 研究成果 本次研究所適用之零件電路布局 電路正面如(圖七) 背面如(圖八) 圖八 電路正面 圖九 電路背面 接上電源後 出現密碼輸入畫面如(圖十) 當密碼輸入錯誤時 出現錯誤畫 面如(圖十一) 正確則進入登入成功畫面如(圖十二) 這時按下任意建則出現目 錄畫面如(圖十三) 圖十 密碼輸入畫面 圖十一 密碼輸入錯誤畫面 圖十二 成功登入畫面 圖十三 主選單畫面 6
畫面 進入選單後的按下 4.PCSync, 這時若未連接 USB 纜線至電腦會出現 ( 圖十四 ) 圖十四 : 無法連接至 PC 畫面 若 USB 纜線已與電腦連結, 並開啟已經撰寫好的 VB 通訊程式,VB 程式會 與電路端同步顯示畫面 如下 ( 圖十五 ) 和 ( 圖十六 ) 所示 圖十五 :VB 控制端畫面 圖十六 :LCD 同步顯示畫面 當進入 1.Color Control 模式時, 會因應按鍵值發出不同音調的聲響與顏色並將 結果與 VB 控制端同步 如 ( 圖十七 ) 與 ( 圖十八 ) 所示 圖十七 : 按下紅色燈按鍵時 圖十八 : 與電路資訊同步顯示 7
參 結論 因為之前從未接觸過單晶片與 C 程式語言, 因此要突然上手其實相當困難, 於是我先從較容易入門且同為 ATMEGA 單晶片的 Arduino 開始慢慢上手, 從基本的 IO 控制到串列埠通訊, 之後開始學習更改乙級電路 VB 端的控制方式, 最後才來更改乙級的 ATMEGA8 內部的程式 再開始撰寫其他零件的程式時其實相當困難, 因為市面上幾乎找不到專門介紹 ATMEGA8 的書籍, 在網路上也找不到太多需要的中文資料, 只好看國外半懂不懂的英文 網站搭配 Google 翻譯來學習, 再找不到時, 就會去尋求老師的協助 這次的競賽題目, 需要相當注重時間週期和頻率的分配, 蜂鳴器需要不斷的發出一定頻率的聲音, 矩陣鍵盤要不斷的進行掃描,LTC106 需要在相當短的時間內發送許多訊號,LCD 則是要即時反映目前的狀態, 因此在撰寫程式碼之前需要好好思考各元件使用的週期時間, 把全部元件使用的頻率和週期整理好, 再來規劃內部中斷計時器的使用 要在這麼短短幾小時的比賽時間中, 焊接好電路並思考和撰寫程式碼, 其實時間相當的緊迫, 因此需要在比賽前多多練習, 看到比賽題目時才能夠及時反應 肆 引註資料 許永和 (2014) USB 介面設計與應用入門 新北市 : 全華圖書 young45(2008) ATmega8 Proteus 仿真教程完整版 2008 年 3 月 19 日, 取自 http://goo.gl/8hhczl Cooper Maa(2010) From Arduino to AVR 單晶片教學 2011 年 7 月 5 日, 取自 http://goo.gl/4fhqmt ATMEGA8 資料手冊 2013 年 2 月, 取自 http://goo.gl/qpqxr3 8