シリアル・コマンド(一部)の受信まで動いた [ステッピング・モータ・コントローラ]
(2012.10.18)
ステッピング・モーター・コントローラの接続試験用にテスト冶具を作りました。
テスト冶具
手始めに、SW入力機能をテストします。
(1)SW1==ONのとき LED オン
(2)SW2==ONのときLED オフ
(3)両方OFFなら1秒間隔で点滅
こんなプログラムをコマンド・コントローラとモーター・コントローラのメイン・ループに組み込み、RESET==>RUNで起動して、LEDが1秒間隔で点滅、消灯時にSW1を押すとLEDオン、点灯時にSW2を押すとLEDオフすることを確認しました。
ここまでは順調でしたが、シリアル・コマンドの送受信テストで躓きました。最初のトラブルはシリアル・クロックで、コマンド・コントローラが出力しません。前回行った『フォト・アイソレータを介した双方向の信号線接続の確認』でTMR2をOFFしたことを、すっかり忘れていたのです。PICkit3をコマンド・コントローラにつなぎ替え、デバッグ・モードでプログラムの動作を追いかけ、ようやく以下のコードを見つけました。
これをコメント・アウトして、モーター・コントローラ側で、シリアル・クロック割り込みをテストしました。シリアル・クロック(2500Hz)の立ち上がりと立下りのそれぞれで割り込みフラグが立つので、割り込みハンドラの先頭に5000カウントでLEDを点滅するコードを組み込むと、1秒間隔で点滅しました。(パチパチパチ~)
立ち上がり割り込みのところでは2500カウントでLEDを点滅させ、さらに立ち下がり割り込みのところでも同様にして、それぞれ1秒間隔でLEDが点滅することを確認しました。(再びパチパチパチ~)
ここまで動いたので”今度こそ”と意気込みましたが、スタート・ビット検出処理に組み込んだ”LED=1"というコードが実行されません。LEDを点滅させるコードをあちこちに置いて、ジリジリと動作を追っていきます。そしてついに・・・
誤
#define SERIAL_IN PORTAbits.RA5
正
#define SERIAL_IN PORTAbits.RA4
ピン番の間違いを見つけ、STEPコマンドでLEDオン、STOPコマンドでLEDオフする所まで確認できました。
ヤレヤレ
ステッピング・モーター・コントローラの接続試験用にテスト冶具を作りました。
テスト冶具
手始めに、SW入力機能をテストします。
(1)SW1==ONのとき LED オン
(2)SW2==ONのときLED オフ
(3)両方OFFなら1秒間隔で点滅
こんなプログラムをコマンド・コントローラとモーター・コントローラのメイン・ループに組み込み、RESET==>RUNで起動して、LEDが1秒間隔で点滅、消灯時にSW1を押すとLEDオン、点灯時にSW2を押すとLEDオフすることを確認しました。
ここまでは順調でしたが、シリアル・コマンドの送受信テストで躓きました。最初のトラブルはシリアル・クロックで、コマンド・コントローラが出力しません。前回行った『フォト・アイソレータを介した双方向の信号線接続の確認』でTMR2をOFFしたことを、すっかり忘れていたのです。PICkit3をコマンド・コントローラにつなぎ替え、デバッグ・モードでプログラムの動作を追いかけ、ようやく以下のコードを見つけました。
// for DEBUG T2CONbits.TMR2ON = 0; // stop timer2
これをコメント・アウトして、モーター・コントローラ側で、シリアル・クロック割り込みをテストしました。シリアル・クロック(2500Hz)の立ち上がりと立下りのそれぞれで割り込みフラグが立つので、割り込みハンドラの先頭に5000カウントでLEDを点滅するコードを組み込むと、1秒間隔で点滅しました。(パチパチパチ~)
立ち上がり割り込みのところでは2500カウントでLEDを点滅させ、さらに立ち下がり割り込みのところでも同様にして、それぞれ1秒間隔でLEDが点滅することを確認しました。(再びパチパチパチ~)
ここまで動いたので”今度こそ”と意気込みましたが、スタート・ビット検出処理に組み込んだ”LED=1"というコードが実行されません。LEDを点滅させるコードをあちこちに置いて、ジリジリと動作を追っていきます。そしてついに・・・
誤
#define SERIAL_IN PORTAbits.RA5
正
#define SERIAL_IN PORTAbits.RA4
ピン番の間違いを見つけ、STEPコマンドでLEDオン、STOPコマンドでLEDオフする所まで確認できました。
ヤレヤレ
|
|
|
こんばんは。鋭い追い込み、良い仕上がり具合ですね。
書き込み内の「パチパチ」数からしても上り調子のように思います。
ところで、実はワタシもLEDを100mSで5回点滅とか、200mS3回とか言うのをあちこち入れまくってデバッグしているのですが、broadbeansさんも
>LEDを点滅させるコードをあちこちに置いて、ジリジリと動作を追っていきます。
ということなので、なるほどと思った次第です。
by nobcha (2012-10-18 18:25)
こんにちは、nobchaさん!
お褒めの言葉、有難うございます。『ほぼ動く』と判っているところを敢えて確認することで、萎えがちな開発マインドを鼓舞しています。¥(^_^)
”LEDを100mSで5回点滅”
う~ん、そうか!そういう技がありましたか。これは良いことを伺いました。私のは、プログラム・パスにLEDオンとLEDオフを順に挿入して走らせるという、単純な方法でしたが何とか目的を果たすことが出来ました。
コマンドの受信確認に早速利用させて頂きます。余裕があれば”モールス符号化する”なんていうのも良いかも・・・
by broadbeans (2012-10-19 10:50)