buenas noches amigos por favor les pido podrían ayudarme con este proyecto. se trata de una red de suministro de agua automatizada.
la misma posee :
sensores de flujo (sensor hall, salida cuadrada, 0 y 1, 0v y 5v)
sensor de nivel (sensor ultrasónico hc-sr04)
pic16f877a
comunicación serial inhalambrica entre pic y pic, (transceiver kyl-210)
comunicación serial entre pc (visual basic) y pic
electroválvulas 12vdc
entre otros..
en principio pensaba utilizar 3 pic16f877a;
uno para el control y monitoreo de sensores válvulas... recibir y enviar información inalámbricamente por su puerto serial portc.6 y portc.7..con el transceiver kyl-210.
otro para recibir y enviar información por el puerto serial portc.6 y portc.7 inalámbricamente igual con otro kyl-210... este a su vez activaría alguno pines entre 1 y 0 los cuales se conectaban a un tercer pic.
este tercer pic, según el estado de los pines enviaba o recibia información a o desde la pc igualmente por su puerto serial portc.6 y portc.7 en un programa en visual basic donde se visualizara todo el proceso..
otro para recibir esa información...
este simulando, me funcionaba , si se puede decir bien. los tres pic y visual basic se comunicaba bien..
pero me entere que se puede enviar y recibir datos por cualquier pin del pic. entonce decidi reducir la cantidad de pic a 2.
aquí fue donde comezo todo el problema!
no he podido comunicar los 2 pic inhalambricamente. ya que uno de ellos se comunicara al pc por su puerto serial portc.6 y portc.7, y también se comunicara con el otro pic mediante el transceiver kyl-210 pero a otros pin cualquiera del pic (ya he probado varios y nada). y el otro pic solo se conecta al kly-210 ademas de los sensores y válvulas.
puedo observar por que los kyl-210 tiene luces para tx y rx. y si están enviando y recibiendo (pero al parecer no en el mismo idioma) y lo pruebo conectando el otro kyl-210 a la pc por rs-232 y con un programa que es para probar los mismos, y me envía caracteres muy diferentes a lo que quiero que envie o reciban..
aquí los códigos:
Código:
'pic conectado a pc y a kyl-210
INCLUDE "modedefs.bas"
DEFINE OSC 4
TRISB = %11101111 ' Configuración el Puerto A
TRISD = %00000000 ' Configuración el Puerto B
TRISC = %10101111
SENSOR1 VAR BYTE
SENSOR2 VAR BYTE
SENSOR3 VAR BYTE
SENSOR4 VAR BYTE
TX VAR PORTC.6
RX VAR PORTC.7
B0 VAR BYTE
A VAR BYTE
A = 1
B VAR BYTE
B = 2
C VAR BYTE
C = 3
D VAR BYTE
D = 4
E VAR BYTE
E = 5
F VAR BYTE
F = 6
G VAR BYTE
G = 7
H VAR BYTE
H = 8
PORTD = %11111111 ' Inicializa el puerto "D".
PORTB = %00001000
INICIO:
SERIN RX,T9600,2000,SENSAR,B0 'RECIBE DESDE VISUAL BASIC
if B0 = "1" THEN CALL purga1 'SI ES 1 LLAMA A PURGAR TUBERIA 1
IF B0 = "2" THEN CALL purga2
IF B0 = "3" THEN CALL purga3
IF B0 = "4" THEN CALL purga4
IF B0 = "5" THEN 'SI ES 5,PIDE INFORMACION DE LOS SENSORES,
CALL SENSORUNO 'LLAMA A SENSOR 1
PAUSE 1000
CALL SENSORDOS
PAUSE 1000
CALL SENSORTRES
PAUSE 1000
CALL SENSORCUATRO
PAUSE 1000
ENDIF
GOTO INICIO
END
SENSAR:
CALL SENSORUNO
PAUSE 100
CALL SENSORDOS
PAUSE 100
CALL SENSORTRES
PAUSE 100
CALL SENSORCUATRO
PAUSE 100
GOTO INICIO
purga1:
LOW PORTD.0 'ESTO SOLO SON LEDS PARA VERIFICAR EL FUNCIONAMIENTO
PAUSE 250
SerOut PORTB.4,T9600,["X",A] 'ENVIA EL COMANDO PARA HACER PURGA
PAUSE 500
HIGH PORTD.0 'ESTO SOLO SON LEDS PARA VERIFICAR EL FUNCIONAMIENTO
RETURN
purga2
LOW PORTD.1
PAUSE 250
SEROUT PORTB.4,T9600,["X",B]
PAUSE 500
HIGH PORTD.1
RETURN
purga3:
LOW PORTD.2
PAUSE 250
SEROUT PORTB.4,T9600,["X",C]
PAUSE 500
HIGH PORTD.2
RETURN
purga4:
LOW PORTD.3
PAUSE 250
SEROUT PORTB.4,T9600,["X",D]
PAUSE 500
HIGH PORTD.3
RETURN
SENSORUNO:
low PORTD.4 'ESTO SOLO SON LED PARA VERIFICAR EL FUNCIONAMIENTO
SEROUT PORTB.4,T9600,["X", E] 'ENVIA POR PORTB.4, KYL-210, PIDE INFO DE SENSOR1
PAUSE 100
SERIN PORTB.5,T9600,["X"],SENSOR1 'ESPERA POR EL PORTB.5 CONECTADO AL KYL-210 'RESPUESTA DEL SENSOR 1 EN EL OTRO PIC
PAUSE 100
SEROUT TX,T9600,[SENSOR1] 'ENVIA DATOS POR TX A LA PC, A VISUAL BASIC
PAUSE 100
HIGH PORTD.4 'ESTO SOLO SON LED PARA VERIFICAR EL FUNCIONAMIENTO
RETURN
SENSORDOS:
low PORTD.5
SEROUT PORTB.4,T9600,[6]
PAUSE 100
SERIN PORTB.5,T9600,["X"],SENSOR2
PAUSE 100
SEROUT PORTB.4,T9600,[SENSOR2]
PAUSE 100
HIGH PORTD.5
RETURN
SENSORTRES:
low PORTD.6
SEROUT PORTB.4,T9600,[7]
PAUSE 100
SERIN PORTB.5,T9600,["X"],SENSOR3
PAUSE 100
SEROUT TX,T9600,[SENSOR3]
PAUSE 100
HIGH PORTD.6
RETURN
SENSORCUATRO:
low PORTD.7
SEROUT PORTB.4,T9600,[8]
PAUSE 100
SERIN PORTB.5,T9600,["X"],SENSOR4
PAUSE 100
SEROUT TX,T9600,[SENSOR4]
PAUSE 100
HIGH PORTD.7
RETURN
END
Código:
'Pic conectado a kyl-210, sensores y válvulas
INCLUDE "modedefs.bas"
DEFINE OSC 4
TRISA = %111111
TRISB = %11111111 ' Configuración el Puerto A
TRISD = %00000000 ' Configuración el Puerto B
TRISC = %10111000
ADCON0 = %00000000
ADCON1=7
TX VAR PORTC.6
RX VAR PORTC.7
B0 VAR BYTE
SENSOR1 VAR BYTE
SENSOR2 VAR BYTE
SENSOR3 VAR BYTE
SENSOR4 VAR BYTE
FRECUENCIA1 VAR BYTE
FRECUENCIA2 VAR BYTE
FRECUENCIA3 VAR BYTE
FRECUENCIA4 VAR BYTE
e var byte
f var byte
g var byte
h var byte
PORTA = %000000
PORTD = %00000000 ' Inicializa el puerto "B".
PORTB = %00000000
PORTC = %00000000
INICIO:
IF PORTC.3 = 1 THEN CALL MANUAL 'uso manual
IF PORTC.4 = 1 THEN CALL RecibeRF 'automatico
PAUSE 100
GOTO INICIO
END
MANUAL:
IF PORTB.0 = 1 THEN CALL purga1
IF PORTB.1 = 1 THEN CALL purga2
IF PORTB.2 = 1 THEN CALL purga3
IF PORTB.3 = 1 THEN CALL purga4
PAUSE 100
RETURN
RecibeRF:
PAUSE 250
HIGH PORTD.7 'solo para verificar funcionamiento
SERIN RX,T9600,["X"],B0 'recibe comando guarda en B0 y elije
if B0 = 1 THEN CALL purga1 'para purgar tubería principal
IF B0 = 2 THEN CALL purga2
IF B0 = 3 THEN CALL purga3
IF B0 = 4 THEN CALL purga4
IF B0 = e THEN CALL SENSORUNO 'para sensar en el sensor 1
IF B0 = f THEN CALL SENSORDOS
IF B0 = g THEN CALL SENSORTRES
IF B0 = h THEN CALL SENSORCUATRO
LOW PORTD.7
RETURN
SENSAR:
CALL SENSORUNO
PAUSE 100
CALL SENSORDOS
PAUSE 100
CALL SENSORTRES
PAUSE 100
CALL SENSORCUATRO
PAUSE 100
GOTO INICIO
purga1:
portd.0 = 1 'CIERRA V1
pause 1000
portd.1 = 1 'ABRE V2
pause 1000
portc.0 = 1 'ENCIENDE BOMBA
pause 10000 'TIEMPO QUE DURA BOMBA ENCENDIDA(MODIFICABLE), SI LA PRESION AUMENTA SE APAGA AUTOMATICAMENTE LA BOMBA!
portc.0 = 0 'APAGA BOMBA
pause 1000
portd.1 = 0 'ABRE V1
pause 1000
portd.0 = 0 'CIERRA V2
pause 1000
goto inicio
purga2:
portd.2 = 1 'CIERRA V3
pause 1000
portd.3 = 1 'ABRE V4
pause 1000
portc.0 = 1 'ENCIENDE BOMBA
pause 10000
portc.0 = 0 'APAGA BOMBA
pause 1000
portd.2 = 0 'ABRE V3
pause 1000
portd.3 = 0 'CIERRA V4
pause 1000
goto inicio
purga3:
portd.4 = 1 'CIERRA V5
pause 1000
portd.5 = 1 'ABRE V6
pause 1000
portd.5 = 0
portc.0 = 1 'ENCIENDE BOMBA
pause 10000
portc.0 = 0 'APAGA BOMBA
pause 1000
portd.4 = 0 'ABRE V5
pause 1000
portc.1 = 1 'CIERRA V6
pause 1000
portc.1 = 0
goto inicio
purga4:
portd.6 = 1 'CIERRA V7
pause 1000
portd.7 = 1 'ABRE V8
pause 1000
portd.7 = 0
portc.1 = 1 'ENCIENDE BOMBA
pause 10000
portc.1 = 0 'APAGA BOMBA
pause 1000
portd.6 = 0 'ABRE V7
pause 1000
portc.2 = 1 'CIERRA V8
pause 1000
portc.2 = 0
goto inicio
SENSORUNO:
count PORTB.4,2000,SENSOR1 ' cuenta la salida del sensor 1 y guarda
FRECUENCIA1 = SENSOR1/2
PAUSE 100
SEROUT PORTC.6,T9600,["X",FRECUENCIA1] 'envía respuesta al otro pic por kyl-210
RETURN
SENSORDOS:
count PORTB.5,2000,SENSOR2
FRECUENCIA2 = SENSOR2/2
PAUSE 100
SEROUT PORTC.6,T9600,["X",FRECUENCIA2]
RETURN
SENSORTRES:
count PORTB.6,2000,SENSOR3
FRECUENCIA3 = SENSOR3/2
PAUSE 100
SEROUT PORTC.6,T9600,["X",FRECUENCIA3]
RETURN
SENSORCUATRO:
count PORTB.7,2000,SENSOR4
FRECUENCIA4 = SENSOR4/2
PAUSE 100
SEROUT PORTC.6,T9600,["X",FRECUENCIA4]
RETURN
end
por favor me podrian decir que estoy haciendo mal???
el serin y serout desde otro pin del pic funciona igual?
o cuales tengo que utilizar?? serin2, serout2, hserin, hserout, debug, debugin??? y si me pueden decir como seria???
y otra consulta como desactivo el conversor a/d del pic16f877a??? necesito esos pines como entradas y salidas, pa los sensores de nivel (hc-sr04), que aun no incluyo en programación.
por favor ayúdenme no ignoren este mensaje ni lo borren.. por favor... solo necesito una ayudadita de ustedes los expertos..