2012年4月12日 星期四

麵包板 USB 名片卡 (ATtiny45/85)

Frank Zhao 用 ATtiny85 做了一個 USB 名片卡(USB Business Card)。當卡片插到 USB 埠的時侯,它會偵測 Caps lock 有沒有被連續按下三次,一旦偵側到,就會自動把聯絡資訊印到 text editor 的視窗上。底下有示範影片:

現在我們就用 ATtiny45/85 做個麵包板的 USB 名片卡。

所需材料
  • ATtiny85 或 ATTiny45 (ATtiny45/85-20xx 版本,非 ATtiny45/85-10xx 低壓版本)
  • 68 歐姆電阻 2 顆
  • 1k5 或 2k2 歐姆電阻 1 顆
  • 3.6V 穩壓二極體 (Zener diodes)
  • 麵包板和跳線些許
  • USB 連線接
  • USB 名片卡韌體:usbbusinesscard-20120429.zip
  • avrdude-GUI
製作 USB 連接線

首先要做一條可以插到麵包板上的 USB cable,先做剝線,然後把四條線焊接到 pin header。USB Connector 有四條線,pinout 如下:

image

完成後的 USB cable 如下:

usb_tutorial-1
▲ 圖片來源:Code an Life

連接 ATtiny45/85

參考底下麵包板電路連接 ATtiny45/85 的線路:

image

breadboard
▲ 圖片來源:Code and Life

註:上圖左下角 reset pin 上的 4k7 歐姆電阻可省略,另外 ATTiny45/85 晶片上有一點的地方就是第 1 pin,亦即 Reset pin。

電路圖如下:

schematic

把 Arduino 變成燒錄器

我們要用 Arduino 來燒錄 ATtiny 晶片,所以必須先把 Arduino 變成燒錄器 (In-System Programmer, ISP),方法是:

  • 啟動 Arduino IDE
  • 打開 File > Examples > ArduinoISP 這支程式
  • 注意:如果你用的是 Arduino 1.0,你必須先修改 ArduinoISP 的程式,把 heartbeat() function 的 delay(40) 改成 delay(20)。詳情請見這篇的說明。
  • Tools > Board 選擇你的 Arduino 板子,例如 Uno 或 Duemilanove
  • 上傳 ArduinoISP 程式
連接 Arduino 與 Attiny

照下圖連接 Arduino 與 ATtiny:

image

接腳連線說明:

  • ATtiny Pin 4 接到 Gnd
  • ATtiny Pin 8 接到 +5V
  • ATtiny Pin 1 (Reset Pin) 接到 Arduino Pin 10
  • ATtiny Pin 5 接到 Arduino Pin 11
  • ATtiny Pin 6 接到 Arduino Pin 12
  • ATtiny Pin 7 接到 Arduino Pin 13

實物照片:

image

燒錄 USB 名片卡程式

參考下圖設定 avrdude-GUI:

image

其中:

avrdude.exe File: 設定 avrdude.exe 所在的位置,例如 "C:\arduino-1.0\hardware\tools\avr\bin\avrdude.exe"

Programmer: 選擇 "Atmel STK500 Version 1.x firmware (stk500v1)

Port: 設定 Arduino 連接的 Serial Port,我 Arduino 接在 COM5,所以選 COM5

Device: 選擇 "ATtiny85 (t85)" 或 "ATTiny45 (t45)"

Command line Option: 設定為 -b 19200

Flash: 指定韌體檔的位置,ATTiny85 請用 businesscard85.hex,ATTiny45 請用 businesscard45.hex。

接著 "Erase – Write – Verify " 把程式燒錄到 ATtiny45/85 晶片上。

調整時脈

還有一件事,記得把 ATtiny45/85 時脈改成 16 MHz,不然不會動。時脈的調整方法一樣是用 avrdude-GUI,在 Fuse 欄將 hFuse 設定為 D4,lFuse 設定為 C1,接著按下 Fuse 旁的 Write 鈕,這樣就會把 ATtiny45/85 的時脈改成 16 MHz:

image

測試

先拔掉 Arduino 的電源,然後把剝過線的 USB cable 接到電腦上,這時候「裝置管理員」視窗裏會多出一個「USB 人性化介面裝置」:

image_thumb5

如果有的話,應該就沒問題的了。接著開個記事本或任何文字編輯器,然後按 3 下 Caps Lock 按鍵,名片卡上的聯絡資訊就會自動印出囉。

修改名片資料

現在名片卡上是 Frank Zhao 的資料,如果你要修改名片資料,請打開 main.c 到主迴圈修改 puts_P() 這行:

while (1) // main loop, do forever
{
   …
   puts_P(PSTR("Frank Zhao\n\nEmail: contact@frank-zhao.com\n…"));

   blink_count = 0; // reset    
    …
}

然後請到官網下載最新版 WinAVR,並按照指示安裝,接著重新編譯程式:

make clean
make

編譯好的 businesscard.hex 會放在 output 資料夾裏。重新用 Arduino 燒錄到 ATtiny45/85 晶片上就行了。假如你用的是 MAC 沒辦法用 WinAVR,也許可以試試 CrossPack

參考資料

4 意見:

GCY 提到...

cool!我也想來玩玩不過這顆IC好像不好找?

coopermaa 提到...

我手上這顆是 Openlab Taipei 朋友買的
他好像是在淘寶上買的

林毓祥 提到...

您好,請問ATTINY85是否可以使用藍芽模組呢?
謝謝!您的文章是受益良多!

coopermaa 提到...

不管是 8051/AVR/PIC,只要有 UART 介面應該都可以跟藍芽模組連接

可惜 Attiny85 剛好沒有 UART... :(
不過,Attiny85 有 USI (Universal Serial Interface),也許你可以參考一下,網路上有人說照著 AVR306 Application Note 做,也可以把 USI 當成 UART 用,:
http://www.atmel.com/Images/doc4300.pdf