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

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

Desconectado MarkKnopfler81

  • PIC12
  • **
  • Mensajes: 64
    • PICs, Electrónica y Robótica
Re: Frecuencia oscilacion
« Respuesta #45 en: 12 de Marzo de 2010, 19:52:39 »
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);

}



}

bmfranky, disculpa que me meta pero si mis calculos son correctos es codigo daría una señal de fosc/24 y no de 48.
para 48 yo pondría:

Código: [Seleccionar]
while(1)
{
output_high(PIN_A0);      // 1 ciclo
delay_cycles(5);          // 5 ciclos (goto, goto, nop)
output_low(PIN_A0);       // 1 ciclo
delay_cycles(3);          // 3 ciclos (goto, nop)
}                         // 2 ciclos (goto)
                          // =============
                          // 12 ciclos * 4 = 48

saludos.
« Última modificación: 12 de Marzo de 2010, 19:59:37 por MarkKnopfler81 »

Desconectado bmfranky

  • PIC16
  • ***
  • Mensajes: 165
    • La Tienda De Fran
Re: Frecuencia oscilacion
« Respuesta #46 en: 13 de Marzo de 2010, 11:18:25 »
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);

}



}

bmfranky, disculpa que me meta pero si mis calculos son correctos es codigo daría una señal de fosc/24 y no de 48.
para 48 yo pondría:

Código: [Seleccionar]
while(1)
{
output_high(PIN_A0);      // 1 ciclo
delay_cycles(5);          // 5 ciclos (goto, goto, nop)
output_low(PIN_A0);       // 1 ciclo
delay_cycles(3);          // 3 ciclos (goto, nop)
}                         // 2 ciclos (goto)
                          // =============
                          // 12 ciclos * 4 = 48

saludos.

Tranquilo MarkKnopfler81 aquí ,debemos opinar todos.

Tengo que indicarte que no has tenido en cuenta como descompone sus instrucciones el ccs y las pasa a ensamblador, recuerda que no uso la directiva fast_imput.Si compilas el programa veras que se convierte en 12 instrucciones maquina en cada interacción.

.................... while(1)
.................... {
.................... output_high(PIN_A0);
0051:  BCF    05.0
0052:  BCF    03.5->3
0053:  BSF    05.0
.................... #asm
.................... nop;
0054:  NOP          ->1
.................... nop;
0055:  NOP         ->1
.................... #endasm
.................... output_low(PIN_A0);
0056:  BSF    03.5
0057:  BCF    05.0
0058:  BCF    03.5->4
0059:  BCF    05.0
.................... 
.................... }
005A:  BSF    03.5
005B:  GOTO   051->3 (El goto vale 2 ciclos)

                            -----
                              12 ciclos maquina *4 ciclos del oscilador (por ciclo de maquina) igual a 48 ciclos del oscilador principal.
« Última modificación: 13 de Marzo de 2010, 11:21:51 por bmfranky »
Visiten La Tienda De Fran ;-) Aqui. y mi nueva Web Aqui.

Desconectado MarkKnopfler81

  • PIC12
  • **
  • Mensajes: 64
    • PICs, Electrónica y Robótica
Re: Frecuencia oscilacion
« Respuesta #47 en: 13 de Marzo de 2010, 11:30:16 »
Ja! tienes razon bmfranky es que yo estoy acostumbrado a trabajan con
#use fast_io(a)
 :D
asi si son 6!

saludos.

Desconectado bmfranky

  • PIC16
  • ***
  • Mensajes: 165
    • La Tienda De Fran
Re: Frecuencia oscilacion
« Respuesta #48 en: 13 de Marzo de 2010, 11:32:26 »
Tranqui, Saludos a ti también..
Visiten La Tienda De Fran ;-) Aqui. y mi nueva Web Aqui.

Desconectado andreaymaria

  • PIC10
  • *
  • Mensajes: 45
Re: Frecuencia oscilacion
« Respuesta #49 en: 15 de Marzo de 2010, 10:00:39 »
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);

}



}

He leído que en C18 se puede escribir _asm y _endasm...para C18 también me funcionaría ese código para obtener a la salida f/48??Es que estoy probando con el 18f4550 que es del q dispongo ahora mismo y me da en los "nop" error de sintaxis...y no tengo ni idea de xq me pasa eso..alomejor tengo que tener algun plugin instalado o algo??

Muxisimas gracias por todos los comentarios!Me estan sirviendo de gran ayuda! :)
« Última modificación: 15 de Marzo de 2010, 14:55:01 por andreaymaria »

Desconectado bmfranky

  • PIC16
  • ***
  • Mensajes: 165
    • La Tienda De Fran
Re: Frecuencia oscilacion
« Respuesta #50 en: 16 de Marzo de 2010, 09:46:15 »
Citar
de: andreaymaria en Hoy a las 08:18:29
Hola!!He probado tu código pero en vez en CCS(#asm y #endasm), en C18 con _asm y _endasm.Tengo que añadir alguna librería o cabecera especial para que me reconozca las sentencias en ensamblador??es que al compilarlo me da error de sintaxis en el primer "nop"...y por mas que he buscado en tutoriales no encuentro nada..Si por favor me pudieras contestar...me ayudaria mucho..
A ver si consigo resolver mi problema..

Un saludo y muchas gracias por tu interés!  Smile
Hola el c18 no lo uso, pero ten en cuenta que debes comprobar en cuantos operandos convierte el c18 mi codigo, si lees los ultimos posts de tu hilo comprenderas el por que.

Que yo sepa el c18 admite ensamblador inline, comprueba que lo insertas bien.
Citar
C18 también soporta el empotrado de lenguaje ensamblador y será compilado con MPASM, para insertar lineas con ensamblador se deberá hacer uso de _asm y _endasm.  Por ejemplo:

   _asm

     MOVLW 10
     MOVWF count, 0
       start:
     DECFSZ count, 1, 0
     GOTO done
     BRA start
     done:

 _endasm
Fijate que las directivas no terminan en ";" como en css.
« Última modificación: 16 de Marzo de 2010, 09:48:47 por bmfranky »
Visiten La Tienda De Fran ;-) Aqui. y mi nueva Web Aqui.

Desconectado andreaymaria

  • PIC10
  • *
  • Mensajes: 45
Re: Frecuencia oscilacion
« Respuesta #51 en: 22 de Marzo de 2010, 06:50:33 »
Hola a todos!Por fin he podido probar el código,finalmente utilice el Pic18f4620,ya que este pic permite la configuración RC que es la que a mí me interesa.
Pues bien, probé el siguiente código:

#include <p18f4620.h>
#include <delays.h>
#include <stdio.h>

#pragma config DEBUG=ON
#pragma config OSC=RC
#pragma config WDT=OFF
#pragma config LVP=OFF
#pragma config PWRT=OFF
#pragma config MCLRE=ON


void main(){

while(1)
{
PORTAbits.RA0=1;
_asm
   nop
   nop
_endasm
PORTAbits.RA0=0;

}



}


Y conectando la salida RA0 a un osciloscopio, pude comprobar que no salía nada!


Está mal "incrustado" el código asm en el código C??


Espero que alguien pueda ayudarme...ya que creo q estoy muy cerca de hallar la solución!Muxisimas gracias por todo!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Frecuencia oscilacion
« Respuesta #52 en: 22 de Marzo de 2010, 07:35:40 »
¿Puedes pegar el esquema para ver cómo has diseñado ese oscilador rc?

No necesitas ASM para perder dos ciclos, puedes poner delay_cycles(2);

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Frecuencia oscilacion
« Respuesta #53 en: 22 de Marzo de 2010, 07:45:21 »
Puede ser que falte configurar pines analógicos o comparadores para que el pin a utilizar sea digital. Revisar datasheet. Otro inconveniente es que debes agregar otra demora para poder ver el estado 0 lógico.

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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Frecuencia oscilacion
« Respuesta #54 en: 22 de Marzo de 2010, 07:54:32 »
Otro inconveniente es que debes agregar otra demora para poder ver el estado 0 lógico.

En esto discrepo, querido Suky. Una nueva iteración del bucle while ocupa mucho más de dos ciclos de instrucción, por lo que el tiempo del estado 0 es incluso mayor que el del tiempo 1.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Frecuencia oscilacion
« Respuesta #55 en: 22 de Marzo de 2010, 07:58:00 »
Otro inconveniente es que debes agregar otra demora para poder ver el estado 0 lógico.

En esto discrepo, querido Suky. Una nueva iteración del bucle while ocupa mucho más de dos ciclos de instrucción, por lo que el tiempo del estado 0 es incluso mayor que el del tiempo 1.

Ups, tienes mucha razón, estoy medio dormido todavía!  :D
No contesto mensajes privados, las consultas en el foro

Desconectado andreaymaria

  • PIC10
  • *
  • Mensajes: 45
Re: Frecuencia oscilacion
« Respuesta #56 en: 22 de Marzo de 2010, 08:00:34 »
¿Puedes pegar el esquema para ver cómo has diseñado ese oscilador rc?

No necesitas ASM para perder dos ciclos, puedes poner delay_cycles(2);

Aquí tienes una imagen...ahí aparece con un PIC12f629...pero quiero intentar realizarlo con un PIC18 ya que luego tengo que añadir más utilidades al pic y quiero evitar utilizar 2 pic´s diferentes..

Pero todavía no he implementado ese circuito, simplemente todos esos condensadores los he sustituido por un único condensador equivalente, y como yo quiero comprobar que la frecuencia varía al variar el condensador, he probado con condensadores de diferentes valores(entre 22 y 33 nF)...pero en RA0 no me sale nada...y pienso que debería salirme un pulso cuadrado no??pues no me sale...

« Última modificación: 22 de Marzo de 2010, 08:13:42 por andreaymaria »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Frecuencia oscilacion
« Respuesta #57 en: 22 de Marzo de 2010, 08:32:08 »
Creo que 10MHz es mucho para meterle por RC, revisa la datasheet, es posible que tengas que reducirlo.

Desconectado andreaymaria

  • PIC10
  • *
  • Mensajes: 45
Re: Frecuencia oscilacion
« Respuesta #58 en: 22 de Marzo de 2010, 08:34:57 »
Creo que 10MHz es mucho para meterle por RC, revisa la datasheet, es posible que tengas que reducirlo.

Es más o menos esa frecuencia..pero vamos que yo me conformo con que me salga algo por RA0...jajaja..

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Frecuencia oscilacion
« Respuesta #59 en: 22 de Marzo de 2010, 08:47:18 »
Pues en ese caso no te comas el coco con el oscilador RC externo, utiliza el interno y estarás seguro que funciona bien y a 8MHz.