Detector de cruce por cero con pic 16F877A para X10

#1
Que tal amigos, reciban un cordial saludo, necesito hacer un detector de cruce por cero para un sistema X10, es para mi tesis, no tengo mucha experiencia programando pics, he leido que se puede lograr con una resistencia de 5M conectada al RB0, y con una interrupcion, pero no se como hacer esto, alguno de ustedes puede ayudarme?, muchas gracias, saludos!!!
 
#2
Hola!
Hay muchas formas de hacerlo, la que decís vos es muy buena.
Con la resistencia, mas los diodos que están dentro del PIC, haces que la onda senoidal se transforme en una cuadrada. Ahí con el PIC y la interrupción, detectas cada flanco de subida y de bajada los cuales se corresponden con el momento del cruce por cero.

Si no me equivoco, cada vez que salte la interrupción, vas a tener que cambiar el bit que hace que la interrupción se ejecute en el flanco de subida por el de bajada y así sucesivamente.

Saludos!
 
#3
Hola, primero te recomiendo que aprendas "C" para programar los pics, es lo mejor. Yo me bajé el libro de Kernighan y Ritchie, "El lenguaje de programación C" y después me bajé un manual en pdf del programa que usé que es el pic C compiler. Buscá ejemplos de programas en la web para ir viendo en conjunto como se arman.
Yo hice un proyecto similar para la facu, y el cruce por cero lo podés hacer en varios de los pines del puerto B con una resistencia de varios mega directo a la red. Mi programa censaba en todo momento el estado del pin y así sabía cuando se producía el cruce por cero. Cualquier cosa chiflá y veo en que puedo ayudarte. Saludos!
 
#5
Que tal amigos, reciban un cordial saludo, necesito hacer un detector de cruce por cero para un sistema X10, es para mi tesis, no tengo mucha experiencia programando pics, he leido que se puede lograr con una resistencia de 5M conectada al RB0, y con una interrupcion, pero no se como hacer esto, alguno de ustedes puede ayudarme?, muchas gracias, saludos!!!
Esta es una parte de mi soft que realiza lo que necesitás, edité algunas partes ya que es un soft comercial con copyright.
Espero te sirva la subrutina de atención de la interrupción, esta en Mikrobasic pro y es para un PIC12F675 o 629
slds...


""""""
sub procedure interrupt
if (intcon.intf)=1 then
option_reg.INTEDG = not (option_reg.intedg)
xxxxx=xxxxxx
intcon.t0ie=1
intcon.intf=0
end if
if (intcon.t0if)=1 then
if xxxxxx=1 then
xxxxx=1
delay_us (xxxxx)
xxxxx=0
intcon.t0if=0
else
xxxxx=0
intcon.t0if=0
end if
end if
end sub

""""""
 
#6
Hice este codigo, pero no se si está bien, que me dicen de el?
#include "16F877A.H"
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

void ISR()
{
setup_timer_2(T2_DIV_BY_1, 41, 1);
}
void main()
{
int16 duty_PWM1;
set_tris_b(0x01);
duty_PWM1 = 0x0053;///PWM AL 50%
setup_ccp1 (CCP_PWM);
set_pwm1_duty(duty_PWM1);
ext_int_edge(H_TO_L); //
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
while (true)
{

}
}
 
#9
talvez, pero te equivocaste en la señal de salida, si la rectificas con los diodos y luego la pasas al opto, vas a tener una señal de continua, y que cae hasta un cierto valor, que no es necesariamente cero, depende de la resistencia que pongas como pull up y de las resistencia del fototransistor, o eso creo. saludos.
 
Arriba