Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
Entre para seguir isso  
Adebaldo

Problema com PWM usando pic 16f648a

Recommended Posts

Galera estou usando o MPLAB e o PIC16F648A para configurar o Modo PWM,

porém não consigo valores certos para os pulsos do pwm eles variam um

pouco e também não consigo um valor de Dutycycle correto para alguns

valores.

Alguém pode me ajudar como isso?

Esse é o código do programa que eu fiz:

#include <htc.h>
#define _XTAL_FREQ 4000000 // clock = 4MHz
// INTIO: Clock = oscilador RC interno; RA6 e RA7 = I/O
// WDTDIS: Watch-dog Timer = desativado
__CONFIG (INTIO & WDTDIS);

void configura_ports() {
CMCON = 0x07;
TRISA = 0xFF;
TRISB = 0x00;
PORTA = 0x00;
PORTB = 0x00;
}

void config_pwm(unsigned int periodo_pwm, int freq_osc) {

CCP1CON = 0b00001100;
prescale_ = ((periodo_pwm*freq_osc)/1024);
if (prescale_<1) {
prescale = 1; T2CON = 0b00000100;
}
else if (prescale_<4) {
prescale = 4; T2CON = 0b00000101;
}
else if (prescale_<=16) {
prescale = 16; T2CON = 0b00000110;
}
PR2 = ((periodo_pwm*freq_osc)/(4*prescale))-1;
TMR2 = PR2-(periodo_pwm/prescale);
}

void config_duty_cycle(int duty_cycle) {
CCPR1L = (duty_cycle*PR2)/(100);
}

void main() {
configura_ports();
config_pwm(200,4); // 200 micro seg e 4Mhz
config_duty_cycle(65); // 65%
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×