COUNTER



新BLOG
 
新BBS
MN-BBS
旧BBS
CALENDAR
S M T W T F S
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
<<  2024 - 11  >>
 
LOGIN
現在モード: ゲストモード
USER ID:
PASS:
CATEGORIES
ARCHIVES
PROFILE
OTHERS
    処理時間 0.295365秒
POWERED BY
POWERED BY
ぶろぐん
DESIGN BY
ブログンサポート
          
---「PIC」プログラミング再び (4)---
 ==PWMモード==

 理屈の理解がいまいちでしたが、サンプルプログラムの変数

 を変えて、PWMモードで、パルスを発生させてみました。

 /*****************************
STEP20_PWMMode.c
*****************************/
#define _LEGACY_HEADERS//以前のヘッダーファイルにするための宣言これがないと古いのではエラーに

// インクルードファイルの読み込み
#include <pic.h>


// コンフィギュレーションワードの設定(下の新しい設定ではエラーになるので、以前の設定で
__CONFIG(UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS & INTIO);

//#pragma config CPD=OFF , LVP=OFF , BOREN=ON , MCLRE=ON , PWRTE=ON , WDTE=OFF , FOSC=INTOSCIO
(この宣言は、新しいコンパイラ用。古いのでは、エラーになるので、コメントアウト

// プロトタイプ宣言
void InitPWM (void);
void InitTimer2 (void);

// メイン関数
void main (void)
{
// 1,2,17,18端子を入出力端子に設定
CMCON = 0x07;

// 電圧レベルの初期設定
PORTA = 0xFF;
PORTB = 0xFF;

// 入出力設定
TRISA = 0x20;
TRISB = 0x00;

// PWMモード設定関数の呼び出し
InitPWM();

// タイマ2設定関数の呼び出し
InitTimer2();

// 永久ループ(これがないとプログラムが終わって
             パルスが持続しない。)
while(1)
{

}
}

// PWMモード設定関数
void InitPWM (void)
{
// RB3端子を出力端子に設定
TRISB3 = 0;

// CCPのモードをPWMモードに設定
CCP1M3 = 1;
CCP1M2 = 1;
CCP1M1 = 0;
CCP1M0 = 0;

// 周期を100μ秒に設定(99 + 1μ秒)
//PR2 = 0b01100011;//99μ+ 1μ秒(10khz)
//PR2 = 0b11000111;//199μ+ 1μ秒(5khz)
PR2 = 0b11111110;//254μ+ 1μ秒(985hz プリスケラー4)

// Hの時間を99μ秒に設定(396 × 0.25μ秒)
//CCPR1L = 0b01100011;99μ
//CCPR1L = 0b00110010;//50μ
//CCPR1L = 0b000011001;//25μ
//CCPR1L = 0b000000101;//10μ
CCPR1L = 0b00000101;//5μ

CCP1X = 0;
CCP1Y = 0;
}

// タイマ2設定関数
void InitTimer2 (void)
{
// プリスケーラ値を1に設定
//T2CKPS1 = 0;
//T2CKPS0 = 0;

// プリスケーラ値を4に設定
T2CKPS1 = 0;
T2CKPS0 = 1;


// TMR2レジスタをクリア
TMR2 = 0;

// タイマ2起動
TMR2ON = 1;
}

 パルス幅5μsにして、周期を変えてみました。

        PR2レジスタ・・・・・・・周期(周波数)の設定
       CCPR1Lレジスタ・・・・・・・・パルスの時間を設定

 目的の周波数にするのに、段階的にPR2レジスタの数値

 を大きくしていきましたが、すんなりと周波数を大きくは

 できませんでした。「255」の壁がありました。256にする

 とこのまでは不具合が起きます。このままでは分からない

 のですが、2進数にすると一目瞭然です。

   255・・・・・    11111111
   256・・・・・   100000000

 10進数で、9から10に変わるのとおなじように、桁数が

 ふえてしまうのです。PR2レジスタは、8桁の2進数しか

 収納できないので、これだけでは、256以上の数値は、

 収納できません。しかし、便利な機能があって、プリスケラ-

 という数え方を何分の一かにする機能があります。
 
 これと組み合わせると、周期(周波数)をさらに何分の一

 かにできます。

    PR2に254(実際は+1されるので、255を格納)
    CCPR1Lで5μs幅のパルスに設定
    T2CKPS1 = 0;T2CKPS0 = 1;でプリスケラ-を4に設定

 プリスケラ-は1,4,16の設定しかないようですので、4
 
 に設定して、数え方を1/4にして、

 やっと目的が果たせます。Webはくしゅ

| mabo52 | 10:14 | comments (0) | trackback (0) | DIY::  -pic |

こんな物欲しいな
CLOCK
NEW ENTRIES
COMMENTS
    ---SPINDLEのPWM制御 (その2) (7)
  • TR >06.18
    ---番外編---
  • TR >06.02
    ---SPINDLEのPWM制御 (その2) (5)
  • mabo >05.30
保留中コメント:10件
LINKS
    相互リンクさせていただいてます。
  • The Rider
Search Box
名言集
メール
   
連絡は下記から
名前:

メールアドレス:

件名:

メッセージ(必須):


TOP PAGE