Autor Tema: USART 18F46j50 me está volviendo loco  (Leído 5221 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado droky

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 628
    • Diseños radikales libres
USART 18F46j50 me está volviendo loco
« en: 11 de Octubre de 2010, 08:28:33 »
Hola,
No sé quien me mandaría intentar nada con este PIC  :5]
Bueno, algo tan simple como enviar un caracter por RS232 me está volviendo loco.
Los tiempos no me cuadran, los datos enviados tampoco... es el segundo PIC que pruebo y nada....
¿Alguien lo ha probado ya este PIC?
CCS v4.110
Cristal de 20MHz.
Este es el código:
Código: [Seleccionar]
#include <18LF46J50.h>
#device adc=10

#fuses HSPLL,NOWDT,NOPROTECT,NOCPUDIV,PLL5
#use delay(clock=48000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7, ERRORS)

void main()
{

   setup_adc_ports(ALL_ANALOG|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2|ADC_TAD_MUL_0);
   setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_4);
   setup_spi2(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_timer_4(T4_DISABLED,0,1);
   setup_ccp1(CCP_OFF);

   while(1){
   puts('1');
   };


}

A ver si alguien me ilumina...  :shock:
Salu2
Yo... he visto cosas que vosotros no creeríais... atacar naves en llamas más allá de Orión, he visto rayos C brillar en la oscuridad cerca de la puerta Tannhäuser.
Todos esos momentos se perderán en el tiempo como lágrimas en la lluvia.
Es hora de morir.

Si me buscas en twitter, me tienes por @radikaldesig

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: USART 18F46j50 me está volviendo loco
« Respuesta #1 en: 11 de Octubre de 2010, 14:46:55 »
Hola, talvez la errata del PIC te dé pistas.

Ah y puede que no importe... trata de poner los strings en comillas y no apóstrofos. No sé si afecte en algo.

puts("1");

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: USART 18F46j50 me está volviendo loco
« Respuesta #2 en: 11 de Octubre de 2010, 15:02:47 »
Tu usas el LF46J50 o el F46J50?

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: USART 18F46j50 me está volviendo loco
« Respuesta #3 en: 11 de Octubre de 2010, 15:11:13 »
Es que estas usando puts() para enviar un caracter, cuando tendrias que usar putc(). Si no el programa se queda esperando al caracter nulo y este nunca llega.
saludos!!

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

Desconectado droky

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 628
    • Diseños radikales libres
Re: USART 18F46j50 me está volviendo loco
« Respuesta #4 en: 11 de Octubre de 2010, 21:17:04 »
Hola,
YA lo conseguí. Es más, lo conseguí como lo quería desde el principio.
Despues de batallar con los datasheets, lo he entendido.
Primero os respondo a los que me habeis aportado ideas:
Migsantiago: los apóstrofos se pueden usar cuando es un char, o sea sólo 1 carácter. Si es un string es necesario usar comillas. Tambien para un char se puede usar comillas indistintamente.
LABMouse: Efectivamente uso un 18F46j50, pero no me influía el uso de la otra librería, ya que sólo se diferencian en el uso del LowPower y funciones sleep.
gera: bueno, había probado printf, putc y finalmente me quedé con puts porque realmente es una función que envía un string usando putc, pero al final añade automáticamente RETURN (13) y LINE-FEED (10). Igual que el printf, pero sin añadir el \r\n de forma manual.

Y finalmente, el resultado.
El 16f46j50 incorpora un oscilador interno de precisión de 8MHz que puede inyectar al PLL prescaler para generar una salida de 4MHz que son necesarias para que el PLL genere una señal de 96MHz que al pasar por el divisor /2 genera el reloj a 48MHz para poder usar el USB a alta velocidad.
Entonces, seleccionamos como reloj, el reloj interno con PLL.
En la versión 4.110 de CCS si selecciono INTRC_PLL realmente me marca el config bit como INTOSCPLLO (salida osc en RA6) que yo no quiero la salida de reloj.
Sin embargo si selecciono INTRC_PLL_IO el bit de configuración que marca es INTOSCPLL y RA6 queda disponible. Osea, funcionan al revés.
Y el prescaler para conseguir los 4MHz a partir de los 8MHz internos será PLL2, pero hete aquí que las configuraciones posibles son PLL1,PLL3,PLL4,PLL5,PLL6,PLL10,PLL12 y la PLL2 da un error al compilarla pues no existe.
Revisando el 18f46j50.h descubro que el PLL2 se llama PLLDIV2 (tocate los willis CSS  :5] ) a diferencia de las otras posibles configuraciones  :?
Como en el 18F4550 configuro los fuses así y... no funciona  :5]
Un par de vueltas por el datasheet ( no hay nadie que haya escrito algo de código usando el PLL sin un cristal de 12MHz externo... ) y localizo lo que me hace falta otra vez en el 18f46j50.h:
-La configuración del PLL se hace por software
Funcion setup_oscillator y constantes para activar el PLL y el reloj interno de 8MHz:
Código: [Seleccionar]
setup_oscillator(OSC_PLL_ON, OSC_8MHZ);
Compilo y funcionando! La leche que mal trago he pasado con el puñetero oscilador. El caso es que estaba analizando la señal con el logic y no lo daba visto, no veía que había un desfase entre la frecuencia de transmisión de los 9600bps y el ancho de los pulsos de la trama.
Así no veía que estaba mal:


Y finalmente todo encaja en su sitio:


El código entonces, queda así:
Código: [Seleccionar]
#include <18F46J50.h>
#device adc=10

#fuses INTRC_PLL_IO,NOWDT,NOPROTECT,NOCPUDIV,PLLDIV2
#use delay(clock=48000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7, ERRORS)
void main()
{
   setup_oscillator(OSC_PLL_ON, OSC_8MHZ);
   setup_adc_ports(ALL_ANALOG|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2|ADC_TAD_MUL_0);
   //setup_pp(PMP_DISABLED);
   setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_4);
   setup_spi2(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_timer_4(T4_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard

   while(1){

  printf("12345\n\r");
   };

}

Salu2
Yo... he visto cosas que vosotros no creeríais... atacar naves en llamas más allá de Orión, he visto rayos C brillar en la oscuridad cerca de la puerta Tannhäuser.
Todos esos momentos se perderán en el tiempo como lágrimas en la lluvia.
Es hora de morir.

Si me buscas en twitter, me tienes por @radikaldesig

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: USART 18F46j50 me está volviendo loco
« Respuesta #5 en: 11 de Octubre de 2010, 21:30:29 »
Y con el cristal externo no funciono?
No contesto mensajes privados, las consultas en el foro

Desconectado droky

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 628
    • Diseños radikales libres
Re: USART 18F46j50 me está volviendo loco
« Respuesta #6 en: 11 de Octubre de 2010, 22:28:23 »
Sí suki,
con el cristal externo funcionó tambien.
Sólo lo probé en modo HS a 20MHz ( el valor del cristal) No probé con el PLL pero supongo que funcionará activándolo por software igual.
No obstante, pudiendo usarlo sin cristal y a 48MHz, pues paso de él  :mrgreen:
Salu2
Yo... he visto cosas que vosotros no creeríais... atacar naves en llamas más allá de Orión, he visto rayos C brillar en la oscuridad cerca de la puerta Tannhäuser.
Todos esos momentos se perderán en el tiempo como lágrimas en la lluvia.
Es hora de morir.

Si me buscas en twitter, me tienes por @radikaldesig

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: USART 18F46j50 me está volviendo loco
« Respuesta #7 en: 11 de Octubre de 2010, 22:39:15 »
Ahh esto de los fuses es un quilombo!! :5] yo siempre me agarro la cabeza con el 18f4550, y eso que hay una guia completisima de redpic.
En fin, me alegro que lo hayas hecho funcionar!! :D
saludos!

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

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: USART 18F46j50 me está volviendo loco
« Respuesta #8 en: 12 de Octubre de 2010, 11:37:16 »
Te entiendo, yo llevo como 1 mes tratando de hacer funcionar el modulo USB del PIC18F47J53 que es el ultimo de microchip y que lidia da revisar eso, es mas no encontraba cuales opciones tenia para modificar.   

Me ayudo muchisimo el documento PDF que sacaste amigo Suky en donde explica donde encontrar el HELP para los FUSES en C18.


Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: USART 18F46j50 me está volviendo loco
« Respuesta #9 en: 10 de Noviembre de 2010, 12:27:32 »
Hola Droky, yo también estoy con un diseño en el que quiero librarme del cristal manteniendo el USB, y tengo una duda.

¿Al usar el INTOSC, sólo se puede usar USB en low-speed o tambien en full-speed?

Desconectado droky

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 628
    • Diseños radikales libres
Re: USART 18F46j50 me está volviendo loco
« Respuesta #10 en: 10 de Noviembre de 2010, 13:39:30 »
Hola Droky, yo también estoy con un diseño en el que quiero librarme del cristal manteniendo el USB, y tengo una duda.

¿Al usar el INTOSC, sólo se puede usar USB en low-speed o tambien en full-speed?

Hola,
Pues no lo he probado y ahora no estoy en casa, pero entiendo que sí se puede usar a full-speed ya que proporciona 48MHz de velocidad por PLL.
Hoy no sé si me dará tiempo, pero si no es hoy, lo pruebo mañana implementando un HID o similar y te cuento.
Edito: He revisado el datasheet y aparentemente tiene que funcionar a full-speed usando el oscilador interno y el PLL a 48MHz sin problemas.

Salu2
Yo... he visto cosas que vosotros no creeríais... atacar naves en llamas más allá de Orión, he visto rayos C brillar en la oscuridad cerca de la puerta Tannhäuser.
Todos esos momentos se perderán en el tiempo como lágrimas en la lluvia.
Es hora de morir.

Si me buscas en twitter, me tienes por @radikaldesig

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: USART 18F46j50 me está volviendo loco
« Respuesta #11 en: 10 de Noviembre de 2010, 17:03:23 »
Gracias Droky, es que leo esto en el datasheet y no me queda nada claro:
Citar
2.4 USB From INTOSC
The 8 MHz INTOSC included in all PIC18F46J50 family
devices is extremely accurate. When the 8 MHz
INTOSC is used with the 96 MHz PLL, it may be used
to derive the USB module clock. The high accuracy of
the INTOSC will allow the application to meet
low-speed USB signal rate specifications.

Desconectado droky

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 628
    • Diseños radikales libres
Re: USART 18F46j50 me está volviendo loco
« Respuesta #12 en: 11 de Noviembre de 2010, 02:51:11 »
Hola,
A falta de probarlo, te remito a un post en el foro de CCS de alguien que tenía la misma duda que tú y sí le ha funcionado a full speed con el oscilador interno.
El tema es que Microchip asegura el correcto funcionanmiento a Low speed. Que en condiciones típicas puede funcionar a full speed, pero no lo garantiza plenamente.
El post:
http://www.ccsinfo.com/forum/viewtopic.php?p=127450
Salu2
Yo... he visto cosas que vosotros no creeríais... atacar naves en llamas más allá de Orión, he visto rayos C brillar en la oscuridad cerca de la puerta Tannhäuser.
Todos esos momentos se perderán en el tiempo como lágrimas en la lluvia.
Es hora de morir.

Si me buscas en twitter, me tienes por @radikaldesig


 

anything