PWM en lenguaje C, PIC16F877A

Ir abajo

PWM en lenguaje C, PIC16F877A

Mensaje por alkohol el Mar 4 Mayo 2010 - 23:51

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 Very Happy

alkohol
Nuevo Usuario
Nuevo Usuario

Mensajes : 1
Fecha de inscripción : 04/05/2010

Volver arriba Ir abajo

Re: PWM en lenguaje C, PIC16F877A

Mensaje por litox9 el Miér 5 Mayo 2010 - 19:13

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
avatar
litox9
Asiduo del Foro
Asiduo del Foro

Mensajes : 101
Fecha de inscripción : 14/04/2009

http://litox.entramado.net/

Volver arriba Ir abajo

Re: PWM en lenguaje C, PIC16F877A

Mensaje por Risanti el Jue 6 Mayo 2010 - 14:42

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
avatar
Risanti
Asiduo del Foro
Asiduo del Foro

Mensajes : 172
Fecha de inscripción : 07/12/2008
Edad : 34
Localización : La Serena Chile

https://www.facebook.com/risanti.electronica

Volver arriba Ir abajo

Re: PWM en lenguaje C, PIC16F877A

Mensaje por tony8a87 el Dom 8 Mayo 2011 - 17:35

Porque ocupas el timer 0? es necesario?
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
avatar
tony8a87
Participante Activo
Participante Activo

Mensajes : 34
Fecha de inscripción : 10/08/2010

Volver arriba Ir abajo

Re: PWM en lenguaje C, PIC16F877A

Mensaje por Risanti el Miér 11 Mayo 2011 - 23:12

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
avatar
Risanti
Asiduo del Foro
Asiduo del Foro

Mensajes : 172
Fecha de inscripción : 07/12/2008
Edad : 34
Localización : La Serena Chile

https://www.facebook.com/risanti.electronica

Volver arriba Ir abajo

Re: PWM en lenguaje C, PIC16F877A

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.