Autor Tema: duda sobre temporizaciones con transmisión usb para adquirir a una frecuencia  (Leído 1061 veces)

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

Desconectado don_petaka

  • PIC10
  • *
  • Mensajes: 4
Hola gente del foro estoy iniciandome en lo de los pics y estoy tratando de hacer una especie de adquisidora que funcione a 200 Hz, para poder hacerlo a una frecuencia fija me recomendaron que utilice interrupciones, pero hay dos cosas raras entre una inturrucion y la siguiente me demora mas de la cuenta y por si fuera poco la interrupcion me dura el tiempo total que deberia durar todo el proceso.

paso el codigo como para que lo miren y digan donde le pifeo

http://www.unpocodelectronica.netau.net/mis-primeros-pasos-con-el-18f4550-parte4

Código: [Seleccionar]
#include <18f2550.h>

#device adc=10
#use delay(clock=48000000)
#fuses hspll,nowdt,noprotect,nolvp,nodebug,usbdiv,PLL5,CPUDIV1,VREGEN
#include <usb_cdc.h>
//#use standard_io(c)    no se si debo ponerlo o no


void mostrar_estado_usb(int1 estado_usb);
float p,f,co;
int16 pd,fd,cod;



#int_timer0
void timer0_isr() {

output_high(PIN_c0);// para controlar los tiempos con el proteus

set_adc_channel(0);
delay_us(5);
pd=read_adc();
set_adc_channel(1);
delay_us(5);
fd=read_adc();
set_adc_channel(2);
delay_us(5);
cod=read_adc();

p=(5.0*pd/1024.0);
f=(5.0*fd/1024.0)+5.0;
co=(5.0*cod/1024.0)+10.0;

if (usb_enumerated()){
usb_task();
printf( usb_cdc_putc,"%g\n\r",p );
printf( usb_cdc_putc,"%g\n\r",f );
printf( usb_cdc_putc,"%g\n\r",co );

output_low(PIN_c0); //para medir el tiempo total de la interrupcion y el intervalo entre interrupciones

set_timer0(0xff);
}
}

//-------------------------------------------------------

void main(){
setup_adc_ports (an0_to_an2_analog);
setup_adc(ADC_CLOCK_DIV_64);//|| ADC_ACQT_2TAD );
#asm
movlw 0b10001110 ;          //justificacion_derecha,2Tad,Fosc/64________lo saque de la pagina citada arriba es para establecer los tiempos minimos de conv. cad
iorwf 0xFC0,1 ;                       // direccion de ADCON2
#endasm
delay_us(3);

usb_cdc_init();
usb_init();

setup_timer_0(rtcc_internal|rtcc_div_16);                           //inicialmente 128  \_
set_timer0(0xff);                                                              // inicialmente 0x16  /  0.0025segundos       
while (!usb_cdc_connected()) {}                                         //-----prueba para ver si en esto falla la conexion
enable_interrupts(int_timer0);
enable_interrupts(global);
while(true){};
}


 

anything