Autor Tema: ayuda comunicacion entre pic-pic-pc  (Leído 3059 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado kano2468

  • PIC10
  • *
  • Mensajes: 1
ayuda comunicacion entre pic-pic-pc
« en: 07 de Junio de 2013, 18:22:15 »
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: [Seleccionar]
'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

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

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: ayuda comunicacion entre pic-pic-pc
« Respuesta #1 en: 08 de Junio de 2013, 09:20:15 »
Te recomiendo que eches un vistazo rápido a estos enlaces:

http://www.todopic.com.ar/foros/index.php?topic=14917.0
  Índice:
    COMUNICACION CON EL PC
    COMUNICACION MEDIANTE RS485
    TRABAJANDO CON COMUNICACION POR RF, MODULOS DE TX Y RX DE AUREL Y LAIPAC

Pickey:
  http://www.pickey.es/control-de-reles-a-distancia-por-radiofrecuencia--rf-.html
  http://www.pickey.es/uso-practico-del-pic12f675--vi-.html
Saludos desde Granada, España.