見ているだけで楽しい!PIC-P18(P28)-LCDで素数発生・表示
「PIC-P18-LCD すぐに使える!液晶表示、LED、汎用スイッチ、RS232C付き18ピンPICマイコン開発ボード完成品」と「PIC-P28-LCD すぐに使える!液晶表示、LED、汎用スイッチ、RS232C付き28ピンPICマイコン開発ボード完成品」を使って、2から65000までの「素数」を計算し、液晶表示器とシリアルを通してパソコン画面に表示する装置を作りました。(注:こちらのプログラムは上記の製品に付属しているマイコンICに出荷時にサンプルプログラムとして書き込まれています。電源を入れるとすぐに実行されます。ぜひお試しください。)
眠れない夜に最適です。見ているだけで楽しくなります。きっと!
素数とは:
素数とは、「1」と「自分自身」以外の数字では割り切れない数字のことです。たとえば、2、3、5、7、11、13、17、・・・です。素数はひじょうに不思議で魅力的な数字なので、歴史的にも多くの数学者により、研究されてきました。図書館や書店に行くと、素数だけを説明した本が何冊もあるのに驚きます。
2以外は、すべて奇数、10までに4個(40%)、100までに25個(25%)あり、数字が大きくなると徐々に数が減っていきますが、かといって、大きくそれぞれの値が離れているわけでもなく、かといって突然2個とびで出現したりします。不思議です。
いまのところ、素数を求める方程式がないようで、一般的に総当りにより計算するようです。つまり、その数が素数かどうかは、ひたすら割り算して割り切れるかどうかを検証します。
コンピュータのプログラムでは一般に「エラトステネスのふるい」という方法が使われます。
ここで、公開しているPICマイコンのプログラムも「エラトステネスのふるい」方法です。多くの雑誌に掲載されています。昔々、学校の「FORTANプログラム講義」で習ったプログラムをCCS社のC言語で書き直しました。しかし、実際に計算している部分は、ほんの数行です。
計算手順:(詳しくは公開しているCソースを参照してください)
きわめて簡単です。
1.素数か否かを調べる数字「p」(pとします)の平方根「ルートp」を求める。
2.3からルートp以下の整数までの奇数でpを割り算する
(奇数だけで割り算するのは、素数が2以外は偶数ではないからです。偶数で割り切れることは、2で割り切れることになってしまいます)
(たとえば、101が素数か否か調べるときは、その平方根以下の整数、つまりこの場合10ですので、3から10までの奇数で割り算します。つまり3、5、7、9で割り算します。これで割り切れれば、これは素数ではありません。割り切れなければ素数です)(最大公約数は当然ルートpかそれより小さい整数のはずなのでルートpまでの奇数で割り算しています)
3.3からルートp以下の整数までの数で割り切れた場合は何もせず、pに2を加算した数が素数か否か再度計算する(2を加算するのは、素数は2以外は必ず奇数だからです)
4.ルートp以下の整数で割り切れなかった場合、それは素数です。これをRS232Cシリアルインターフェイスを通してPC(ハイパーターミナル使用。9600bps、ストップビット1、パリティーなし、ハンドシェークなし、に設定)に送り、同時に液晶表示装置に表示します。(2、と3は素数ですが、プログラムでは計算していません。そのままPRINT文で表示しています。公開しているCのソースプログラムを見ていただければわかりますが、2と3を計算対象に入れると、プログラムがややこしくなります。ぜひご自分で作って、お確かめください)
液晶表示画面では1行目に、その素数が2から何個目の素数から「n=」として表示し、そして2行目に、素数そのものを表示します。見て楽しむためにわざと表示するたびに「遅延時間0.3秒」を入れています。取り去るとかなり早く、65000までの素数を表示します。動作確認のために表示するたびにLEDを点灯、または消灯しています。また、計算中に、「汎用スイッチ」を押している間は、停止し、計算結果を確認できます。
使い方:
PIC-P18-LCD マイコン開発ボードおよびPIC-P28-LCD マイコン開発ボードには、出荷時にこのサンプルプログラムが書き込まれたPICマイコンICが実装されているので、電源を接続すれば、すぐに素数を発生します。詳しくは公開しているビデオを参照してください。
(注意:PCに接続するときは、ハイパーターミナルを使用し、9600bps、ストップビット1、パリティーなし、ハンドシェークなしに設定します。またマイコンボードのシリアル信号(ポートA2とTX端子、ポートA3とRX端子)をハンダ付けします。出荷時には接続されていませんので、RS232C信号は出力されません!)
1.電源をオンにする(サンプルプログラムがPICマイコンに入っていること)。液晶画面に「Get prime number! Press Start」(訳:素数を計算するよ!スタートを押してね!)と表示されます。 2.「汎用スイッチ」を押す。計算と表示を開始します。 |
|
3.「汎用スイッチ」を押している間は、計算と表示を停止します。 |
|
パソコンのモニター画面(ハイパーターミナル使用。設定:9600bps、ストップビット1、パリティーなし、ハンドシェークなし) |
|
PIC-P18-LCDのサンプルプログラムでパソコンモニターに素数を表示させるための配線。 PIC-P18-LCDのハンダ面でシリアル信号(ポートA2とTX端子、ポートA3とRX端子)をハンダ付けする。 |
|
PIC-P28-LCDのサンプルプログラムでパソコンモニターに素数を表示させるための配線。 PIC-P28-LCDのハンダ面でシリアル信号(ポートA2とTX端子、ポートA3とRX端子)をハンダ付けする。 |
参考資料:
PICP18LCDマニュアル(PDF)
PICP28LCDマニュアル(PDF)
書き込まれているサンプルプログラム(zip)
2013-02-28 05:41