2019-01-28 Mon
おもちゃを作るのに,またPICをいじってます。ただ,その過程で,またまた,どつぼにはまりました。
どちらもLCDでの表示のプログラムなのですが・・・・・・・。
一つは,何のことはないのですが,x軸,y軸,の表記を逆にしていま
した。これでは,正しく表記できないですよね。
lcd_setCursor(8, 0);
とやるところを
lcd_setCursor(0, 8);
とやっていました。
もう一つもLCDの表示なのですが,LCDの表示が,1桁の表示から
4桁の表示になると,以後,一桁の表示にならなくなるというもので
した。
センサーがだめなのか,LCDの表示のプログラムがまずいのか
あれこれなやみましたが,原因がやっとわかりました。
G:45→G:4095
となった後,2桁の表示にすると,
G:3695
のように表示され,前回表示の95の部分が残ってしまうという
ことでした。
左詰めにする簡単な関数を作って解決しました。
2019-01-21 Mon
また,あれこれやりくて,手元にあったLCD表示ができるように,組み立て,セットをしました。
プログラム自体は,それほど難しいものではなく,諸兄の
プログラムを,XC8コンパイラーのV2.0に移植しました。
ただ,使ったPICがこれまた手元にある16F627Aですので,
2カ所ほどどつぼにはまりました。
なんのことはない,当初,内部クロックの設定ができなかった
のです。
違うPICでつかっていた
OSCCON
を使っていたのです。16F627Aには,このレジスタはありません。
OSCCONに当たるのが,
PCON
のレジスタでした。最初,使って多コンパイラーをv1.3からv2.0
にしたために,仕様が変更になったのかと思いましたが,いくら
さがしても,OSCCONなるものがヘッダーファイルにもみあたらず,
約一日はまりました。分かれば簡単ですね。
PCONbits.OSCF=1
の設定で,内部クロックの4MHZに設定できました。
この辺も,マニュアルみればよかったのですね。
今日,プログラムを書き込み,無事動きました。
もう一つはまったのは,
ADCON1
を使ったことです。これもあたりまえですね,
CMCON
を使えばよかったことです。この辺もキット,マニュアルをよく
よめばすんなりだったのでしょうね。
2018-11-28 Wed
最新の X IDE では,仕様の変更があるようです。
デフォルトのインストールだけでは,xc.h の読み取りがうまく
行かないようです。ネットで検索すると,
HP-1
HP-2
HP-3
あたりに,記述がありましたので,私の環境で,まとめておきます。
X IDE の画面で,目的のプロジェクトを右クリックしします。
下記の最下部のPropertiesをクリックします。
次の画面になりますので,XC8 Global Option をクリックします。
この画面で,右の方の C99 の選択ボックスを開いて
C99→C90
に変更して,下部のApplyをクリックして終了です。
2016-02-20 Sat
動作の確認をしていて、いくつか不具合がありましたので、多少、プログラムの変更をしました。
ほとんどといっていいほどコメントをいれていませんでした
ので、自分で作ったプログラムの解釈に時間がかかりました。
以下の変更をしました。
延長のブザーを鳴らす時間 1分→→30秒
スタート・ストップに出力のON・OFFを合わせる。
キットで遊ぼうで、PICのプログラムを覚えて、初めて作った
長めのプログラムです。プログラム領域のおよそ
70パーセントを使ってます。備忘録のために、掲載して
おきます。
HANDA-TIMER.txt
ところどころ、なんで、こんな変数使ったのか、分からない
のが沢山あります。
2016-02-19 Fri
追加の自己保持回路を組み込み、思った動作できるようになりました。
時間の設定→スタート→1分延長(ブザー)→電源OFF
の動作です。
動作時間の設定後、スタートボタンを押すと、カウントダウン
が始まって、設定時間だけ、半田ごてに電源が入ります。
設定の時間のカウントダウンが終了して0になると、ブザー
がなり始め、1分間続きます。このブザーの鳴っている1分間
の間にスタートボタンを押すと最初に設定した時間で
カウントダウン(延長)を始めます。
ブザーが鳴ってる時にスタートボタンを押さないでそのままに
すると半田ごての電源も自分自身の電源もOFFになります。
4年越しに思った動作ができるようになりました。
2016-02-11 Thu
なめらかにスクロールする方法について、いろいろアドバイスいただきました。
ハードルが高い部分もあって、なかなか実現できません。
とりあえず、当初の目的である、PCからの入力を表示する
ことができました。
PICを初めてから、いつも迷ってたのが、文字のキャラクター
コードの扱いです。
VB等では、キャラクターコード得るには、
Asc('A')
のように「Asc」の関数を使うようです。プログラムを初めて
覚えたBasicでも同じような関数を使ったと思います。
このことが頭に残っていて、関数を使わなければ、と思い
こんでいました。
なんのことはない、コンピューター上では、同じ、数字で扱わ
れるんですね。ですから、アスキーコードを得て、演算をする
には、端に「int」型にキャストすればいいということがやっと
わかりました。
char c1 = 'a';
int code1 = (int)c1;
これで、code1には、’a’のキャラクターコードの0x61を得る
ことができました。
キーボードからの入力を表示するにあたって、大文字のデータ
しかいれていませんので、小文字は、0x20を引いて、
char c1 = 'a';
int code1 = (int)c1-0X20;
大文字に変換しました。
2016-02-05 Fri
諸兄のHPを参考に、PICを使ってサインボードを作りました。何の使用目的もない、ただのおもちゃです。
ただ、諸兄のHPで使ってる74HC154は製造中止でしたの
で、これまた、諸兄のHPを参考に、74LS138二つで置き換
えて作りました。
三日ぐらいかかって、配線を終えて、どのような形で、流れる
サインボードを実現するか考えました。
参考になるC言語によるプログラムがみあたらなかったので、
過去の7セグLEDを使った工作を思い出しながら、
ダイナミック点灯を基本にプログラムを組むことにしました。
8×8のLEDが4枚ですので、8×32列のLEDがならんでます。
この黄色い□から黄色い□までのLEDに、タイマー割り込みを
使って、このLEDとダブるように準備したメモリーの内容を
書き出すことにしました。
テレビで使われている走査線のイメージでしょうか。
メモリーには、縦に8個並んでいるそれぞれのLEDの
ON-OFFの情報を書き込みます。
右にスクロールさせるには、メモリーの左側の山吹色の部分
に表示させる文字のデーターを書き込みます。
左にスクロールさせるには、メモリーの右側の青色の部分に
表示させる文字のデーターを書き込みます。
「A」の表示をさせるには、
16進数7個をメモリーに書き込みます。
左側に書いてある数字が、上から左端の縦の列の情報に
対応します。
これをスクロールさせるには、メモリーに書いてある情報を
それぞれ、一つ右側のメモリに移動する、ということで、実現
します。
多分、このほかにもスクロールの方法があるのでしょうが、
自己流で、作製しました。
実際に動かして見ると、すーっと流れるような表示には、
なっていません。
なめらかにするには、もう少し、工夫が必要なんでしょうね。
アルファベットのA~Zまでの大文字のデーターを入れると、
それだけで、ほぼメモリーが満杯です。
倍のメモリーのある16F1939に変更してみようと思います。
USARTを使って、PCのデータをスクロールさせるのが目標
です。
2016-01-08 Fri
XIDEに開発環境を移した時はv3.10でしたが、まもなくv3.15がでたので、ちょっとたってからVUPしました。
2.3日前でしょうかXIDE操作してるとv3.20のリリースの
バルーンがでてきました。
まだ、VUPはしていませんが、バグフィックス版なのでしょうか、
それとも新しい機能が追加されたのでしょうか。近々VUP
してみようと思います。
PICのプログラムをするのに困ってたのが、「congif」の設定
で、PICの種類ごとに特有?の設定をするのが面倒でしたが
XIDEでは、以下の方法で、自動設定できます。
Window-PIC Memory Views-Configration Bits
とたどります。
すると下記の画面になりますので、
矢印のOPTIONの各項目をクリックします。すると、ON、OFF
等の選択ボックスがでますので、設定に応じて選択をします。
設定が全部おわったら、右クリックをして、
Configration Source Code Outputをクリックすると、
設定してあるPICのConfigのコードが生成されます。
これを全部コピペするとConfigのできあがりです。
2015-12-04 Fri
以前アドバイスいただいたことを試してみようと、下記のような実験回路を組みました。
この回路で、
while(1){
PORTA=~PORTA
WaitTime(20000);
}
初期設定はありますが、このプログラムを走らせました。
すると、最初は、思った動作をしますが、
途中で、止まってしまいます。プログラム的には、間違いは
ありません。
PICの足に触ると、動き出したり、止まったり、動作が安定し
ません。
通常は、○ドウインの基板を使ってテストしてますが、
この基板で動いて、ブレッドボードで実行すると、回路は、
間違ってないのに動かないという事象に遭遇しました。
違いを考えると、○ドウインの回路は、リセットの回路が組まれ
ていますが、ブレッドボードでは、組まれていません。
NETで検索するとありました。MCLRと呼ばれるリセットに使わ
れる端子を有効にしておくと、リセットの回路がない状態で
は、不安定になるとありました。
そこで、前述のプログラムのconfigの設定を、
MCLREN→MCLRDIS
にして、再度コンパイル、それで、動かしてみました。
あっけなく動きました。
アドバイスいただいた通りの動作でした。
LEDの極性を反対にして、ポートにつなぐのが味噌です。
プログラムでは、時間をおいて、HIGHとLOWを繰り返して
るだけです。
こうすることで、PICがHIGHになると吸い出し?でLEDが
点灯し、LOWになると吸い込みでLEDがつきます。
私には、目から鱗でした。
PICのポートが少ない時は、応用ができ
そうです。
TOP PAGE △