【arduino】お盆休みでArduinoいじる<ANTはまったついでに>

訳がわからずに、互換品キットを購入して、ブートが面倒なのでブート済みのCPUの種類を間違って買って互換キットに差したら不可思議な動作をすることが判明しました。
●はまった現象


秋月:ATmega168/328マイコンボードキットに

switchscience Arduinoブートローダ書き込み済みATMega328P-PU(内蔵CR発振8MHz版)

を差込むとどうなるかということをやってしまいました。
(多分、こんな間違いをする人は居ないと思いますが)
i2cは動作するが、シリアルIFが動作しないのです。
具体的にCPU内部でどうなっているのかわかりませんが
とにかくイレギュラーなことをしてしまったということです。

このようなCPUで、ANT+を接続しようとしていたのを
DgradeDIY様からCPUが怪しいとのアドバイスを頂き、慌てて純正のArduino unoの購入に走りました。
本来の正解は、SwitchScienceさんがArduino uno用ブートローダー付のATMega 328P-PUを販売しているのでそれを買って秋月のキットにはめ込むのが正解でした。
https://www.switch-science.com/catalog/663/

到着は、明日14日ですので、今日は、間違って購入したCPUで
Arduiono遊びします。

●SwitchScienceさんから間違って買った
https://www.switch-science.com/catalog/1414/

Arduinoブートローダ書き込み済みATMega328P-PU(内蔵CR発振8MHz版)
Arduinoブートローダ書き込み済みATMega328P-PU(内蔵CR発振8MHz版)

これはこれで、単独で動作するCPUなので、ブレッドボードにさして、電源を5V供給するだけで動作する安くて小さいCPUで
す。これは面白いので、互換ボード上では動作しないシリアル通信を単独では動作することの確認をしてみました。
この関係のリンクは

http://blog.gorugle.org/posts/2015/04/atmega328.html

がありましたが難しく読めませんでした。

●XBEEをATMega 328P-PU単独に接続してLEDチカする

ブレッドボード大を2枚連結して使ってます。電源供給から
書き込み、モジュール接続まで1本の線でできるので便利です。
①互換ボード:5V、GNDをブレッドボードの赤ライン、青ライン

②ATMega 328P-PU(8MHz内蔵)配線:
電源:7番ピンに5V 8番ピンGND
シリアル信号:XBEEのDOUT(TX相当)をCPUの2番ピン(RX)に接続

③XBEE配線
電源:XBEE 変換基板の1番ピンVccに5V、
変換基板の10番ピンにGNDを繋ぎます。
=>XBEE変換基板のピンとXBEE本体ピン位置大きくずれてるので、テスタで導通を確認して電源を結線したほうがいいです。XBEEは3.3V駆動なので5Vを他のピンに入れてしまうと破壊してしまてもったいないことになります。

●プログラム
こちら様が作っていただいてあるプログラムを単純化しました。
http://ehbtj.com/electronics/xbee/

XBEE子機送信側は、XCTUのコンソールでキーボード入力して、何らかの文字入力をするとブレッドボード上のXBEE coordinatorが受信してCPUのシリアルにデータが入ってLEDが点滅するという仕掛けです。2回ほどプログラム修正して見事LED点滅コントロールできました。Arduinoで初めてプログラム動作させられて嬉しいです。

●プログラム
mbedと比べるとオブジェクト指向でなくマイコン風の命令で
少し慣れないのですが、ほぼ、同じ感覚でできそうです。
mbed では、XBEEという名称を使ってシリアルを定義するのですが、Arduinoではシリアル1CHしかないので、迷う必要がないのですが、シリアルをたくさん使う時はソフトシリアルというのがあるらしいのでそのうちそれも試してみます。
//——————————————————————————–

/*
Xbee coordinator TX pin=> RX pin(PD0)
LED (PB5)digital 13
*/
void setup(){
pinMode(12, OUTPUT);
pinMode(13, OUTPUT); // 受信チェック用
Serial.begin(9600); // Serial通信の設定
}

void loop(){
if(Serial.available() == 0)
delay(1);
if(Serial.read()!=-1) { // 何か受信したら
digitalWrite(13, HIGH);
delay(10);
digitalWrite(13,LOW); // 確認用のLED点灯
}

}
//——————————————————————–

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です