世界は動いている、凄い勢いで

Webの投稿を頼りにディープラーニングによる画像認識をやってみた。
それもGoogleが見出した最先端のアルゴリズムだ。
認識した画像を日本語でしゃべるおまけもあったので、それも入れ込んだ。
こちらも音声合成としてはかなり評価の高いものだ。
材料費は1万弱、動くまでソフトウェアーの構築に1週間くらいか・・。
こんなことが誰でも出来る時代だ。世界中の誰でも・・。
f0165850_22220142.jpg



[PR]
# by clooney_08jp | 2017-05-15 22:40 | 雑感

窓際からも追い出され


定年を迎えようとしている矢先、所属部署のリストラ。
窓際社員の再雇用なぞとんでもないとなり、1か月前倒しで早期退職しました。

地元に帰って就活するも、わざわざ爺を雇ってくれる地元企業は全くなし。
旧知を頼ろうかとも思いましたが、やはり迷惑そう。

仕方なしに全国どこでもOKとしたら、近畿で最先端技術をやらせてくれると。
またまた単身赴任となり、精一杯頑張ってみたものの、そう簡単に成果は出せない。
契約更新打ち切りとなり、失職するところを別の職場に異動してもらいくびは繋がりました。

着任前、欠勤という形で休暇をとり念願のところへ。
f0165850_22461046.jpg
まあ、叶ったのだしこれから先は余生を楽しみますか。


[PR]
# by clooney_08jp | 2017-04-08 23:04 | 雑感

My Mouse製作忘備録3

一応PWMの基本ができたので、実践にむけ
目指したのは、こちら・・stepping motor driver L6470の波形
f0165850_14421478.jpg

sin波形にするとなめらかな駆動ができるらしい、マイクロステップ駆動とか
・・これはバイポーラ。
まず、Sin波テーブルを準備。位相がずれてたのも。
int sin_wave[18]
= {0,17,34,50,64,77,87,94,98,100,98,94,87,77,64,50,34,17};
int sin_wave2[18]
= {100,98,94,87,77,64,50,34,17,0,17,34,50,64,77,87,94,98};
で、ポートの設定、割り込みなどを書き直し、得られた波形がこちら・・ユニポーラで。
f0165850_1451711.jpg

しかし、これだけで7144のポートEを全部つぶす。CQのボードでは、他のPWM端子は取り出しにくい。
なんか同じような波形をゲートかけて出してるだけなので、ちょこっと外付けLogic追加か?
あるいは、波形を出しておいて、ポートから引き込んで、ソフトでマルチプレクスして、再び別ポートから出すか?一基板一モータドライブとして、基板を2枚にするか?・・いずれにせよ、美しくない。
コードはこちら・・前回と差の大きい関数を抜粋。
void init_PWM(void)
{
//モジュールスタンバイコントロールレジスタ1、2(MSTCR1、MSTCR2)
//マルチファンクションタイマパルスユニット(MTU)
MST.CR2.BIT._MTU = 0;// MSTCR2.BIT.MSTP13 = 0; -> enable
//タイマアウトプットマスタイネーブルレジスタ(TOER)
//MTU.TOER.BYTE = 0xFF;
MTU.TOER.BIT.OE4D = 1;//1: MTU 出力許可
MTU.TOER.BIT.OE4C = 1;//1: MTU 出力許可
MTU.TOER.BIT.OE4B = 1;//1: MTU 出力許可
MTU.TOER.BIT.OE4A = 1;//1: MTU 出力許可
MTU.TOER.BIT.OE3D = 1;//1: MTU 出力許可
//MTU.TOER.BIT.OE3C = 1;//1: MTU 出力許可 undefined
MTU.TOER.BIT.OE3B = 1;//1: MTU 出力許可
//MTU.TOER.BIT.OE3A = 1;//1: MTU 出力許可 undefined

/* MTU3 TIOC3A PWM MODE 1 設定 */
//タイマコントロールレジスタ(TCR)
//MTU3.TCR.BYTE = 0x23;
MTU3.TCR.BIT.CCLR = 1;//TGRA のコンペアマッチ/インプットキャプチャでTCNT クリア
MTU3.TCR.BIT.CKEG = 0;//00:立ち上がりエッジでカウント
MTU3.TCR.BIT.TPSC = 3;//内部クロック:Pφ/64 でカウント
//タイマI/O コントロールレジスタ(TIOR)
//MTU3.TIOR.BYTE.H = 0x12;
MTU3.TIOR.BIT.IOB = 1;//初期出力は0出力,コンペアマッチで0出力
MTU3.TIOR.BIT.IOA = 1;//初期出力は0出力,コンペアマッチで1 出力
//MTU3.TIOR.BYTE.L = 0x12;
MTU3.TIOR.BIT.IOD = 1;//初期出力は0出力,コンペアマッチで0出力
MTU3.TIOR.BIT.IOC = 1;//初期出力は0出力,コンペアマッチで1 出力
//タイマモードレジスタ(TMDR)
//MTU3.TMDR.BYTE = 0xC2; PWM MODE1
MTU3.TMDR.BIT.MD = 2;//PWM モード1

/* MTU4 TIOC4A PWM MODE 1 設定 */
//タイマコントロールレジスタ(TCR)
//MTU4.TCR.BYTE = 0x23;
//MTU4.TCR.BIT.CCLR = 1;//TGRA のコンペアマッチ/インプットキャプチャでTCNT クリア
MTU4.TCR.BIT.CCLR = 3;//同期クリア/同期動作をしている他のチャネルのカウンタクリアで
//TCNT をクリア
MTU4.TCR.BIT.CKEG = 0;//00:立ち上がりエッジでカウント
MTU4.TCR.BIT.TPSC = 3;//内部クロック:Pφ/64 でカウント
//タイマI/O コントロールレジスタ(TIOR)
//MTU4.TIOR.BYTE.H = 0x12;
MTU4.TIOR.BIT.IOB = 1;//初期出力は0出力,コンペアマッチで0出力
MTU4.TIOR.BIT.IOA = 1;//初期出力は0出力,コンペアマッチで1 出力
//MTU3.TIOR.BYTE.L = 0x12;
MTU4.TIOR.BIT.IOD = 1;//初期出力は0出力,コンペアマッチで0出力
MTU4.TIOR.BIT.IOC = 1;//初期出力は0出力,コンペアマッチで1 出力
//タイマモードレジスタ(TMDR)
//MTU4.TMDR.BYTE = 0xC2; PWM MODE1
MTU4.TMDR.BIT.MD = 2;//PWM モード1
//タイマシンクロレジスタ(TSYR)
MTU.TSYR.BIT.SYNC4 = 1;//1:TCNT_4、TCNT_3 は同期動作
MTU.TSYR.BIT.SYNC3 = 1;//1:TCNT_4、TCNT_3 は同期動作
//タイマインタラプトイネーブルレジスタ(TIER)
MTU3.TIER.BIT.TGIEA = 1;// enable interrupt TGRA
//MTU4.TIER.BIT.TGIEA = 1;// enable interrupt TGRA
//インタラプトプライオリティレジスタ E
INTC.IPRE.BIT._MTU3G = 3;//割り込み要因MTU0のTGIプライオリティ15
INTC.IPRF.BIT._MTU4G = 2;//割り込み要因MTU0のTGIプライオリティ15
}
//割り込み
void int_mut3_tgia3(void)
{
MTU3.TSR.BIT.TGFA = 0;
MTU3.TGRB = (int)(sin_wave[index_sin]*sin_period);
MTU3.TGRD = (int)(sin_wave2[index_sin]*sin_period);
MTU4.TGRB = (int)(sin_wave[index_sin]*sin_period);
MTU4.TGRD = (int)(sin_wave2[index_sin]*sin_period);
if(index_sin%9 == 0){
switch(PWMout_sel){
case 0: MTU3.TIOR.BIT.IOA = 2;//初期出力は0出力,コンペアマッチで1 出力
MTU3.TIOR.BIT.IOC = 1;//初期出力は0出力,コンペアマッチで0 出力
MTU4.TIOR.BIT.IOA = 1;//初期出力は0出力,コンペアマッチで1 出力
MTU4.TIOR.BIT.IOC = 2;//初期出力は0出力,コンペアマッチで1 出力
break;
case 1: MTU3.TIOR.BIT.IOA = 2;//初期出力は0出力,コンペアマッチで1 出力
MTU3.TIOR.BIT.IOC = 2;//初期出力は0出力,コンペアマッチで0 出力
MTU4.TIOR.BIT.IOA = 1;//初期出力は0出力,コンペアマッチで1 出力
MTU4.TIOR.BIT.IOC = 1;//初期出力は0出力,コンペアマッチで1 出力
break;
case 2: MTU3.TIOR.BIT.IOA = 1;//初期出力は0出力,コンペアマッチで1 出力
MTU3.TIOR.BIT.IOC = 2;//初期出力は0出力,コンペアマッチで0 出力
MTU4.TIOR.BIT.IOA = 2;//初期出力は0出力,コンペアマッチで1 出力
MTU4.TIOR.BIT.IOC = 1;//初期出力は0出力,コンペアマッチで1 出力
break;
case 3: MTU3.TIOR.BIT.IOA = 1;//初期出力は0出力,コンペアマッチで1 出力
MTU3.TIOR.BIT.IOC = 1;//初期出力は0出力,コンペアマッチで0 出力
MTU4.TIOR.BIT.IOA = 2;//初期出力は0出力,コンペアマッチで1 出力
MTU4.TIOR.BIT.IOC = 2;//初期出力は0出力,コンペアマッチで1 出力
break;
}
if(++PWMout_sel == 4) PWMout_sel = 0;
}
if(++index_sin == 18) index_sin = 0;
}
MTU3と4は同期にしたので、すこしゴミが残ってるかも
[PR]
# by clooney_08jp | 2015-02-20 15:07 | 科学、技術

My Mouse製作忘備録2

PWMを出力するだけで、手間取りました。
割り込みでパルス幅を徐々に狭くしていくプログラム例
まず設定
void init_IO(void){
 //ポートEコントロールレジスタL1、L2(PECRL1、L2)
 //PFC.PECRL1.WORD = 0x5555;PFC pin functio controller
 PFC.PECRL1.BIT.PE15MD = 1; //01:TIOC4D 入出力(MTU)
 PFC.PECRL1.BIT.PE14MD = 1; //01:TIOC4C 入出力(MTU)
 PFC.PECRL1.BIT.PE13MD = 1; //01:TIOC4B 入出力(MTU)
 PFC.PECRL1.BIT.PE12MD = 1; //01:TIOC4A 入出力(MTU)
 PFC.PECRL1.BIT.PE11MD = 1; //01:TIOC3D 入出力(MTU)
 PFC.PECRL1.BIT.PE10MD = 1; //01:TIOC3C 入出力(MTU)
 PFC.PECRL1.BIT.PE9MD = 1;  //01:TIOC3B 入出力(MTU)
 PFC.PECRL1.BIT.PE8MD = 1;  //01:TIOC3A 入出力(MTU)
 //ポートE・IO レジスタL(PEIORL)
 PFC.PEIORL.WORD = 0xFF00; //TIOC 3,4 -> out
}
void init_PWM(void){
 //モジュールスタンバイコントロールレジスタ1、2(MSTCR1、MSTCR2)
 MST.CR2.BIT._MTU = 0;// MSTCR2.BIT.MSTP13 = 0; -> enable
 //タイマアウトプットマスタイネーブルレジスタ(TOER)
 //MTU.TOER.BYTE = 0xFF;
 MTU.TOER.BIT.OE4D = 1; //1: MTU 出力許可
 MTU.TOER.BIT.OE4C = 1; //1: MTU 出力許可
 MTU.TOER.BIT.OE4B = 1; //1: MTU 出力許可
 MTU.TOER.BIT.OE4A = 1; //1: MTU 出力許可
 MTU.TOER.BIT.OE3D = 1; //1: MTU 出力許可
 //MTU.TOER.BIT.OE3C = 1; //1: MTU 出力許可 undefined
 MTU.TOER.BIT.OE3B = 1; //1: MTU 出力許可
 //MTU.TOER.BIT.OE3A = 1; //1: MTU 出力許可 undefined
 /* MTU3 TIOC3A PWM MODE 1 設定 */
 //タイマコントロールレジスタ(TCR)
 //MTU3.TCR.BYTE = 0x23;
 MTU3.TCR.BIT.CCLR = 1; //TGRA のコンペアマッチでTCNT クリア
 MTU3.TCR.BIT.CKEG = 0; //00:立ち上がりエッジでカウント
 MTU3.TCR.BIT.TPSC = 3; //内部クロック:Pφ/64 でカウント
 //タイマI/O コントロールレジスタ(TIOR)
 //MTU3.TIOR.BYTE.H = 0x12;
 MTU3.TIOR.BIT.IOB = 1; //初期出力は0出力,コンペアマッチで0出力
 MTU3.TIOR.BIT.IOA = 2; //初期出力は0出力,コンペアマッチで1 出力
 //MTU3.TIOR.BYTE.L = 0x22;
 MTU3.TIOR.BIT.IOD = 2; //temporaly
 MTU3.TIOR.BIT.IOC = 2; //temporaly
 //タイマモードレジスタ(TMDR)
 //MTU3.TMDR.BYTE = 0xC2; PWM MODE1
 MTU3.TMDR.BIT.MD = 2; //PWM モード1
 //タイマインタラプトイネーブルレジスタ(TIER)
 MTU3.TIER.BIT.TGIEA = 1; // enable interrupt TGRA
 //インタラプトプライオリティレジスタ E
 INTC.IPRE.BIT._MTU3G = 15; //割り込み要因MTU0のTGIプライオリティ15
}
実行は
void PWM_FW(void){
MTU3.TGRA = 7500;
MTU3.TGRB = 3250; //パルス幅 = 周期/2
MTU3.TSR.BIT.TGFA = 0;
set_imask(0);
MTU.TSTR.BIT.CST3 = 1; //カウント開始
}
//割り込み
void int_mut3_tgia3(void){
MTU3.TSR.BIT.TGFA = 0;
if(TGAint < 3000) TGAint++;
MTU3.TGRB = 3250 - TGAint;
}
結果は
f0165850_933239.png

ルネサスのアプリケーションノートの定義がHEWの定義と名称が異なるので、非常に紛らわしい。
たとえば、MSTCR2.BIT.MSTP13 は MST.CR2.BIT._MTU
また割り込み関数は書きやすく出来てますが、レベルの設定をしておかないと動かないので要注意。
 INTC.IPRE.BIT._MTU3G = 15; //割り込み要因MTU0のTGIプライオリティ15
・・15は高過ぎ?
[PR]
# by clooney_08jp | 2015-02-19 09:42 | 科学、技術

My Mouse製作忘備録1

CQ出版のSH7144ボードとRaspberry Pi B+で以前製作しかけたMicro Mouseを
復活させてみます。ただ復活だけでなく、一応画像認識制御を目指します。

とりあえず動いたのはこちらまで
https://www.youtube.com/watch?v=QLAvrc9MRlY
↑はSH-2Aですべてコントロールしたけど、電気系を上記の構成に変更する。

で、第一弾

SH7144ボードのJTAGのピン配が変わっているので要注意。
f0165850_11345267.jpg

・・JTAGはピン配に規定はないらしい。

世の中、こういう細かい食い違いが、ごまんと(ご億万と)あるに違いない。
よくぞ成り立ってるものですな、インターネット社会は。
[PR]
# by clooney_08jp | 2015-02-13 11:44 | 科学、技術