PWM en lenguaje C, PIC16F877A
4 participantes
Página 1 de 1.
PWM en lenguaje C, PIC16F877A
Holass
soy nuevo en el foro, saludos
estoy trabajando con el PIC16F877A y deseo realizar realizar una
modulacion por ancho de pulsos (PWM).
trabajo en mikroC y simulando en proteus. soy nuevo en esto y realice
circuitos basicos I/O, pero nose e logrado obtener de salida PWM.
si alguien tubiera algun tips y/o ejemplo que en lenguaje C ("no keri
na!") que si funcione.
gracias
soy nuevo en el foro, saludos
estoy trabajando con el PIC16F877A y deseo realizar realizar una
modulacion por ancho de pulsos (PWM).
trabajo en mikroC y simulando en proteus. soy nuevo en esto y realice
circuitos basicos I/O, pero nose e logrado obtener de salida PWM.
si alguien tubiera algun tips y/o ejemplo que en lenguaje C ("no keri
na!") que si funcione.
gracias
alkohol- Nuevo Usuario
- Mensajes : 1
Fecha de inscripción : 04/05/2010
Re: PWM en lenguaje C, PIC16F877A
Esto ni es sdcc, ni es para PIC, es un programa que hice en la universidad muy sencillito de PWM sobre arquitectura 8051. Por lo menos te servirá para tener algo por donde empezar. Las dos primeras funciones son a las que tienes que hacer caso, el main lo que hace es un incremento del pwm desde 0 al máximo, es un programa mas teorico que nada, pero espero que te deje la idea un poco mas clara.
Cualquier duda que tengas, pregunta.
void
cuenta () interrupt0{ //interrupción del timer0
if(P<100){
P++;}
else{
P=0;}
}
void
pwm(int duty){
if(P<=duty){
P1^0=1;}
else{
P1^0=0;}
}
void
main (void){
//configurar
T0
TH0=0x00;
TL0=0x00;
TR0=0;
char
duty;
for(i=0;i<=100;i++)}
pwm(i);
}
}
Saludos
Cualquier duda que tengas, pregunta.
void
cuenta () interrupt0{ //interrupción del timer0
if(P<100){
P++;}
else{
P=0;}
}
void
pwm(int duty){
if(P<=duty){
P1^0=1;}
else{
P1^0=0;}
}
void
main (void){
//configurar
T0
TH0=0x00;
TL0=0x00;
TR0=0;
char
duty;
for(i=0;i<=100;i++)}
pwm(i);
}
}
Saludos
Re: PWM en lenguaje C, PIC16F877A
Hola...
yo estoy aprendiendo a utlizar sdcc.. y para un proyecto que estoy realizando utilizo PWM con un pic16f876 a 4mhz (Similar a PIC16877). Básicamente utilizo los 2 pwm que tiene el pic por hardware. Realizando lo siguiente.
Este es un ejemplo que trate de adaptar para que veas el uso de las 2 pwm RC1 y RC2. este pwm trabaja a una frecuencia de 1Kz utilizando 10bit de precisión.. si necesitas modificar la frecuencia solo ve esta pagina que trate un calculador para modificar los registros (link calculator PWM)
Atte.
RiSanti
yo estoy aprendiendo a utlizar sdcc.. y para un proyecto que estoy realizando utilizo PWM con un pic16f876 a 4mhz (Similar a PIC16877). Básicamente utilizo los 2 pwm que tiene el pic por hardware. Realizando lo siguiente.
- Código:
//**********Funciones Usadas*************
void pwm1_send(unsigned int valor);
void pwm2_send(unsigned int valor);
void main() {
TRISB=3;
TRISC=0;
PORTB=0;
PORTC=0;
//Habilito TMR0
TMR0=0;
OPTION_REG=135; //Configuro preescaler de TMR0
//****************PWM 1 Volt**********************************
T2CON=1; //PreScaler 4
PR2=249; //PR2 249, parA 1KHZ
//PWM1 RC2
CCPR1L=0; //Ancho del Ciclo debe ser 1ms
CCP1CON=12;
//PWM2 RC1
CCPR2L=0; //Ancho del Ciclo debe ser 1ms
CCP2CON=12;
TMR2ON=1;//Tmr2 Encendido
while(1) {
if ((RB0==0)|(pwm_Volt<=1023) {pwm_Volt+=10;}
if ((RB1==0)|(pwm_Volt>=10) {pwm_Volt-=10;}
pwm1_send(pwm_Volt); //Pwm Voltaje
pwm2_send(204); // Pwm Amp
}
}
/*****************PWM 1 RC2****************/
void pwm1_send(unsigned int valor)
{
unsigned char temp,temp1 ;
temp=valor>>2;
temp1=(valor & 0x03)<<4;
//******Valor de PWM*******
CCPR1L=temp;
CCP1CON=temp1|12;
//************************
}
/******PWM 2 RC1****************/
void pwm2_send(unsigned int valor)
{
unsigned char temp,temp1 ;
temp=valor>>2;
temp1=(valor & 0x03)<<4;
//******Valor de PWM*******
CCPR2L=temp;
CCP2CON=temp1|12;
//************************
}
Este es un ejemplo que trate de adaptar para que veas el uso de las 2 pwm RC1 y RC2. este pwm trabaja a una frecuencia de 1Kz utilizando 10bit de precisión.. si necesitas modificar la frecuencia solo ve esta pagina que trate un calculador para modificar los registros (link calculator PWM)
Atte.
RiSanti
Re: PWM en lenguaje C, PIC16F877A
Porque ocupas el timer 0? es necesario?
Saludos!!
Saludos!!
Risanti escribió:Hola...
yo estoy aprendiendo a utlizar sdcc.. y para un proyecto que estoy realizando utilizo PWM con un pic16f876 a 4mhz (Similar a PIC16877). Básicamente utilizo los 2 pwm que tiene el pic por hardware. Realizando lo siguiente.
- Código:
//**********Funciones Usadas*************
void pwm1_send(unsigned int valor);
void pwm2_send(unsigned int valor);
void main() {
TRISB=3;
TRISC=0;
PORTB=0;
PORTC=0;
//Habilito TMR0
TMR0=0;
OPTION_REG=135; //Configuro preescaler de TMR0
//****************PWM 1 Volt**********************************
T2CON=1; //PreScaler 4
PR2=249; //PR2 249, parA 1KHZ
//PWM1 RC2
CCPR1L=0; //Ancho del Ciclo debe ser 1ms
CCP1CON=12;
//PWM2 RC1
CCPR2L=0; //Ancho del Ciclo debe ser 1ms
CCP2CON=12;
TMR2ON=1;//Tmr2 Encendido
while(1) {
if ((RB0==0)|(pwm_Volt<=1023) {pwm_Volt+=10;}
if ((RB1==0)|(pwm_Volt>=10) {pwm_Volt-=10;}
pwm1_send(pwm_Volt); //Pwm Voltaje
pwm2_send(204); // Pwm Amp
}
}
/*****************PWM 1 RC2****************/
void pwm1_send(unsigned int valor)
{
unsigned char temp,temp1 ;
temp=valor>>2;
temp1=(valor & 0x03)<<4;
//******Valor de PWM*******
CCPR1L=temp;
CCP1CON=temp1|12;
//************************
}
/******PWM 2 RC1****************/
void pwm2_send(unsigned int valor)
{
unsigned char temp,temp1 ;
temp=valor>>2;
temp1=(valor & 0x03)<<4;
//******Valor de PWM*******
CCPR2L=temp;
CCP2CON=temp1|12;
//************************
}
Este es un ejemplo que trate de adaptar para que veas el uso de las 2 pwm RC1 y RC2. este pwm trabaja a una frecuencia de 1Kz utilizando 10bit de precisión.. si necesitas modificar la frecuencia solo ve esta pagina que trate un calculador para modificar los registros (link calculator PWM)
Atte.
RiSanti
tony8a87- Participante Activo
- Mensajes : 34
Fecha de inscripción : 10/08/2010
Re: PWM en lenguaje C, PIC16F877A
Hola, buenas observación la verdad no se ocupa en le código, lo puse alli ya que eso es parte de otro codigo que estaba probando, pero para realizar pwm con hadware no se necesita.
Saludos
RiSanti
Saludos
RiSanti
Temas similares
» Lenguaje JALv2
» Ayuda PWM PIC16F877A
» Cargador de baterías universal con SDCC y PIC16F877A.
» Fuente de alimentación digital 0-25V con SDCC y PIC16F877A.
» Ayuda PWM PIC16F877A
» Cargador de baterías universal con SDCC y PIC16F877A.
» Fuente de alimentación digital 0-25V con SDCC y PIC16F877A.
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.