TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: migsantiago en 13 de Octubre de 2006, 18:20:02

Título: No envía info por serial
Publicado por: migsantiago en 13 de Octubre de 2006, 18:20:02
Hola

Estoy probando el siguiente programa y no veo información en el hyperterminal. Nunca había programado el 18F452 en lenguaje C usando ADC y RS232 al mismo tiempo, no sé cual pueda ser la falla.

El programa tampoco funciona en Proteus.

Por favor, díganme que estoy haciendo mal.

Código: C
  1. //Convierte señal analógica en RA0
  2. //voltaje de referencia 5V
  3.  
  4. // Santiago Villafuerte
  5. // 13oct2006
  6.  
  7. #include "18f452.h"
  8.  
  9. #device adc=10 //Usa resolución de 10 bits
  10. #use delay(clock=4000000)
  11. #fuses xt,nowdt,noput,nobrownout,nolvp,noprotect,nodebug
  12.  
  13. #use rs232(baud=9600, xmit=PIN_c6, rcv=PIN_c7)
  14.  
  15. void main (void)
  16. {
  17.    int16 medicion; //directo del adc
  18.    float vopto; //conversión de voltajes
  19.    set_tris_a (0xff); //a es todo entrada
  20.  
  21.    setup_adc (adc_clock_div_32); //Enciende ADC
  22.    setup_adc_ports (RA0_RA1_RA3_ANALOG); //REF=VDD
  23.    set_adc_channel (0); //Elige canal a medir RA0
  24.  
  25.    while(1)
  26.       {
  27.       delay_ms(1000);
  28.  
  29.       medicion=read_adc(); //Hace conversión AD
  30.       delay_us(20);
  31.  
  32.       vopto=(float)(medicion*5)/1024; //convierte de binario a voltaje
  33.  
  34.       printf("Voltaje medido: %1.4f \n",vopto); //Saca texto por RS232
  35.       }
  36. }

Redpic: He puesto [c o d e = c] para poder verlo mejor.
Título: Re: No envía info por serial
Publicado por: Nocturno en 14 de Octubre de 2006, 15:30:00
¿Puedes adjuntar el fichero de Proteus para probarlo?
Título: Re: No envía info por serial
Publicado por: fastyx en 15 de Octubre de 2006, 12:35:42
prueba tonta : si escribis un printf tipo hola mundo antes del main , lo escribe en la terminal?( probalo...)
Título: Re: No envía info por serial
Publicado por: migsantiago en 16 de Octubre de 2006, 12:33:19
Lamento informarles que cometí el error de no conectar tierra al puerto serial  :D :D :oops: :oops: :oops:

Gracias por su ayuda amigos  :)

El programa final es este...

Código: [Seleccionar]
//Convierte señal analógica en RA0
//voltaje de referencia 5V

// Santiago Villafuerte
// 13oct2006

#include "18f452.h"

#device adc=10 //Usa resolución de 10 bits
#use delay(clock=4000000)
#fuses xt,nowdt,noput,nobrownout,nolvp,noprotect,nodebug

#use rs232(baud=9600, xmit=PIN_c6, rcv=PIN_c7)
#use fast_io (a)
#use fast_io (c)

void main (void)
{
   int16 medicion; //directo del adc
   float vopto; //conversión de voltajes
   set_tris_a (0xff); //a es todo entrada
   
   setup_adc (adc_clock_div_32); //Enciende ADC
   setup_adc_ports (RA0_ANALOG); //REF=VDD
   set_adc_channel (0); //Elige canal a medir RA0
   delay_us(20);

   while(1)
      {
      delay_ms(1000);
      medicion=read_adc(); //Hace conversión AD

      vopto=(float)(medicion*5)/1024; //convierte de binario a voltaje
      printf("Voltaje medido: %f \n\r",vopto); //Saca texto por RS232
      }
Título: Re: No envía info por serial
Publicado por: RedPic en 16 de Octubre de 2006, 14:31:55
Ja, ja, ja  :D  :D  :D

Ánimo gran Santiago que todos cometemos errores.

(En mi último proyecto, el de las EEPROM gigantes, estuve varias horas perdido porque puse al revés los pines del I2C  :oops:)

Título: Re: No envía info por serial
Publicado por: adbensi en 20 de Octubre de 2006, 22:42:18
Ola!

 Estoy hacendo un projecto similar em C18, e my codigo es mui vezes maior rss
 CSS es uno compilador agradavel. :D Bueno Santiago;

 Una duda, se me permite citar o contenido de su post:
 Es possible rodar un codigo C18 en proteus como hacem con CSS?

Saludos!
Título: Re: No envía info por serial
Publicado por: migsantiago en 21 de Octubre de 2006, 00:32:45
Hola!

Yo creo que sí se puede, hay que ver si C18 genera archivos .COFF para poder simular el pic con proteus.  :mrgreen:
Título: Re: No envía info por serial
Publicado por: vszener en 21 de Octubre de 2006, 06:19:09
Aunque no te genere el archivo .coff siempre te queda la posibilidad de cargarle el archivo .hex.

Una cosa que no he entendido, ¿el código es mayor en CCS o en C18?


Suerte!!!
Título: Re: No envía info por serial
Publicado por: migsantiago en 21 de Octubre de 2006, 15:14:25
Hey Vszener

Me parece que con el HEX no se puede depurar el programa, con el coff se puede ejecutar instrucción por instrucción en C.
Título: Re: No envía info por serial
Publicado por: adbensi en 21 de Octubre de 2006, 15:42:07
Ola,

 Desculpa, tieno dificuldade para escreber en su lingua, mas queria comentar que codigo del  C18 >> CSS :)
 Tieno mui parametros para configurar en C18 que no existe en CSS, me parece que CSS es + gracefull.

 El codigo de migsantiago és clean, comparado com my codigo em C18.

 Una duda, tienes dificuldade con represetação del 1 LSB? En my aplicacion, o ultimo bit varia muito, ejemplo:
 5 vcc en AD0 resulta en: 1023, 1023, 1022, 1023, 1020, 1023... deberia ser somente 1023, mas aparece outros valores;

Saludos!
Título: Re: No envía info por serial
Publicado por: migsantiago en 21 de Octubre de 2006, 16:16:01
Hola Abdensi

Sí tuve dificultades con el LSB del ADC, pero lo solucioné poniendo un capacitor de 1uF en paralelo a la terminal AD0 y en las terminales Vdd y Vss del PIC.  :mrgreen:
Título: Re: No envía info por serial
Publicado por: adbensi en 22 de Octubre de 2006, 09:37:45
Hola migsantiago :D

 Tieno capacitores de tantalo (1u y 0.1u) en las patitas VCC y GND, pero no tieno nada en las patitas AD0 y GND;
 Estoy anexando una figura, en la figura tiene sentido hacer el circuito proposto?

Gracias por su ayuda :D
Título: Re: No envía info por serial
Publicado por: migsantiago en 22 de Octubre de 2006, 12:58:19
Ahh, yo lo conecté así...

(http://img118.imageshack.us/img118/4419/imagemvd5.gif)
Título: Re: No envía info por serial
Publicado por: vszener en 22 de Octubre de 2006, 14:33:51
Sí, con el .hex símplemnte podremos 'correr' el programa pero no depurarlo, me refería que si carga el .hex podrá ver, sin depurarlo, si funciona el código o no.


Suerte!!! ;)