Autor Tema: como crear dos señales de PWR- Hitech C  (Leído 4084 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado hprince

  • PIC10
  • *
  • Mensajes: 10
como crear dos señales de PWR- Hitech C
« en: 31 de Marzo de 2010, 18:27:39 »
Holas estoy utilizando un pic18f2550 hasta el momento solo he podido crear una frecuencia de 38KHz usando PR2,CCP1CON y CCPR1L ..ahora quisiera crear una frecuencia de 833 KHz usando un segundo canal de PWM..
Si hago cambios en CCP2CON pues no influye mucho me da igual 38Khz que es lo que me da CCP1CON, CCPR2L es el duty cycle y haciendo cambios pues no ayuda en nada porque igual sigue siendo la misma frecuencia... Sugerencias por favor para hacer cambios en el programa para obtener 833Khz.. o quizas podria hacerlo haciendo un pequeño delay pero no tengo una idea concreta de como hacerlo...


#include <pic18.h>

void Init(void);

int i;

int main ()
{
Init();
while(1)
{
//   This routine goes on forever.
//   Only back ground work is done here.
//   Prioritized work is connected with Interrupts

   i=i   ;
}


return(0);
}
   
void Init(void)
   {
// Port A settings (Let PORTB work in parallell,
               //to be used in PICKit3 28 pin demo board.
   //TRISB = 0;   // All bits OUTPUT on Port B
   //TRISA  = 0b11000000; // 6 bits OUTPUT on Port A
   TRISC = 0;
   //PORTA = 0x00;   // Start pattern on Port A
   //PORTB = 0x00;
   PORTC= 0x0;
   ADCON1 = 0x0f;

// Initialize registers
// Period and duty cycle, see Eq 15-1 and 15-2
   PR2 = 157;   // Period
   CCPR1L = 0x63;   // Duty cycle 1, CCP1 is RC2 uso este duty para 38Khz
   CCPR2L = 0x65;   // Duty cycle 2, CCP2 is RC1
   CCP1CON = 0b00011100;      // DC1B = 0
   CCP2CON = 0b00111100;      // DC2B = 0
   T2CON = 0b00000100;   // Timer 2 ON, Prescaler = 0
   }
« Última modificación: 19 de Abril de 2010, 20:12:13 por hprince »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: LED parpadeante a 38KHz usando PWR
« Respuesta #1 en: 01 de Abril de 2010, 00:03:40 »
38KHz sobre un led... me suena a control remoto infrarojo  :)

¿Además de el led con PWM, que más tiene que hacer el programa?

Para probar la oscilación podrías hacer testeo sobre un puerto. Si es, por ejemplo, 0 activas la PWM y si es 1 la dejás desactivada.... No se, depende de lo que quieras hacer.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado hprince

  • PIC10
  • *
  • Mensajes: 10
Re: LED parpadeante a 38KHz usando PWR
« Respuesta #2 en: 09 de Abril de 2010, 11:42:48 »
38KHz sobre un led... me suena a control remoto infrarojo  :)

¿Además de el led con PWM, que más tiene que hacer el programa?

Para probar la oscilación podrías hacer testeo sobre un puerto. Si es, por ejemplo, 0 activas la PWM y si es 1 la dejás desactivada.... No se, depende de lo que quieras hacer.

Perdon puse la informacion un poco incompleta, es un LED infrarojo... aun no he podido probar el programa solo lo he hecho leyendo el manual de microchip, por otros lados he
visto que se puede generar un frecuencia de 38Khz con un 555 IC timmer pero espero solucionarlo con programacion, despues necesito hacer otro programa para otro LED infrarojo
pero este tendra cuatro diferentes frecuencias que seran controladas por un switch binario de 2 bits... aun no lo he empezado a hacer pero ya estoy empezando.. Saludos!

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: LED parpadeante a 38KHz usando PWR
« Respuesta #3 en: 09 de Abril de 2010, 12:28:16 »
Yo había hecho con un 16F84A un control remoto con el protocolo RC5 (Protocolo utilizado por equipos Philips). Hacía todo por soft. Tenía un teclado y una vez testeado el mismo, iba a la rutina de transmisión y generaba por soft la pwm para el led.
Obvio que con un PIC que tenga PWM por hard va a ser mucho más fácil. Cualquier cosita en la que pueda ayudar... no dudes en consultar
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado hprince

  • PIC10
  • *
  • Mensajes: 10
Re: LED parpadeante a 38KHz usando PWR
« Respuesta #4 en: 11 de Abril de 2010, 02:46:44 »
Yo había hecho con un 16F84A un control remoto con el protocolo RC5 (Protocolo utilizado por equipos Philips). Hacía todo por soft. Tenía un teclado y una vez testeado el mismo, iba a la rutina de transmisión y generaba por soft la pwm para el led.
Obvio que con un PIC que tenga PWM por hard va a ser mucho más fácil. Cualquier cosita en la que pueda ayudar... no dudes en consultar


Bueno gracias por la intencion de querer ayudarme..recien el lunes probare mi programa con el pic18f2550 y con LED infrarojo..de acuerdo a mis avances estare contando mis experiencias y pues es mas que seguro que llegare a necesitar consejos..  Saludos!

Desconectado hprince

  • PIC10
  • *
  • Mensajes: 10
Re: LED parpadeante a 38KHz usando PWR
« Respuesta #5 en: 13 de Abril de 2010, 18:43:09 »
Yo había hecho con un 16F84A un control remoto con el protocolo RC5 (Protocolo utilizado por equipos Philips). Hacía todo por soft. Tenía un teclado y una vez testeado el mismo, iba a la rutina de transmisión y generaba por soft la pwm para el led.
Obvio que con un PIC que tenga PWM por hard va a ser mucho más fácil. Cualquier cosita en la que pueda ayudar... no dudes en consultar


Bueno gracias por la intencion de querer ayudarme..recien el lunes probare mi programa con el pic18f2550 y con LED infrarojo..de acuerdo a mis avances estare contando mis experiencias y pues es mas que seguro que llegare a necesitar consejos..  Saludos!


No me funciono mi programa...ahora si que necesito ayuda para reconocer mis errores...

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: LED parpadeante a 38KHz usando PWR
« Respuesta #6 en: 13 de Abril de 2010, 20:05:56 »
Y bueh.... será cuestión que lo subás para poder verlo y así poder ayudarte
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado hprince

  • PIC10
  • *
  • Mensajes: 10
Re: LED parpadeante a 38KHz usando PWR
« Respuesta #7 en: 18 de Abril de 2010, 17:02:33 »
Y bueh.... será cuestión que lo subás para poder verlo y así poder ayudarte

Hola de nuevo!! Bueno no queria rendirme facilmente porque sabia que tenia pensar con calma y bueno al fin logre un programa que me genera un programa que me genera 30Khz la meta
es 38Khz solo me falta ajustar el PR2 y estara listo! Aca adjunto mi programa..ahora tengo que empezar a hacer una funcion para resetear el pic de manera externa con un boton..


#include <pic18.h>

void Init(void);

int i;

void main (void)
{
Init();
while(1)
{
//   This routine goes on forever.
//   Only back ground work is done here.
//   Prioritized work is connected with Interrupts

   i=i   ;
}



}
   
void Init(void)
   {
// Port A settings (Let PORTB work in parallell,
               //to be used in PICKit3 28 pin demo board.
   TRISB = 0;   // All bits OUTPUT on Port B
   TRISA  = 0b11000000; // 6 bits OUTPUT on Port A
   TRISC = 0;
   PORTA = 0x00;   // Start pattern on Port A
   PORTB = 0x00;
   PORTC= 0x1;
   ADCON1 = 0x0f;

// Initialize registers
// Period and duty cycle
   PR2 = 194;//0b10000010;   // Period
   CCPR1L = 65;   // Duty cycle 1, CCP1 is RC2
   CCPR2L = 0x04;   // Duty cycle 2, CCP2 is RC1
   CCP1CON = 0b00011100;      // DC1B = 0
   CCP2CON = 0b00111100;      // DC2B = 0
   T2CON = 0b00000100;   // Timer 2 ON, Prescaler = 1
   }
« Última modificación: 18 de Abril de 2010, 17:05:06 por hprince »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: LED parpadeante a 38KHz usando PWR
« Respuesta #8 en: 19 de Abril de 2010, 09:42:09 »
Y bueh.... será cuestión que lo subás para poder verlo y así poder ayudarte

Hola de nuevo!! Bueno no queria rendirme facilmente porque sabia que tenia pensar con calma y bueno al fin logre un programa que me genera un programa que me genera 30Khz la meta
es 38Khz solo me falta ajustar el PR2 y estara listo! Aca adjunto mi programa..ahora tengo que empezar a hacer una funcion para resetear el pic de manera externa con un boton..


#include <pic18.h>

void Init(void);

int i;

void main (void)
{
Init();
while(1)
{
//   This routine goes on forever.
//   Only back ground work is done here.
//   Prioritized work is connected with Interrupts

   i=i   ;
}



}
   
void Init(void)
   {
// Port A settings (Let PORTB work in parallell,
               //to be used in PICKit3 28 pin demo board.
   TRISB = 0;   // All bits OUTPUT on Port B
   TRISA  = 0b11000000; // 6 bits OUTPUT on Port A
   TRISC = 0;
   PORTA = 0x00;   // Start pattern on Port A
   PORTB = 0x00;
   PORTC= 0x1;
   ADCON1 = 0x0f;

// Initialize registers
// Period and duty cycle
   PR2 = 194;//0b10000010;   // Period
   CCPR1L = 65;   // Duty cycle 1, CCP1 is RC2
   CCPR2L = 0x04;   // Duty cycle 2, CCP2 is RC1
   CCP1CON = 0b00011100;      // DC1B = 0
   CCP2CON = 0b00111100;      // DC2B = 0
   T2CON = 0b00000100;   // Timer 2 ON, Prescaler = 1
   }


¿Para que necesitas resetear el pic externamente? Podrías aprovechar el pin MCLR. Conectas una resistencia a VCC y un switch normal-abierto a GND, cuando presionas el switch se resetea el micro.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado hprince

  • PIC10
  • *
  • Mensajes: 10
Re: LED parpadeante a 38KHz usando PWR
« Respuesta #9 en: 19 de Abril de 2010, 16:55:46 »
Y bueh.... será cuestión que lo subás para poder verlo y así poder ayudarte

Hola de nuevo!! Bueno no queria rendirme facilmente porque sabia que tenia pensar con calma y bueno al fin logre un programa que me genera un programa que me genera 30Khz la meta
es 38Khz solo me falta ajustar el PR2 y estara listo! Aca adjunto mi programa..ahora tengo que empezar a hacer una funcion para resetear el pic de manera externa con un boton..


#include <pic18.h>

void Init(void);

int i;

void main (void)
{
Init();
while(1)
{
//   This routine goes on forever.
//   Only back ground work is done here.
//   Prioritized work is connected with Interrupts

   i=i   ;
}



}
   
void Init(void)
   {
// Port A settings (Let PORTB work in parallell,
               //to be used in PICKit3 28 pin demo board.
   TRISB = 0;   // All bits OUTPUT on Port B
   TRISA  = 0b11000000; // 6 bits OUTPUT on Port A
   TRISC = 0;
   PORTA = 0x00;   // Start pattern on Port A
   PORTB = 0x00;
   PORTC= 0x1;
   ADCON1 = 0x0f;

// Initialize registers
// Period and duty cycle
   PR2 = 194;//0b10000010;   // Period
   CCPR1L = 65;   // Duty cycle 1, CCP1 is RC2
   CCPR2L = 0x04;   // Duty cycle 2, CCP2 is RC1
   CCP1CON = 0b00011100;      // DC1B = 0
   CCP2CON = 0b00111100;      // DC2B = 0
   T2CON = 0b00000100;   // Timer 2 ON, Prescaler = 1
   }


¿Para que necesitas resetear el pic externamente? Podrías aprovechar el pin MCLR. Conectas una resistencia a VCC y un switch normal-abierto a GND, cuando presionas el switch se resetea el micro.


Bueno necesito resetear el pic externamente porque estara conectado a un touch sensor que apagara el programa entons el boton reset prendera de nuevo el programa... si habia leido sobre el MCLR pero necesito programar el MCLR?? No he leido informacion sobre eso..mas bien he leido informacion sobre reseteo a traves del RB0...

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: como crear dos señales de PWR- Hitech C
« Respuesta #10 en: 21 de Abril de 2010, 10:12:39 »
El pin MCLR provoca un reset en el microcontrolador (cuando hay un nivel bajo), estando el pin en nivel alto el microcontrolador trabaja normalmente.
En algunos micros, como el 16F628 hay que habilitar la función de MCLR, en otros dicho pin es para uso exclusivo de dicha función.

Al resetearse el micro, el contador de programa vuelve a la dirección de reset.

Con RB0 por lo general (digo por lo general porque no conozco los 18Fxxxx) se genera una interrupción haciendo que el contador de programa apunte a la dirección de interrupciones.

Dentro del vector de interrupciones, hacés lo que se te ocurra y luego retornas al programa principal.

Todo esto está explicado en los datasheets correspondiente a cada micro.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas