Hola espero que me puedan ayudar, lo que estoy tratando de hacer es un pulso que dispare a un SCR, el pulso se tiene que mover de 0 a 8.33ms y necesito hacerlo con el ADC del micro y la reslocion es de 10 ( 1024 valores ), la forma de sincronizarlo con la linea es con cruce por cero y con una interrupcion externa, el pulso debe tener una duracion de 100useg, creo que lo forma de tener 100useg es con el timer, una duda que tengo es como puedo hacer que los 1024 valores del ADC puedan corresponder a 8.33ms y otra es que si estoy utilizando bien la interrupcion externa y la del timer, en foro leei que se tendria que dividir 8.33ms / 1024 que serian 8,1347useg pero eso no lo he entendido, dejo mi codigo para que me puedan ayudar a corregir. GRACIAS.
#include <16F886.H>
#device ADC = 10
#fuses HS, NOWDT, NOLVP, PUT, MCLR
#use delay( clock = 20M )
int16 CAD;
int CamFlag, Cont = 0;
#INT_EXT
void ext0_isr( void )
{
if( CamFlag == 0 )
{
enable_interrupts( INT_TIMER0 );
ext_int_edge( 0, H_TO_L );
CamFlag = 1;
}
else if( CamFlag == 1 )
{
output_low( PIN_B1 );
output_low( PIN_B2 );
ext_int_edge( 0, L_TO_H );
CamFlag = 0;
}
}
#INT_TIMER0
void TIMER0_isr( void )
{
Cont++;
if( Cont < CAD )
{
output_low( PIN_B1 );
}
else if( Cont == CAD )
{
output_high( PIN_B1 );
Cont = 0;
}
disable_interrupts( INT_TIMER0 );
}
void main( void )
{
//lcd_init();
setup_adc_ports( SAN0 );
setup_adc( ADC_CLOCK_INTERNAL );
set_adc_channel( 0 );
setup_timer_0( RTCC_INTERNAL | RTCC_DIV_128 );
set_timer0( 60 );
CamFlag = 0;
ext_int_edge( 0, L_TO_H );
disable_interrupts( INT_TIMER0 );
disable_interrupts( INT_TIMER1 );
enable_interrupts( INT_EXT );
enable_interrupts( GLOBAL );
while( 1 )
{
CAD = read_adc();
}
}