Autor Tema: Consulta! Sobre salida ADC con interrupciones  (Leído 2098 veces)

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

Desconectado rroque

  • PIC12
  • **
  • Mensajes: 68
Consulta! Sobre salida ADC con interrupciones
« en: 24 de Enero de 2011, 14:41:15 »
Hola gente del foro, hice un pequeño programa para visualizar datos analógicos en la PC, el programa lo probé en proteus y este se e muy bien, pero a la hora de probarlo en el PCB que hice no se ve nada de nada. Yo pienso que es tema de programación porque le cargue un programa mas simple y si me visualiza los datos analógicos en el PCB, entonces el hardware anda bien, les anexo el programa para que me ayuden a identificar el problema.

Gracias a todos xD

Programa en CCS

#include <16F873A.h>
#device adc=10

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected

#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

unsigned int32 sumatoria;
unsigned int   conta=0, flag =0;
int16 ADC;
float media;

#int_RTCC
void  RTCC_isr(void)
{
  flag=1;
  set_timer0(61); 
}

#int_AD
void  AD_isr(void)
{
   conta++;
   ADC=read_adc(adc_read_only);
   sumatoria=sumatoria+ADC;
   read_adc(ADC_START_ONLY);                   
}

void main()
{
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_DIV_64);

   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   set_timer0(61);
   enable_interrupts(INT_RTCC);
   enable_interrupts(INT_AD);
   enable_interrupts(GLOBAL);
   set_adc_channel(0);     
   delay_us(30);           
   read_adc(ADC_START_ONLY);
 
   while(TRUE){
      if(flag==1){
         media=sumatoria /((float) conta+1);
       //printf("%LU \n\r",ADC);
         printf("s=%LU m=%U md=%01.1f adc=%LU \n\r"sumatoria,conta,media,ADC);
       //delay_ms(200);
         conta  =0;
         sumatoria =0;
         flag   =0;
      }
   }
}

Desconectado korpaztk

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 202
Re: Consulta! Sobre salida ADC con interrupciones
« Respuesta #1 en: 07 de Febrero de 2011, 11:49:37 »
porque declaras la variable media como float?
el programa se ve bastante bien, yo en ves de utilzar el printf para enviar por rs232 utilizaria putc(), o puts(), otra duda q tngo es que hace bien ¿read_adc(ADC_START_ONLY)? yo por opinion declararia todas las variables unsigned16 o 32 si tenes suficiente espacio de memoria, pero ami ya me ha pasado q cuando hacia operaciones con int y con float en la misma operacion nunca tenia buenas resulatados.
espero poder ayudarte en algo. sino estamos en contacto...

ah y recuerda q en el hipertermical cuando lo configuras debe ponerse en ninguno el control de flujo, son pequeñas cositas q a mi me llevo mucho entenderlo jeje
Korpaz.
Técnico Electronico.

El Papel Es Mi Mejor Psicologo