フォト
2017年4月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
無料ブログはココログ

« 2015年6月 | トップページ | 2015年8月 »

2015年7月の8件の記事

2015年7月19日 (日)

Arduino IDE 1.6.5をインストールしました

Arduinoが「Arduino SRL(www.arduino.cc)」と「Arduino LLC(http://www.arduino.org/)」と
分裂してIDE環境のバージョンが今一分かりずらい状況となっています。

参考文献: SWICHI SCIENCE  - Arduinoの内部分裂について

取りあえず、私的には「Arduino SRL(www.arduino.cc)」の1.0x系と1.6.x系を利用しています。
今日は、1.0.xの利用をやめて、1.6.xに移行しようと今まで作成したスケッチを整理しました。

インストール等は全く問題なく、IDEは利用できました。

01

1.0x系よりもコンパイルしたバイナリサイズが小さくなるようです。
ただし、1.0.x系と1.6.x系では一部非互換なところがあり、1.0.xの環境は残しつつ1.6.xを使うととにました。

現時点でコンパイルエラーが発生したコード

   PROGMEM prog_uint8_t digitfont[]  = { ..
フラッシュメモリにデータを配置する場合の宣言の記述がちょっと変わったようです。
色々調べて、次のように変更する必要があるようです。
  PROGMEM const uint8_t digitfont[] = { ..

  2016/03/14 追記
     PROGMEM const uint8_t digitfont[] = { .. の形式は1.0.6でもエラーにならないので
     この形式の記述に統一した方が良いようです。
 

分裂は早期に解決して頂きたいですねえ、このままだと衰退して可能性もあります。

2015年7月11日 (土)

Aliexpressで注文したタブレットが発送されないので問い合わせると..

Aliexpressのトップページで大々的に宣伝していたタブレットを6月18日に注文したのですが、
いまだに発送されません。

Android 5.1 タブレットでほぼ全部入りの機能で$59.99という製品です。
とりあえず、Android 5.x系を触りたいと注文しました。
(現時点では$79.99です)

01

そろそろ催促しても良い頃合いだと思い、状況確認の問い合わせを行いました。
問い合わせのやり取りは下記の通りです。
(英語は得意ではないので、かなりいい加減な内容です)

02

要約すると、工場での生産が遅れていて製品が無いとのことです。
更に、キャンセルして、再注文可能することを助言してきました(上から目線的に)。

どうも、この業者は在庫が無いのに「在庫数」を表示して潤沢な在庫があるように
見せているようです。
注文を取ってから、生産の発注を行っているようです。
ただ今回は3000件以上の注文が入っているものの1台も出荷されていない模様。
業者も焦っていることでしょう。

買い手から「キャンセル」すると、買い手の都合・落度として処理されるので
当然、こちらからは「キャンセル」はしません。
今回は売り手の都合によるものなのでね。そこで、その旨の探りを相手に入れました。

自分の返答:
  『返信いただき、ありがとうございます。
   私は自動キャンセルの期限まで待ちますよ。』

それに対して売り手は
  『あなたの忍耐強さには関心するよ。
   期限直前にはあなたからキャンセルすることわ忘れないように』

さらに自分の返答:
 『キャンセル処理はシステムが自動的でやってくれます。
    私は何もする必要はありませんよね。』

と、状況を知った上で皮肉を込めた返答をしました。
相手も察したようで、返答は無しです。

今後の展開として、大量の自動キャンセルと最低評価『★☆☆☆☆』3000個が付き
信用を大きく低下するだろうと思われます。

とりあえず、私としては製品が発送されても良いし、返金でも良いです。
どうなるやら、この業者の行く末を生暖かく見守っていきます。

2015/07/13 追記
本日出荷の連絡を受けました。
多分、製品が確保出来たのでクレームを言っている私を優先的に発送したと思われます。
ただ、品質に若干不安です。問い合わせのやり取りではソフトウェア面で遅れているとの
記述があります。動作不安定な気がします。

2015/08/16 追記
製品は取りあえず、到着しました。結局最初の出荷通知のトラッキング番号は偽物で
荷物が全く追跡できない状態でした。
10日ほどたってから別の番号の連絡があり、追跡できるようになりました。
自動キャンセル回避のために、偽の出荷情報流して実際に出荷した段階で
改めてトラッキング番号を連絡してきたようです。

製品は到着まで50日かかりました。
実際の物自体は予想に反して、まともな製品でした。
Android 5.1がちゃんと搭載されており、フリーズ等の発生は全く発生しません。



2015年7月10日 (金)

IchigoJamで使えそうな障害物センサーを使ってみる

IchigoJam等の電子工作で使えそうな障害物センサーを購入しました。
2個で172円と安く、GND、VCC、OUT(アナログ)の3線で利用出来ます。

01

実物は下の写真のような感じです。
商品の説明が全くないです。
赤外線LEDとフォトトランジスタ(?)で反射した光を受信して障害物を検出するっぽいです。

Dscn3968

まずはこのモジュールの特性を調べてみます。
IchigoJamにつなげて、消費電流を調べてみると、13.8mAくらいでした。

Dscn3939

次に、出力電圧を調べてみると、障害物が無い場合は、2.0Vくらいです。

Dscn3970

更に障害物を置いて、距離と出力電圧の関係を調べてみました。
距離と出力電圧の関係をグラフにすると次のような感じになりました。

01_2

障害物の検出は最大値2.0Vの2/3の1.33Vあたりの8cmくらいから使えそうです。
ただし、反射した光を測定するため、障害物の色・材質によって値がかなり異なります。
上記のグラフは白い紙の反射です。黒い布だと1.33Vとなるのは5cmくらいでした。

まあ、障害物を検出する分には使えそうです。

IcigoJamで使う場合は、本モジュールのOUTをアナログ入力端子(IN2)に接続し、
ANA関数で値を読むことが出来ます。

02

3.3Vで1024なので、 8cm先の障害物の検出は
1024/3.3 x 1.33 = 412.70 となり、 400以下で障害物ありと判断すれば良さそうです。

2015年7月 5日 (日)

2台のarduinoをI2Cバスで接続して通信を行う実験(2)

以前やった2台のArduinoをI2Cバスを使って通信する実験の続きです。

02

目的は、ちょっと前に気づいたArduinoのI2CライブラリWireのスレーブの不具合
再確認
です。
前回のデータの送信のみで問題は生じませんでしたが、
今回はコマンド送信に応じたデータを受信するような通信形態を試してみました。
Arduino IDEは1.06を利用しました。

結論を先にいうと、やはりライブラリWireに不具合がありスレーブが正常動作しません。
Arduino同士でもダメでした。
「IchigoJamとArduinoでI2Cバス通信を試してみる」で行ったライブラリ修正が必要です。

\libraries\Wire\utility\twi.cのISR(TWI_vect)のswitch文のtwi_stop()をコメントアウトすると
正常に動作します(468行あたり)。

case TW_SR_STOP: // stop or repeated start condition received
    ・・・・
      // sends ack and stops interface for clock stretching
      //twi_stop();
      // callback to user defined callback
    ・・・・

動作確認プログラム
マスター側
//
// arduino I2Cマスタ
//

#include <Wire.h>
#include <stdlib.h>
void setup() {
 Serial.begin(115200); 
 Wire.begin() ;       // I2Cの初期化、マスターとする
 delay(5000) ;        // 5秒後に開始
}

// データの送信
void data_req(uint8_t c) {
  uint8_t d;
  int i;
  Wire.beginTransmission(0x10) ;          // 通信の開始処理
  Wire.write(c) ;                         // 通信データ送信
  Wire.endTransmission(false);
  Wire.requestFrom(0x10,12);
  while (Wire.available()) {
   d = Wire.read();
    Serial.write(d);    
  }  
  Serial.println();
  Wire.endTransmission();
}

// 繰り返し実行されるメインの処理関数
void loop() {
 int i;
 for (i=0;i<3; i++) {
   data_req(i);
   delay(2000);
 }  
}

スレーブ側

#include <Wire.h>

byte d;
  
// マスターからを受信
void receiveEvent(int n) {
  Serial.println("recept data");
  for (int i=0; i < n; i++) {
    if(Wire.available()) {
        d = Wire.read();
        Serial.print(d,HEX);
        Serial.print(" ");
    }
    Serial.println();
  }
}

// マスターからのリクエストに対するデータ送信
void requestEvent() {
  Serial.println("resept request.");
  if (d == 0) {
    Wire.write("Hello,World.");
  } 
  if (d == 1) {
    Wire.write("Arduino Uno.");
  } 
  if (d == 2) {
    Wire.write("I2C Testing.");
  } 
}

//セットアップ
void setup() {
  Serial.begin(115200);
  Wire.begin(0x10) ;                 // I2Cの初期化、自アドレスを10とする
  Wire.onRequest(requestEvent) ;     // マスタからのデータ取得要求のコールバック関数登録
  Wire.onReceive(receiveEvent) ;     // マスタからのデータ送信対応のコールバック関数登録
  Serial.println("i2c slave test");
}

void loop() {
}

プログラムの概要
マスター側は0~2のコードを送信してそのコードに該当するデータを受信してます。
スレーブ側は0~2に該当するデータを送信します。

2016/05/08 追記
  このI2Cライブラリ(Wire)の不具合はArduin IDE 1.6.6で対応されています。

仮想アドレスの実アドレスを調べるプログラム

Ichiojamのファームウェアが更新されるたびに手作業で調べていたのですが、
C言語からプロラムカウンタ(PC)の値を読む方法が分かったので、調べるプロラムを作成しました。

現時点の最新版(1.0.2b2)では下記の通りになります。

01

プログラムから取得できるので、アドレスがバージョンにより異なる問題は、
プログラムで回避できそうです。

プログラムは下記の内容となります。

10 POKE #700,#78,#46,#80,#b2,#70,#47
20 POKE #710,#80,#20,#c0,#01,#05,#4b,#02,#68,#9a,#42,#04,#d0,#a0,#23,#04,#30
30 POKE #720,#db,#01,#98,#42,#f6,#d1,#80,#b2,#70,#47,#c0,#46,#55,#AA,#55,#AA
40 U=USR(#700,0)-4
50 S=USR(#710,0)-16
110 ?"MEMORY MAP"
125 ?"#000 CHR 0x0000";HEX$(S,4)
130 ?"#700 PCG 0x1000";HEX$(U,4)
140 ?"#800 VAL 0x1000";HEX$(U+#100,4)
150 ?"#900 VRM 0x1000";HEX$(U+#200,4)
160 ?"#C00 PRG 0x1000";HEX$(U+#500,4)

 

IchigoJam BASICだけでは無理なのでC言語で実装した下記のプログラムを呼び出しています。
10行から30行がコンパイルしたコード(マシン語)です。

#include "lpc_types.h"
uint16_t usr_asm(uint16_t c) {
	uint16_t* adr;
	asm (
			"mov %0,pc \n"
			:"=r"(adr)
			:
	);
	return (uint16_t)adr;
}

uint16_t usr_asm2(uint16_t c) {
	uint32_t* adr;
	for (adr=0x00004000; adr < 0x00005000; adr++) {
			if (*adr == 0xaa55aa55)
			break;
	}
	return (uint16_t)adr;
}

2015年7月 3日 (金)

ココログでソースリストに行番号表示を試してみたのですが..

SyntaxHighlighter を使うと、ホームページに掲載のソースリストに簡単に行番号を
お洒落なレイアウトで表できるのです。

ブログ(ココログ)でもソースリストをお洒落に表示したいと、色々とやってみたのですが
ブログトップページのみしか正常に表示されないみたいです。

下記がやってた例です。

#include "lpc_types.h"
#define VRAM_ADR	((uint8_t*)0x10000388)	// VRAM先頭アドレス
#define FONT_ADR 	((uint8_t*)0x0000496C)	// フォントデータ先頭アドレス
#define VALUE_ADR  ((uint16_t*)0x10000288)	// 変数格納アドレス
#define CHR_BNK 	0x80

uint16_t draw_font(uint16_t c) {
	uint8_t* 	f_p = FONT_ADR + c*8; 	// フォント格納アドレス
	uint16_t* 	h_p = VALUE_ADR; 		// 変数格納アドレス
	uint8_t* 	v_p = VRAM_ADR; 		// VRAMアドレス
	uint8_t		d;
	int i,j;

	v_p+= *h_p;
	v_p+= *(h_p+1)*32;
	for (i=0; i<4;i++) {
		for (j=0;j<4;j++) {
			d = ( *f_p >> (6-(j<<1)) ) &3;
			*v_p = (d>>1 | (d&1)<<1) + CHR_BNK;
			d = ( *(f_p+1) >> (6-(j<<1)) ) &3;
			*v_p += (d>>1 | (d&1)<<1)<<2;
			v_p++;
		}
		v_p+=28;
		f_p+=2;
	}
	return 0;
}

直接本ページ単体で表示されるとだめっぽいです。 もうちょっと試行錯誤してみます。

追記
単体ページでダメな原因が分かりました。トップページと単体ページでは
JavaScript、cssファイルの配置場所の相対パスが異なるためでした。
絶対パス指定にすることで対応出来ました。

う~ん、しかしこれはHTMLタグのエスケープ処理漏れのバグでスクリプトが
埋め込めたような感じです。そのうち実行できなくなると思われんす。

2015年7月 1日 (水)

Raspberry Pi 2で 「鬼畜王ランス」を動かしてみる

Raspberry Pi 2が予想以上に高性能で、デスクトップ環境でかなり利用できそうです。
当初の電子工作用用途から、方向がずれて利用しています。

アリスソフトが「配布フリー宣言」と称して公開している「畜生王ランス」をRasberry Piで動かしてみました。
※ 一応、18禁ゲームなので18歳未満はご注意願います。

Rasberry Pi 2で利用できる、アリスソフトのゲームエンジン System3.5が既に用意されています。
それをインストールして、別途「畜生王ランス」をダウンロードして動いちゃいました。

05

音は鳴らないですが、取りあえずプレイは出来ます。

06

表示等も問題なさそうです。

07_2

一応、環境等の設定を以下に記載します。

・ゲームエンジン、フォントのインストール
  $sudo apt-get install xsystem35  fonts-ipafont fonts-ipaexfont

  もしらしたら、リポジトリの追加しないとだめかも知れません。
  私の環境では/etc/apt/sources.list に次の1行を追加しています。
    deb http://ftp.jaist.ac.jp/raspbian wheezy main contrib non-free rpi

  ユーザーのホームディレクトリで、設定ファイル .xsys35rc を新規作成して下記の
  定義を行います。

  font_device: ttf
  ttfont_mincho: /usr/share/fonts/truetype/fonts-japanese-mincho.ttf
  ttfont_gothic: /usr/share/fonts/truetype/fonts-japanese-gothic.ttf

・鬼畜王ランスのダウンロードと解凍
  下記のサイトからダウンロードします。
    アリスソフト アーカイブズ http://retropc.net/alice/menu.html
  KICHIKU_WIN.RAR を解凍し、DAEMON Toolsなどを使ってイメージファイルを
  マウントして中にあるGAMEDATAフォルダをRasberry Pi 2に持っていきます。

イメージファイルごと持っていてRasberry Pi 2でマウントの可能だと思われますが、
今回は取りあえず、必要最低限ファイルのみでのプレイです。 

・ゲームのプレイ
ターミナルを開き、フォルダGAMEDATAに移動後、コマンドxsystem35を実行します。

もっと、色々とやれば音等も出せると思います。

「鬼畜王ランス」は、既にChromeのアプリケーションとして動くらしいのでそちらも後で試してみます。

Raspberry Pi - Xming(Xサーバー)を試してみました

Raspberry Piをリモートで利用したいと思い、Windows 8.1にXmingをインストールして、
リモートデスクトップ環境を試してみました。

Xウィンドウシステムの利点を生かして、マルチユーザでのデスクトップが利用可能です。

02

Raspberry Piに異なるユーザーでログインし、それぞれのデスクトップ環境を利用しています。

03

一応、実用レベルですが、Xming若干怪しいです。ログアウトしてログイン画面(lightdm)を
表示する直前でしょうか、Xmingが異常終了してしまいます。

04

VNCを使った方が無難化もしれませんね。

« 2015年6月 | トップページ | 2015年8月 »