2018年12月18日 星期二

ATtiny167(Digisprak Pro)開發板 Arduino IDE 編輯環境設置與使用說明


網頁最後修改時間:2018/12/18


這一篇所介紹 ATtiny167 開發板可說是 ATtiny85 開發板的升級版:具有 16 KBytes Flash 記憶體(安裝 bootloader 之後,可使用 14.5 KBytes)、512 Bytes EEPROM、512 Bytes SRAM,支援 I2C、true SPI、UART、LIN、USI 通訊,以及可配置多達 14 個 GPIO、10 個 ADC 通道和 3 個通道 PWM(6個接腳可指定輸出)等......硬體配置,兩者都採用同類型 bootloader(micronucleus),支援 Arduino IDE 通過 USB 上傳程式,對於熟悉 Arduino IDE 開發環境的使用者,很容易就能上手!

再者,"ATtiny85 開發板使用說明,與 Arduino IDE 編輯環境設置" 網頁裡有部分內容已有點過時,趁這次機會也做個更新,補上最新的資料。

事不宜遲,趕緊來看看吧!

*********************************************************************************
需要 AVR Tiny 開發板,可到下面連結:
*********************************************************************************

/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
基本上,這篇網頁雖是以 ATtiny167 開發板為主,但是裡面的內容同時適用於 ATtiny85 開發板(就像是 Arduino UNO 開發板和 Arduino Nano 開發板一樣),它們都是使用同一個套件(Package)函式庫,只要在開發時選擇好對應的開發板即可。
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*

ATtiny167 晶片資料開發板規格就不多說了,資料都在連結裡,有需要再自己打開看!

【添加開發板支援到 Arduino IDE】

開啟 Arduino IDE,打開 "File / Preferences" 頁面,在 Additional Boards Manager URLs: 輸入
http://digistump.com/package_digistump_index.json
在紅色框框中,最後按下 "OK" 完成設定。

頁面中,紅色底線是開發板套件安裝的資料夾(這個位置要先記起來,等一下會用到);黃色代表的是作業系統登入的使用者名稱。

Arduino IDE Preferences 頁面設定
打開 "Tools / Board: / Boards Manager..." 頁面,等待資料載入完成後,在上方過濾搜尋欄位處("Filter your search...")輸入
digistump avr
點擊 "Install" 進行安裝,完成後就會看到欄位後面接著安裝版本號碼。

Arduino IDE - Board Manager 開發板套件安裝
開發板套件安裝完成之後,點擊打開 "Tools/Board:" 瀏覽選單,對於 ATtiny85 開發板選擇
Digispark (Default - 16.5mhz)
對於 ATtiny167 開發板選擇
Digispark Pro (Default 16 Mhz) 
就可以針對各開發板進行程式設計。

開發板選擇說明

【USB 驅動程式安裝】

ATtiny167 開發板支援 Windows / Mac / Linux 作業系統環境,一般情況下需要先安裝驅動程式,否則作業系統辨識不出 ATtiny167 開發板,Arduino IDE 自然就無法正常的上傳 Sketch 程式碼,對於 ATtiny85 開發板來說也是如此。

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* Windows(10 64-bit)- 方法一

Windows 作業系統下的 USB 驅動程式安裝,好像從 Windows 8(尤其是 Windows 10)開始,驅動程式安裝必須要有簽名,否則不能直接安裝!要安裝未簽名的驅動程式,必須要重新開機進入到 OS 選單下開啟不簽名就能安裝驅動程式的選項才行,這也的確是早前開發板 USB 驅動程式安裝的必要動作,但是現在一切都改觀了,USB 驅動程式已經有簽名可以直接安裝,不需要重開機改選項了!

USB 驅動程式的安裝環境是以 Windows 10 64-bit 做示範,當然其他的作業系統版本也一樣的步驟,只不過因為我的筆電作業系統不是剛安裝的,很多東西可能早前都已經安裝或是改過,所以若下面提供的第一種方法不能用,請改用第二種方法。

在開始之前,我想說一點、很重要的一點,那就是:「驅動程式安裝成功之後,如果直接插上開發板到 USB 埠,會聽到插上 USB 的音效,然後過幾秒鐘後會聽到拔除 USB 的音效(這時開發板並未拔除)」,要了解,這是正常的!

要確認驅動程式是否正確安裝,只要打開裝置管理員,再插上開發板到 USB 埠,就會看到 libusb-win32 devices 裝置下面出現 Digisprak Bootloader 的項目,但是過幾秒鐘之後就不見了。

裝置管理員 - 開發板驅動程式安裝確認
因為當出現在裝置管理員的時候它是一個 USB 裝置,Arduino IDE 此時才能燒錄,所以在這幾秒鐘內若是不需要 USB 功能時,就會切換回一般微控制器的狀態,執行內部韌體程式,所以千萬別一不小心把自己糾結到 USB 不能消失的狀態,很難受的!

打開剛剛安裝開發板套件的目錄,進入到目錄
C:\User\{使用者名稱}/\AppData\Local\Arduino15\packages\digistump\tools\micronucleus\2.0a4
32-bit 作業系統選擇 DPinst.exe 、64-Bit 作業系統選擇 DPinst64.exe,以系統管理員身分執行,並在 裝置驅動程式安裝精靈 畫面一直按 "下一步" 直至 "完成",就能完成開發板的 USB 驅動程式安裝。

開發板 USB 驅動程式的目錄位置
如果之前有安裝過類似的驅動程式,或許會和我一樣看到類似的錯誤出現在 驅動程式名稱 欄位裡,不過這不影響安裝的結果。

USB 驅動程式安裝
經過上面的安裝之後,開啟裝置管理員就能先進一步確認安裝的結果。

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* Windows(10 64-bit)- 方法二

如果方法一行不通的話,就來試試連 STM32 USB 驅動程式都是這樣安裝的方法二。

下載 micronucleus 的最新版本(或 {雲端硬碟}/ATtiny167開發板 bootloader 目錄下的 zip 檔案)並解壓縮,進入到 {micronucleus}/windows_drive_installer/ 目錄下,"以系統管理員身分執行" zadig_2.1.2.exe

zadig-*.exe 執行檔位置
打開之後的軟體畫面,基本上是沒有相對應的裝置能選擇來被安裝驅動程式的,但是可以新增或是使用資料夾裡面的 micronucleus.cfg 組態檔來載入 USB 裝置資料,這樣的話就可以在不需要裝置插入的情況下進行驅動程式安裝。

Zadig - 載入組態檔 
裝置組態檔載入之後的畫面情況如下所示。

可以看到,畫面上方的下拉選單出現的是 "Micronucleous""USB ID" 顯示出其 VID 和 PID 的號碼、驅動程式是 "libusb-win32 (v1.2.6.0)";最後按下 "Install Driver" 就能進行驅動程式的安裝。

Zadig - 載入 USB 裝置組態檔和安裝成功畫面
一但成功完成安裝,開啟裝置管理員再插上開發板,就會短暫的看到 "Micronucleus" 出現然後再消失。

對照方法一,使用方法二安裝 USB 驅動程式後,插上開發板在裝置管理員上顯示的是 "Micronucleus",與方法一不同,但其實結果都是一樣的,方法二中的裝置名稱可以自己改。

裝置管理員的 USB 裝置名稱
下面影片中的操作過程,就是此小節方法二的實際操作過程。


接下來的 Linux 和 Mac OSX 小節,需要該作業系統中已經預先安裝了 Arduino IDE。若沒有,請先上網下載對應的最新版本下來安裝好再往下繼續。

Arduino IDE 最新版本下載

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* Linux

網頁撰寫當天下載的版本是 v1.8.8(2018-12-17, [Debian Stretch with Raspberry Pi Desktop, 2018-11-26]),以這版本為例進行手動安裝。

pi@raspberry:~ $ cd Downloads/
pi@raspberry:~/Downloads $ ls -l
總計 121208
-rw-r--r-- 1 pi pi 124109956 12月 17 15:46 arduino-1.8.8-linux32.tar.xz
pi@raspberry:~/Downloads $ tar -xf arduino-1.8.8-linux32.tar.xz
pi@raspberry:~/Downloads $ sudo mv arduino-1.8.8 /opt
pi@raspberry:~/Downloads $ sudo bash /opt/arduino-1.8.8/install.sh
Adding desktop shortcut, menu item and file associations for Arduino IDE...touch: cannot touch '/root/.local/share/applications/mimeapps.list': 沒有此一檔案或目錄
/usr/bin/xdg-mime: 803: /usr/bin/xdg-mime: cannot create /root/.local/share/applications/mimeapps.list.new: Directory nonexistent
 done!
pi@raspberry:~/Downloads $
** 如果自動安裝能裝最新版的就不需要手動安裝!

完成上面指令之後,就能看到安裝好的 Arduino IDE 圖示。

運行安裝好的 Arduioi IDE v1.8.8 確認能夠正常開啟,如下圖所示。

Raspberry Pi Desktop 安裝 Arduino IDE v1.8.8
接下來的步驟就跟 Windows(10)作業系統相同,Arduino IDE 選單選擇 "工具/開發板:/開發板管理員" 安裝套件函式庫。

安裝好之後,其實需要的檔案什麼的都已經安裝好在 Linux 裡面,但是跟在 Windows(10)遇到的情況一樣,現在還無法讓 Linux 識別到 ATtiny167 開發板!

這是因為,Linux 作業系統多數使用 udev 管理 USB 裝置,所以還要新增一個 udev rule 的檔案到 /etc/udev/rules.d 目錄下(詳細的過程就請至這網頁看裡面的描述,大致上比較流行的 Linux 發行版都有說明)。

下面我們使用跟示範影片不一樣的方式,改用指令來做複製、新增這個檔案(49-micronucleus.rules)到目標資料夾中(中間產生執行檔的部分可以不做,因為這檔案已經存在需要的資料夾中了,這裡只是示範如何重新編譯一個新版本)。

pi@raspberry:~ $ cd Downloads/
pi@raspberry:~/Downloads $ wget https://github.com/micronucleus/micronucleus/archive/v2.03.tar.gz
--2018-12-17 16:20:32--  https://github.com/micronucleus/micronucleus/archive/v2.03.tar.gz
正在查找主機 github.com (github.com)... 192.30.253.112, 192.30.253.113
正在連接 github.com (github.com)|192.30.253.112|:443... 連上了。
已送出 HTTP 要求,正在等候回應... 302 Found
位置: https://codeload.github.com/micronucleus/micronucleus/tar.gz/v2.03 [跟隨至新的 URL]
--2018-12-17 16:20:33--  https://codeload.github.com/micronucleus/micronucleus/tar.gz/v2.03
正在查找主機 codeload.github.com (codeload.github.com)... 192.30.253.120, 192.30.253.121
正在連接 codeload.github.com (codeload.github.com)|192.30.253.120|:443... 連上了。
已送出 HTTP 要求,正在等候回應... 200 OK
長度: 未指定 [application/x-gzip]
Saving to: ‘v2.03.tar.gz’

v2.03.tar.gz                          [                    <=>                                     ]   6.26M  1.63MB/s    in 4.3s

2018-12-17 16:20:38 (1.47 MB/s) - ‘v2.03.tar.gz’ saved [6569346]

pi@raspberry:~/Downloads $ sudo mv v2.03.tar.gz micronucleus-v2.0.3.tar.gz
pi@raspberry:~/Downloads $ ls -la
總計 127632
drwxr-xr-x  2 pi pi      4096 12月 17 16:21 .
drwxr-xr-x 21 pi pi      4096 12月 17 16:18 ..
-rw-r--r--  1 pi pi 124109956 12月 17 15:46 arduino-1.8.8-linux32.tar.xz
-rw-r--r--  1 pi pi   6569346 12月 17 16:20 micronucleus-v2.0.3.tar.gz
pi@raspberry:~/Downloads $ tar -xf micronucleus-v2.0.3.tar.gz
pi@raspberry:~/Downloads $ cd micronucleus-2.03/commandline/
<!-- 下面的指令可以不做,除非想要編譯新的 micronucleus 執行檔 -->
pi@raspberry:~/Downloads/micronucleus-2.03/commandline $ sudo apt-get install libusb-dev
<!-- 省略 -->
pi@raspberry:~/Downloads/micronucleus-2.03/commandline $ make
Building library: micronucleus_lib...
gcc  -Ilibrary -O -g -D LINUX -c library/micronucleus_lib.c
Building library: littleWire_util...
gcc  -Ilibrary -O -g -D LINUX -c library/littleWire_util.c
Building command line tool: micronucleus...
gcc  -Ilibrary -O -g -D LINUX -o micronucleus micronucleus.c micronucleus_lib.o littleWire_util.o -L/usr/lib/i386-linux-gnu -lusb
rm -f *.o
<!-- 上面的指令可以不做,除非想要編譯新的 micronucleus 執行檔 -->
pi@raspberry:~/Downloads/micronucleus-2.03/commandline $ ls -la 總計 88 drwxr-xr-x 4 pi pi 4096 12月 17 16:23 . drwxr-xr-x 7 pi pi 4096 3月 24 2018 .. -rw-r--r-- 1 pi pi 805 3月 24 2018 49-micronucleus.rules drwxr-xr-x 3 pi pi 4096 3月 24 2018 builds drwxr-xr-x 2 pi pi 4096 3月 24 2018 library -rw-r--r-- 1 pi pi 1788 3月 24 2018 Makefile -rwxr-xr-x 1 pi pi 43188 12月 17 16:23 micronucleus -rw-r--r-- 1 pi pi 15427 3月 24 2018 micronucleus.c -rw-r--r-- 1 pi pi 1317 3月 24 2018 Readme pi@raspberry:~/Downloads/micronucleus-2.03/commandline $ sudo cp 49-micronucleus.rules /etc/udev/rules.d/49-micronucleus.rules pi@raspberry:~/Downloads/micronucleus-2.03/commandline $

如果上面的步驟成功完成,打開 Arduino IDE 並開啟一個範例程式來做測試,就能看到類似下面成功編譯和上傳程式成功的輸出畫面。

Raspberry Pi Desktop - Arduino IDE v1.8.8 編譯上傳程式到 ATtiny167 執行結果
下面的影片,展示了上面大致的 Arduino IDE 開發板套件函式庫的安裝、建立 udev rule 檔案、和編譯上傳程式到開發板的操作過程,可以從影片中看到實際的操作。


/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* Mac OSX(只提供驅動程式安裝的參考方式)

如果 Mac OSX 能夠安裝 Arduino IDE 較高版本的話,開發板套件函式庫的安裝就跟 Windows 類似(否則就會變得比較麻煩,會與之前建立 ATtiny85 開發板一樣需要去弄硬體描述檔)。

但是安裝開發板 USB 驅動程式之前,要先看一下(Disabling Gatekeeper on OSX)網頁的說明,再繼續輸入下面指令安裝 USB 驅動程式

cd {microuncleus 解壓縮目錄}/commandline
brew install libusb-compat
make

之後的動作應該就跟上面講得差不多了,接下來的事情就要自己搞了!

【ATtiny167 開發板的 PWM】

安裝好開發板套件函式庫之後,Arduino IDE 選單 "File/Examples" 會有很多的範例程式可做為開發時候的參考,當要做開發的時候可以先來這裡翻一翻有沒適合的範例程式可以用。

開發板套件函式庫所帶的範例程式列表
範例很多,下面介紹開發板上硬體 PWM 的使用方法,以後有機會的話再來深入玩玩其它的!

ATtiny167 開發板有六支接腳可作為硬體 PWM 輸出,分屬於兩個 Timer/Counter,共三個通道。

ATtiny167 開發板接腳分佈示意圖
<D8> 隸屬於 8-bit Timer/Counter0,只有一個通道,只能使用 analogWrite( PIN, DUTY ) 函式做 PWM 輸出,其中
  • PIN:接腳號碼,0、1、2、3、4、8 皆可用;
  • DUTY:PWM 的佔空比,0 ~ 255;
<D0> ~ <D4> 隸屬於 16-bit Timer/Counter1,其中
  • <D0><D2>、<D3>:屬於通道 A;
  • <D1><D4>:屬於通道 B;
可使用 analogWrite( PIN, DUTY ) 和下面的特定 PWM 函式集做輸出,特定 PWM 函式有:
  • pwmWrite( CHANNEL, DUTY ):選擇 PWM 輸出通道和輸出佔空比;
    CHANNEL:CHANNELA、CHANNELB;DUTY:0 ~ 255。
  • pwmConnect( PIN ):指定接腳連接到 PWM 通道做輸出,不做連接就無法作為 PWM 輸出;
    PIN:0 ~ 4,可連續呼叫函式做選擇,把與通道連接的接腳全部一起輸出。
  • pwmDisconnect( PIN ):指定接腳,斷開與 PWM 通道的連接。
    PIN:0 ~ 4,可連續呼叫函式做選擇,把與通道連接的接腳全部一起斷開。
  • pwmReset():斷開所有與通道 A、B 連接的接腳;
analogWrite() 函式使用的時候有幾點需要注意:
  • 這個函式使用的時候,會將同通道的其他接腳斷開;也就是說,同一個通道同時只會有一個接腳會做動,但是 DUTY 值不可以是 0 或 255,否則上述就會不成立,原因看下一點。
  • DUTY 等於 0 或是 255 的時候,這時 analogWrite() 函式裡面會用 digitWrite() 取而代之 PWM 的輸出,這會造成該接腳輸出的時候不會斷開其他接腳的狀態(如下範例程式,case 1 正確的動作應該要像 case 2 一樣),但其實不是這樣!這應該是 bug,使用上要注意一下!
analogWrite_test01.ino
/**
 * analogWrite_test01.ino
 * 使用 analogWrite 控制六支 PWM 接腳輸出
 * 
 * {case 1} analogWrite( pins[0...6], 255 )
 *  LED一顆一顆亮,到最後六顆 LED 全部都亮
 * {case 2} analogWrite( pin[0...6], 100 )
 *  0, 1, 4 這三顆 LED 會輪流亮,該通道 A 同時只會有一顆亮;
 *  2, 3 這三顆 LED 會輪流亮,該通道 A 同時只會有一顆亮;
 *  8 這顆 LED 亮起後就會一直恆亮;
 *  
 */

uint8_t pins[] = {1, 4, 0, 2, 3, 8};

void setup() {}

void loop() {
  static uint8_t p = 0;
  //analogWrite( pins[p++], 255 );  // case 1
  analogWrite( pins[p++], 100); // case 2
  if( p == 6 ) p = 0;
  delay(1000);
}

/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
電路接法:
<1、4、0、2、3、8> LED ----/\/\R/\/\--------- <GND>
LED If = 3V,R 取 400 歐姆,電流 5mA
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*

使用特定 PWM 函式集跟 analogWrite() 函式最大的不同在於:同一通道可以設定有多少支接腳要同時輸出,這用 analogWrite() 是做不到的!

編譯上傳下面的程式到 ATtimy167 開發板,很容易就能出比較這兩種硬體 PWM 輸出的不同。
pwmfunctions_test01.ino

void setup() {}

void loop() {
  /**---------------------------------------
   * 有五段不同 PWM 佔空比設定,依序把通道其他
   * 接腳加入,加入的接腳都會產生同樣的輸出。
   ---------------------------------------*/
  // Channel A: 0, 2 , 3
  uint8_t d = 5;
  for( int i = 0; i< 5; i++ ) {
    d = d + i * 50;
    pwmConnect( 0 );         // 加入 D0
    pwmWrite( CHANNELA, d );
    delay(500);
    pwmConnect( 2 );         // 再加入 D2
    pwmWrite( CHANNELA, d );
    delay(500);
    pwmConnect( 3 );         // 再加入 D3
    pwmWrite( CHANNELA, d );
    delay(500);
    pwmReset();              // 斷開 D0 ~ D4
    delay(500);
  }  
  // Channel B: 1, 4
    d = 5;
    for( int i = 0; i< 5; i++ ) {
    d = d + i * 50;
    pwmConnect( 1 );         // 加入 D1
    pwmWrite( CHANNELB, d );
    delay(500);
    pwmConnect( 4 );         // 再加入 D4
    pwmWrite( CHANNELB, d );
    delay(500);
    pwmReset();              // 斷開 D0 ~ D4
    delay(500);
  }  
}

上面所說的是直接使用硬體產生 PWM 訊號輸出的方法,「那麼,如果我同時需要超過 3 支接腳輸出不同 PWM 訊號呢 ?」

答案當然可以!

由 Arduino IDE 的選單 "File/examples/DigisparkTinySoftPwm" 列表下面有兩個程式:TinySoftPwmDemo 和 SoftPwm13Pins。前者,是對於板載 LED 使用軟體 PWM 漸亮漸滅的方法展示;後者,設定 ATtiny167 開發板上的每一支接腳使用不同的 PWM 佔空比輸出,並且漸亮漸滅板載 LED。

利用上面提供的函式庫以及參考範例程式,就能實現同時多個 PWM 接腳的控制。

ATtiny167 開發板其他的應用還有很多,如果有興趣的話可以直接把範例程式打開來看看,編譯上傳測試看看它的效果,相信會帶給(你)妳很多的意外和驚喜的!

【結論】

這一篇網頁介紹了在不同作業系統環境下 Arduino IDE 怎麼新增支援 ATtiny167 開發板(ATtiny85 開發板也同樣適用)的方法,同時在安裝好開發板套件後,很多的應用範例也新增到 Arduino IDE 中,這對於想要學習 ATtyiny167 開發板的人是個很好的開始之處。

Arduino IDE 對於 ATtiny85 / ATTiny167 開發板的支援套件函式庫在不同系統中的安裝並不困難,比較麻煩一點點的是作業系統下怎麼安裝開發板的 USB 驅動程式,不過在網頁中都有提供成功安裝 USB 驅動程式的影片可以看,相信這會更容易許多!

基本上網頁上的資料應該可以快速地帶領各位入門,既然如此,簡單的事我已經幫你(妳)做了,接下來玩開發板的困難部分,就留給各位看官了,還在等什麼呢?


<< 部落格相關文章 >>

2 則留言:

  1. 你好,最近我買了ATtiny85 開發板,使用winxp安裝USB DPinst.exe驅動,顯示安裝失敗,驅動程式尚未簽署,改用方法二安裝micronucleus.cfg 後,開發板USB接電腦後在裝置管理員上仍出現無法辨識的裝置,請問還有其他方法嗎?

    回覆刪除
    回覆
    1. 如果你仔細看過網頁中的說明,就應該知道網頁中的第一種方法就是最好的方法,第二種方法是特別的情況出現才需要去用,而且不管是 ATtiny85 或是 ATtiny167,下載的套件裡面已經包含它們所需要的驅動程式而且已經經過簽署的;沒有簽屬表示你是下載到舊版本的。

      建議你,可直接上官網或是網頁中提供的網址下載最新版的下來安裝,應該就可以解決你的問題。

      刪除

留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!

發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?

不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !