TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: psnven en 24 de Mayo de 2010, 02:46:39
-
Amigos he diseñado un circuito en base al pic 16f877, con un lcd 16x2, mas un teclado 4x3.
La idea de mi circuito es que a traves de conjunto de menus que son manejados a traves del teclado y proyectados en lcd, se active un temporizador que a su vez me active 2 reles pero necesito que los rele se manejen por puertos separados.
Cuando intento hacer esto no puedo lograr que enciendan los dos siempre me enciende uno solo, les dejo una parte del codigo, trabajo con basic pues soy un poco novato en la materia.
En conclusion necesito manejar simultaneamente los dos reles pero por puertos separados ya que hay rutinas que ameritan solo la activacion de uno de ellos, tambien como me sucede que hay rutinas que necesito activar los dos al mismo tiempo y eso es lo que no quiere andar :5]
tempo5:
'SECUENCIA PARA ANULAR EL CONTEO
Gosub get_button
If boton = 11 Then
PORTA.0 = 0 'desactivamos el rele de la bomba de fluidos
Lcdcmdout LcdLine1Pos(1)
Lcdout " CICLO DETENIDO "
Lcdcmdout LcdLine2Pos(1)
Lcdout " POR EL OPERADOR "
WaitMs 3000
PORTA.1 = 0 'desactivamos el rele del generador
Goto menu1
Endif
'CONTEO COMO TAL
PORTA.0 = 1 'activamos el rele de la bomba de fluidos <<< ESTA PARTE SOLO ME ACTIVA UNO DE LOS DOS RELES
PORTA.1 = 1 'activamos el rele del generador
WaitMs 1000
sec = sec + 1
Lcdcmdout LcdLine1Pos(1)
Lcdout " STOP - PULSE # "
Lcdcmdout LcdLine2Pos(1)
Lcdout "VAN: "
Lcdcmdout LcdLine2Pos(09)
Lcdout "0"
Lcdcmdout LcdLine2Pos(10)
Lcdout #min
Lcdcmdout LcdLine2Pos(11)
Lcdout ":"
If sec < 10 Then
Lcdcmdout LcdLine2Pos(12)
Lcdout "0"
Lcdcmdout LcdLine2Pos(13)
Lcdout #sec
Endif
If sec >= 10 Then
Lcdcmdout LcdLine2Pos(12)
Lcdout #sec
Endif
If sec = 59 Then
WaitMs 1000
min = min + 1
sec = 0
Lcdcmdout LcdLine2Pos(12)
Lcdout "00"
Lcdcmdout LcdLine2Pos(10)
Lcdout #min
Endif
If min = 5 And sec = 0 Then
PORTA.0 = 0 'desactivamos rele de la bomba de fluidos
PORTA.1 = 0 'desativamos rele del generador
Lcdcmdout LcdLine2Pos(1)
Lcdout " CICLO COMPLETO "
WaitMs 5000
Goto menu1
Endif
Goto tempo5
'*****************
Adjunto como estoy conectando los componentes al PIC, si es necesaria mas info como para que alguien me pueda ayudar me dicen por favor muchas gracias de antemano.
-
aquí lo tienes en ccs http://slalen.ifastnet.com/index.php/temporizador.html
-
Muchas gracias Stalen pero aun asi no soluciono mi problema, el codigo lo he realizado todo, el pic reacciona a los pulsos del teclado, me manejo a traves de los menus todo perfecto, mi unico detalle es cuando mando una instruccion que es la siguiente cuando el temporizador se activa pues este no me activa los 2 reles solo uno de ellos quiero saber el porque :S !!!!
-
pon unos pullup en las salidas y reduce la resistencia a unos 470Ohm, a ver que hacen.
-
Pues he colocado los pull ups 10k en las salidas que no estoy utilizando, y bajando los valores de las resistencias que van hacia los transistores, y de igual manera solo se activa un rele, nunca los dos al mismo tiempo. !!!! Que es lo que necesito
-
y si activas cada uno solo.
yo te decía los pullup en las lìneas que van a los transistores
-
asi si me funciona pero te explico es una maquina que tiene varias funciones
ejemplo
funcion1: Activa por tiempo ya sea 5 min, 10min, 15min AMBOS RELES
funcion2: Activa solamente el RELE 1
funcion3: Activa solamente el RELE 2
misteriosamente no se q este pasando pero cuando activo 1 por 1 individual si se activan
pero cuando activo ambos para ejecutar la funcion1 no se activan sino uno solo de ellos casi siempre el que esta en el PORTA.1
-
qué corriente estás exigiendo al pic a la vez??
-
Solo la necesaria para mover ambos transistores, porque el resto es el teclado y el lcd que se alimenta por VCC no le roba energia al PIC.
Descarto el echo de la corriente porque si reemplazo la parte de los RELES por unos simples leds, sigue mi problema. Solo me enciende un led a la vez, mas no ambos cuando necesito que se enciendan ambos.
Estoy pensando que sera error de codigo.
'************ DEFINICION DE PARAMETROS DE LCD
Define LCD_DREG = PORTB
Define LCD_DBIT = 0
Define LCD_RSREG = PORTC
Define LCD_RSBIT = 0
Define LCD_EREG = PORTC
Define LCD_EBIT = 1
Define LCD_BITS = 8
Define LCD_LINES = 2
Define LCD_CHARS = 16
Define LCD_COMMANDUS = 2000
Define LCD_DATAUS = 60
Define LCD_INITMS = 100
'************ DECLARACION DE VARIABLES
Dim l1 As Byte
Dim l2 As Byte
Dim l3 As Byte
Dim l4 As Byte
Dim flag As Byte
Dim contra As Byte
Dim count1 As Byte
Dim i As Byte
Dim pass1 As Byte
Dim pass2 As Byte
Dim relepwm As Bit
Dim relebomba As Bit
Dim tecla As Byte
Dim boton As Byte
Dim page As Byte
Dim tiempo5 As Byte
Dim tiempo10 As Byte
Dim tiempo15 As Byte
Dim sec As Word
Dim min As Word
tecla = boton
boton = 0
'************ ARRANQUE DE LCD
Lcdinit
'************
'************ DEMO DE LCD
inicio:
Lcdcmdout LcdLine1Pos(1)
Lcdout "INJECTOR CLEANER"
Lcdcmdout LcdLine2Pos(1)
Lcdout "CARGANDO SISTEMA"
WaitMs 1000
Lcdcmdout LcdClear
Lcdcmdout LcdLine1Pos(1)
Lcdout "SISTEMA CARGADO"
WaitMs 1000
Lcdcmdout LcdClear
'************** RUTINA DE TECLADO
teclado:
'Pines que conforman las filas
Symbol fila1 = RD1
Symbol fila2 = RD2
Symbol fila3 = RD3
Symbol fila4 = RD4
'Pines que conforman las columnas
Symbol col1 = RD5
Symbol col2 = RD6
Symbol col3 = RD7
'Definición de puertos <<<< ESTA PARTE CREO Q TENGO EL ERROR NO TENGO MUY CLARA LA DEFINICION DE PUERTOS
'TENDRIA QUE ESPECIFICAR EL TRISA ????
TRISD = %00011111
-
tendrías que poner trisa=0x00; si todo son salidas
antes tienes que meterte en el banco 1 y después salir de él
-
Hermano ya coloque la definicion del puerto y sigo con lo mismo que me sugieres ??? sera que los manejo por otro puerto ??? no se de verdad me he esforzado muchisimo y no comprendo que sucede....
-
en vez de activar las líneas por separado, activalas a la vez PORTA=0x03;
-
Hermano muchisimas gracias de verdad muy agradecido, como te digo soy novato y me falta muchisimo por aprender aun en ELECTRONICA DIGITAL, en lo analogico me manejo muy bien pero me falta. Muchas gracias de verdad problema resuelto !!!!.
Al recibir la instruccion de activar ambos puertos a la vez funciono de maravilla muchisimas gracias.
-
es que hay veces que se salta una por problema de latch, en los 18f lo solucionan creando un registro específico
me alero de que te funcione :-/ :mrgreen: :-/
-
Muchas gracias y como digo seguire aprendiendo lo fascinante que es la electronica, jajajaja !!!! De verdad he avanzado muchisimo y ahi vamos poco a poco. :D :-/