Autor Tema: ADC 16f877a (warning proteus)  (Leído 2619 veces)

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

Desconectado krakc

  • PIC10
  • *
  • Mensajes: 29
ADC 16f877a (warning proteus)
« en: 13 de Mayo de 2009, 22:19:12 »
Hola resulta que estoy empezando a programar en C, (me canse de los limites y retos de asm).. en fin, estoy empezando con la cenversion ADC, tengo el codigo, la conversion se me realiza perfectamente, hago los calculos y lo que me muestra es lo correcto, por lo que la conversion esta bien, pero el bendito proteus me muestra miles de warnings diciendome lo siguiente:

"ADC conversion started before "wait" time has expired following previus conversion or channel change"

Sera que alguien seria tan amable de revisar mi codigo y decirmen porque me sale eso que me tiene mareado tanto warning XD

gracias

PD: el codigo...

Código: [Seleccionar]
#include <16f877a.h>             
#device adc=8;
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP     
#use delay (clock=4000000)     

long temperatura=0;

void main(void)
{

setup_adc_ports(NO_ANALOGS);
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
setup_counters(RTCC_INTERNAL,RTCC_DIV_256);// TIMER0: Clock Interno, Presescaler 256.
set_adc_channel(0); //Canal 0.
set_timer0(252); //T = (256 - precarga) * Preescaler * 4 / Fosc --->>> precarga=252
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);

while(1)
   {
      temperatura=read_adc();
   }
}

#int_TIMER0

void Timer0_isr(void)
{
output_d(temperatura);
set_timer0(252);
}

Desconectado josnelihurt

  • PIC12
  • **
  • Mensajes: 64
Re: ADC 16f877a (warning proteus)
« Respuesta #1 en: 13 de Mayo de 2009, 23:16:46 »
Hola, lo felicito por pasarse a C, este es otro mundo, se ven con otros ojos los problemas, bueno en cuanto los warnings, a mi me salen, pero yo no les presto atención = cuando los programo funcionan muy bien. Salu2
JoN

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: ADC 16f877a (warning proteus)
« Respuesta #2 en: 13 de Mayo de 2009, 23:40:05 »
No es necesario colocar NO_ANALOGS, solo coloca setup_adc_ports(RA0_ANALOG);

Después, estas usando solo 8 bits en la conversión ,así que puedes definir la variable temperatura como int o byte.
No contesto mensajes privados, las consultas en el foro

Desconectado krakc

  • PIC10
  • *
  • Mensajes: 29
Re: ADC 16f877a (warning proteus)
« Respuesta #3 en: 14 de Mayo de 2009, 00:32:11 »
@josnelihurt ... si amigo esto es otro mundo, la verdad a mi tambien em pasa que "quemo" el pic y todo va de maravilla, pero pense que pasaba algo ya que es mi primer programa en C

@suky, bueno amigo lo que dices esta bien, pero lo que pasa es que voy a usar el resto del puerto A para controlar un multiplexor y poder sensar varias cosas por el mismo pin RA0, pero sera un poco mas adelante, pero gracias, esto de C es un poco confuso al principio pero ya voy entendiendo...

PD: y ahora como lo envio al puerto serial???

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: ADC 16f877a (warning proteus)
« Respuesta #4 en: 14 de Mayo de 2009, 03:34:59 »
Código: C
  1. #use delay(clock=20000000)
  2. #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
  3.  
  4.  
  5. // Interrupcion de recepcion de datos.-
  6. #int_RDA
  7. void  RDA_isr(void)
  8. {
  9.    DATA0=getc();        // Recibo primer dato.-
  10.    while(kbhit()==0){}  // Si se recibe mas de un dato
  11.    DATA1=getc();        // Cargo el segundo dato
  12. }
  13.  
  14.  
  15. void main()
  16. {
  17.    int Temperatura;
  18.  
  19.    enable_interrupts(INT_RDA);
  20.    enable_interrupts(GLOBAL);
  21.    
  22.    putc(Temperatura); // envia directamente en Hexadecimal.-
  23.  
  24.    printf("Temp = %u", Temperatura); // Convierte Temperatura en un string y lo envia:
  25.                                      // Temp = 52



printf:Te permite especificar el formato en que queremos mostrar los datos.

Parámetros: Cadena de formato (cómo se visualizan los datos) y Lista de valores (datos que se visualizan)
Formatos:
%d Entero 8bits con signo.
%u Entero 8 bits sin signo.
%lu Entero de 16 bits
%x Hexadecimal minúscula.
%X Hexadecimal mayúscula.
%f Flotante

Ejemplo:
Código: C
  1. printf("Hola");

Hola

Código: C
  1. Data=10;
  2. printf("El valor es : %u",Data);

El valor es : 10

Código: C
  1. Data=10;
  2. printf("El valor es : %03u",Data);

El valor es : 010

Código: C
  1. Data=3.12;
  2. printf("El valor es : %1.2f",Data);

El valor es : 3.12

:wink:
No contesto mensajes privados, las consultas en el foro


 

anything