1

インターネットには多くの例があることは知っていますが、このコードが機能するために何が必要ですか?

周波数発振器 = 4mhz

周期 = 0.25us

義務_cicle = 250

プリスケール = 16

PR2 = 124

#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <pic16f88.h>

#pragma config FOSC = HS  // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD)
#pragma config BOREN = ON       // Brown-out Detect Enable bit (BOD enabled)
#pragma config LVP = OFF        // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

void main ()
{
     while (1)
     {
            CCP1CON = 0x2C; /*activate PWM mode*/
            PR2 = 0x7C;    /*124 (DECIMAL)*/
            T2CON = 0X06; /*prescale 16 */
            CCPR1L = 0X3E;

     }    
}

見たい :

PWM の周期 = 2ms

デューティサイクル = 1ms

敬具 NIN

4

2 に答える 2

1

最初のトピック: pic16f88.h を含めないでください。xc.h に含まれています。

少し話が逸れますが、より新しい部品 ( PIC16f1619 など) を使用する場合は、MPLAB Code Configurator を使用して TMR2 および CCP コードを生成できます。また、コストが低くなり、フラッシュ/RAMが増えます。そのデバイスはCuriosity Board ($20) にあります。

トピック: 最初の目的地はデータシートです。

PWM セクションには、PWM 動作のための設定があります。

ステップ 1 :タイマー 2は Fosc/4 を入力として受け取ります。この場合は 1mhz です。目標周波数は500Hzです。1e6/500 = 2k。16 のプリスケーラーと 125 の pr 値をお勧めします。これにより、正確に 500Hz が得られます。

ステップ 2: 50% のデューティ サイクルが必要です。CCP1L フロア (125/2) = 62。CCP1X:CCP1Y = 0.5 * 4 = 2。

ステップ 3: tris ビットをクリアします。

ステップ 4 と 5: 電源を入れる

// Step 1
TMR2ON = 0;
TOUTPS = 0;
T2CKPS = 2;
PR2 = 250U;

// Step 2
CCP1L = 62U;
CCP1X = 1;
CCP1Y = 0;

// Step 3
TRISB3 = 0;

// Step 4
TMR2ON = 1;

// Step 5
CCP1M = 0xC;

それが役立つことを願っています。

于 2016-05-23T18:14:59.410 に答える
0

データシートには次のように記載されています。

パルス幅変調 (PWM) モードでは、CCP1 ピンは最大 10 ビットの分解能の PWM 出力を生成します。CCP1 ピンは PORTB データ ラッチと多重化されているため、TRISB ビットをクリアして CCP1 ピンを出力にする必要があります。

したがって、CCP1 ピンの TRIS ビットを次のように設定する必要があります。

TRISB &= ~(1 << 3); //Clear bit RB3/CCP1 in TRISB, makes PORTB3/CCP1 output.

CCPMX: CCP1 Pin Selection bitこれは、構成ワードが明確であることを前提としています。設定されている場合、CCP1 は RB3 ではなく RB0 にありますが、構成プラグマに CCPMX についての言及がないため、クリアされていると想定します。

于 2016-05-06T18:18:32.643 に答える