Autor Tema: ¿Se puede utilizar el oscilador interno para la comunicación USB?  (Leído 5244 veces)

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

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 222
¡ Saludos al foro !

He hecho algunas cosas con el PIC18F2550 con el bus USB pero siempre he utilizado un cristal externo. Mi duda es si puede utilizarse el oscilador interno sin necesidad de usar cristales. ¿Alguien lo ha hecho?, si es así ¿Podría ponerme la configuración de los fuses?

¡¡ Gracias de antemano !!

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: ¿Se puede utilizar el oscilador interno para la comunicación USB?
« Respuesta #1 en: 03 de Abril de 2013, 13:39:46 »
Hola Picminor:
                 Si mirás la figura 2-1 del datasheet verás que el módulo USB no recibe señal del oscilador interno. Sólo de la fuente de reloj primaria la cual puede ser generada por cristales o por fuentes de clock externas.
ninguno de los siguientes 4 (con oscilador interno) de los 12 modos de cofiguración de osicladores que tiene el pic 2550 permite hacerlo.

Modos con oscilador interno

modo 9
Oscilador interno y Cristal  INTHS Internal Oscillator como fuente de clock para la CPU, oscilador HS como fuente de oscilador para el módulo USB        #pragma config FOSC = INTOSC_HS

modo 10
Oscilador interno y Cristal INTXT Internal Oscillator como fuente de clock para la CPU, oscilador XT como fuente de oscilador para el módulo USB        #pragma config FOSC = INTOSC_XT

modo 11
Oscilador interno y Señal externa INTIO Internal Oscillator como fuente de clock para la CPU, señal externa EC como fuente de oscilador para el módulo USB, con pin de Input/Output digital en el pin RA6
#pragma config FOSC = INTOSCIO_EC

modo 12
Oscilador interno y Señal externa INTCKO Internal Oscillator como fuente de clock para la CPU, señal externa EC como fuente de oscilador para el módulo USB, con salida de frecuencia dividida por 4 (FOSC/4) en RA6
#pragma config FOSC = INTOSC_EC

Lo que si podrías hacer es hacer funcionar el micro con el oscilador interno y utilizar una fuente externa o cristal externo para el módulo USB.
          Saludos.
                Jukinch
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 222
Re: ¿Se puede utilizar el oscilador interno para la comunicación USB?
« Respuesta #2 en: 04 de Abril de 2013, 03:19:00 »
¡Gracias por la respuesta!

La pregunta venía a cuento por el diseño que hay por ahí de un pequeño osciloscopio USB con un Atmel Tiny45 que no lleva oscilador y según dice "the software sync the internal 16.5Mhz pll clock with the USB clock". La idea me parece interesante pero no veo cómo se podría hacer con un Pic.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: ¿Se puede utilizar el oscilador interno para la comunicación USB?
« Respuesta #3 en: 04 de Abril de 2013, 03:39:08 »
Como dice junkinch, con ese PIC es obligatorio el cristal. Pero si migras a un 24F podrás utilizar el USB sin cristal, sólo con el oscilador interno.

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 222
Re: ¿Se puede utilizar el oscilador interno para la comunicación USB?
« Respuesta #4 en: 04 de Abril de 2013, 04:47:08 »
¡ Gracias por la respuesta Nocturno !

¿Podrías darme alguna orientación de cómo configurar el micro? Supongo que adaptar el programa en C será relativamente sencillo pero no he trabajado nunca con los 24.

¡ Gracias de antemano !

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: ¿Se puede utilizar el oscilador interno para la comunicación USB?
« Respuesta #5 en: 04 de Abril de 2013, 08:26:16 »
Recien veo este hilo...
Ademas del PIC24, ya en las lineas PIC18FxxK se puede (al menos en algunos) utilizar todo sin cristal externo.
Han hecho osciladores muy estables, al punto que en un PIC18F26K80 yo uso el bus CAN a 250Kbps sin cristal, solo con el oscilador interno, y puedo asegurarles que es muy exquisito en cuanto al cumplimiento de la precision del reloj... :lol: :lol:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: ¿Se puede utilizar el oscilador interno para la comunicación USB?
« Respuesta #6 en: 04 de Abril de 2013, 09:29:56 »
Yo pude implementar USB con un pic 18F26J50 utilizando el oscilador interno sin problemas. Es mas, lo hice porque el externo me fallaba XD
Suerte y saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: ¿Se puede utilizar el oscilador interno para la comunicación USB?
« Respuesta #7 en: 04 de Abril de 2013, 11:13:21 »
En mi caso, usando un 24FJ256GB106 y CCS, lo configuré así:

Código: C
  1. #include <24FJ256GB106.h>
  2. #device ADC=8
  3.  
  4. #fuses NOWDT,ICSP1,FRC_PLL,PLL1,DISUVREG,NOWRT
  5. #use delay(clock=32M,restart_wdt)
  6.  
  7. #define USB_HID_DEVICE     TRUE
  8. #define USB_EP1_TX_ENABLE  USB_ENABLE_INTERRUPT
  9. #define USB_EP1_TX_SIZE    60
  10. #define USB_EP1_RX_ENABLE  USB_ENABLE_INTERRUPT
  11. #define USB_EP1_RX_SIZE    63
  12.  
  13. #include <pic24_usb.h>
  14. #include "usb_desc_hid.h"    
  15. #include <usb.c>

Y en el bucle principal, llamaba a esta función:
Código: C
  1. void AtiendeHID()
  2. {
  3.  
  4. usb_task();
  5. if(usb_enumerated())
  6.    {
  7.    if(usb_kbhit(1))
  8.       {
  9.       usb_get_packet(1, buffer_in, USB_EP1_RX_SIZE);
  10.       atencion_comando();
  11.  
  12.       }
  13.    }
  14. }

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 222
Re: ¿Se puede utilizar el oscilador interno para la comunicación USB?
« Respuesta #8 en: 04 de Abril de 2013, 16:24:07 »
¡ Gracias a todos por las respuestas !

Con lo que me habeis contado creo que más o menos tengo claro cómo hacerlo con alguno de estos micros que comentais. De cualquier forma resulta curios que no pueda hacerse con los "normales" (18F2550, 4550 etc).

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: ¿Se puede utilizar el oscilador interno para la comunicación USB?
« Respuesta #9 en: 04 de Abril de 2013, 17:01:19 »
¡ Gracias a todos por las respuestas !

Con lo que me habeis contado creo que más o menos tengo claro cómo hacerlo con alguno de estos micros que comentais. De cualquier forma resulta curios que no pueda hacerse con los "normales" (18F2550, 4550 etc).


El tema de usar el oscilador interno para USB, es muy controvertido, en general en la mayoría de PIC con USB, el oscilador interno no tiene la precisión y estabilidad necesaria para ese menester. Por ejemplo, en los PIC32, que son los que yo uso, es absolutamente imposible usar el oscilador interno para USB, en los foros de Microchip hay infinidad de posts al respecto, y en todos se concluye que NO se puede usar, también se indica en los datasheet.

Microchip anunció hace algún tiempo un grupo de nuevos PIC16 y PIC18, con USB, que pueden usar el oscilador interno (crystal free USB 2.0).
http://ww1.microchip.com/downloads/en/Market_Communication/Microchip%27s%208-bit%20USB%20MCUs%20Press%20Presentation_Final.pdf

Puedes guiarte un poco por el dato de precisión del oscilador interno, que aparece en el datasheet, este dato (oscillator accuracy) debe de ser inferior o igual al 0.25%. Por ejemplo, en los PIC32, la precisión está entre el 2% y el 0.9% (a 25ºC), una auténtica chufa, y en cuanto sube la temperatura, la deriva puede llegar al 10%. Con un cuarzo, la precisión es de +- 50ppm (0.005%).


 
« Última modificación: 04 de Abril de 2013, 19:23:16 por planeta9999 »


 

anything