DreamerDreamのブログ読者になるDreamerDreamのブログ夢想家の夢です。プログラミング初めてコンピュータでプログラムを組んで何かを実行させようとするとコンピュータの速度に驚くと思う。下のpythonプログラムをRaspberryPiで実行すると、1から順番に1足した値が画面出力される。str(c)実行結果12(略)1396139713981399RaspberryPiのような非力なコンピュータで速度の遅いスクリプト言語を実行させても一瞬(1秒ぐらい?)で1000回ぐらいループしているのが解る。このようにコンピュータの「一瞬」という表現は人の感覚では測れないほど高速なのだ。これを覚えておかないと電子工作の回路の設計ではまず「チャタリング」というものに悩まされることになる。マルツオンライン機械式スイッチ(トグルスイッチ・プッシュスイッチ・スライドスイッチ・機械式リレー)をコンピュータに接続して信号として入力する場合、スイッチのON-OFFの際にほぼ必ず接点がバウンドする状態が作り出されてしまう。人が「えいっ!」と”一瞬”にしてスイッチを押した瞬間、コンピュータにはON-OFF接点バウンド信号が”しばらくの間”入力されてしまう。__name__=='__main__':standby()結果count=1count=2(略)count=10count=11count=121度だけスイッチを押したハズなのに何度もカウントされてしまうのだ。これを予防する処置としてスイッチ回路の設計やプログラムで暫く待つ(20ms程度)という処理を入れなければ思ったような処理をさせることが難しくなる。このように人にとっての「一瞬」は機械にとっては「しばらくの間」だという感覚でプログラムもしないと予期せぬエラーに見舞われることがあるので要注意だ。次に「通信速度」の問題さて「光の早さ」は30万キロメートル/秒。電気信号も光の早さで伝達される。※同軸ケーブルで伝達される高周波信号は若干遅くなるらしいが、ここでは電気信号=光速としておく。1秒間に300,000kメートルというと地球7週半(一周40,000km)/秒とされ、途方も無く早いイメージだけど。「地球の裏側と通信するのにどのぐらい時間がかかるのでしょうか?」つまり、「地球半周はどのぐらい?」ということ。※実際には海底ケーブルや衛星通信等でもっと長距離になるのだけど、ここでは単純に直線で結んだ場合を想定するものとする。大雑把に計算しても最速で最低66ミリ秒はかかる。受け取った信号に対して返信するとさらに66ミリ秒。処理速度を入れず、単純に信号の往復で最速132ミリ秒です。この「ミリ秒」というのは機械にとっては「かなりの時間」なのだ。以前、コンピュータの通信エラーによりロケットの打ち上げ延期になったことがあった。宇宙開発にひとことこの0.07秒(70ミリ秒)の信号の遅れでコンピュータはエラーを発生させ、国家事業が延期になってしまったのだ。今の時代、小さなマイコンでも10MHzや8MHzという周波数で動いている。1MHzとは1秒間に1,000,000回命令処理する能力だ。300mなんと光の速度でも1クロックの間には300mしか進まない。10MHzだと30m1GHzだと0.3mだ。ケーブルが30cm以上あると1GHzのCPUの1クロックの間では通信出来ないということなのだ。一般的なPC間の通信なら「通信プロトコル」というものに合わせて組むのでこのレベルの心配は不要だが、マイコンを用いたローレベルでの通信プロトコルを自分で組むには通信ラインの長さも意識しないといけない。ものすごく高速に遠くにデータを伝達しなければいけないようなプログラムを組んだ場合、いかに必用データ量を少なくするか?がキモになってくる。動画配信サービス等はこの辺りがよく考えられていて動画の形式と視聴する端末によってデータを最小限に抑え、できるだけ近くのサーバーからデータを送れるよう工夫されている。前回は部品選択でした。12参加グループテクノロジーkampa.meはてなブログをはじめよう!DreamerDreamさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。