nobcha23の日記

PICマイコンやArduinoを使う電子回路遊びを紹介します

色々ARDUINO基板

色々なARDUINO基板をつないで実験しています。UNO,MEGA2560,ティビディーノ(UNO互換)です。
I/O点数が増えた時のことを考えて、ARDUINO MEGA2560R3を入手。
始めつないだ時にはなぜか、USBを認識しなかったんですが、おかしいなと入れ替えたりしていると無事に動きました。

f:id:nobcha23:20200710202359j:plain

3種類そろった


互換ボードのチビディーノと言うのは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秒待ってまた再開
}

―――――――――――――――――――――――――――――――

 

f:id:nobcha23:20200714220737j:plain

i2cLCD

アドレススキャンで、LCDのアドレスを検出しました。

 

rover.ebay.com

www.banggood.com