全体表示

[ リスト | 詳細 ]

記事検索
検索
イメージ 1

書評 & 良書紹介 「 組込みソフトウェア開発入門 ( 技術評論社 )」
マイコン関係図書
組込み関係の本を立ち読みしていて
ちょっと気になる本を見つけた

組み込みの基本的話題が1冊に凝縮され、よく整理されている。

著者は複数ですが
その中でも統括的存在の日比野吉弘氏は1945年生まれで65年にNECに入社の履歴をもち
2004年からは社団法人組込みシステム技術協会の理事もなさっておられるそうです。

同氏がNECに入社した1965年当時といえば、もちろんまだ、CPUが存在しなかった時代
ちなみにかのCPU4004が世に出たのは1971年11月とのこと

そういう意味では、おそらく同氏は、入社後NECのマイコン・パソコン部門で
相当深いかかわりをもってきたことが想像されます。

************* 閑話休題 *************

今、ちょうど、僕と同じように
組み込みに強い関心を持ち始めた人が多いと、この本は冒頭で言っている

結局、現在のPCがあまりにも高度化・ブラックボックス化し
その先にあるのは、ビジネスソフトかマルチメディアなど

本来の電子技術を楽しむ領域からパソコンが遠い存在になってしまったことに
大きな理由があるのではないかと、自分自身を分析しているところです。

そうした意味において、組み込み系はとってもある意味

「納得できる」ソフトであり、ハードであると思います。

そのことが、愛好者をふやしているのではないでしょうか♪



あと先になりますが、この本の感想を少し(ちょっと辛口ですが、、)
結論としては、この本を読み進むうちにある本を思い浮かべました

そうです、「コンピューターはなぜ動くのか?」という本です
数年前に出された有名な本ですが、僕はこの本と同じにおいを
この「組込みソフトウェアー開発入門」に感じました。

僕はこれまで、Z80のアセンブラ、LINUXのGCC,GAS,GDBなど多少なりとも
経験してきましたし、最近はこのBLOGのとおりマイコン実機の操作経験から、この本に書かれている
アセンブラのことや、サイクルのこと、割り込みの基本動作についても少しはわかってるつもりです

でも、そういう知識や経験がない人にほんとうにこの本のことが
解かるのか?
、、、というか、自分の血と肉になるのか???ということが
ちょっと疑問です、
行間を読み取っていただけば良いのですが

結局、この本を読む前に または あとに 必ず

実機で経験をすべきだと思います。
机上の理論で、この本を読んだだけで、「解かった」と思ってほしくはないです♪

この本には、付録のCDがついていて
ある意味シュミレーションが出来るように工夫はされているようですが。。。

4人の著者の皆さんも
この本で組み込みのことがわかるとは思って無いと思います
、、、と、いうか

この本が良書であることは、明白なんですが
もし、それ以前にマイコン実機でいじったことがなければ

ちょうど、僕が今あれこれやってるように
ぜひ、いじり倒すことを、この4人の著者も読者にお勧めするんだろうな♪
って思いました。

自分の今の知識を、整理するのには大変役立ちましたし
読み物として、読むのもたのしい時間となると思います。

いずれにしても、お勧めの一冊です。
「はじめて読むマシン語」村瀬康治 アスキー出版局 以来の良書といえます♪
ちょっとほめすぎ♪♪♪



イメージ 1

昨日、●須の近くにいったので
モータードライブIC TA7291Pを買ってきた

ついでに、マブチモーターも

まだ、具体的に何かをつくろうっていう
訳ではありませんが♪♪♪


当面は、まだ
7セグLEDの二桁化に挑戦し、unsigned char型の変数の値を
表示できるようにしたいと思ってます。

7セグLEDによる 16進表示ができました

基本設計時と違うのは、ビット操作をアセンブラでせずに
C言語だけで、処理しました。

ミソは、
1、7セグLEDのAからFまでのLEDと16進で光らせるものを
  ビットであらわし
2、それを、16進に置き換え
3、配列にしてテーブル化したこと

それから、点灯させる時は
4、第7ビットから順にビット演算でXOR(アノードコモン=0で点灯のため)をとり
5、それを、シフトして1桁だけのビットにして
6、ポートレジスタにセットしていることです。



//sample18_03.c
#pragma sfr
void main(){
	unsigned char x[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe4,0xfe,0xe6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};
	unsigned char a = 0x00;
	short i,ii;   //時間待ち用
	
	PM1.0 = 0;//出力モードに設定
	PM1.1 = 0;
	PM1.2 = 0;
	PM1.3 = 0;
	PM1.4 = 0;
	PM1.5 = 0;
	PM1.6 = 0;
	P1.0  = 1;//一旦消去
	P1.1  = 1;
	P1.2  = 1;
	P1.3  = 1;
	P1.4  = 1;
	P1.5  = 1;
	P1.6  = 1;
	
	for(a=0;a<16;a++){       //変数a 0から0fまで loop
	
	  P1.0 = (x[a] ^ 0x80) >> 7; //第7BITから順に反転させて各ポートへ
	  P1.1 = (x[a] ^ 0x40) >> 6;
	  P1.2 = (x[a] ^ 0x20) >> 5;
	  P1.3 = (x[a] ^ 0x10) >> 4;
	  P1.4 = (x[a] ^ 0x08) >> 3;
	  P1.5 = (x[a] ^ 0x04) >> 2;
	  P1.6 = (x[a] ^ 0x02) >> 1;
	
	   for(ii=0;ii<4;ii++){       //時間つぶし
	    for(i=0;i<30000;i++){}
	   }
	}
	
	P1.0  = 1;//あと始末->消去
	P1.1  = 1;
	P1.2  = 1;
	P1.3  = 1;
	P1.4  = 1;
	P1.5  = 1;
	P1.6  = 1;
	
	
}





基本条件として
各ポートと点灯させるLEDの箇所の対照を示します
P10 = A(LEDの資料によるもの 一番トップの横一文字(以下右回り)
P11 = B
P12 = C
P13 = D
P14 = E
P15 = F
P16 = G
なお、点(DP)は使いませんでした

AからGまで順に光らせられるか
実験してみました。



一応成功しましたので
配線もまちがいがないことが
確認できました

しかし、ブレッドボードって、接触不良があるんですねーー

特に安いものは、要注意ということがわかりました♪




//sample18_02.c
#pragma sfr

void main(){
    short n,i,ii;
	PM1.0 = 0;
	PM1.1 = 0;
	PM1.2 = 0;
	PM1.3 = 0;
	PM1.4 = 0;
	PM1.5 = 0;
	PM1.6 = 0;
	P1.0  = 1;
	P1.1  = 1;
	P1.2  = 1;
	P1.3  = 1;
	P1.4  = 1;
	P1.5  = 1;
	P1.6  = 1;
	
		for(n=0;n<5;n++){
			for(ii=0;ii<3;ii++){
				for(i=0;i<30000;i++){}
			}
			P1.0  ^= 0x01;
		}
		
		for(n=0;n<5;n++){
			for(ii=0;ii<3;ii++){
				for(i=0;i<30000;i++){}
			}
			P1.1  ^= 0x01;
		}
		
		for(n=0;n<5;n++){
			for(ii=0;ii<3;ii++){
				for(i=0;i<30000;i++){}
			}
			P1.2  ^= 0x01;
		}
		
		for(n=0;n<5;n++){
			for(ii=0;ii<3;ii++){
				for(i=0;i<30000;i++){}
			}
			P1.3  ^= 0x01;
		}

		for(n=0;n<5;n++){
			for(ii=0;ii<3;ii++){
				for(i=0;i<30000;i++){}
			}
			P1.4  ^= 0x01;
		}

		for(n=0;n<5;n++){
			for(ii=0;ii<3;ii++){
				for(i=0;i<30000;i++){}
			}
			P1.5  ^= 0x01;
		}

		for(n=0;n<5;n++){
			for(ii=0;ii<3;ii++){
				for(i=0;i<30000;i++){}
			}
			P1.6  ^= 0x01;
		}


}



イメージ 1

7セグLED(7segled)の(1桁・ダイレクト)16進表示 プログラム設計

● 前提条件
 データー型 unsigned char
  値の範囲 0 - F

●概略
 1、配列テーブルの用意
   添え字に(0−F)の値を使う 配列のデーターは
   BITデーターをヘキサに変換後まとめて記述
   例)unsigned char x[]={0xfc,0x60,0xda,0xf2,0x66};
          0xFC <-- 1111 1100 数字の0(ゼロ)
 
 2、(仮)表示したいデーターをセット

 3、表示したいデーターを配列の添え字にする

 4、配列(添え字)で点灯データーをテーブルから拾う

 5、そのデータを一旦、メモリに格納

 6、アセンブラで
   上位ビットから順にビットの値を
   ポートに立てる
   (8番目(第0BIT)はDPのため、今回不使用)
 
   これで、表示完了

 7、END
  



しかし、8BIT一桁だけなら、なにも7segLEDを使わなくても
8つのLEDを点灯させたほうが、簡単かも、、、、、
2進でそのまま読めばいいんだから、、、、
ま、いいか、何事も経験ね♪

.


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事