具体的には,printfの文字列送信にかかる時間と受信エラーの処理についてです。
ターゲットマイコンは,これまで同様SH7125,HEWとコンパイラパッケージは,
- C/C++ compiler package for SuperH RISC engine family V.9.04 Release 01
- High-performance Embedded Workshop Upgrade 4.09.01
です。まあ前回とほとんど変わってないんですが,念のため。
void main(void) { int a; double b; printf("input int data->",0); scanf("%d",&a); printf("%d\r\n",a); printf("input float data->",0); scanf("%lf",&b); printf("%lf\r\n",b); } |
![]() |
scanfの実行結果 |
![]() |
プログラム中... |
「I/Oライブラリ使用」にチェック,「ハードウェアセットアップ関数生成」は「C/C++ source file」を指定 |
void sio_init(void){ STB.CR3.BIT._SCI1=0; // SCIスタンバイ解除 SCI1.SCSCR.BYTE=0x00; // 送受信割り込み禁止、送受信禁止 PFC.PACRL1.BYTE.H=0x10; // PA3をRXD1に設定 PFC.PACRL2.BYTE.L=0x01; // PA4をTXD1に設定 SCI1.SCSMR.BYTE=0x00; // 通信フォーマット、クロックソースを選択 SCI1.SCBRR=19; // ビットレート BRR=(25000000[Hz]/(32*38400[bps])) - 1 => 19 SCI1.SCSCR.BIT.TE=1; // トランスミットイネーブル:送信動作を許可 SCI1.SCSCR.BIT.RE=1; // レシーブイネーブル:受信動作を許可 } void charput(char c){ while (SCI1.SCSSR.BIT.TDRE==0); SCI1.SCSSR.BIT.TDRE=0; SCI1.SCTDR=c; } char charget(void){ char c; while ((SCI1.SCSSR.BYTE & 0x40)==0); c=SCI1.SCRDR; SCI1.SCSSR.BYTE=SCI1.SCSSR.BYTE & 0xBF; return(c); } |
void HardwareSetup(void) { sio_init(); } |
void main(void) { int a=1; double b=1; a+=1; b=3.141592; printf("abcdefghijklmnopqrstuvwxyz\r\n",0); printf("%d\r\n",a); printf("%lf\r\n",b); } |
![]() |
TeraTermで確認した結果 |
フォトセンサの出力(モータを単三電池1本で回した場合) |
オペアンプを使った波形整形回路 |
波形整形回路の出力 |
すでに完成した回路 |
MDFを加工中 |
加工したMDF |
MDFをホットボンドで固定 |
回路を乗せた様子 |
リアビュー |
フロントビュー |
裏側 |
楽しい工作シリーズ ダブルギアボックスとトルクチューンモータPRO |
反射板をホットボンドで取り付け |
フォトセンサを取り付けたMDF板 |
ロボットのベース部分 |