楽釣工房では、小魚用しゃくり機、わかさぎ用しゃくり機、Picマイコン制御による自動しゃくり機(しゃくりパターン制御)、赤外線リモコンの応用回路(電気機器のON/OFF、温度制御、リモコンに依る数値設定など)、電子回路について書いて行きます。

 ブログの投稿記事に画像データを多く使用している為、他の投稿記事を読む事に不便をかけると思われます。
従って、投稿記事の前文をブログで公開し、全体の記事は ホーム・ページ [ 楽釣119 ] で公開する事にしました。
ホーム・ページ [ 楽釣119 ] では、今までの記事の内容を整理し、内容の不具合を修正し、又、記事の追加をして、ホーム・ページで公開しています。
  
___________________________________________________________________________________________________________________

2011年9月28日水曜日

delay タイムの使い方 / MPLAB IDE


プログラムを作成する時、タイミング等を合わせる為に wait time を挿入する事は良くある事です。
又、アッセンブラーでプログラムを作成するとなると、タイミング時間を入れる為にステップ数を計算してプログラムしなければなりません。
しかし、手計算でする為、間違いが良くあります。
ところで、C 言語でプログラムする時は、delay time の関数が用意されているので、それを利用することができます。設定は、簡単です。
次の一文を書いて、delay time の関数を使えるように宣言します。

  #define _XTAL_FREQ 4000000  // オシレータ周波数 4Mhzの場合

関数は、

  __delay(1000);    // 1000命令サイクル遅延する

  __delay_us(400);   // 400 μs( マイクロ秒 )遅延する

  __delay_ms(10);  // 10 ms ( ミリ秒 )遅延する

上記の3個があります。但し、制限が有ります。(上記の括弧内の数値は例です。)
それは、オシレータの周波数によって、ディレータイムに上限がある事です。
次の表を見て下さい。

動作周波数最大時間__delay_ms(x)__delay_us(x)
20Mhz39,424μs__delay_ms(39)__delay_us(39424)
16Mhz49,280μs__delay_ms(49)__delay_us(49280)
10Mhz78,848μs__delay_ms(78)__delay_us(78848)
8Mhz98,560μs__delay_ms(98)__delay_us(98560)
4Mhz197,120μs__delay_ms(197)__delay_us(197120)

それ以上のディレータイムが必要になる時は、 for 文、while文 などによるループ・プログラムを
作って実現するか、自分でループ・プログラムを作成してディレイ・タイマーを起動する等します。

又、 関数の括弧内に変数を使う事ができません。数値のみです。

次に、サンプル・プログラムを表示します。
このプログラムは、一定時間ごとにLEDランプなどを表示させる単純なプログラムです。
    
赤枠の中のプログラムを見て下さい。
10ms のディレイ・タイム遅延を行っています。これを while によって mt 回繰り返します。
  
wait_time(50);          // wait time = 10 * 50 =500 ms
  
    
又、for 文でプログラムする時は、 赤枠部分の文と、次の文を入れ替えて下さい。
    

どちらも同じように動作します。
これらのプログラムをコンパイルすると、どうなるかを比べて見みます。

while文の場合(プログラム・メモリー 59ワード)
  
 for 文の場合( プログラム・メモリー 66 ワード )


と、なります。

プログラム・メモリーの消費の仕方が違います。

小規模のプログラムでは、問題になりませんが、複雑なプログラムを作成する時に、このような
サブルーチンを多用するとプログラム・メモリーが不足してきます。
効率良くプログラムを作成する為に、普段から心がける事が必要です。

 [ 効率良くプログラミングする為のヒント ] 

プログラムで使用する変数のデータ型について、普段、気にしないで使われていると思います。
PIC マイコンがプログラム内の変数を参照するために、1 バイト・データ形式の場合、1 バイト分の領域を確保します。
又、4 バイト・データ形式の場合、4 バイト分の領域を確保します。
ところが、1バイト・データを扱っているのに、4バイト分の領域を確保するとどうなるでしょうか?・・・
それは、マイコンが4 バイトのデータを参照する事になり、時間が掛かります。
こんな事では、高速動作をさせたりする事が難しくなります。
又、プログラム・サイズも大きくなってしまいます。
   
unsigned int ・・・・;    4バイト幅のデータ型に宣言。実際は、1バイト幅のデータで済む・・・
  
unsigned char ・・・・;  この、1バイト幅のデータ型に宣言するのが正しい。           
   
そこで、扱うデータのサイズを正しく把握して、データ型を正しく宣言してプログラミングすることが必要です。

2011年9月18日日曜日

CONFIG ワードを探す / MPLAB IDE v8.6

私のブログを訪問されている人達は、どんな情報を求めているのだろうかと思い、少し、調べてみました。
  
私のブログの統計情報を見てみると、MPLAB IDECONFIG ワード 、等 PIC マイコン
使い方の情報を求めているのが分かります。
又、PIC マイコンを使い始めたのだが、使い方が分からないと言う人達が情報を求めているのが
読み取れます。
  
そこで、以前、投稿した記事の MPLAB IDE V8.6 の使い方 / CONFIG ワードの設定 について
追加説明をします。
  
MPLAB IDE ( HI-TECH C ) プログラムがインストールされている事を前提に説明をします。
  
一番欲しい情報は、CONFIG ワードの設定の仕方だと思います。
  
[ サンプル・プログラム ]
  
MPLAB IDE に於いて C言語 でプログラミングする時、プロジェクトでデバイス( PIC )を
設定しますが、プログラムでは、
  
#INCLUDE で " pic.h " を宣言します。
  
このファイルに依って、 PIC の設定が自動的に行われます。
そこで、この " pic.h " ファイルの中身について、調べてみます。
  
MPLAB を普通にインストールすると、下記の画像の のルートに有ります。
次に、この ④ ファイルを探して下さい。このファイルをメモ帳で開いて見ます。
  
  
このファイルは、PIC マイコンのデバイスを設定する為のファイルです。
ファイルの中身を 1 行ずつ見て確認しても良いのですが、検索機能を使ってサンプル・プログラムで使用しているデバイス "16F84A" を調べてみます。
  
  
検索結果は、次の通りです。
  
  

2011年9月16日金曜日

LED フルカラー 水中ライト / PIC 10F222

友人から預かった海釣り用水中ライトを改造する事にしました。
このライトは、豆電球方式の古いタイプの水中ライトです。水深 100m? 防水で使えるようですが、
このライトのケースはとても肉厚で頑丈な物です。
そこで、このライトの豆電球をフルカラー LED に置き換えて、「LED フルカラー 水中ライト」なる物を
作ってみました。
このライトは、時間経過とともに色が変化します。いわゆる、レインボー・カラーです。
この様なライトは、色々なメーカーから発売されていますが、価格が高価です。




豆電球部分をプリント基板に置き換えて換装する事が出来る構造になっています。偶然 ?・・・
豆電球部分が小さいので、PIC マイコンも小型の物を使う事にします。

LEDのR、G、B 端子をそれぞれの I/O 端子に対応させます。
プリント基板のパターン配置の都合に依って、次の様に対応させます。
  R ( 赤 ) → GP1
  G ( 緑 ) → GP2
  B ( 青 ) → GP0
PIC 10F222( 6Pin 米粒タイプ ) を使用する。


回路図





AKI PIC V4 で書込み。専用ケーブルで基板の pin 端子に接続します。
基板の pin 端子を PIC kit2,3 に接続しても書込みできます。
PIC 、抵抗器は、放熱器付LEDランプの下に隠れています。

LED 基板
pin端子に乾電池を接続して、点灯試験をしているところ。
PC カッターとデザイン・ナイフでプリント基板のパターン・カットをしました。

豆電球とLED 基板を交換します。

完成!

単2アルカリ乾電池で連続 48 時間以上点灯可能です。
暗い場所で点灯すると、かなり、明るいです。

2011年9月5日月曜日

LCD 表示機のデモ / SC1602BSLB

16文字×2行 液晶表示機のデモ・テストです。

以前、私は PIC マイコンのプログラムをアッセンブラーで書いていましたが、ページ設定などとても面倒な手続きが必要でした。雑誌などで公開されているプログラムは、殆んど、 C 言語で記述されているのが現状です。

C言語の利点は、昔の BASIC プログラムの感覚でプログラムを組む事が出来るからです。
C言語で記述すると、PICマイコンの設定は簡単な命令を記述するだけで、後は自動的にコンパイラーが適正に設定してくれます。

又、作製したプログラムを他の PIC マイコンに移植するのも、CONFIG ワードI/O の設定など特定項目を変更するだけで簡単に出来ます。



ところで、 LCD表示機の説明書を一度見て理解できますか?・・・。
だいたい、こう言った説明書は細かい部分まで解説はしてくれません。
そこで、インター・ネットで探して、詳しく解説しているサイトが有ったので、その記事を参考にしました。

又、インター・ネットで検索して公開されているプログラムを探すと、殆んど、アッセンブラーで書かれたプログラムばかりでした。一応、参考にしました・・・。

仕方無く、MPLAB IDE をインストルすると、サンプル・プログラムが付録として付いてきます。
これを参考ににして、プログラムを組む事にしました。
但し、この手のプログラムは、まともに動作しないのが現状です。

色々、試行錯誤の結果、何とか完成しました。
完成したプログラムは、基本部分なので、本格的なプログラムを作るときは、メイン・プログラムからInclude file で定義した ” lcd.c ” の各種サブルーチンを呼び出すだけで、LCD をコントロールする事ができます。後は、応用するだけです。

サンプル・プログラムで使っている I/O ポートは、B ポート・オンリーなので、他の PIC マイコンに移植するのが簡単です。

[ LCD display 回路図 16F84A ]







[ プログラムの仕様 ]

 ● サンプル・プログラムは、 PIC 16F84A を使用しました。
 ● 他のPIC マイコンへの移植が簡単。
 ● LCD は、4bit モードで動作。
 ● PIC マイコンの I/O は、8bit ( B ポート)を使います。
 ● LCD の基本プログラムは、INCLUDE ファイルで定義をする。
   メイン・プログラムからサブルーチンを呼び出す型式。
 
プログラム・ダウンロード ( PIC 16F84A )  ・・・ LCD 16F84A
プログラム・ダウンロード ( PIC 16F648A ) ・・・ LCD 16F648A
プログラム・ダウンロード ( PIC 16F886 )  ・・・ LCD 16F886
 
 [ MPLAB IDE Project の作成 ] 
 
複数のプログラムを使って作成した ”LCD 表示機のデモ”プログラムのMPLAB IDE Project を作成します。
サンプル・プログラムで使用した ”LCD 16F886” のプログラムは、
 
  lcd.c
  lcd-new.h
  main-16F886.c
 
この3個のファイルに依って、構成されています。( 他のサンプル・プログラムも同様な構成です。 )
 
では、プロジェクトを作成します。
  
この記事の続きを読む・・・LCD 表示機のデモ
 
楽釣工房・ホームへ戻る ] [ ホーム・ページ  楽釣119 へ移動 ]