![](https://blogimg.goo.ne.jp/user_image/00/f6/a93cda1a570d201451f931618254cd3b.jpg)
ArduinoでATtinyにスケッチが書き込めるかとテストしてみました。ATtinyにスケッチを書き込むための段取りは、ネットを検索するとたくさん見つかるのでここでは省略します。
![](https://blogimg.goo.ne.jp/user_image/77/8e/8d881e3f30a139583da43a306f21ae5b.png)
以前購入してあったATtiny45Vと新たに購入したATtiny85が手元にあるので、とりあえずLチカテストで動作確認しました。
![](https://blogimg.goo.ne.jp/user_image/28/20/a5f225104c7b238179bbbd567a9fce7c.jpg)
そして実際の使用を前提に、ATtiny45Vに赤外線送信機のスケッチを書いて動作を確認してみました。
![](https://blogimg.goo.ne.jp/user_image/3f/8f/0d52ca1fbb17dd5395fd924dca3c96dc.jpg)
ピンとポートの関係は上図のようになっています。そして使えるコマンドは以下の通り。
pinMode()
digitalWrite()
digitalRead()
analogRead()
analogWrite()
shiftOut()
pulseIn()
millis()
micros()
delay()
delayMicroseconds()
スケッチを書き込んだ後、ジョイスティックを繋いで出力端子D0の出力波形をオシロで確認してみました。
![](https://blogimg.goo.ne.jp/user_image/00/86/4859345efbe9246c7824b38997710892.png)
波形は38kHzの変調波と3チャンネル分の出力で、左からエルロン、エレベータ、スロットルの順。
![](https://blogimg.goo.ne.jp/user_image/61/3e/1ac6a4af35680f2f84c8326ce1518388.png)
ジョイスティックのエルロンは中央で、スロットルを一番上に上げた状態。
![](https://blogimg.goo.ne.jp/user_image/2c/f4/1a97996718874b55860dde3ea72f35ae.png)
ジョイスティックのスロットルは中央で、エルロンを一番左に倒した状態。
![](https://blogimg.goo.ne.jp/user_image/22/6c/b366f648ded130ddfe90c99de827f4bf.png)
ジョイスティックのスロットルは中央で、エルロンを一番右に倒した状態。エレベータは固定。
以下に今回のスケッチを載せましたが、このプログラムをアセンブラで書くことを考えたら、Arduino IDEの方が簡単です。
今回は左右上下ともにセンターに戻るタイプのジョイスティックなので、スロットルはセンターから上だけを使うように設定。このような設定はmapコマンドが便利です。
thr = map(thr, 525, 1023, 0, 1023);
// ATtiny45用2チャンネル赤外線送信機
void setup(){
pinMode(0, OUTPUT); // 5Pin(PWM Pin0)出力
}
void Modulation(){
for (int i = 0; i < 23; i++){ // 38kHz変調
PORTB = B00000001;
delayMicroseconds(9); // on
PORTB = B00000000;
delayMicroseconds(17); // off
}
digitalWrite(0, LOW);
delayMicroseconds(400);
}
void SignalOut(){
Modulation();
}
void loop(){
int ail = analogRead(A1); // 7Pin(analog input 1)
int thr = analogRead(A2); // 3Pin(analog input 2)
thr = map(thr, 525, 1023, 0, 1023); // スロットルの中央から上だけを使用
if (ail <= 0) ail = 1;
if (thr <= 0) thr = 1;
SignalOut(); // start
delayMicroseconds(ail);
SignalOut(); // ail
delayMicroseconds(500); // fix
SignalOut(); // ele
delayMicroseconds(thr);
SignalOut(); // thr
delay(15);
}
| Trackback ( )
|
|