TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: MGLSOFT en 12 de Septiembre de 2012, 08:37:20

Título: No consigo que funcione el cristal !! || SOLUCIONADO ||
Publicado por: MGLSOFT en 12 de Septiembre de 2012, 08:37:20
Hace un largo tiempo que no me pasaba esto... :shock: :shock:

Hice un programa (varios en realidad) usando el oscilador interno de un PIC18F26K80, que a decir verdad es excelente...
Este PIC permite usar el oscilador interno a 16 mhz y con el PLL activado, hacer que el micro trabaje a 64 mhz !!

Fiel a mi costumbre de llevar al maximo de exigencias cada PIC que toco,  :mrgreen: :mrgreen: hice varios programas que usaron este tipo de oscilador.

Ahora quiero poner un cristal externo, cumpliendo las mismas premisas de velocidad, es decir un cristal de 16 mhz y habilitar el PLL para que funcione igual que en los programas anteriores.

Vaya mi sorpresa al saber que el cristal NO Arranca a oscilar !!

Probe al menos 10 configuraciones diferentes, sin obtener resultados !!!   :shock: :shock: :shock:

Tengo experiencia en usar el PLL y las maximas velocidades en la linea PIC18F, por lo tanto no esperaba tal rotundo fracaso en este caso.

Hace mas de una semana que estoy lidiando con este problema...

Como lo arme en protoboard, saque el cristal y lo probe en otro circuito (tambien en protoboard) que tengo armado y el osciloscopio lee bien esa frecuencia en 15,8 mhz.
Pero si lo coloco en el circuito en cuestion, deja de oscilar, incluso hice la inversa, traer el cristal de 10 mhz a esta placa y tampoco arranca a oscilar.

Es posible que el circuito interno del PIC no permita arrancar el oscilador si esta mal configurado ??

A alguien le paso algo asi??
Tienen experiencia que puedan compartir conmigo, en esta linea de PICs ?? :shock: :shock:
Título: Re: No consigo que funcione el cristal !!
Publicado por: Suky en 12 de Septiembre de 2012, 11:27:03
No tendrás algún drama en la placa, algún capacitor a gnd o alguna unión que no logres ver? Por lo que se ve, la retroalimentación esta al principio, sin opciones de configuración (control solo por Sleep) y despues un buffer, por lo tanto una mala configuración no debería afectar a la etapa de entrada  :undecided: Además en el errata no veo nada respecto al oscilador.

No se si se puede en estos micros, pero no probaste de arrancar sin PLL y encenderlo al iniciar el microcontrolador?

Saludos!
Título: Re: No consigo que funcione el cristal !!
Publicado por: MGLSOFT en 12 de Septiembre de 2012, 11:38:14
Por lo que veo ya estuviste viendo la hoja de datos, asi que habras visto que tiene tres fuentes de oscilacion diferentes, con una importante cantidad de opciones de combinacion. :D :D

Estuve leyendo en foros donde algunos arrancan el PIC con una fuente y despues cambian de oscilador estando en marcha.

Pero es importante el dato que me das, o sea el cristal deberia oscilar aunque la opcion de configuracion este mal elegida, es asi o interpreto mal??

Voy a cambiar de Proto o veo de armarlo en un pcb a ver que pasa... ;-) ;-)
Título: Re: No consigo que funcione el cristal !!
Publicado por: BrunoF en 12 de Septiembre de 2012, 12:13:40
Hace un tiempo renegue mucho con unos 18FxxJxx por un tema similar, también creí que no oscilaban.

En dichos micros no alcanza con activar la PLL en los FUSES, sino que también hay que activarla en el código.
Así que si estás en CCS podrías declarar:

#bit PLLEN = 0xF9B.6

y en el main hacer:
PLLEN = 1;

En mi caso eso bastó para solucionar el problema, aunque en tu datasheet figura que se activa el PLL seteando el FUSE correspondiente o el bit OSCTUNE,PLLEN y la verdad que ese micro tiene más opciones de config de oscilador que los que te menciono.

Saludos.
Título: Re: No consigo que funcione el cristal !!
Publicado por: Suky en 12 de Septiembre de 2012, 12:21:58
Pero es importante el dato que me das, o sea el cristal deberia oscilar aunque la opcion de configuracion este mal elegida, es asi o interpreto mal??
Si, lo determino de lo que se ve en el datasheet.

Es cierto lo que dice Bruno, para un PIC18F67J50 hago:

Código: C
  1. unsigned int pll_startup_counter = 1000;
  2.         OSCTUNEbits.PLLEN = 1;  //Enable the PLL
  3.         while(pll_startup_counter--);

Pero no encontré referencia de esto para un 18F26K80, puede que sea igual. Pero como dices que con el interno funciona  :undecided:
Título: Re: No consigo que funcione el cristal !!
Publicado por: Nocturno en 12 de Septiembre de 2012, 12:25:43
Prueba con esto en tu main():

setup_oscillator(OSC_NORMAL|OSC_PLL_ON);
Título: Re: No consigo que funcione el cristal !!
Publicado por: MGLSOFT en 12 de Septiembre de 2012, 16:04:02
Manolo:
Lamento decirte que ya probe esa opcion... :? :? :?

Suky:
Entiendo que tu rutina espera 1000 tikcs de programa para que se active el PLLEN ??

Bruno:
Yo compilo y despues veo el assembler generado y PLLEN esta habilitado, por eso no entiendo bien que pasa.


Voy a armar todo el circuito en un pcb en vez de protoboard a ver si eso me esta molestando o no...
Título: Re: No consigo que funcione el cristal !!
Publicado por: Suky en 12 de Septiembre de 2012, 16:41:22
Eso, vine así en los ejemplos de Microchip, colocan la variable a 600, 1000 o 2000 generalmente... Un tiempo como para que enganche y se estabilice.
Título: Re: No consigo que funcione el cristal !!
Publicado por: MGLSOFT en 12 de Septiembre de 2012, 18:14:32
Ajah!!
Y esos ticks deberian ser multiplos del tiempo de oscilacion primario, es decir antes de multiplicarlo en el PLL.
Por ejemplo, si son 10 Mhz y con PLL activado hacen 40 Mhz, el tiempo de cada ticks corresponde a los 10 Mhz... :P :P
Título: Re: No consigo que funcione el cristal !!
Publicado por: BrunoF en 12 de Septiembre de 2012, 19:37:30
El datasheet dice que se el PLL puede demorar hasta 1000 ciclos en estabilizarse luego de activado y recomienda que hagas perder el tiempo al uC durante dicho período mínimamente, para garantizar la estabilidad. Con cumplir los ciclos mínimos, es suficiente. Podés excederte en todo los ciclos que desees.
Título: Re: No consigo que funcione el cristal !!
Publicado por: manutek en 12 de Septiembre de 2012, 20:05:48
Por ahí digo una boludes pero podría ser el tipo de corte de cristal lo q esta jodiendo ? digo por xt o at  o hs ....
Título: Re: No consigo que funcione el cristal !!
Publicado por: MGLSOFT en 12 de Septiembre de 2012, 21:42:27
No hay caso!!
 :oops: :oops: :oops:

Sigue haciendo lo que se le viene en gana!!   :5] :5] :5]
Y lo arme en PCB y sigue sin darme bolilla al intento de hacerlo funcionar...

Vere de escribir los registros de prepo...
Título: Re: No consigo que funcione el cristal !!
Publicado por: jeremylf en 12 de Septiembre de 2012, 22:14:59
A mi me paso hace mucho tiempo con el 18F2550 que cambiando los fuses HS, HSPLL, etc. Habia un fusible (no recuerdo cual) que no hacia cambio en la configuracion real (ocea en el hex). Esto lo comprobe viendo en el MPLAB porque yo siempre creo, edito y compilo en la IDE de CCS pero para grabar el pic, importo el hex al MPLAB y ahi veo el config bits. Bueno, ahi me di cuenta que no combiaba el fuse en cuestion. El problema, si mal no recuerdo, era del CCS, actualizando la version se arreglo eso.

Aun que dudo que te pase esto, porque seria bien tonto, mas que nada lo pongo para dejar una experiencia que pueda servir a otros menos experimentados =)

Mas bien, has probado con otros de esos pics?
Título: Re: No consigo que funcione el cristal !!
Publicado por: MGLSOFT en 13 de Septiembre de 2012, 00:09:05
A mi me paso hace mucho tiempo con el 18F2550 que cambiando los fuses HS, HSPLL, etc. Habia un fusible (no recuerdo cual) que no hacia cambio en la configuracion real (ocea en el hex). Esto lo comprobe viendo en el MPLAB porque yo siempre creo, edito y compilo en la IDE de CCS pero para grabar el pic, importo el hex al MPLAB y ahi veo el config bits. Bueno, ahi me di cuenta que no combiaba el fuse en cuestion. El problema, si mal no recuerdo, era del CCS, actualizando la version se arreglo eso.

Aun que dudo que te pase esto, porque seria bien tonto, mas que nada lo pongo para dejar una experiencia que pueda servir a otros menos experimentados =)

Mas bien, has probado con otros de esos pics?

No es tonto, estuve viendo desde MPLAb y veo que el archivo generado en assembler desde CCS coincide con el que veo en MPLAB, en ambos NO se cambia de tipo de oscilador aunque le ponga lo que le ponga.

Eso no lo entiendo.
Mañana (porque hoy ya es tarde) voy a ponerlos a mano esos bits, a ver que pasa, porque sino voy a volverme loco... :D :D :D
Título: Re: No consigo que funcione el cristal !!
Publicado por: MerLiNz en 13 de Septiembre de 2012, 05:52:48
Yo tengo esto de un 18f46k80

fuses:
#pragma config RETEN = OFF, INTOSCSEL = HIGH, SOSCSEL = DIG, XINST = OFF
#pragma config FOSC = INTIO1, PLLCFG = ON, FCMEN = OFF, IESO = OFF, PWRTEN = OFF
#pragma config BOREN = OFF, WDTEN = OFF, CANMX = PORTC, MCLRE = OFF, STVREN = OFF
#pragma config BORPWR = LOW

#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF, CPB = OFF, CPD = OFF
#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF, WRTC = OFF, WRTB = OFF
#pragma config WRTD = OFF, EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF
#pragma config EBTRB = OFF

y esto en el inicio del main:
OSCCONbits.IRCF=7;
OSCTUNEbits.PLLEN=1;

Lo unico que creo es que utilizaba el cristal interno a 16mhz y luego el pll hasta 64mhz, hace tiempo que lo hice asi que no me acuerdo bien, sin embargo funcionaba a la perfeccion.
Título: Re: No consigo que funcione el cristal !!
Publicado por: MGLSOFT en 13 de Septiembre de 2012, 07:55:17
Eso es C18, en CCS no creo poder hacerlo igual... :(
Título: Re: No consigo que funcione el cristal !!
Publicado por: MerLiNz en 13 de Septiembre de 2012, 08:07:19
da igual, los fuses sea ccs, c18, mikroc... son todos iguales lo unico que cambia es la forma de escribirlos. Y el codigo, pues simples registros que en CCS tambien se pueden manejar manualmente.
Título: Re: No consigo que funcione el cristal !!
Publicado por: pajaro en 13 de Septiembre de 2012, 10:34:11
Hola compañero

como configuras en CCS el cristal
podias colocar la cabecera (*.h), la que sale cuando
configuras desde el asistente el pic y su frecuancia de clock.
mi version de ccs no me encuantra el PIC18F26K80
si la el PIC18F2680.

Código: C++
  1. //Inserted into .h file:
  2.  
  3. #device adc=8
  4.  
  5. #FUSES NOWDT                    //No Watch Dog Timer
  6. #FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
  7. #FUSES H4                       //High speed osc with HW enabled 4X PLL
  8. #FUSES NOPROTECT                //Code not protected from reading
  9. #FUSES NOOSCSEN                 //Oscillator switching is disabled, main oscillator is source
  10. #FUSES NOBROWNOUT               //No brownout reset
  11. #FUSES BORV20                   //Brownout reset at 2.0V
  12. #FUSES NOPUT                    //No Power Up Timer
  13. #FUSES NOCPD                    //No EE protection
  14. #FUSES STVREN                   //Stack full/underflow will cause reset
  15. #FUSES NODEBUG                  //No Debug mode for ICD
  16. #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  17. #FUSES NOWRT                    //Program memory not write protected
  18. #FUSES NOWRTD                   //Data EEPROM not write protected
  19. #FUSES NOWRTC                   //configuration not registers write protected
  20. #FUSES NOWRTB                   //Boot block not write protected
  21. #FUSES NOEBTR                   //Memory not protected from table reads
  22. #FUSES NOEBTRB                  //Boot block not protected from table reads
  23. #FUSES NOCPB                    //No Boot Block code protection
  24. #FUSES MCLR                     //Master Clear pin enabled
  25.  
  26. #use delay(clock=20000000)

¿Que version de CCS usas?

Un saludo.



Título: Re: No consigo que funcione el cristal !!
Publicado por: MGLSOFT en 13 de Septiembre de 2012, 11:19:42
Tengo la version 4.118 y la 4.134, en ambas me tira este error... :shock: :shock:
Título: Re: No consigo que funcione el cristal !!
Publicado por: Suky en 13 de Septiembre de 2012, 12:28:28
Y si hacemos un ejemplo en otro compilador para probar si el tema esta en el compilador? Tenes un led como para hacer titilar?
Título: Re: No consigo que funcione el cristal !!
Publicado por: MGLSOFT en 13 de Septiembre de 2012, 12:43:12
Si que tengo, esta definido asi en mi codigo:

Código: C
  1. #define LED PIN_C4               // Defino el Pin del Led
Título: Re: No consigo que funcione el cristal !!
Publicado por: Suky en 13 de Septiembre de 2012, 12:55:48
Adjunto hex, lo realizado es:

Código: C
  1. #include <p18f26k80.h>
  2.  
  3. #pragma config FOSC = HS2, PLLCFG = ON, FCMEN = OFF, IESO = OFF
  4. #pragma config PWRTEN = ON, BOREN = OFF, BORV = 3, BORPWR = LOW, MCLRE = ON
  5. #pragma config WDTEN = OFF, WDTPS = 1048576, STVREN = OFF, XINST = OFF
  6.  
  7. #include <delays.h>
  8.  
  9. void main(void){
  10.         unsigned int pll_startup_counter = 1000;
  11.        
  12.         OSCTUNEbits.PLLEN = 1;  //Enable the PLL
  13.         while(pll_startup_counter--);
  14.  
  15.         TRISCbits.TRISC4=0;
  16.         LATCbits.LATC4=0;
  17.         while(1){
  18.                 Delay10KTCYx(160); // 100ms
  19.                 Delay10KTCYx(160); // 100ms
  20.                 Delay10KTCYx(160); // 100ms
  21.                 LATCbits.LATC4=!PORTCbits.RC4;
  22.         }      
  23. }

Lo interesante, hay dos niveles de HS para elegir, entre 4-16 MHz y 16-25MHz  :roll:
Título: Re: No consigo que funcione el cristal !!
Publicado por: MGLSOFT en 13 de Septiembre de 2012, 15:07:42
Gracias Suky !!
Esta tarde pruebo el tuyo !!

Por ahora tengo un medio resultado...
Es decir probe grabarle el dato usando esta opcion:

Código: C
  1. #byte _CONFIG1L = 0x300000
  2. #byte _CONFIG1H = 0x300001
  3. #byte _CONFIG2L = 0x300002
  4. #byte _CONFIG2H = 0x300003
  5. #byte _CONFIG3L = 0x300004
  6. #byte _CONFIG3H = 0x300005
  7. #byte _CONFIG4L = 0x300006
  8. #byte _CONFIG4H = 0x300007
  9. #byte _CONFIG5L = 0x300008
  10. #byte _CONFIG5H = 0x300009
  11. #byte _CONFIG6L = 0x30000A
  12. #byte _CONFIG6H = 0x30000B
  13. #byte _CONFIG7L = 0x30000C
  14. #byte _CONFIG7H = 0x30000D

y en el main:
Código: C
  1. _CONFIG1H = 0b00011101;
  2. _CONFIG1H = 0b01010010;

Y nada!! :5] :5] :5]  Seguia igual...

Al fin probe cambiando esta sutileza, y anduvo !!   :lol: :lol:(al menos en el circuito a pcb, porque en el proto ni se entera...) :D :D
Codigo anterior:
Código: C
  1. #use delay(oscillator=16Mhz, clock=64Mhz, RESTART_WDT)

Codigo actual:
Código: C
  1. #use delay(xtal=16Mhz, clock=64Mhz, RESTART_WDT)

Al parecer la sentencia use_delay() hace cambios en los bits de configuracion, sin importarle lo que hayas puesto primero...
Título: Re: No consigo que funcione el cristal !! || SOLUCIONADO ||
Publicado por: MGLSOFT en 13 de Septiembre de 2012, 23:07:34

Lo interesante, hay dos niveles de HS para elegir, entre 4-16 MHz y 16-25MHz  :roll:

Si, segun vi, este PIC tiene todas estas opciones, para usarlo al mango cuando no tenes problemas de energia y bien economico en cuanto a consumo, cuando es soportado por baterias.
Es muy interesante esta linea.

Finalmente probe tu ejemplo y funciona bien, hace el cambio del destello cada 300 milisegundos y completo tiene 600 milisegundos.
Hay un minimo error porque el cristal oscila realmente a 15,8 MHz y no a 16 MHz.

Gracias por el ejemplo.

Ya esta solucionado, es como puse en el post anterior...

Gracias a todos los que ayudaron...
Título: Re: No consigo que funcione el cristal !!
Publicado por: Suky en 13 de Septiembre de 2012, 23:18:40
Ya esta solucionado, es como puse en el post anterior...

Genial!  :)
Título: Re: No consigo que funcione el cristal !! || SOLUCIONADO ||
Publicado por: Nocturno en 14 de Septiembre de 2012, 01:56:08
Me alegro que lo hayas resuelto, un fastidio haber perdido tanto tiempo hasta encontrar el #use delay
Título: Re: No consigo que funcione el cristal !! || SOLUCIONADO ||
Publicado por: MerLiNz en 14 de Septiembre de 2012, 05:05:06
este CCS te hace perder mas tiempo que ganarlo  :D  :mrgreen:
Título: Re: No consigo que funcione el cristal !! || SOLUCIONADO ||
Publicado por: pajaro en 14 de Septiembre de 2012, 08:50:04
Hola compañero

Al final te funciono ..! me alegro.

La pregunta es.. con que compilador lo conseguiste?

Un Saludo.

Título: Re: No consigo que funcione el cristal !! || SOLUCIONADO ||
Publicado por: MGLSOFT en 14 de Septiembre de 2012, 10:17:35
Con la version 4.134.
A decir verdad no lo probe con la otra version. :lol: