「未分類」カテゴリーアーカイブ

Beaglebone Black

Beaglebone Blackを入手した。

Beaglebone Black Rev.C
Beaglebone Black Rev.C

特に何も調べてないがミニpcという理解で良いんだろうか。element14というのは珪素の事だろう。きっとそうだ。

HDMI端子が有るようだけど、小さいな。Dタイプの変換アダプタを買って来よう。

LTC2450-1とLTC2450

前回LTC2450-1モジュールを試したが期待した変換速度が得られなかった。

チップを拡大して観察すると、なんだか違うチップが載ってるような気がしてきた。LTC2450-1ではなくてLTC2450ではないか?

LTC2450-1…か?
LTC2450-1…か?
LCTR
LCTR

データシートによればLTC2450-1にはLDBZとマーキングされていて、
LTC2450にはLCTRとマーキングされている。
LTC2450とすると変換速度は実測値と一致する。

追記:秋月に問い合わせフォームで知らせたところ、「ご指摘の通り」との返答があった。現在は販売停止中のようだ。

追記2:販売再開された。

16bit ADコンバータLTC2450-1

LTC2450-1をテスト
LTC2450-1をテスト

秋月で売ってるLTC2450-1をテスト。arduino unoで試す。

LTC2450-1は1入力だけなので3軸加速度センサに接続する時は3連にする。変換時間は「約16.6ms(最大21ms)」と書いてあるけど実際は34msかかる。どうしたものか。

回路図
回路図

スケッチ:

#include <SPI.h>
unsigned char m_data; //MSB byte
unsigned char l_data; //LSB byte
const int CS = 10;
void setup() {
	pinMode(CS, OUTPUT);
	SPI.begin();
	SPI.setBitOrder(MSBFIRST);
	SPI.setDataMode(SPI_MODE3);
	SPI.setClockDivider(SPI_CLOCK_DIV16);
	Serial.begin(9600);
}
void loop(){
	digitalWrite(CS,LOW);
	m_data = SPI.transfer(0x00);
	l_data = SPI.transfer(0x00);
	digitalWrite(CS,HIGH);

	printHex(m_data);
	printHex(l_data);
	Serial.println("");
	delay(34); //必要に応じてwaitを置く
}

void printHex(unsigned char d) {
	Serial.print( ( d < 0x10 ) ? "0" : "" );
	Serial.print( d, HEX);
}

 

mbed LPC1768 — ADコンバータを接続する

ADS1220とmbed LPC1768
ADS1220とmbed LPC1768

mbedに先日使ったADS1220を接続する。mbedの入出力の電圧は分からなかったが、出力を測定すると3.3Vだったので入力も3.3Vと信じる。

windows環境においてusb経由でprintfなどの出力をモニタする場合はwindowsにシリアルポートドライバをインストールする。

ホーム→Communicating over USB Serial→Windows-serial-configuration→Download latest driverをダウンロード→インストール

spi.formatはADS1220のデータシートにSPI mode 1と書いてあるのでspi.format(8,1)とする。

pc.baudはデフォルトで9600bpsが設定されていて実際その速度で入出力される。モニタするには少し遅いので115200bpsなどに設定する。pc側も同じ速度にする必要がある。

ADS1220は待ち時間を入れないと正常に動かないので適度にwaitを入れる。実測で電源投入後に56ミリ秒、リセットコマンド後に16マイクロ秒以上waitを入れると正常に動いた。

DigitalInとSPIを同じピンに定義すると上書きされるらしく動かない。GPIOのレジスタを直接読み出すと動く。

シリアル出力は14バイトごとにpcに送られるらしい。断片を想定していない場合は、14バイトに整形して出力するか、受信側で整形する必要がある。

次にLCDを接続する。

ソース
mbed_lpc1768_adc1220.cpp

IntelGalileoのシリアル出力でフリーズ

IntelGalileoでシリアルモニタを開かないでシリアル出力し続けるとフリーズする。

ソース:

int led = 13;
void setup() {                
  pinMode(led, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  digitalWrite(led, HIGH);
  delay(100);
  digitalWrite(led, LOW);
  for(int i=0;i<100;i++){
    Serial.println("test");
  }
}

結果:
IntelGalileo→約30秒間LED点滅してフリーズ
ArduinoUNO R3→フリーズしない

Intel Galileo — ADコンバータを接続する

加速度センサーの値を液晶に表示した
加速度センサーの値を液晶に表示した
回路図
回路図

Intel GalileoではI2C液晶モジュールACM1602NIはどうやっても動かなかった。前回の液晶を採用して16bitADコンバータADS1115を接続してみた。CPUの温度が50℃を超えた辺りから動作が怪しくなり遂に書き込みできなくなった。三端子レギュレータに使うヒートシンクとファンを設置すると安定した。温度計とヒートシンクは割り箸で固定した。

サンプリングレートはデフォルトのままで加速度センサーの測定値を液晶に表示した。ノイズは十分低いので計測震度の計算に利用できると思う。次はFFT処理をする。

スケッチ

// I2Cdev : https://github.com/jrowberg/i2cdevlib
// LiquidCrystal_I2C :
//   http://hmario.home.xs4all.nl/arduino/LiquidCrystal_I2C/

#include <Wire.h>
#include "ADS1115.h"
#include   <LiquidCrystal_I2C.h>

ADS1115 adc0(ADS1115_DEFAULT_ADDRESS); //ADDR:GND
LiquidCrystal_I2C lcd(0x20,8,2);//I2Cアドレス、8行x2

void setup() {                
    Wire.begin();  // I2C開始
    adc0.initialize(); // ADS1115 初期化
    lcd.init();       // 液晶初期化
    adc0.setMode(ADS1115_MODE_SINGLESHOT);//シングルショット・モード
    adc0.setGain(ADS1115_PGA_4P096);//フルスケール±4.096V
}

void loop() 
  {
    adc0.setMultiplexer(ADS1115_MUX_P3_NG);//マルチプレクサ設定
    lcd.setCursor(0,0);
    lcd.print("X:");
    lcd.print(adc0.getConversion());//変換
    adc0.setMultiplexer(ADS1115_MUX_P2_NG); 
    lcd.print("   ");
    lcd.setCursor(8,0);
    lcd.print("Y:");
    lcd.print(adc0.getConversion());  
    adc0.setMultiplexer(ADS1115_MUX_P1_NG); 
    lcd.print("   ");
    lcd.setCursor(0,1);
    lcd.print("Z:");
    lcd.print(adc0.getConversion());  
    lcd.print("   ");
    delay(10);    //待ち
  }
//I2Cdev.cpp
//min関数が無いと言われるので加える
int min(int a,int b){
    if(a<b){return a;}else{return b;}
}

Intel Galileo — I/Oエキスパンダで液晶

I/OエキスパンダPCF8574で液晶を表示する
I/OエキスパンダPCF8574で液晶を表示する

前回Intel GalileoのGPIOは遅い事が分かった。I/Oが遅いと何かと不便なのでI/Oエクスパンダを利用して高速化してみる。

回路図
回路図

aitendoのGPIOエキスパンダ(I2C)に載ってるPCF8574Arduinoのライブラリにもあるので良さそう。ライブラリのインストールはLiquidCrystal_I2C.zipを展開して

arduinoのディレクトリ→libraries

の中に配置すればよい。

スケッチ

#include   <Wire.h>                //I2C用
#include   <LiquidCrystal_I2C.h> //I2C液晶用

LiquidCrystal_I2C lcd(0x20,8,2); // アドレス0x20 8x2行

void setup()
{
  lcd.init();       // 液晶初期化
  lcd.backlight();  // P7にLEDのon/offが出力できるらしい
}

void loop()
{
    while(true){
        lcd.clear();               //画面消去
        lcd.print("Hello,");       //表示
        lcd.setCursor(2,1);        //位置
        lcd.print("world.");       //表示
        for (int i=0; i<5; i++){   //点滅
            lcd.noDisplay();       //隠す
            delay(200);            //遅らせる
            lcd.display();         //現す
            delay(200);
        }
    }
}

十分な速さになった。