1 2 3 4 |
こんにちは! なかぢです。はじめてのブログ。。。頑張ります。 今日の小話は、私の経験した内容(組み込み系)についてお話ししたいと思います。 3年ほど前に、C言語を読める(できるとは言っていない。。)言って参画した案件が組み込み系でした。そこで 苦労した事や勉強になった点をお話ししたいと思います。 |
組み込み系とは?
組み込みとは何ぞや?からご説明します~。
1 2 |
家電(テレビ、冷蔵庫、エアコン)や、 今では当たり前になっている車関係(ナビゲーションシステム)などのハード機器を動かすためのプログラムの事を指します。 |
当時、私が担当したのは試作用基盤のCPU制御プログラムでした。構成図は以下のような感じ。
制御プログラムに要求された期待値はこんな感じ。
1 2 3 4 5 6 7 8 |
・UART通信ができる事。 ・SPI通信ができる事。 ・I2C通信ができる事。 ・GPIOの設定により、マイコンのポート制御がコマンドでできる事。 ・A/Dコンバートできる事。 ・RTCの時間設定・時間取得ができる事。 ・Accelerometerの角度を取得できる事。 ・Accelerometerの角度の閾値を設定できる事。 |
まてまて!いきなり話が難しくなったぞ!と思いますので、期待値に出てくる用語を説明しますね。
1 2 |
UART通信 シリアル通信の事を示す。GPIOの設定により、UART通信路を設定する。送信側はTX、受信側はRXとなる。 |
1 2 |
SPI通信 コンピュータ内部で使われるデバイス同士(例えば、CPU間通信など)の事を示す。 |
1 2 |
I2C通信 周辺デバイス(ここでは、RTC/Accelerometerを指す)との通信を確立する際に使用する。 |
1 2 3 |
GPIO マイコンのポートの事を示す。マイコンのポートに対して、決まったレジスタ値を設定することにより、UARTやSPI、I2Cなどの通信ができるようになる。 LEDのON/OFFや、信号の制御も含まれる。 |
1 2 3 4 |
A/Dコンバート Analog/Digitalコンバートの事を指す。Analog信号である電圧をDigital信号に変更することにより、電圧値などが計測できるようになる。 ※電圧を加圧・減圧する際、波形が上下する。上下した波形の値は、Analogである為、数値化することができない。そこで、Digital信号に変換することにより、数値を取得することができる。 例えば、デジタルカメラ(スチール、動画)、スキャナー、温度計、湿度計、気圧計、体重計、速度計などが挙げられます。 |
1 2 3 4 |
RTC Real Time Clockの事を示す。コンピューターが内蔵する時計で、コンピュータが電源を切られてもバックアップ電源等により時刻を刻み続けることができる。 ※この時はマイコンのRTCではなく、外部デバイス用のRTCを用いてI2C通信により制御した。 最近の自動車などは、時間を設定しておくと、エンジンを切っていても設定した時間になるとエンジンが自動でかかるような仕組みのものがあります。あれを制御しているベースがRTCですね。」 |
1 2 3 4 |
Accelerometer モーションセンサー(角度を感知するデバイス)の事を指す。X/Y/Z軸の傾斜角度を感知するセンサー 本件では、I2C通信により制御した。 例えば、AndroidやIPhoneなどので傾けると画面が横になったりしますよね? あれが、モーションセンサーの効果ですね。 |
通信方法には色々(ここでは、UART通信、SPI通信、I2C通信)とありますが、
具体的に説明すると論文ぐらいになっちゃうので、割愛します(汗
苦労した点
作成についての資料(通称:データシートと一般的には言われます。)が、CPUの取扱説明書程度の内容しかなく、通常のアプリケーションプログラムのようにググれば出てくるという内容用ではなかった。
1 2 3 |
(最近の傾向としては、CPUなどを作っているベンダーさんは、使用方法のマニュアルやプログラム作成例などは、一般公開するのをやめているみたい。) この当時、にっちもさっちもいかず、納期が切迫しててかなりやばかったので、私のとった行動は、 ベンダーさん(営業の方)を呼び出してレクチャーしてもらったw ←ふつうはやらないw |
また、データシートにちゃんと書いてあっても、日本語とは限らない。。。
※事実、RTCのデータシートは、すべて英語だった。。。
試作機は信用しちゃダメ!
相手を信用してはダメとは言ってないですよ?
でも、人間が作る試作なのだからそれが正しいとは言えないんですね~。
1 2 3 4 5 6 7 |
UARTの通信プログラムを作成していた時、’A’という文字を送信しても受信側でちゃんと受け取れなかった時があって、プログラムを見直しまくって、10営業日ほど費やしても実現できなかった。 (基盤設計者は、基盤については問題ないと言っていた。)が!、 改めて、基盤を設計者に見てもらった所、、、 設計者:”あ!!!! ちょっと待っててくださいね。” 数分後、設計者:”これで試してください。” 試してみると、ちゃんと'A'を受信している!!!! 設計者曰く、”UARTを繋ぐ配線の相性が悪かった。”らしい。。。 こんなことが、ざらにあるのでそういった意味で疑ったかかった方が良いですw |
まとめ
如何でしたでしょうか?触り程度ですが、組み込み系について執筆させて頂きました。
すごく苦労はしましたが、自分で組んだプログラムが動作する(LED光らせたり、基盤を傾けると、モーションセンサーが動作したり)すると、嬉しいし感動できますよ?
幸いにも、本社には、Raspberry Pi(ラズベリー パイ)と言う、パッケージングされた
基盤があり、休みの日(土曜日?)など本社に遊びに行けるので、色々触れたりできます。
基本的な考え方は同じなので、ひとつ覚えちゃえば、お作法は微妙に違いますが
通信制御やGPIO設定など汎用的にできますよ♪
ご興味があればぜひ。