# Ayuda con un programa para el pic 16f628A



## esteban_santiago83 (Abr 14, 2008)

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:


```
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.


----------



## eserock (Abr 15, 2008)

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.


----------



## esteban_santiago83 (Abr 16, 2008)

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.


----------



## eserock (Abr 16, 2008)

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


----------



## esteban_santiago83 (Abr 16, 2008)

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


----------



## eserock (Abr 17, 2008)

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.


----------



## Electrowolf (Abr 17, 2008)

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


----------



## yack (Mar 20, 2010)

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


----------



## lanpu (May 13, 2010)

Hola, yo tengo un problema con esa instrucción "SEROUT", sirve para realizar comunicación RS232?¿?¿

Gracias.


----------



## FRYCK (May 13, 2010)

lanpu dijo:


> Hola, yo tengo un problema con esa instrucción "SEROUT", sirve para realizar comunicación RS232?¿?¿
> 
> Gracias.



Hola *lanpu * si ese  comando es para enviar datos por rs232 en  picbasic 
SEROUT Asynchronous serial output .
te dejo  un link para que te sirva de guia  http://www.melabs.com/resources/pbcmanual/5/5-32.htm
saludos


----------



## lanpu (May 13, 2010)

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.


----------

