不過既然 Attiny45 有 USI 功能,想必可以用軟體實作的方式做出來!
上網 google 的一下,在 Atmel 官網中的一份文件( AVR307: Half Duplex UART Using the USI Module on tinyAVR and megaAVR devices) 有解決方案(如果找不到這份文件請 Google 一下,Updated 10/03,打文時又檢查了一遍連結發現ATEML官網最近有大改版)。不過事情卻沒想像中這麼容易,文件中所使用的晶片是 Attiny26,編譯器是 IAR Workbench。跟我用的都不一樣,所以如果要使用 Attiny45 內的 USI 做出 UART 的功能,必定要經過一番苦讀與修改。
首先要做的就是下載 AVR307所附的範例程式,把 Attiny26 相關的暫存器設定,修改為Attiny45,最後再修改整個 IAR 的程式碼讓它可以符合並通過 AVR Studio 編譯器的語法檢查,這樣才能產生所需要的Attiny45 UART 程式碼。
我的目的是要使用 ATtiny45 實現兩個 ADC 的監控。當然需要兩個 UART 功能的也可利用這個方法來做實現。
硬體線路:
硬體線路可以分為兩個部份,第一部分是Attiny45的線路部分,需要注意的是:當使用三線USI模式時,PB1(pin6) 是設定為 output 而且是一個open-drain output,所以必須要加上一個pull-up電阻。如圖中所示,加上了一個 1K 電阻,經實際測試是OK的!
第二部份是一個 RS232 準位準換電路,Attiny45 所標示的的 Tx 與 Rx 分別接到 232 晶片的 pin11 和 pin12,由於輸出已經直接跳線到 D-Type 母接頭,因此在與電腦連接時並不需要特別購買 9-pin 的 RS232跳線,直接用一般的線就好。圖中所使用的晶片為 MAX232 和 HIN232,若你使用的晶片代號不一樣時,請查閱一下晶片手冊。對於簡單應用與測試來講這個線路很足夠了,不但簡單而且零件很容易取得,價錢又便宜!