Electronanado, así es....yo tenia a misma idea, y es la que mostrare a continuación. Lo hice en MKB, ocupe la interrupcion del puerto B para ver cuando cambian las fases, y saqué los 4 bits menos significativos por los 4 pines menos significativos del puerto B. Es solo a modo de ejemplo, era solo para ver que la imterrupcion funciona. Y si, funciona a la perfeccion, la probe con varios factores d epotencia, y los 4 bits indicav lo que deben. Ocupe el divisor del timer en 1:32.
Este programita mide el tiempo de desfase. Lo que resta es hacer que haga una relacion entre tiempo y y ángulo, y despues aplicar el coseno para sacar el factor de potencia, y luego mandarlo a un dislay. Pero a mi modo de ver esta parte del programa es la mas importante. aki va:
program fasbas
dim tiempo as byte
dim medir as byte
dim atento as byte
sub procedure interrupt
if portb.6=0 then
if portb.7=0 then
atento=1
goto fin
end if
end if
if atento=1 then
TMR0=0
atento=0
medir=1
goto fin
end if
if medir=1 then
tiempo=TMR0
medir=0
end if
fin:
intcon=%00001000
end sub
main:
tiempo=0
medir=0
atento=0
option_reg=%00000100
trisb=%11110000
portb=0
intcon=%10001000
inicio:
portb.3=tiempo.3
portb.2=tiempo.2
portb.1=tiempo.1
portb.0=tiempo.0
delay_ms(10)
goto inicio
end.
es para un pic 16f628. Una idea para mejrarlo es usar el timer 1, que tiene mayor resolución. Hice programitas con oto pic, donde salía una señal con periodo de 20 ms (ya que aca la F=50 Hz) en una patita, y en otra patita, una señal igual a esta, pero desfasada. Hice desfases de entre 0 a 5 ms (0 y 90º) y todo bien. El unico problema es que para desfase de 0ms (osea, estan en fase) este programita no lo puede medir, ya que se peroduce una interupcion por un cambio en uno d elos pines, y en la otra se produce casi simultanemante el cambio, mientras aun se está en la interrupcion d ela primera, y la segunda interrupcion no es atendida. Creo que solucionaré activando una interrupcion por TMR, si el timer se desborda sin haber sido medido, entonces es pq el desfase es cero. Espero te sirva, cuando mejore el codigo lo publico deneuvo. Intenta mejorarlo tu tambein y me avisas.....salduos