# Timer 0, Timer 1, Modulo comparador y Modulo USB del pic 18F4550



## dark_soul (Jun 12, 2010)

Saludos, tengo un pequeño problema con el desarrollo con un sensor de distancia, segun esto, el sensor necesita un pulso minimo de 10 us, para lo cual utilizo el Timer 0, este sensor me emite pulso en un rango de 100 us - 25 ms segun la distancia para lo cual uso el Timer 1 y el modulo CCP en modo captura y por ultimo necesito que esta lectura se despliegue en PC para lo cual uso el Modulo USB del pic.

Para esto utilizo un Cristal de 20 MHz, supuestamente para conseguir los 10 us, que no los pude conseguir, pero como segun la hoja de datos del sensor dice "minimo 10 us" pues creo ahi no tengo tanto problema, estaba pensando en que el Timer 1 me genere pulsos de 50 us, para que haya un contador lo cual para el pulso de 100 us, tenga una cuenta de dos y no se vea tan limitado, en que no tenga exactamente los 100 us, y tampoco puedo conseguir esos 50 us en conjunto con el USB, ya que antes de juntar todo, desarrolle una aplicacion para los puros Timer's y para el Timer 0 lo mas que pude conseguir fueron 20 us, que no esta mal, y para el Timer 1, si logre conseguir los 50 us, pero cuando ya hago un solo programa con el modulo USB, los tiempos me cambian y cuando establezco la conexion PIC - PC, la comunicacion me funciona por un momento y despues se pierde.

Mi pregunta es, segun lo planteado por donde podria atacar el problema, como antecedente, anteriormente hice un termometro tambien utilizando el modulo USB con un cristal de 4 MHz y todo funcionaba correctamente.

Ojala me puedan ayudar, por todo muchas gracias.


----------



## Vicens (Jun 13, 2010)

Hola,

Que tipo de sensor es? Por que he estado jugando con sensores de US y no e tenido problemas para generar y recibir los pulso. Supongo que al incorporar la comunicación USB te debe descuadrar los tiempos.

Podrías probar con los PWM del PIC...

He estado curioseando con el tema de USB pero aún no he probado nada. Siento no serte de gran ayuda.

Saludos.


----------



## JimmyKarson (Ago 30, 2010)

Hola Dark Soul!
El PIC18f4550 no es un PIC "barato" y tiene oscilador interno. 
No es necesario que le conectes un cristal o un resonador externo ya que la puedes modificar por software. ¿Qué compilador gastas?.
Es muy cómodo. Búscate un compilador moderno, ya que casi todos suelen tener soporte para variar la frecuencia del micro con un simple click. Te recomiendo que le eches un ojo a la web de Mikroelectrónica, por poner un ejemplo.

Espero que te pueda servir.

Un Saludo!
Jimmy Karson


----------



## michael314 (Sep 15, 2010)

Hola 
como puedo usar el oscilador interno del 18f4550, io uso C de CCS .
y otra pregunta, io podria usar un oscilador de cristal de cuarzo de 40 MHz en ves del de 48MHz, pues aca en mi tienda no vende de 48MHz?


----------



## ByAxel (Sep 15, 2010)

michael314 dijo:


> Hola
> como puedo usar el oscilador interno del 18f4550, io uso C de CCS .
> y otra pregunta, io podria usar un oscilador de cristal de cuarzo de 40 MHz en ves del de 48MHz, pues aca en mi tienda no vende de 48MHz?



Para el PIC18F4550 es más cómodo usar el PLL interno que eleva por ejemplo 4Mhz de un cristal a 48Mhz internamente sabiendo configurar bien el módulo del oscilador, para eso revisa el datasheet en la página 24 (26 del visor pdf) donde muestra el diagrama en bloques del módulo oscilador donde también está el oscilador interno.
Consiguiendo 4 Mhz para los 48 Mhz

Ahora en el CCS están las posibles configuraciones del oscilador en el archivo 18F4550.h del PIC, e incluso con la ayuda del Project Wizard del CCS puedes configurar todo eso.

Un saludo


----------



## michael314 (Sep 20, 2010)

Gracias por la pagina ByAxel


----------



## gbaldrich (Nov 23, 2010)

Hola foreros es un placer para mi escribirles en este foro.

Les comento… estoy trabajando en una aplicacion con un PIC18F4550. En esta al pic se le eta inyectando una señal pulsante. Necesito contar el tiempo que transcurre entre un flanco de subida y otro flanco de subida. 






Con ese tiempo hare cálculos pertinentes a mi aplicación.

He visto varia informacion en internet pero no he entendido mucho, quiero saber si aqui me pueden ayudar y explicar todo mejor.

Compilo en CCS.

Muchas Gracias!!!


----------



## josb86 (Dic 17, 2010)

gbaldrich dijo:


> Hola foreros es un placer para mi escribirles en este foro.
> 
> Les comento… estoy trabajando en una aplicacion con un PIC18F4550. En esta al pic se le eta inyectando una señal pulsante. Necesito contar el tiempo que transcurre entre un flanco de subida y otro flanco de subida.
> 
> ...



quemas mira yo estoy también haciendo algo parecido y tengo algunos ejemplos en ccs también tengo algo de teoría en el que hablan que para los temporizadores hay una opción para escoger el flanco de accionamiento pero solo con el pin ra4 en los 16f84 me imagino sera igual en el resto solo hay que leer un poco mas el datasheet


----------



## asdlocal (Feb 7, 2011)

Necesito que la velocidad de lectura del programa que estoy realizando en el pic18f4550 sea de 40Mhz, esto lo hago para un sistema de control... pero no se como configurar los fuses en el micro no se si alguien podria ayudarme al respecto.... por favor 
me estoy deseperando........ 
pero les agradezco de antemano ......


----------



## Fransolo (Feb 17, 2011)

asdlocal dijo:


> Necesito que la velocidad de lectura del programa que estoy realizando en el pic18f4550 sea de 40Mhz, esto lo hago para un sistema de control... pero no se como configurar los fuses en el micro no se si alguien podria ayudarme al respecto.... por favor
> me estoy deseperando........
> pero les agradezco de antemano ......



Hola Asdlocal, me esta pasando lo mismo que a ti. Tengo el pic 18f26j50, y usando el modulo USB con un reloj de 20 Mhz y configurando todo. He llegado a la conclusion de que tengo 48 Mhz para el USB, y los otros 48 del nucleo del microprocesador no los veo por ningun sitio.

Esto programando en C18 los fuses para osciladores de cristal de 20 Mhz son los que te pego:

#pragma config PLLDIV = 5//Divide by 5 (20 MHz oscillator input)
#pragma config CPUDIV = OSC1   //No CPU system clock divide
#pragma config OSC =  HSPLL  //HS oscillator, PLL enabled, HSPLL used by USB

Ahora te cuento mi programa simplemente usa el timer0 para generar una frecuencia por el portB. Usa la rutina CDC del stack de microchip y lo maximo que he podido generar son 10Khz de frecuencia.

Un saludo espero que te valgan para algo mis conclusiones.


----------

