Autor Tema: Duda con CCS  (Leído 2663 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Duda con CCS
« en: 22 de Noviembre de 2009, 16:43:10 »
Hola:

Tengo una duda de como usar la funcion setup_timer_2 que es la que permite configurar la frecuencia de la señal. La idea es generar una señal de 100 hz con un duty del 50%. Lo que me gustaria saber es qué formula hay que aplicar para configurar la funcion setup_timer_2 y qué formula aplico para el duty con la funcion set_pwm1_duty
un saludo

aitor

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda con CCS
« Respuesta #1 en: 22 de Noviembre de 2009, 16:58:29 »
setup_timer_2(Pre-escaler,Valor PR2,Post-escaler);
Donde:
Pre-escaler puede ser, T2_DISABLED, T2_DIV_BY_1, T2_DIV_BY_4, T2_DIV_BY_16.
Valor PR2, entre 0 y 255.
Post-escaler, entre 1 y 16.

Para hacer los calculos revisa el datasheet del microcontrolador que estas utilizando, también por aquí hay una pequeña explicación.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Duda con CCS
« Respuesta #2 en: 22 de Noviembre de 2009, 17:13:21 »
El Post-scaler no se usa para el modulo PWM , hace caso omiso del valor planteado.

Aunque no entiendo bien lo segundo

Note: The Timer2 postscaler (see Section 8.0
“Timer2 Module”) is not used in the determination
of the PWM frequency. The
postscaler could be used to have a servo
update rate at a different frequency than
the PWM output.


Saludos!
« Última modificación: 22 de Noviembre de 2009, 17:17:45 por AKENAFAB »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda con CCS
« Respuesta #3 en: 22 de Noviembre de 2009, 17:35:00 »
El Post-scaler no se usa para el modulo PWM , hace caso omiso del valor planteado.

Ups! Es cierto, me olvide  :mrgreen: Y lo otro que mencionas, ni idea  :undecided:

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: Duda con CCS
« Respuesta #4 en: 23 de Noviembre de 2009, 06:19:21 »
Hola:

Gracias por las respuestas. Una cuestion mas, el Proteus se ha de configurar de alguna manera en especial para que funcionen bien las interrupciones?. He probado un ejemplo sencillo y no me funciona.

un saludo

aitor

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda con CCS
« Respuesta #5 en: 23 de Noviembre de 2009, 09:24:59 »
No, ninguno! Capaz estés mal el código....


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: Duda con CCS
« Respuesta #6 en: 23 de Noviembre de 2009, 09:37:40 »
No, ninguno! Capaz estés mal el código....


Saludos!

Hola:

adjunto el codigo para que lo veas:

#include <16F877.h>
#use delay(clock=4000000)
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT
#int_EXT
 int_exterior(){
 output_high(PIN_B1);
 delay_ms(300);
 output_low(PIN_B1);
}

void main( void )
{
   set_tris_b(0b00000001);
   enable_interrupts(INT_EXT);
   ext_int_edge (L_TO_H);
   enable_interrupts(global);
   while(1){
   output_b(0x00);}
}

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda con CCS
« Respuesta #7 en: 23 de Noviembre de 2009, 09:43:34 »
Dos cosas para tener en cuenta, la configuración del evento (ext_int_edge (L_TO_H)) se debe hacer antes de habilitarlo, sino puede generar una interrupción que no es deseada.

Luego estás trabajando con la configuración de puertos standar, esto quiere decir que cada vez que se actué sobre un puerto se configurará el tris para ello, y tu haces un output_b() que establece todos los pines como salida y debe estar inhabilitando la interrupción.

Para fijar la configuración del TRIS debes utilizar: #use fast_io(b), de esa manera el tris queda como tu lo hayas configurado.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: Duda con CCS
« Respuesta #8 en: 23 de Noviembre de 2009, 09:51:08 »
Dos cosas para tener en cuenta, la configuración del evento (ext_int_edge (L_TO_H)) se debe hacer antes de habilitarlo, sino puede generar una interrupción que no es deseada.

Luego estás trabajando con la configuración de puertos standar, esto quiere decir que cada vez que se actué sobre un puerto se configurará el tris para ello, y tu haces un output_b() que establece todos los pines como salida y debe estar inhabilitando la interrupción.

Para fijar la configuración del TRIS debes utilizar: #use fast_io(b), de esa manera el tris queda como tu lo hayas configurado.


Saludos!

Hola:

gracias,ahora funciona con el siguiente codigo:

#include <16F877.h>
#use delay(clock=4000000)
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT
#use fast_io(b)
#int_EXT
 int_exterior(){
 output_high(PIN_B1);
 delay_ms(300);
 output_low(PIN_B1);
}

void main( void )
{
   set_tris_b(0b00000001);
   enable_interrupts(INT_EXT);
   ext_int_edge (L_TO_H);
   enable_interrupts(global);
   while(1){
   output_b(0x00);}
}

lo del ext_int_edge (L_TO_H) dices que tendria que configurarlo en otra parte del codigo? antes del main?

gracias y saludos

aitor

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda con CCS
« Respuesta #9 en: 23 de Noviembre de 2009, 10:30:11 »
No, con enable_interrupts(INT_EXT) ya estas habilitando la interrupción por flanco, y al hacer ext_int_edge (L_TO_H) después de ella puede setear el flag de interrupción, que al habilitarla con la global la generé. Lo único que debe hacerse es cambiar de posición estas dos instrucciones.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: Duda con CCS
« Respuesta #10 en: 23 de Noviembre de 2009, 11:01:24 »
No, con enable_interrupts(INT_EXT) ya estas habilitando la interrupción por flanco, y al hacer ext_int_edge (L_TO_H) después de ella puede setear el flag de interrupción, que al habilitarla con la global la generé. Lo único que debe hacerse es cambiar de posición estas dos instrucciones.


Saludos!

Hola:

A ver si lo entiendo, seria asi:

#include <16F877.h>
#use delay(clock=4000000)
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT
#use fast_io(b)
#int_EXT
 int_exterior(){
 output_high(PIN_B1);
 delay_ms(300);
 output_low(PIN_B1);
}

void main( void )
{
   set_tris_b(0b00000001);
   ext_int_edge (L_TO_H);
   enable_interrupts(INT_EXT);
   enable_interrupts(global);
   while(1){
   output_b(0x00);}
}

primero habilito el evento por flanco de subida y luego habilito la interrupcion exterior. Entonces si no pongo ext_int_edge (L_TO_H) que tipo de flanco aplica por defecto?

saludos

aitor

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda con CCS
« Respuesta #11 en: 23 de Noviembre de 2009, 11:18:28 »
Si, es lo correcto. Pasa saber que aplica por defecto hay que ir a la base de esto, el datasheet del microcontrolador.


Saludos!
No contesto mensajes privados, las consultas en el foro