Autor Tema: ADC y USART en Pic18f2550  (Leído 2315 veces)

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

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
ADC y USART en Pic18f2550
« en: 19 de Marzo de 2017, 14:36:23 »
Hola, estoy intentando visualizar por el Usart la lectura del  Adc, pero como con las librerías incluidas dentro del plib el XC8 tiene problemas, por lo que he leido en microchip  solo funcionan hasta la versión 1.34 tengo que hacerlo sin poder usar el modulo Usart incluido dentro de plib y tengo un error en la conversión de entero a string pero no consigo dar con el, podéis ayudarme.
Código: C
  1. #include <xc.h>
  2. #include "ConfigBits.c"
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <plib/adc.h>
  6.  
  7. unsigned char ADCStringVal[4];
  8.  
  9. #define _XTAL_FREQ 20000000     //--Velocidad a la que funciona el micro
  10.  
  11. /**** DEFINICION DE FUNCIONES ****/
  12. void ConfigSCI(void);
  13. void ConfigADC(void);
  14.  
  15. /**** FUNCION DE CONFIGURACION MODULO USART ****/
  16. void ConfigSCI(void)
  17. {
  18.     TXSTAbits.BRGH = 1; //--High Baud Rate
  19.     TXSTAbits.SYNC = 0; //--Asynchronous mode
  20.     TXSTAbits.TXEN = 1; //--Transmit enable
  21.     RCSTAbits.CREN = 1; //--Enables receiver
  22.     RCSTAbits.SPEN = 1; //--Serial port enabled
  23.     SPBRG = 64;        //--19200 baudios
  24. }
  25.  
  26. /**** FUNCION DE CONFIGURACION MODULO ADC ****/
  27. void ConfigADC(void)
  28. {
  29.     ADCON0 = 0x01;  //--Canal 0, modulo habilitado
  30.     ADCON1 = 0x0E;  //--AN0, Vdd, Vss
  31.     ADCON2 = 0xB6;  //--Justificado a la derecha, 16 Tad, Fosc/64
  32.     SetChanADC(ADC_CH0);    //--Selecciono canal a convertir
  33. }
  34.  
  35. /**** FUNCION PRINCIPAL ****/
  36. void main(void)
  37. {
  38.     unsigned int Result_Conversion;
  39.    
  40.     TRISA0 = 1;     //--Bit 0 puerta A configurado como entrada
  41.     ConfigADC();    //--Configuramos el modulo ADC
  42.     ConfigSCI();    //--Configuramos el modulo USART
  43.    
  44.     while(1)
  45.     {
  46.         ConvertADC();   //--Empezamos la conversion
  47.         while(BusyADC() == 1){}     //--Esperamos que finalice la conversion
  48.         Result_Conversion = ReadADC();    //--Leemos el resultado de la conversion
  49.         while(PIR1bits.TXIF == 0){} //--Esperamos a que el transmisor este libre
  50.         TXREG = (itoa(ADCStringVal,Result_Conversion,10));    //--Enviamos el resultado de la conversion
  51.     }
  52. }
Gracias.
« Última modificación: 19 de Marzo de 2017, 14:46:14 por Miquel_S »
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:ADC y USART en Pic18f2550
« Respuesta #1 en: 19 de Marzo de 2017, 16:21:08 »
Código: C
  1. TXREG = (itoa(ADCStringVal,Result_Conversion,10));    //--Enviamos el resultado de la conversion

por:

Código: C
  1. itoa(ADCStringVal,Result_Conversion,10);        // Convierto a string
  2.  
  3. for( i=0 ;ADCStringVal[i] != 0; i++)
  4. {
  5.         while(!TXSTAbits.TRMT);                 // Espero que el buffer este vacio
  6.         TXREG = ADCStringVal[i];                // Si esta vacio envio.
  7. }

----------

Funcion itoa:

char *  itoa ( int value, char * str, int base );

Devuelve el mismo puntero que str, es decir devuelve el puntero &ADCStringVal[0]
TXREG acepta solo 8 bits. Lo cual es insensato. Lo que debo hacer es pasar por cada valor de la string y enviarlo.
« Última modificación: 19 de Marzo de 2017, 16:23:22 por KILLERJC »

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re:ADC y USART en Pic18f2550
« Respuesta #2 en: 22 de Marzo de 2017, 15:24:37 »
Perdón por no haber contestado antes pero me ha sido imposible conectarme por problemas con la fibra óptica, gracias KILLERJC por la solución al problema.

Saludos!
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.


 

anything