RaspberryPi Model A+ 256MBが届いた。
以前作ったRaspberryPi地震計より一回り小さなボードだ。直接ネット接続はできないので、別の方法を考えなければならない。ModelAで使ったSDメモリをそのまま移植できるなら簡単かも知れない。
RaspberryPi Model A+ 256MBが届いた。
以前作ったRaspberryPi地震計より一回り小さなボードだ。直接ネット接続はできないので、別の方法を考えなければならない。ModelAで使ったSDメモリをそのまま移植できるなら簡単かも知れない。
Beaglebone Blackを入手した。
特に何も調べてないがミニpcという理解で良いんだろうか。element14というのは珪素の事だろう。きっとそうだ。
HDMI端子が有るようだけど、小さいな。Dタイプの変換アダプタを買って来よう。
前回LTC2450-1モジュールを試したが期待した変換速度が得られなかった。
チップを拡大して観察すると、なんだか違うチップが載ってるような気がしてきた。LTC2450-1ではなくてLTC2450ではないか?
データシートによればLTC2450-1にはLDBZとマーキングされていて、
LTC2450にはLCTRとマーキングされている。
LTC2450とすると変換速度は実測値と一致する。
追記:秋月に問い合わせフォームで知らせたところ、「ご指摘の通り」との返答があった。現在は販売停止中のようだ。
追記2:販売再開された。
秋月で売ってる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); }
pc watchによると、6月27日にGalileo2が提供開始されるらしい。発熱と入出力が改善していれば欲しい。
mbedに秋月で売ってるAQM0802を接続する。液晶コントローラはST7032で、同じチップを載せたSB1602E用のプログラムが使えた。
TextLCD SB1602E sample program
AQM0802のI2Cバスはプルアップが必要。変換基板の裏面のプルアップ用ジャンパにハンダを盛る。
次はfftと計測震度の計算をする。
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を接続する。
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では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のGPIOは遅い事が分かった。I/Oが遅いと何かと不便なのでI/Oエクスパンダを利用して高速化してみる。
aitendoのGPIOエキスパンダ(I2C)に載ってるPCF8574はArduinoのライブラリにもあるので良さそう。ライブラリのインストールは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); } } }
十分な速さになった。