目次
たまには、金曜日のうちに日誌を書いてみようと思います。
先週、赤外線リモコン受信機が蛍光灯も拾ってしまうのを除去するために、
ローパスフィルタ(22μF、100Ω)をつけました。
先週、波形を見たときは全く除去されていませんでした。
でも、今日もう一度見てみると…
ちゃんと除去されていました。何でだろう。
1週間経ったら、ローパスフィルタの効果が現れ始めた…?
次に、リモコンの信号を受信したら、LEDが点灯/消灯するプログラムを作ってみます。
TVのリモコンの1chを押すと、
0(500μs)→1(2ms)→0(500μs)→…
という感じの波形が受信されていました。
とりあえず、この内3ヶ所をチェックして、
リモコンの信号かどうか判断するようにしてみます。
まず、受信機の信号(P1[3])の立下がり(1→0)が起こったとき、
I/O割り込みが発生するようにします。
I/O割り込みについては、千田さんの「2007年度分→割り込み処理」の部分を参考に。
P1[3]のInterruptをFallingEdgeに設定したり。
次に、I/O割り込みが起こったら、タイマ割り込みをスタート。
タイマ割り込みはチュートリアルを参考に。
Timer8のモジュールで、ClockをVC2=307.7kHz、Periodを77にして、
307.7kHz÷77≒4kHz、250μsに一回割り込みが発生するようにしました。
250μs×6のときP1[3]=1、250μs×6のときP1[3]=0となっていれば、リモコンの信号!
リモコン押したら、LEDのON/OFFが反転するようにしてみました。
次は、リモコンでサーボが動くようにしたいな。
今日は先週の続きで、サーボを動かすことから始めました。
サーボの動きがおかしかったのは、
1. 動き始めるときのPulseWidthが「0」になっていた。
2. UARTのクロックと通信速度が合っていなかった。
の2つが原因でした。
PulseWidthが0のとき、サーボに2Aとか流れてました。
サーボは、
動いているとき:0.2〜0.5Aくらい
止まっているとき:0.01Aくらい
しか流れてはいけないみたい…。
とりあえず、始めのPulseWidthを15に直しました。
UARTのクロックと通信速度の誤差は、3%以内にしなくてはいけなかったそうです。
クロックは、サーボよりUART優先。
というわけで、クロックを設定し直しました。(…同じなので、勝手にコピーさせてもらいました。)
sysclock 24MHz ↓6分周 VC1 4MHz ↓13分周 VC2 307.7kHz → UART (38400bps) ↓30分周 VC3 10.3kHz ↓204分周 PWM 50kHz
あと、PCからの電源ではサーボが動かないので、5Vの電源を入れます。
次に、赤外線リモコン受信機を付けました。
信号は、P1[3]に繋ぎました。
リモコンのスイッチを押したときの受信機の波形を、オシロスコープで見ました。
このままだと蛍光灯も拾ってしまうので、どうすればいいか調べよう。
いよいよ、それぞれが必要な部品を取り付け始めました。
今日はサーボに挑戦。
まずは基板に3本のピンをつけました。
サーボの、茶色:GND、赤色:VDD、橙色:信号(P0[3])に繋げる用です。
サーボはPWMのパルス幅によって、角度が決まるらしい。
周期は20ms。そのうち、ONの時間が1.5msだと真ん中(?)になるらしい。
それに±0.5msで角度を少し変えられるらしい。
と、どこかのHPに書いてあったので、この通りに作ってみました。
PWMとUARTモジュールを使って、入力した文字により、サーボの角度が変わるものを目指します!
まず、周期20msなので、50Hzのクロックを作ります。
24MHz −(÷12)→ 2MHz(VC1) −(÷10)→ 200kHz(VC2)−(÷20)→ 10kHz(VC3) −(÷200(period))→ 50Hz(PWM)
という感じ。
先週のUART用の75kHzがなくなってしまったので、
UARTにはVC3の10kHzを入れて、通信速度を1200bps(1200×8=9.6kHz)にしました。
デューティ比(ON/OFFの時間の比)は、5〜10%(12〜25)くらいなので、
入力した文字により、PulseWidthが10、15、20になるようにしてみました。
途中、クロックを間違えて、サーボが動かなかったり、熱くなったりもしましたが、
なんとか、5回に1回くらいはサーボが動くようになりました。
PulseWidthが15のときを真ん中とすると、10、20のときは左右に45°くらい回転した角度になりました。
●来週の課題●
・PulseWidthを30にすると、サーボ内で変な音がして壊れそうだった。
→ PulseWidthをいくつにすれば何度になるのか調べる。
・オウム返しで違う文字が返ってくる。もしくは何も返ってこない。
5回に1回くらいしかサーボが動かない。
→ 通信速度が遅すぎる?UARTのクロックを変えてみる。
・Binaryモードで数字を入力して、その数字に応じて角度が変わるような
プログラムにする。
・サーボの動きが変。(一回転して、元の角度になるとか。)
気が付けば、もう11月も終わり。
あと5回。出来上がるのかな…。
そういえば、ものづくり実践プロジェクトはどうだったんでしょうか?
今日はチュートリアルの一番最後、
「書き込み器からの独立」と「PCとの遭遇」をしました。
書き込み器からの独立では、
市販のUSBケーブルを切断(!)して、プラグをつけて、電源コードを作成しました。
PCとの遭遇では、
まず、基板に4本のピンをつけました。(受信ピン:P0[7]、送信ピン:P0[5])
次に、ドライバとAcknowrichをインストール。(解凍ソフトを持っていないことに気づいたので、Lhaplusもインストール。)
そして、プログラム作成。
UARTモジュールを使い、入力した文字をオウム返しするものを作りました。
UARTのClockは、通信速度9600bps×8 → 76.8kHzにしたいので、
24MHz −(÷16)→ 1.5MHz(VC1) −(÷20)→ 75kHz(VC3)としました。
そして、いざ実行!
……しても、何も返ってきません。
何故?と思ったら、受信ピンも送信ピンも両方送信にしていて、
電圧レベルの変換を行うアダプタを壊してしまっていました…。
違うものに交換したら、うまく動くようになりました。
LEDモジュールも付け足して、入力した文字により、LEDが点灯/消灯するようにしました。
今日からいよいよ基板作りが始まりました。
…First Touchもまだやっとなのにいいのかなと思ったり。
今日は基板に
ICソケット(+ PSoC)、書き込み用ピン、電源の差込口(?)、抵抗、LED(赤)、スイッチ
をつけました。
LEDはP0[0]、スイッチはP0[6]につけました。
基板の裏が最早、迷路のようです…。
続いて、プログラム作成。
PSoC入門:29466編の通りに、
スイッチを押すとLEDがON / スイッチを離すとLEDがOFF になるようにしました。
スイッチのポートがP0[6]なので、PRT1DR&=~0x10をPRT0DR&=~0x40にしました。
書き込んでみると、何とか光りました。嬉しい。
ものづくり実践プロジェクト、1次審査通るといいですね!
結果発表は11月28日(金)です。
…14日の日誌を18日に書いていることは気にしない。
牛丼、おいしかったです。ありがとうございました!
…と、書き終わった日誌をさっき誤って消してしまいました。
これは、書き直したやつです…。今度から気をつけよう…。
今日は、半田付けをしました。
久しぶりの半田付けで緊張しましたが、何とか完成してよかったです。
チュートリアルはタイマー割り込みまで出来ました。
来週はブザーを鳴らすことに挑戦したいです。
今日は作りたいもののプレゼンをしました。
みんないろいろ考えてきて、出来上がりがすごく楽しみです。
かえる、出来上がるように頑張ります!
チュートリアルは「CapSenseで遊ぶ」まで終わりました。
この間より少し分かるようになって来た気もして、だんだん楽しくなってきました。
ブザーを鳴らすのが、すごく楽しそう!
早くPSoCと友達になりたいです。
GlobalResourcesでVC3 SourceをVC1、VC3 Divider(分周比)を256に設定すると、
明るさに応じて、LEDの明るさが変わるようになりました!
VC3の分周比の説明辺りをうっかり読み飛ばしていたみたいです…。
すいません…。そして、秋田先生ありがとうございます。
次は例題1に挑戦してみようと思います。
でも、その前にプレゼン作らなきゃ…!
そういえば、10月18日のメールの「PowerPoint数枚の資料で十分です」という文を見て、
「えっ!10分も話すことないよ?!」と思ったのは、私だけでしょうか…?
「『じっぷん』じゃなくて、『じゅうぶん』だよ。」と
昨日、大垣さんにつっこまれました。
…英語どころか、日本語から勉強し直さなくては。
スタートラインに立てました!!
コンパイラをインストールし忘れ、Designerを再インストール…。
長かった…。
英語読めないからって、何でもキャンセルするのはやめましょう…。
作るもの考えなくちゃ…!