Autor Tema: Mi primer programa para dsPIC con CCS... Dificil pero en eso estamos!  (Leído 25048 veces)

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

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Mi primer programa para dsPIC con CCS... Dificil pero en eso estamos!
« en: 13 de Septiembre de 2007, 21:51:46 »
Hola amigos, estoy trabajando por primera vez con dsPIC, y mi primer programa es con el compilador que manejo CCS.

Código: [Seleccionar]
#include <33FJ256MC710.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES ICS0                 
#FUSES NOJTAG               
#FUSES NOCOE                 
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPUT                    //No Power Up Timer
#FUSES WPOSTS1               
#FUSES WPRES128             
#FUSES NOWINDIS             
#FUSES EC                       //High speed Osc (> 4mhz)
#FUSES NOOCSIO               
#FUSES FRC_PLL               
#FUSES NOTEMP               
#FUSES NOIESO                   //Internal External Switch Over mode disabled
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOWRTSS               
#FUSES NOSSS                 
#FUSES NORSS                 
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOBSS                 
#FUSES NORBS
#use delay(clock=40000000)

#use rs232(baud=9600, UART1)

#use standard_io(A)
#use standard_io(B)
#use standard_io(C)
#use standard_io(D)
#use standard_io(E)



void main()
{

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_spi(SPI_SS_DISABLED);

   output_high(pin_D0);
   delay_ms(500);
   output_high(pin_D1);
   delay_ms(500);
   output_high(pin_D2);
   delay_ms(500);
   output_high(pin_D3);
   delay_ms(500);
   output_high(pin_D4);
   delay_ms(500);
   output_high(pin_D5);
   delay_ms(500);
   output_high(pin_D6);
   delay_ms(500);
   output_high(pin_D7);
   delay_ms(500);
   
   printf("HOLA MUNDO!!!");
   
   output_d(0);
   
   while(1);
}

De entrada me mande con el 33FJ256MC710, en mas grande en potencia de todos. 

La secuencia encendiendo los LEDs, va muy bien, pero al llegar a transmitir por RS232...  Me llega al Hyperterminal caracteres raros, síntoma de que no coincide el BaudRate.

No se Como se configura el Oscilador para este dsPIC, o si el problema sea del CCS..

Por favor una ayudita sobre este tema..  :mrgreen:
« Última modificación: 14 de Septiembre de 2007, 12:06:16 por PICmouse »

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Mi primer programa para dsPIC con CCS...
« Respuesta #1 en: 13 de Septiembre de 2007, 22:14:44 »
También pueden intervenir la paridad y el número de bits por palabra y el número de bits de stop. haber si no te coinciden en los dos extremos.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Mi primer programa para dsPIC con CCS...
« Respuesta #2 en: 13 de Septiembre de 2007, 22:38:58 »
Ggracias jfh900 por contestar.. Nuevo intento despues de leer un Poco el Datasheet y no se si la conclusion sea buena, pero:

Cambien el tipo de Oscilador de HS a EC, según datasheet EC es "External Clock" es cuando se le coloca un oscilador externo, y pues es precisamente lo que tengo, un Oscilador TTL  3.3V de 40MHZ.

También coloque el ajuste de numero de Bits de datos, De parada, velocidad y demas.

Pero tampoco Funciona, Coloco el Codigo.

Código: [Seleccionar]
#include <33FJ256MC710.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES ICS0                 
#FUSES NOJTAG               
#FUSES NOCOE                 
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPUT                    //No Power Up Timer
#FUSES WPOSTS1               
#FUSES WPRES128             
#FUSES NOWINDIS             
#FUSES EC                       //High speed Osc (> 4mhz)
#FUSES NOOCSIO               
#FUSES FRC_PLL               
#FUSES NOTEMP               
#FUSES NOIESO                   //Internal External Switch Over mode disabled
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOWRTSS               
#FUSES NOSSS                 
#FUSES NORSS                 
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOBSS                 
#FUSES NORBS
#use delay(clock=40000000)

#use rs232(baud=9600, BITS =8, PARITY=N , STOP=1, uart1)


#use standard_io(A)
#use standard_io(B)
#use standard_io(C)
#use standard_io(D)
#use standard_io(E)



void main()
{
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_spi(SPI_SS_DISABLED);

   setup_uart(TRUE);
   
   SET_TRIS_c(0b10000000);

   output_high(pin_D0);
   delay_ms(500);
   output_high(pin_D1);
   delay_ms(500);
   output_high(pin_D2);
   delay_ms(500);
   output_high(pin_D3);
   delay_ms(500);
   output_high(pin_D4);
   delay_ms(500);
   output_high(pin_D5);
   delay_ms(500);
   output_high(pin_D6);
   delay_ms(500);
   output_high(pin_D7);
   delay_ms(500);
   
   printf("hola");
   
   output_d(0);
   
   while(1);
}
« Última modificación: 13 de Septiembre de 2007, 22:41:19 por PICmouse »

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Mi primer programa para dsPIC con CCS... Medio Fracaso
« Respuesta #3 en: 13 de Septiembre de 2007, 23:16:25 »
Citar
#FUSES FRC_PLL 
Que hace este Fuse ??
Si fuerza el PLL para el oscilador, es probable que internamente multipliques por 4 la frecuencia del cristal, y como tienes declarado 40 MHZ no funcione bien la comunicacion porque estas bajando el timing de cada bit a 1/4 del tiempo original.

Una buena prueba para ver si es esto es poner del lado de la PC una velocidad 4 veces mayor...
Para tu caso setealo a 38400 y mira que pasa, a ver si recibe bien... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Mi primer programa para dsPIC con CCS... Medio Fracaso
« Respuesta #4 en: 13 de Septiembre de 2007, 23:34:57 »
ya intente lo que decias amigo MGLSOFT y nada. No me funciona tampoco.

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Mi primer programa para dsPIC con CCS... Medio Fracaso
« Respuesta #5 en: 13 de Septiembre de 2007, 23:47:05 »
 :shock: Le quite el Oscilador TTL de 40MHZ y anda igual.... Entonces esta Corriendo con el Oscilador INterno y no con el Externo.... Entonces La pregunta seria:

Como se configura el externo???

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Mi primer programa para dsPIC con CCS... Medio Fracaso
« Respuesta #6 en: 13 de Septiembre de 2007, 23:57:20 »
 :x CCS y sus BUGS...    :5]

YA esta funcionando... Pero nuevamente le tiro la culpa a CCS..

Primero. Le decía que quería usar Oscilador externo HS.. Al importar el archivo. hex para programar el dsPIC, note que la opción que habilitaba era INT_RC con PLL.. Manualmente se lo pase a HS

LE selecciono 9600 en el Baud Rate... Y el Hyperterminal me saca el "hola" pero a 19200.... Hay Dios, En que estaban pensando los de CCS cuando Hicieron este Compilador...

Ahora Bien seguire mirando mas pruebas a ver si soy yo  el problema..

SALUDOS!!!
« Última modificación: 14 de Septiembre de 2007, 09:45:11 por PICmouse »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Mi primer programa para dsPIC con CCS... Medio Fracaso
« Respuesta #7 en: 14 de Septiembre de 2007, 05:22:19 »
Pues anda que no tienes tú valor para meterte con esa versión de CCS. Casi tendrían que pagarte como miembro del equipo de desarrollo.

Respecto al oscilador del 33F, es bastante completo y potente, a la vez que complejo.

Diseñé un asistente para poder sacarle todo el jugo. Espero que pueda servirte de algo.
33F - Asistente para la configuración del oscilador de la familia dsPIC33F

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Mi primer programa para dsPIC con CCS... Dificil pero en eso estamos!
« Respuesta #8 en: 14 de Septiembre de 2007, 12:09:06 »
Bueno, ya encontré donde estaba el problema para lo de HS, el dsPIC tiene varias opciones de Configuración, tal cual lo comento Nocturno, mirando CCS y comparando con los fusibles generados, encontré que se debía cambiar FCR_PLL por PR, tal cual lo habias visto amigo MGLSOFT.

El Programa ya funciona, pero, no va con el Baud Rate que se le selecciona. Va al Doble. 4800 realmente seria 9600..

Código: [Seleccionar]
#include <33FJ256MC710.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES ICS0                 
#FUSES NOJTAG               
#FUSES NOCOE                 
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPUT                    //No Power Up Timer
#FUSES WPOSTS1               
#FUSES WPRES128             
#FUSES NOWINDIS             
#FUSES EC                       //High speed Osc (> 4mhz)
#FUSES NOOCSIO               
#FUSES PR               
#FUSES NOTEMP               
#FUSES NOIESO                   //Internal External Switch Over mode disabled
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOWRTSS               
#FUSES NOSSS                 
#FUSES NORSS                 
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOBSS                 
#FUSES NORBS
#use delay(clock=40000000)

#use rs232(baud=4800, BITS =8, PARITY=N , STOP=1, uart1)

int X=0,Y=0;
char comando='P';
int Barra=0, Valor=0;


void retardo(void){
delay_ms(400);
}

#use standard_io(A)
#use standard_io(B)
#use standard_io(C)
#use standard_io(D)
#use standard_io(E)



void main()
{
   set_tris_b(0b00001111);

   setup_adc_ports(NO_ANALOGS);
   
   setup_spi(SPI_SS_DISABLED);

   setup_uart(TRUE);
   
   
   output_d(0);
   retardo();
   output_high(pin_D0); 
   retardo();
   output_high(pin_D1);
   retardo();
   output_high(pin_D2);
   retardo();
   output_high(pin_D3);
   retardo();
   output_high(pin_D4);
   retardo();
   output_high(pin_D5);
   retardo();
   output_high(pin_D6);
   retardo();
   output_high(pin_D7);
   retardo();
   output_d(0);
   
   
   while(1){
   if(input(pin_b0)==1) output_high(pin_D0);
   else output_low(pin_D0);

   if(input(pin_b1)==1) output_high(pin_D1);
   else output_low(pin_D1);
   
   if(input(pin_b2)==1) output_high(pin_D2);
   else output_low(pin_D2);

   if(input(pin_b3)==1) output_high(pin_D3);
   else output_low(pin_D3);
   
   }
}

Pero ahora no me quiere leer los Pulsadores... RARO RARO.
« Última modificación: 14 de Septiembre de 2007, 12:42:34 por PICmouse »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Mi primer programa para dsPIC con CCS... Dificil pero en eso estamos!
« Respuesta #9 en: 14 de Septiembre de 2007, 13:19:13 »
El Programa ya funciona, pero, no va con el Baud Rate que se le selecciona. Va al Doble. 4800 realmente seria 9600..
Seguro que el micro va al doble de velocidad de lo que tu programa cree. ¿Cuáles son los fuses de configuración del oscilador?

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Mi primer programa para dsPIC con CCS... Dificil pero en eso estamos!
« Respuesta #10 en: 14 de Septiembre de 2007, 14:28:25 »
Cuando Importo el hex desde MPLAB para programarlo con el ICD2, me saca estos Fusibles:


Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Mi primer programa para dsPIC con CCS... Dificil pero en eso estamos!
« Respuesta #11 en: 14 de Septiembre de 2007, 14:52:25 »
Me lío con tanto palabro.

Mira, si quieres asegurarte que el micro corre a 40 MIPS, prueba con esta configuración, que yo la tengo requeteprobada:

_FOSCSEL(1);
_FOSC (195);
_FICD (223);
_FWDT (0x4F);

Esos son registros del dsPIC, no sé cómo tendrás que hacer en CCS para escribirlos, supongo que con #byte...

Con esa configuración trabaja con oscilador interno y PLL a 40MIPS exactos.

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Mi primer programa para dsPIC con CCS... Dificil pero en eso estamos!
« Respuesta #12 en: 14 de Septiembre de 2007, 20:53:13 »
Gracias Nocturno voy a probar a ver que tal va.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Mi primer programa para dsPIC con CCS... Dificil pero en eso estamos!
« Respuesta #13 en: 15 de Septiembre de 2007, 01:50:57 »
Se me olvidó una parte importante, que no va en los fuses, sino dentro del programa:

   CLKDIVbits.PLLPRE=4;
   CLKDIVbits.PLLPOST=0;
   PLLFBD=128;
   OSCTUN=0;

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Mi primer programa para dsPIC con CCS... Dificil pero en eso estamos!
« Respuesta #14 en: 12 de Diciembre de 2008, 02:50:35 »
Yo tb tengo problemas ahora en sacar algo por 232 con un DSPIC33FJ256GP710 con CCS 4.068 en el xplorer 16.

Código: [Seleccionar]
#include "33FJ256GP710.h"

#FUSES XT, NOWDT

#use delay(clock = 8 000 000)

#use rs232(UART2, baud=9600, parity = N, bits = 8)

void main()
{
   printf("\r\nEXPLORER 16");

   while (true)
   {
      output_toggle(PIN_A0);
      printf("\r\nEXPLORER 16");
      delay_ms(1000);
   }
}

Lo del toggle del led en A0 si funciona corectamente y el delay tb pero por 232 no se muestra absolutamente NADA! Supongo q faltara algo en los fusibles o no pero estoy usando el explorer 16 tal cual, con su cristal de 8mhz y todo como esta.

PD: XT porque: XT Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD, segun el CCS.

=S!

Salu2