某天C大說, 由於Arduino的板子面積太大了, 希望可以找個比較小的chip來縮減硬體自動化治具的電路體積. 他就找了Attiny85 這個閹割版本的Arduino, 希望我們可以協助幫忙把Arduino的程式移植到上面試試看 ....
Attiny85 雖然可以使用Arduino Genoino IDE 進行開發.
but ... 令人崩潰的狀況卻是非常多
成功的狀態
燒錄完遇到以下三種情況都是代表程式寫的方式不相容於Attiny85的規則
void controlSwitch(int state) {
switch (state) {
case '0':
DigiUSB.println(" 00 ");
//digitalWrite(PortA, LOW);
break;
case '1':
DigiUSB.println(" 01 ");
//digitalWrite(PortA, HIGH);
break;
case '2':
DigiUSB.println(" 10 ");
//digitalWrite(PortB, LOW);
break;
case '3':
DigiUSB.println(" 11 ");
//digitalWrite(PortB, HIGH);
break;
default:
//digitalWrite(PortA, LOW);
//digitalWrite(PortB, LOW);
break;
}
}
編譯及燒錄成功
但卻出現上面狀況三的情況
解法:
必須在Arduino IDE中先做以下宣告跟include Arduino.h 後再編譯就可以避免這個狀況再發生
#pragma chip attiny85
#pragma efuse 0xFF // default value
#pragma hfuse 0xDF // default value
#pragma lfuse 0x62 // default value
#include "Arduino.h"
經過不斷失敗後的反覆測試, 歸納出以下可用方案
Arduino Genio IDE
for ( byte a = 0; a < 10; a++ ) {
....
...
}
以下做一個簡單的紅綠燈Demo, 證實這chip 真的是可以用. 只是限制就 ....
PC:
功能乍看之下是可以正常執行的, 但還是會出現斷字的現象 ....
Demo video
結論:
參考資源:
Attiny85 GPIO/ Registry
itronmen 2020 demo code
DigiUSB - Github