Autor Tema: CCS, CPUDIV y sus incongruencias...  (Leído 9982 veces)

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

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
CCS, CPUDIV y sus incongruencias...
« en: 07 de Enero de 2009, 12:37:57 »
Esto es lo que más puedo odiar que me pase en la electrónica. Toda la mañana perdida para intentar entender porqué un asm que funcionaba en asm30, cuando lo paso a asm8 y lo embebo en ccs no funcionaba. Todo apunta a que el problema está en la sincronización de la señal y por tanto me centré en asegurarme de que el micro estaba funcionando a 6mips. En un pic18f 1 ciclo de instrucción es igual a 4 ciclos de reloj por lo que debo tener el reloj configurado a 24mhz.

Como tambien voy  a hacer uso del usb pues tengo que configurarlo para que este corra 48mhz.

En el datasheet de microchip tenemos para el cristal que uso (20mhz) los siguientes pll/cpudiv...



Según esto debía configurar para mi cristal de 20mhz un pll5 y un cpudiv4. Lo pongo así en CCS y NO me funcionaba
la rutina precisamente porque no estaba funcionando el micro a 6mips, mis sospechas eran correctas.... Pero porqué?


Ok pues aqui tenemos las opciones de configuración (fuses) validos para este micro con respecto al pll y cpudiv en CCS:

PLL1,PLL2,PLL3,PLL4,PLL5,PLL6,PLL10,PLL12.
Si configuras el fuse de PLL del micro en ccs obtendrás lo mismo que indica en el datasheet. Aqui no estaba el problema


CPUDIV1,CPUDIV2,CPUDIV3,CPUDIV4
Si veis en la captura anterior no existe cpudiv1 y aparece cpudiv6 que no aparece aquí. Pero no solo para este tipo de reloj a 20mhz, sino para ninguno de este micro... ¿cómo podia ser esto?. Pero es además que si configuras cpudiv2 en ccs se corresponderá con lo que en el datasheet indica cpudiv +3... Una autentica pasada y una locura que te hace perder toda la mañana.
--------------------------------------------------------ACLARACIÓN----------------------------------------
El caso que describo solo se da cuando seleccionamos un tipo de oscilador que metemos por divisor PLL casos --> HSPLL, ECPLL, ECPIO. En el caso en que no activemos el divisor PLL los fuses CPUDIV1-4 de CSS se corresponden con los del datasheet.
----------------------------------------------------------------------------------------------------------------


Asi que las correspondencias en PLL están deacuerdo con lo que pone en el datasheet  pero en cpudiv la correspondencia sería

EN CCS        EN DATASHEET
CPUDIV1--> CPUDIV +2
CPUDVI2--> CPUDIV +3
CPUDIV3--> CPUDIV +4
CPUDIV4--> CPUDIV +6

Esto lo podeis comprobar viendo el archivo de salida que da CCS en el hex y viendo el primer byte de configuración con respecto a los bits CPUDIV1:CPUDIV0

No se si será un bug pero si asi fuera... si cambiaran esto harían que el código escrito hasta la fecha dejara de funcionar. Ahí queda para navegantes

1 saludo.
« Última modificación: 08 de Enero de 2009, 21:57:14 por elmasvital »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: CCS, CPUDIV y sus incongruencias...
« Respuesta #1 en: 07 de Enero de 2009, 14:54:21 »
¿Ya lo has resuelto?

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Re: CCS, CPUDIV y sus incongruencias...
« Respuesta #2 en: 08 de Enero de 2009, 13:59:34 »
vaya este mensaje fue un mensaje que empecé a escribir y lo dejé a medias esperando terminarlo :-P. No sabia que le habia dado a enviar. Bueno lo he editado para terminar el tema.

Lo tengo resuelto si :-P
« Última modificación: 08 de Enero de 2009, 14:07:01 por elmasvital »

Desconectado josnelihurt

  • PIC12
  • **
  • Mensajes: 64
Re: CCS, CPUDIV y sus incongruencias...
« Respuesta #3 en: 08 de Enero de 2009, 17:15:19 »
Cosas como esas no son extrañas en CCS  :D :D :D pero si hacen que la vida sea extraña. Muchas gracias por el aporte
Saltaré el charco para no meter la pata en el
Salu2
JoN

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: CCS, CPUDIV y sus incongruencias...
« Respuesta #4 en: 08 de Enero de 2009, 17:26:22 »
Eso es lo malo de los lenguajes de alto nivel, en cambio en asembler todo es absolutamente transparente, pero bueno cada uno tiene lo suyo, sus pro y sus contras.

Javicho.

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Re: CCS, CPUDIV y sus incongruencias...
« Respuesta #5 en: 08 de Enero de 2009, 17:40:39 »
Precisamente el software que estoy desarrollando es mitad ensamblador y mitad CCS. Hay partes que no se pueden desarrollar en ensamblador (ni yo quiero hacerlo) como por ejemplo la parte USB.

Aunque renegaba mucho cuando lo estudiaba... debo reconocer eque el ensamblador es necesario conocerlo a fondo para poder programar bien en C o al menos ayuda mucho.

1 saludo.

Desconectado josnelihurt

  • PIC12
  • **
  • Mensajes: 64
Re: CCS, CPUDIV y sus incongruencias...
« Respuesta #6 en: 08 de Enero de 2009, 17:44:03 »
debo reconocer eque el ensamblador es necesario conocerlo a fondo para poder programar bien en C o al menos ayuda mucho.
Eso es muy cierto, pues es necesario conocer la máquina a fondo y su lenguaje para que ella nos entienda y sacarle el máximo del potencial.
Salu2
JoN

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: CCS, CPUDIV y sus incongruencias...
« Respuesta #7 en: 08 de Enero de 2009, 17:52:31 »
De que PIC hablas?? :shock: :shock:
No encuentro esos bits en los que trabajo habitualmente... :( :(
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: CCS, CPUDIV y sus incongruencias...
« Respuesta #8 en: 08 de Enero de 2009, 18:05:15 »
Que tal amigos!
MGLSOFT se refieren a pic con usb integrado  :mrgreen:
puede ser por ejemplo un pic18f2550 o pic18f4550 entre otros, los cuales poseen hardware pra el manejo del usb.

Saludos

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: CCS, CPUDIV y sus incongruencias...
« Respuesta #9 en: 08 de Enero de 2009, 18:24:57 »
Ahora entendi, lei tan rapido que no vi lo del USB... :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: CCS, CPUDIV y sus incongruencias...
« Respuesta #10 en: 08 de Enero de 2009, 19:25:45 »
Hola,
Citar
Eso es lo malo de los lenguajes de alto nivel, en cambio en asembler todo es absolutamente transparente, pero bueno cada uno tiene lo suyo, sus pro y sus contras.
No hay que hecharle la culpa al lenguaje, en C podes hacer lo mismo que en assembler solo perdiendo un poco de perfomance pero ganando muchisimo en portabilidad, mantencion y legibilidad que para nada es poca cosa. Aca la culpa la tiene la implementación no el lenguaje, lo que noto en este foro y sobre todo en usarios de CCS es que en una gran porcentaje son muy dependiente de las funciones de libreria ( IIC, Display, etc, etc ) y se topan con muchos errores, mi filosofia es desarrollar yo mismo las cosas y no depender de implementaciones externas. De lo único que dependo del compilador es de la RTL

Saludos !

Desconectado Duende_Azul

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 902
Re: CCS, CPUDIV y sus incongruencias...
« Respuesta #11 en: 08 de Enero de 2009, 21:32:51 »
Citar
Asi que las correspondencias en PLL están deacuerdo con lo que pone en el datasheet  pero en cpudiv la correspondencia sería

EN CCS        EN DATASHEET
CPUDIV1--> CPUDIV +2
CPUDVI2--> CPUDIV +3
CPUDIV3--> CPUDIV +4
CPUDIV4--> CPUDIV +6

No es por defender el CCS pero, si vemos este esquema (RedPic lo explicó magistralmente en otro post pero no lo encuentro):



Vemos que el significado del CPUDIV  depende de si se selecciona el PLL o no (bits FOSC3:FOSC0) por lo tanto, si la fuente del oscilador es sin PLL, el CPUDIV del CCS coincide con el datasheet, pero si se selecciona el módulo pll como fuente de reloj, entonces pasa eso que has colocado en tu post.

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Re: CCS, CPUDIV y sus incongruencias...
« Respuesta #12 en: 08 de Enero de 2009, 22:00:58 »
Tienes razón en tu exposición... aunque la linea que has pintado en rojo, en el ejemplo que expones no debería entrar por el divisor PLL sino por el Oscilador Postscaller en el que efectivamente los CPUDIV de CCS se corresponden con los del Datasheet.

En realidad escribí este post para que alguien me lo explicara... pero ya cuando llevas unas cuantas de horas como que los ojos se te van cerrando y no ves más que lo que tienes justo delante :-)

Desconectado Duende_Azul

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 902
Re: CCS, CPUDIV y sus incongruencias...
« Respuesta #13 en: 08 de Enero de 2009, 23:21:18 »
La linea roja no la puse yo ja ja ja, me fusilé el diagrama de otro post. Lo que comentas me ha pasado infinidad de veces y si no fuera por este foro ya me habria dedicado a criar ovejas  :D

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: CCS, CPUDIV y sus incongruencias...
« Respuesta #14 en: 28 de Septiembre de 2009, 19:14:17 »
Hola.

Pues retomo el hilo porque he estado probando las configuraciones del oscilador con el PLL habilitado y claro ... no coincidían las configuraciones. Al final pude dar con el fallo ... lástima que hice al revés, es decir, primero probé y luego me dio por buscar acá en el foro jejeje.

De todas maneras, las configuraciones del CPUDIVx las tome así:

CPUDIV1 = 00
CPUDIV2 = 01
CPUDIV3 = 10
CPUDIV4 = 11

A la hora de setear el clock, verifico en el datasheet a que divisor corresponde ...

De todas maneras, me parece que debería haber unos fuses que sean equivalentes al CPUDIVx pero con el PLL activado.

Saludos
El papel lo aguanta todo