PWM mediante interrupción...

Hola tengo un código realizado en lenguaje Basic... para Micros AVR
Mi problema es que no entiendo muy bien lo que hace , y como se me hace difícil grabar un atmega8, que es el micro para el que esta hecho el programa, quisiera poder pasarlo a lenguaje de pic, para poder programar y probar más fácilmente.
Aunque en pic tengo muy poca experiencia en C, y creo que es factible cambiarlo a este lenguaje.
Espero sus aportaciones para entender y traducir este programa :cry:


$regfile = "m8def.dat"
$crystal = 1000000


Config Int0 = Rising
On Int0 Int0_isr

Config Timer0 = Timer , Prescale = 64
On Ovf0 Tim0_isr
Stop Timer0

Ddrb = 15 : Portb = 240
Ddrd.2 = 0 : Portd.2 = 1

Triac Alias Portb.0

P1 Alias Pinb.4
P2 Alias Pinb.5
P3 Alias Pinb.6


Dim Val_timer0 As Byte

Val_timer0 = 250

Reset Triac

Do
Bitwait P1 , Reset
Bitwait P1 , Set
Stop Timer0
Enable Int0
Enable Timer0
Enable Interrupts
Do
If P2 = 0 Then
Waitms 200
Val_timer0 = Val_timer0 + 5
If Val_timer0 > 250 Then
Val_timer0 = 250
End If
End If
If P3 = 0 Then
Waitms 200
Val_timer0 = Val_timer0 - 5
If Val_timer0 < 125 Then
Val_timer0 = 125
End If
End If
Loop Until P1 = 0
Disable Int0
Disable Timer0
Disable Interrupts
Bitwait P1 , Set
Loop

End

Int0_isr:
Reset Triac

Timer0 = Val_timer0
Start Timer0
Return

Tim0_isr:
Set Triac

Stop Timer0

Return
 
jeje yo sé que no es el mismo... el problema que tengo es que quiero saber que hace el programa para escribir el código para un PIC

Bueno sigo respondiendome a mi misma... Espero que haya alguien que corrobore mis avances, jeje...
La utilidad del programa es usar el Microcontrolador como circuito de disparo de unos scr's que van a ser usados en un puente semicontrolado. Lo que aparentemente hace este programita, es actuar mediante interrupción, la cual es generada por un circuito detector de cruce por cero, el cual envía pulsos positivos a cada cruce por cero de la señal altera. Al recibir la interrupción, el programa lo que hace es dejar pasar una onda cuadrada generada con el timer del micro... eso según mis especulaciones.
pues bien el programa estoy tratando de desarrollarlo en pic basic, lo que me parece más fácil, sé manejar interrupciones pero no sé como manejar lo del timer0, que es el q genera esta "onda cuadrada" que son los pulsos de activación de los tiristores.
aún tengo muchas dudas, espero alguien me pueda ayudar.
los pines b4, b5 y b6 sirven solamente para cambiar al ancho del pulso de la onda cuadrada.
traté de generar esta onda cuadrada por el timer mediante el pwm, pero al dejar pasar esta señal, es como si la señal "se moviera" no es exacta y no me da buena espina.
he simulado el circuito con el .hex del programa del atmega8 y allí la señal es nítida.
adjunto también el circuito. por si alguien se anima a ayudarme :).
 

Adjuntos

  • Nos.rar
    25.1 KB · Visitas: 93
Última edición:
Que tal tu programa se utiliza para atenuar la intensidad de una línea de carga de CA (lámpara). Desarrollado para 60 Hz y basado en tres pulsadores para control (PB4) uno para incrementar (PB5) y el ultimo para decrementar (PB6). y si se puede pasar el programa de AVR a PIC solamente necesitas el pic que se utilizara en reemplazo del ATMEGA 8 , configurar los registros y trabajar con el modulo CCP y el TIMMER.
 
Hola!!!
Basándome en la investigación y las respuestas, he estado desarrollando el programa para PIC.
Armé un circuito detector de cruce por cero con operacionales y un transformador, ya que el puente me dio un error un poco extraño... Sólo rectificaba media onda. Me explicaron que al aplicar el osciloscopio para ver la salida se introduce una tierra parásita. De todos modos ahora funciona bien.
Hice el programa para un PIC 16F877A, la verdad; no entiendo muy bien como usar la interrupción del timer; así que lo que hice es enviar un pulso de ancho variable a cada interrupción del detector de cruce por cero. Sinceramente estoy muy contenta con el funcionamiento de mi circuito. Hace justo lo que la simulación y para mí eso es bastante.
Bueno, como la idea de esto era tener una aplicación práctica, al final del circuito estoy pensando en aplicar una carga de un Motor DC, así que según mis especulaciones debería usar un diodo volante verdad??
Antes de eso se necesita el filtro, quiero hacer un simple filtro por condensador, pero ando un poco floja de cálculos... Espero me puedan ayudar un poco.

Bueno me disculpo en primer lugar porque sé que el tema ya no debe pertenecer al hilo. No sé si pueda moverlo.
 
Atrás
Arriba