色々なARDUINO基板をつないで実験しています。UNO,MEGA2560,ティビディーノ(UNO互換)です。
I/O点数が増えた時のことを考えて、ARDUINO MEGA2560R3を入手。
始めつないだ時にはなぜか、USBを認識しなかったんですが、おかしいなと入れ替えたりしていると無事に動きました。
互換ボードのチビディーノと言うのはProlific USB-to-Serialのため、うまく動かなかったんですが、もう一度WEBをみて、次を実行。
⓪WEBによると。pl2303driverPL2303_0508デバイスドライバ単体をダウンロードする。解凍しておいておく。
①つないだら自動DLされるドライバ(最新)をコントロールパネル、デバイスマネージャーの「ポート (COM と LPT)」「Prolific USB-to-Serial Comm Port(COM**)」を指定して「ドライバーの更新」で古いドライバに入れ替えをする。
②更新するドライバ指定をコンピューター上にして、D/Lした古いドライバを指定します。
このデバイスドライバ入れ替えでチビディーノがWIN10で動きました。とは言ってもプログラムダウンロードがうまくいかない場合もありますが・・。
ここで、せっかくなので、何か治具プログラムでも作ろかうかと思い、i2cアドレススキャンのスケッチを作ってみました。スケッチの中にも書いたWEBからの引用です。参考まで。
i2cLCDをつないでいますので、どうしても自分LCDのアドレス0x3Eは表示されてしまいます。
‐―――――――――――――――――――――――――――――――――――――――
// i2c_scanner display on i2cLCD address 0x3E
//
//
// This very simple sketch scans the I2C-bus for devices.
// If a device is found, it is reported to the Arduino serial monitor.
// Version 5, March 28, 2013
// アドレスは7-bit(127d)まで。拡張アドレスは扱わず
// https://playground.arduino.cc/Main/I2cScanner/
#include <Wire.h>
#include <skI2CLCDlib.h>
#define led_pin 13
//lcd instance
skI2CLCDlib LCD(0x3E, 16); // LCDのi2cアドレス、画面カラム数16文字
void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.println("\ni2c Scanner");
pinMode(led_pin, OUTPUT);
// LCDモジュールの初期化処理
// ICON OFF,コントラスト(0-63),VDD=5Vで使う
LCD.Init(LCD_NOT_ICON,32,LCD_VDD5V) ; //5Vへ変更20200612
// 書き込む
LCD.SetCursor(0,0) ; // 表示位置を1行目1列[00H]に設定
LCD.Puts("i2c address scan") ; // [00H]から書込まれる(表示する)
LCD.SetCursor(0,1) ; // 表示位置を2行目1列[40H]に設定
LCD.Puts(" i2cLCDv1.0 ") ; // [40H]から書込まれる(表示する)
}
void loop()
{
byte error, address;
int nDevices;
int led_status;
char charbuf[6];
Serial.println("i2c Scanning start");
digitalWrite(led_pin, led_status);
led_status++;
delay(2000);
LCD.SetCursor(0,0) ; // 表示位置を1行目1列[00H]に設定
LCD.Puts("i2c Scan test ") ; //
LCD.SetCursor(0,1) ; // 表示位置を2行目1列[40H]に設定
LCD.Puts("ADR:") ; // LCDへは2アドレスまで表示できる
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// このスケッチではWIRE関数の
// Write.endTransmisstion へのデバイスからの
// ACK応答有り無し戻り値(有り:0)をみています
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("i2c device found at address 0x");
if (address<16) Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
sprintf(charbuf, "%02X", address );
LCD.Puts("0x") ;
LCD.Puts(charbuf) ;
LCD.Puts(",") ;
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16) Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
{
Serial.println("No i2c devices found\n");
LCD.Puts("No devices found") ;
}
else{
Serial.println("done\n");
LCD.Puts("done ");
}
delay(3000); // 5秒待ってまた再開
}
―――――――――――――――――――――――――――――――
アドレススキャンで、LCDのアドレスを検出しました。