Autor Tema: Frecuencia oscilacion  (Leído 27319 veces)

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

Desconectado bmfranky

  • PIC16
  • ***
  • Mensajes: 165
    • La Tienda De Fran
Re: Frecuencia oscilacion
« Respuesta #30 en: 09 de Marzo de 2010, 09:47:30 »
Si tienes que usar el pic C18 de microchip, en la pagina web de ucontrol, tienen un estupendo manual del c18 desde cero, ojea-lo.
Visiten La Tienda De Fran ;-) Aqui. y mi nueva Web Aqui.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Frecuencia oscilacion
« Respuesta #31 en: 09 de Marzo de 2010, 13:12:42 »
Pero si el programa es sencillo y pequeño, podes usar CCS y usar un PIC16F. Tenes que estudiar el tema y elegir.



Nota: En C18 no existe delay_us(), delay_ms(), están Delay10TCYx(), Delay100TCYx(), Delay1KTCYx() y Delay10KTCYx().


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

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Frecuencia oscilacion
« Respuesta #32 en: 09 de Marzo de 2010, 15:03:46 »
Te estas complicando mucho para algo tan simple.

Desconectado andreaymaria

  • PIC10
  • *
  • Mensajes: 45
Re: Frecuencia oscilacion
« Respuesta #33 en: 10 de Marzo de 2010, 07:15:51 »
Te estas complicando mucho para algo tan simple.

Y que me recomiendas??

Desconectado andreaymaria

  • PIC10
  • *
  • Mensajes: 45
Re: Frecuencia oscilacion
« Respuesta #34 en: 10 de Marzo de 2010, 07:32:30 »
Si te da igual utilizar un pin u otro puedes mirar en el datasheet cómo configurar el módulo CCP/PWM para generar esa frecuencia.
También puedes generar ese pulso por software utilizando un Timer.

Y también puedes generarlo mediante un bucle y retardos con el programa, que para probar quizás sea el método más sencillo:

while (true) {
   output_high(pin);
   delay_us(retraso1);
   output_low(pin);
   delay_us(retraso2);
}



Qué comandos puedo utilizar en C18 que realicen la función de output_high(pin) y output_low(pin)??

Desconectado andreaymaria

  • PIC10
  • *
  • Mensajes: 45
Re: Frecuencia oscilacion
« Respuesta #35 en: 10 de Marzo de 2010, 08:59:21 »
Pero si el programa es sencillo y pequeño, podes usar CCS y usar un PIC16F. Tenes que estudiar el tema y elegir.



Nota: En C18 no existe delay_us(), delay_ms(), están Delay10TCYx(), Delay100TCYx(), Delay1KTCYx() y Delay10KTCYx().


Saludos!

He estado probando el programita con los delays...pero me he dado cuenta de que no me sirve.
Yo tengo conectado al pic un circuito RC, con un condensador variable.Dependiendo de ese condensador, mi frecuencia de oscilación variará...y por lo tanto la salida que necesito, señal de fosc/48, también variará...por lo tanto no puedo hacerlo con retardos ya que estos retardos son constantes, no me varían con la frecuencia de oscilación, y por lo tanto, no varía mi salida.


A ver si esta vez me he explicado mejor..

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Frecuencia oscilacion
« Respuesta #36 en: 10 de Marzo de 2010, 09:05:07 »
Creo yo  :rolleyes: que hagas como lo hagas si la frecuencia del oscilador externo del microcontrolador varía, la señal que generes va a variar  :? Si necesitas que sea fija, la frecuencia externa debe ser fija!  

En C18 sería:

   LATBbits.LATB0=1;
   LATBbits.LATB0=0;


Por ejemplo.

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

Desconectado andreaymaria

  • PIC10
  • *
  • Mensajes: 45
Re: Frecuencia oscilacion
« Respuesta #37 en: 10 de Marzo de 2010, 09:24:15 »
Creo yo  :rolleyes: que hagas como lo hagas si la frecuencia del oscilador externo del microcontrolador varía, la señal que generes va a variar  :? Si necesitas que sea fija, la frecuencia externa debe ser fija!  

En C18 sería:

   LATBbits.LATB0=1;
   LATBbits.LATB0=0;


Por ejemplo.

Saludos!



Ahí esta mi problema...en que yo no quiero que mi señal sea fija...quiero q sea variable xq debe depender de la frec del RC que va a variar debido a que mi condensador es variable. Y tiene una dependencia del orden de fosc/48...eso es lo q no se hacer...
No se hacer un retardo que me dependa de la frec de oscilación... :?

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Frecuencia oscilacion
« Respuesta #38 en: 10 de Marzo de 2010, 13:03:05 »
Podrias hacerlo con delay_cycles pero nose si en C18 lo habra.

Exitos.

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Frecuencia oscilacion
« Respuesta #39 en: 10 de Marzo de 2010, 14:36:02 »

He estado probando el programita con los delays...pero me he dado cuenta de que no me sirve.
Yo tengo conectado al pic un circuito RC, con un condensador variable.Dependiendo de ese condensador, mi frecuencia de oscilación variará...y por lo tanto la salida que necesito, señal de fosc/48, también variará...por lo tanto no puedo hacerlo con retardos ya que estos retardos son constantes, no me varían con la frecuencia de oscilación, y por lo tanto, no varía mi salida.

Supongo que eso que dices es imposible ya que los retardos dependen de la frecuencia de oscilacion, a menos que el micro este configurado para usar el oscilador interno, o solo lo hayas simulado en Proteus, si es este el caso la frecuencia nunca variara aunque varies el valor del RC ya que proteus no usa la frecuencia del oscilador externo sino que usa la frecuencia que le declaras en las propiedades, para comprobarlo puedes quitar el oscildor externo y observaras que proteus simulara igual el circuito.

Si quieres tener una frecuencia exacta (que puede variar mediante software) te recomiendo que utilices el modulo CCP de algun PIC, en mi caso voy a usar un codigo para MikroC V8.2, que ya tiene implementadas las rutinas de configuracion del PWM, y el PIC18F452. La frecuencia de oscilacion externa es de 8MHz.



Código: [Seleccionar]
void main() {
  PORTB = 0;              // Set PORTB to 0
  TRISB = 0;              // PORTB is output

  ADCON1 = 6;             // All ADC pins to digital I/O
  PORTA = 255;
  TRISA = 255;            // PORTA is input

  PORTC = 0xFF;           // Set PORTC to $FF
  TRISC = 0;              // PORTC is output
  Pwm_Init(5000);         // Initialize PWM module at 5KHz
  Pwm_Start();            // Start PWM

}//~

El esquema y el codigo provienen de la ayuda de MikroC.

Ya que tu quieres poner un oscilador externo RC, solo lo debes cambiar por el oscilador Cristal que se muestra en la figura superior, y simplemente debes calcular la frecuencia de este oscilador RC y dividirla entre 48, luego debes ingresar este valor donde dice Pwm_Init(Freq_calculada), cuando varies el valor RC la frecuencia de salida tambien variara.

No se si en CCS o C18 existan funciones similares a estas.
« Última modificación: 10 de Marzo de 2010, 14:43:12 por bigluis »
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Frecuencia oscilacion
« Respuesta #40 en: 10 de Marzo de 2010, 15:30:31 »
Ahí esta mi problema...en que yo no quiero que mi señal sea fija...quiero q sea variable xq debe depender de la frec del RC que va a variar debido a que mi condensador es variable. Y tiene una dependencia del orden de fosc/48...eso es lo q no se hacer...
No se hacer un retardo que me dependa de la frec de oscilación... :?

Antes que nada pido disculpas por mi intromisión....

Andreaymaria, ninguna rutina de delay es fija, siempre depende de la frecuencia de oscilación.

Supongamos que tu rutina de delay involucra 3 instrucciones de assembler "nop" (esto no hace nada, pero consume tiempo).
Si estás trabajando a 20MHz, el tiempo consumido por esos 3 "nop" es de 600ns. Pero si trabajás a 10MHz el tiempo consumido es de 1.2us.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado bmfranky

  • PIC16
  • ***
  • Mensajes: 165
    • La Tienda De Fran
Re: Frecuencia oscilacion
« Respuesta #41 en: 10 de Marzo de 2010, 15:33:41 »
Como dice AngelGris , el delay es fijo, estoy haciéndote un ejemplo de como crear el retardo, de doce instrucciones que necesitas para generar una salida 48 veces inferior a el reloj del sistema que es lo que tu quieres conseguir.
Visiten La Tienda De Fran ;-) Aqui. y mi nueva Web Aqui.

Desconectado bmfranky

  • PIC16
  • ***
  • Mensajes: 165
    • La Tienda De Fran
Re: Frecuencia oscilacion
« Respuesta #42 en: 10 de Marzo de 2010, 15:42:04 »
He probado este código con proteus y funciona, frecuencia del sistema 480khz, frecuencia de salida 10khz, frecuencia de entrada 4.8Mhz frecuencia de salida 100khz, siempre 48 veces mas pequeña que la del oscilador primario, ahora tu has de acoplarlo a tu programa.

Código: [Seleccionar]
void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   // TODO: USER CODE!!

while(1)
{
output_high(PIN_A0);
#asm
nop;
nop;
#endasm
output_low(PIN_A0);

}



}
Visiten La Tienda De Fran ;-) Aqui. y mi nueva Web Aqui.

Desconectado andreaymaria

  • PIC10
  • *
  • Mensajes: 45
Re: Frecuencia oscilacion
« Respuesta #43 en: 10 de Marzo de 2010, 18:38:05 »
He probado este código con proteus y funciona, frecuencia del sistema 480khz, frecuencia de salida 10khz, frecuencia de entrada 4.8Mhz frecuencia de salida 100khz, siempre 48 veces mas pequeña que la del oscilador primario, ahora tu has de acoplarlo a tu programa.

Código: [Seleccionar]
void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   // TODO: USER CODE!!

while(1)
{
output_high(PIN_A0);
#asm
nop;
nop;
#endasm
output_low(PIN_A0);

}



}

Esto no es necesario que lo escriba no???Pongo mi configuracion no??

setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   // TODO: USER CODE!!

Y otra cosa...ese código en ensamblador es compatible tambien con el c18 o solamente con el css??Muchisimas gracias por este aporte...!Un saludo!

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Frecuencia oscilacion
« Respuesta #44 en: 10 de Marzo de 2010, 20:49:31 »
Y otra cosa...ese código en ensamblador es compatible tambien con el c18 o solamente con el css??Muchisimas gracias por este aporte...!Un saludo!

Solo para CCS. Pero esto es muy sencillo, póngale media pila que con un poquito de esfuerzo (Leyendo un poco de algún tutorial) sale. No esperen que le realicen el trabajo  :?
No contesto mensajes privados, las consultas en el foro