Ayuda con un programa para el pic 16f628A

Hola como están, estoy trabajando en mi tesis y la verdad tengo algunas problemas con esto de los pic. He trabajado antes con microas atmel pero no pics. Estoy haciendo un programa en C para el cnotrol de una. La verdad el programa es sencillo pero me falta la parte de la intensidad de corriente con pulsos PWM y es ahí donde requiero ayuda. el código de programación es el siguiente:

PHP:
INCLUDE "modedefs.bas"

serial VAR BYTE
var1 VAR BIT
var2 VAR BIT
var3 VAR BIT
var1=0
var2=0
var3=0
X=0


luz1 VAR portb.5
luz2 VAR portb.
rele VAR portb.7
temp VAR portb.

INICIO:
SERIN portb.0,N9600,serial
IF serial="L" THEN estado
IF serial="O" THEN fijo2
IF serial="g" THEN inten1
IF serial="h" THEN inten2
IF serial="i" THEN inten3
IF serial="j" THEN inten4
IF serial="k" THEN inten5
IF serial="l" THEN menos
IF serial="R" THEN rele1
IF serial="C" THEN rele2
IF serial="T" THEN tempe
IF serial="S" THEN salida
GOTO INICIO

estado:
IF var1=0 THEN
SEROUT portb.1,N9600,["b"]
IF var1=1 THEN
SEROUT portb.1,N9600,["c"]
IF var3=0 THEN
;pulso PWM 0%
SEROUT portb.1,N9600,["n"]
IF var3=1 THEN
;pulso PWM 25%
SEROUT portb.1,N9600,["o"]
IF var3=2 THEN
;pulso PWM 50%
SEROUT portb.1,N9600,["p"]
IF var3=3 THEN
;pulso PWM 75%
SEROUT portb.1,N9600,["q"]
IF var3=4 THEN
;pulso PWM 100%
SEROUT portb.1,N9600,["r"]
GOTO INICIO

fijo2:
IF var1=0 THEN
HIGH portb.5
var1=1
SEROUT portb.1,N9600,["c"]
GOTO INICIO
IF var1=1 THEN
LOW portb.5
var1=0
SEROUT portb.1,N9600,["b"]
GOTO INICIO

rele1:
IF var2=0 THEN
SEROUT portb.1,N9600,["d"]
IF var2=1 THEN
SEROUT portb.1,N9600,["e"]
GOTO INICIO

rele2:
IF var2=0 THEN
HIGH portb.7
var2=1
SEROUT portb.1,N9600,["e"]
GOTO INICIO
IF var2=1 THEN
LOW portb.7
var2=0
SEROUT portb.1,N9600,["d"]
GOTO INICIO

inten1:
var3=0
;pulso PWM 0%
SEROUT portb.1,N9600,["n"]
GOTO INICIO

inten2:
var3=1
;pulso PWM 25%
SEROUT portb.1,N9600,["o"]
GOTO INICIO

inten3:
var3=2
;pulso PWM 50%
SEROUT portb.1,N9600,["p"]
GOTO INICIO

inten4:
var3=3
;pulso PWM 75%
SEROUT portb.1,N9600,["q"]
GOTO INICIO

inten5:
var3=4
;pulso PWM 100%
SEROUT portb.1,N9600,["r"]
GOTO INICIO

menos:
IF var3=4 THEN
;pulso PWM 75%
SEROUT portb.1,N9600,["q"]
var3=3
IF var3=3 THEN
;pulso PWM 50%
SEROUT portb.1,N9600,["p"]
var3=2
IF var3=2 THEN
;pulso PWM 25%
SEROUT portb.1,N9600,["o"]
var3=1
IF var3=1 THEN
;pulso PWM 0%
SEROUT portb.1,N9600,["n"]
var3=0
IF var3=0 THEN
SEROUT portb.1,N9600,["n"]
GOTO INICIO

tempe:
X=portb.
SEROUT portb.1,N9600["f"]
SEROUT portb.1,N9600["X"]
;hay que poner una subrutina que genere un tiempo de 1 miliseg para que vuelva a tomar el dato, lo actualice y envíe
GOTO INICIO

tambien necesito ayuda con lo del retardo de un milisegundo y debo hacer dos pregutnas: debo incluir algun comando o línea para habilitar el oscilador de 4MHz interno?, y el archivo .bas incluido en el inicio, de donde lo consigo o me lo pueden facilitar?, trabajo con mplab8 para generar el archivo .hex
Gracias y perdonen las molestias.
 
Hola antes que nada ese programa que muestras esta en picbasic no en C, esmas facil si primero señalas lo que tiene que hacer tu programa y despues se revisa la programacion.
 
El programa tiene que controlar una luz fija prendiendo y apagandola desde una aplicacion de Visual Basic que ya la tengo. Luego desde la misma aplicación tiene que regular la intensidad de una luz y tambien recoger la temperatura de la habitación con el LM35 que esta conectado al pic. Intente hacerlo en assembler pero no me cuadran en cambio como poner 1 o 0 en los puertos de las salidas.El pic se comunica con la aplicación del computador a traves de letras.
 
creo que lo mas complicado en tu trabajo es el controlar la intensidad de la lampara aqui en el foro buscando encontraras vbarios circuitos de dimmer tanto para corriente directa como alterna creo que seria la forma mas simple ya que se usa un triac y un optoaislador para proteger el pic con lo que dices de tu circuito estoy analizando el funcionamiento de tu programa y despues te doy mi opinion
 
Gracias por tu ayuda voy a ponerme a buscar tus opciones. La verdad necesaria que me ayuden en como mandar las señales al pic para controlar la intensidad de luz, pues tengo entendido que los dimmer sin analogos. Yo espero tu pronta ayuda y gracias nuevamente
 
bueno espero explicarme
los dimmer en realidad controlan el disparo de un triac, conmutando en tiempo el disparo de este mismo, lo complicado podriamos decir es sincronizar este disparo con el cruce por sero leste pequeño pulso lo puede enviar el pic, pero te repito debe ser en el momento que la corriente alterna sea cero.
 
Hola mi estimado Esteban

bien, si en donde necesitas ayuda es en la parte de programacion, podria recomendarte un programa muy bueno que encontre ahora poco, "flowcode" que es un programa que genera codigo para pics en base a diagramas de flujo.....quiza te sirva puesto que no necesitarias manejar directamente las intrucciones sino na mas los bloques del diagrama.

otro que podrias manejar es el "niple" que tiene funcion similar.

espero te ayude

Saludos
 
hola como stan saben para manejar la temperatura del LM35 la coneccin con visual basic y el PWM desde el micro podria recomendarte que utilises el 16f876 o 16f877 ya que estos tienen esa opcion de comunicar por paralelo serial y USART y lenguaje que yo te recomendaria para realiar este programa es CCS Compiler es muy practico y si tienes conocimientos para programas en visual basic este te resultara muy familiar porque son casi lo mismo si tienes dudas en cuanto a esa programacion describe bien tu problema y yo te podre ayudar incluso con el circuito electronico
 
Gracias FRYCK, tal vez puedas ayudarme un poco, como se realiza la conversión analoga/digital en un pic?¿, te agradecería mucho tu ayuda, más aún si es en C o picbasic.

me gustaria usar algun tipo de sensor analogo y controlar salidas de acuerdo a las mediciones de éste, pero no necesariamente mediante un LCD, los ejemplos que he encontrado toman los valores y los presentan en el display, yo quisiera tomar los valores y tomar desiciones para ejecutar las salidas.

Gracias.
 
Atrás
Arriba