---新しい開発環境(2)---

  X IDEの開発環境で、いくつかプログラムを書いて見ました。
  驚いたのは、「あまりにも親切過ぎる」でした。
  最近の一太郎やWORDのように、やろうとしていることを
  先読みして、自動でやってくれます。
  一太郎等では、冒頭に句読点がくると、行間をつめて、
  句読点を行の終わりの位置にもってくるということを自動
  でやってくれます。これと同じように、いろいろ、自動でや
  ってくれます。ただ、この「親切」がくせ者で、時に、意図し
  たことと違う結果になってしまいます。行頭の禁則処理を
  自動でやると、行ごとの文字間隔がちがって、見栄えが
  悪くなるので、この辺が、一番いやなところです。
 
  この意味で、最近のワープロソフトは、嫌いでした。さすが
  使わなくなりましたが、PCになってからも、OASYSという
  ワープロソフトを使い続けたのも、この親切さがなかった
  からです。
  さて、X IDEですが、使ってみて、ことのほか便利なようです。
  何よりも、作成途中で、シンタックスエラーがあると、その都度
  知らせてくれます。

  

  黄矢印の行に「;」がないシンタックスエラーがありますが、
  次の行の緑矢印の所にきちんと、「びっくりマーク」が表示
  され、エラーのあることを示してくれます。
  「;」をつけてやると、ちょっとタイムラグがありますが、
  びっくりマークは、すぐに消えます。
  未定義の変数等についても同じように知らせてくれますの
  ので、開発時間が短縮されるかもしれません。

---新しい開発環境---

 PICのプログラムを作るにあたって、初めて使った、
 MPLAB IDE V8.8という古典的な環境を使い続けてきまし
 た。
 ただ、世の中がどんどん進んでいて、このv8.8は古い
 アーカイブに残っているだけで、メジャーなDLのリストには、
 ありませんでした。
 また、新しいことを覚えるのはしんどいのですが、諸兄の
 プログラム古い環境に移植しようと思いましたが、あっさり
 断念しました。
 新しい環境のMPLAB® X IDEをインストール。この環境で
 コンパイルしたら、一発でOKでした。
 新しい環境では、一番の難物のCONFIGの設定も半自動で
 おこなえるようで、なれれば、こちらの方がいいかもしれま
 せん。

--「PIC」プログラミング再び (21)---

 ===AD変換後の割り込み===
 また、また、はまりました。
 ステッピングモーターのコントローラーは、一応完成しましたが、
 
 ステッピングモーターの速度の可変がスムーズにいかないの
 で、再度、PWMでのパルス発生とAD変換の組み合わせで、
 プログラムの変更を試みてます。
 諸兄のHPには、AD変換後、割り込みを発生できるとありますが、
   ADIF = 0;//AD割り込みフラグクリアー
   ADIE = 1;//AD割り込み許可
   GIE= 1;//割り込み全体の許可
 の記述をしても、AD変換後の割り込みが発生しません。
 ヘッダーファイルを眺めたり、ネットで検索しまっくりました。
 約一日あれこれやりましたが、やっとヒットしました。

 ここに、その記述がありました。

 

 なんと、周辺機器の割り込みの許可もしないと、AD変換後
 の割り込みをしないんだそうです。
   ADIF = 0;//AD割り込みフラグクリアー
   ADIE = 1;//AD割り込み許可
   PEIE=1;//周辺機器の割り込み許可
   GIE= 1;//割り込み全体の許可
 赤の周辺機器の割り込みの許可を記述すると、すんなり、割り込み
 発生。
 割り込みのロジック図を見るとすぐ分かったんですね。今まで
 見方がわかりませんでした。

 

 ロジック図を見ると、AD割り込みは、PEIE割り込みの下部にあり
 ますので、PEIEの許可が必要なことがわかります。

--「PIC」プログラミング再び (20)---

 ===「LCD表示ライブラリー」===
 PICのプログラムを組んで、検証するのに、LCDの表示が便利
 です。秋月のSD1602というLCDを使ってますが、これを使うに
 あたって、表示のためのライブラリーが必要です。

 諸先輩のHPを参考に動かしていましたが、
 使用ピンを変更したくて、あれこれやりました。
 プログラムを見ると、
           #define LCD_DATA PORTB
           void lcd_write(unsigned char c){
          __delay_us(40);
          LCD_DATA = ( ( c >> 4 ) & 0x0F );
 //上位4ビットを右に4回シフトしてRB0~RB3に書き込む
          LCD_STROBE();
          LCD_DATA = ( c & 0x0F );
 //下位4ビットをRB0~RB3に書き込む
          LCD_STROBE();
           }
 という項目があり、データをBレジスタで書き込んでいる
 ようですので、ここを書き換えるといいはずでした。
 プログラムでは、8ビットのデータを2回に分けてRB0~RB3
 に書き込んでいるようでしたので、ここを変更すれば、
 違う端子から書き込みができるはずでした。
 ここを、RB4~RN7に変更すべく、
           void lcd_write(unsigned char c){
          // 送信データのバイト列上位4ビットを処理
          RB4 = ( ( c >> 4 ) & 0x01 ) ;
          RB5 = ( ( c >> 5 ) & 0x01 ) ;
          RB6 = ( ( c >> 6 ) & 0x01 ) ;
          RB7 = ( ( c >> 7 ) & 0x01 ) ;
           LCD_STROBE() ;
          // 送信データのバイト列下位4ビットを処理
          RB4 = ( ( c ) & 0x01 ) ;
          RB5 = ( ( c >> 1 ) & 0x01 ) ;
          RB6 = ( ( c >> 2 ) & 0x01 ) ;
          RB7 = ( ( c >> 3 ) & 0x01 ) ;
          LCD_STROBE() ;
          }
 と変更してみましたが、うまくいきませんでした。考え方は、
 これでいいみたいでしたが、ネットでくぐると、
 別な方のHPに同じ考えのライブラリーが載ってました。
 最初の#defineのところで、使用ポートを記述すればいいので、
 便利だと思います。
 今日も一つ勉強しました。
 ライブラリー用に編集したものをここに掲載します。
 ヘッダーファイルは、HITEC-Cのサンプルのを
 そのまま使います。

--「PIC」プログラミング再び (19)---

 全面パネルの加工が終わり、スイッチ類を取り付けました。
 全部が丸い穴でしたので、ドリルで開けて、19mmの穴は、
 テーパーリーマで広げました。
 パネル表示、うまくいったのですが、レオ(愛犬)がそばで、
 動いていたので、気がついたら、レオの毛をはさんでしまい
 ました。まあ、愛嬌で、よしとします。

 

 スイッチ類と基板は、ワンタッチのコネクターですので、この後
 基板を固定して、スイッチ類を接続します。
 基板は、穴を開けないで、両面テープのスペーサーを
 使います。

 

 

 後は、背面のパネルの加工ですが、穴開けの形状がちょっと
 複雑なので、sable2015を使います。

--「PIC」プログラミング再び (18)---

 何カ所か変更して、やっと次のように落ち着きました。

 

 抵抗やらコンデンサーは、正確な計算はしていません
 ので、とりあえず動くといったレベルだと思います。
 今回、丁寧に回路図を書きましたが、事前に書いておくと
 チャックやら、制作が能率よくいくようです。
 なんでもそうでしょうけど、事前の準備は大切
 なんですねえ。

--「PIC」プログラミング再び (17)---

 ほぼ満足のいく結果になってきたので、ケースの操作パネル
 の作成にかかります。
 操作パネル作成のフリーソフトを探しましたが、見つけられま
 せんでしたので、花子で作りました。

 

 エーワンの屋外でも使えるラベルあたりに印刷して、
 使おうかと思います。
 それにしても、操作パネル作成のフリーソフト、ありそうな
 きがするのですが。結構需要あると思うのです。

--「PIC」プログラミング再び (16)---

 最後のチェックと調整がほぼ終わりました。
 センサーまわりがうまくいきませんでした。原因を特定する
 のにオシロでフォットカプラーの出力部分を見てみましたが、
 接近するときと離れるときに、きちんとのこぎり型のパルス
 がでてました。
 立ち上がりの割り込みが一度しかかからなかったので、
 センサーが一度働くと、フォットカプラーの出力で、電流が
 0にならない状態なのかと思いましたが、原因はPICのよ
 うでした。
 一度Hightになるとどうしてか、Lowにならならなくて、立ち
 上がりパルスの割り込みがかからないようでした。
 
 対応策がわからなかったので、入力方法を、
 アックティブハイからアクティブローに切り替えてみました。

 
 すると、やっと、思った動作ができるようになりました。
 問題を特定するのに、ネットで検索しましたが、やはり同じような
 原因でなやんでいる方がいたようです。同じTLP621での投
 がありました。解決策は書いてありませんでしたが、きっと
 TLP621の問題といいうよりは、PIC側の問題だったんでしょうね。
 ケースに組みこんで、電気部分はほぼ完成です。
 あとは、旋盤に取り付けるハードを作成します。
 スイッチでのオンオフ、センサーでの逆転、の様子です。
 
 ちょっと満足してます。

--「PIC」プログラミング再び (15)---

 基盤が組みあがり、プログラムを書き込んだPICで、試運転
 しました。最初、全く動きませんでした。
 細かい部分をチェックしていくと、配線の間違いやら、配線
 を忘れたところやら、プログラムの間違いやら、けっこうあり
 一つ一つ修正してきました。やっと、下記の動作ができるように
 なりました。
     正転・逆転・ストップ・回転数の変更
 やってることは、たいしたことなく、アナログのスイッチ等で
 制御すれば簡単だと思いますが、これも自作の醍醐味です。

 

 まだセンサーによる逆転の部分のテストがすんでいませが、
 やっと先が見えてきました。
 今回、一番のネックになったのが、やはり、フォットカプラーです。
 センサーが最低電圧で12Vで動作で、PICが5ボルトですから、
 フォットセンサーで、電位差をならす必要がありました。
 使ったのは、秋月のTLP621というフォットカプラーです。

 

 適当に選らんだのですが、入力したパルスをオシロで見て
 見ると、立ち下がりがシャープでなくなります。

 

 赤の形状になっています。きっと、反応が鈍いのでしょうね。
 デジタルタイプのカプラーもあるそうですが、こちらが、
 きっと、もっときれいな形状になるんでしょうね。

--「PIC」プログラミング再び (14)---

 ハードの作成と、プログラムの作成を同時に進めてきました。
 やっと、制御部分のPICのプログラムとハードのテストがいい
 結果になりました。
 テストボードで、ハードの仮組をし、ソフトを確認しながら、手を
 加えて、プログラムを作成しました。
 今回は、PICを二つ使ってます。なんとも、もったいない使い方
 で、プログラムは、容量の20パーセントぐらいしかつかって
 ません。余分なコメントもありますが、掲載します。

 制御プログラム----main.c
 今回のプログラムは、タイマー0の割り込みと外部割り込み
 を使ってます。
 当初、押しボタンスイッチは、スタートとストップだけでしたが、
 急遽、リセットの押しボタンスイッチを追加しました。
 この、コントローラーは、ステッピングモーターの回転数と
 正転・逆転のコントロール、センサーで正転から逆転への
 切り替え、の動作を制御するだけです。
   自動で
     正転→センサーで逆転
   手動で
     正転 逆転 停止
 これだけの動作です。パルスをカウントして、その分だけ
 戻るようにすれば、停止も自動でできますが、ちょっと面倒
 ですね。確か、ワンパルスで1.8度ぐらい回転しますので、
 一回転には、360÷1.8=200パルス。
 リードが2ミリとすると5cm動くのには、
 200×50mm÷2=5000パルス往復では、
 5000×2=10000パルス。
 このくらいのパルス数なら、それほど苦労しなくてもカウント
 できそうですが、まあ、この次の課題ですね。
 ちなみに、unsigned int の整数だと
       0 ~ 65535
 カウントが可能ですので、Long型の整数を使わなくても
 大丈夫のようです。ここまで細かいプログラムを組むと、
 CNCになってしまうので、CNCにしてしまったほうが楽
 でしょうね。