超ローコストPICWRITERの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
「PICBASICコンパイラ」からスピンオフ!!
過去記事を参照することなどを考えて該当する過去記事は「PICBASICコンパイラ」のまま連載回もそのままとします。
以後は前回記事からの流れで[第236回]からとします。
「PICBASICコンパイラ」はなるべく早く連載を再開したいと考えています。
PICはローコスト、高機能で種類も豊富なお手軽マイコンですがプログラムを書き込むためのWRITERが必要です。
それをできるだけ安価に作ってしまおうというプロジェクトです。
最終的には製品化を考えています(組立キット、完成品)。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第246回]
●PIC16F88(4)テストプログラムを実行
まだPIC16F88WRITERプログラムの説明の途中ですがいくつかの問題点がみつかりましたので、今回はその問題について書くことにします。
前回で/PICWRについてもとりあえずのところはクリアできたので、このあたりでPIC16F88に書き込んだテストプログラムの動作テストをしておこうと思ったのが今回の問題のそもそもの始まりでした。
簡単なテストプログラムですし今年1月にWRITERプログラムも作って書き込みテストも済ませていることですから何も問題はないと思ったのですが。
ノートを見ても実際に動作テストをしたとは書いてありません。
一抹の不安が脳裏をよぎります。
まさかねえ。
それで念のためにということでテストをしてみましたところ。
全く動きません。
えっ。
そんなはずは…。
ということで本日は早朝から全く予定外の作業に没頭することになってしまいました。
PIC16F88をさわるのは初めてではありません。
マイコン独立化システムのキーボードインターフェースとして使っています。
仕入れの都合でPIC16F88ではなくてPIC16F87も使ったりしています。
こんなテストプログラムのような簡単なプログラムではなくてかなり複雑なプログラムですがそれでも問題なく動いています。
私の場合。
こういうときに限ってとんでもないことが重なって発生したりします。
悪霊の仕業であります。
オシロスコープにつないで出力信号の波形を見てみようとしましたら、なんだかきな臭い匂いがします。
動作テストをするのに手間を省いてPIC16F84を使ったLCDIF基板を流用しています。
クロック端子にRCを配線しています。
ひょっとしてそれがいけなかったのか。
PIC16F88をさわってみましたが、熱くありません。
えっ?PICではない?
ま、まさか!
ソニーテクトロのオシロスコープがっ!
表示が出ていません!
ひぇぇぇぇ。えらいこっちゃあああ。
あわててオシロスコープのスイッチを切りました。
どないしよお。
おちついてもう一度スイッチオンしてみましたら。
ファンが回って、しばらくしたらなにやらずらっとテスト項目の表示が出ました。
中にfalseと表示されているところもあります。
頼む。
動いてくれい。
表示OFFにしました。
プローブをテスト端子につないでみたのですが垂直も水平も設定がめちゃめちゃです。
それでもあれこれスイッチをさわっているうちにやっと平常に落ち着きました。
どうもどこかが壊れようでスイッチオンのあと測定できるところまでいくのにいくつかの操作が必要になってしまいましたがなんとか測定はできるようでほっと胸をなでおろしました。
テストのための基板もクロック回路のRCを実装しないものを一枚あらたに組みました。
それでテストを再開したのですがやっぱり動きません。
たまに一瞬動くときもあるのですがじきに止まってしまいます。
動作が不安定です。
ひょっとしてテストプログラムにバグが。
こんな簡単なプログラムにバグなんかあるはずがない…。
ありました。
下は[第244回]でお見せしたテストプログラムの修正版です。
;;;PIC 16F88 testprogram ;09/12/31 ;25/1/17 3/29 ;clock=4MHz #include <p16f88.inc> ; ;Program Configuration Register 1 __CONFIG _CONFIG1,_WDT_OFF & _INTRC_CLKOUT ; org 00 goto start ; org 05 start bsf STATUS,5 ;bank 1 goto jp1 ; org 12 jp1 movlw 6c;=4MHz goto jp2 ; org 1a jp2 movwf OSCCON movlw 0;port=out movwf ANSEL;porta=digital movwf TRISB movwf TRISA bcf STATUS,5;bank 0 clrf PORTB loop movf PORTB,w xorlw 01 movwf PORTB goto loop ; end ; |
下から10行目、bcf STATUS,5のところがもとのプログラムではbcf STATUS,0になっていました。
ここはレジスタバンクをバンク0に切り替えるところですがそこでミスったためにバンク1のままその次からのプログラムを実行することになってしまいました。
PORTBのつもりがTRISBになってしまいます。
なんともみっともないミスでありました。
それでそこを直したあと念のために手持ちのPIC16F87に書き込んでテストをしたところやっとまともに動いてくれました。
ところがそれをPIC16F88に書いて試してみたところやっぱり動きません。
そんなばかな。
PIC16F87とPIC16F88は同じように動くはず。
違いはPIC16F87はアナログポートの数が少ないことぐらい…。
おお。
ひょっとして。
もとのプログラムは手抜きでmovwf ANSELがmovwf TRISBよりも後ろになっていました。
それを今回のプログラムリストのように直したところ、PIC16F88でも無事動作するようになりました。
ANSELの設定はTRISXの設定よりも前にしなければならないようです。
むむむむ。
なんだかなあ。
下はテスト中の画像です。
PIC16F88の部分を拡大しました。
オシロスコープで波形を観測しました。
下側CH2はCLKOUTの波形です。
内部発振クロック(4MHz)の1/4(1MHz)がCLKOUT端子から出力されています。
上側CH1はRB0の出力波形です。
5μsごとにH、Lを繰り返しています。
超ローコストPICWRITERの製作[第246回]
2025.3.30 upload
前へ
次へ
ホームページトップへ戻る