Autor Tema: eRS232, pequeño idea que tenia en mente  (Leído 3624 veces)

0 Usuarios y 4 Visitantes están viendo este tema.

Desconectado fantaxmax

  • PIC16
  • ***
  • Mensajes: 107
    • Libertycraft - Minecraft
eRS232, pequeño idea que tenia en mente
« en: 18 de Septiembre de 2012, 21:14:35 »
Hola Foreros de TodoPic!,

Tiempo Atrás, estaba queriendo dormir, pero no podía, entonces me puse a pensar:

"en los pics con USART puedo transmitir un mensaje a varios Pics desde un pic, pero no puedo transmitir desde varios pics a un pic", al día siguiente, me dispuse a probar mi pensamiento, y efectivamente no se puede, primero porque el pic que recibe, no entendería el mensaje, ya que, o se envían todos juntos creando un caos total, o se crea un corto-circuito, debido a que TX debe mantenerse en estado HIGH(alto, 5v) y al transmitir oscila entre 0v y 5v, si tenemos varios TX juntos, se creara un corto al momento de enviar un cero a la linea, entonces, me dispuse a crear un librería que evitara esto, hubo varios intentos en los que desistí, unos tres mas o menos, y dejaba "tirado" el proyecto varios dias o semanas, pero ya la termine, y me dispongo a mostrárselas, puede que tenga algún error, pero como todo lo nuevo, nada es perfecto, ademas, soy principiante aun en esto de programación de micro controladores  :mrgreen: si alguno cree que algo puede mejorar o se puede reducir código innecesario, lo invito a que la modifique.

bueno aquí están ambas librerías, maestro y esclavo

Maestro:
Código: C
  1. //                Enhanced RS232
  2. //             A simple Multi-slave
  3. //             sistem with rs232 to
  4. //             use between PIC to
  5. //             PIC or PIC to PC.
  6.  
  7. //                MASTER VERSIÓN
  8.  
  9. /*****************************************************************************
  10. *                                                                            *
  11. *            THIS LIBRARY WAS CREATED BY ISMAEL CONCHA V. (FANTAXMAX)        *
  12. *            AND YOU ARE ALLOWED TO SHARE &/OR MODIFY                        *
  13. *            AS YOU LIKE, BUT YOU HAVE TO SHARE THE NEW LIBRARY              *
  14. *            IN THE POST OF TODOPIC.COM.AR THAT WAS POSTED.                  *
  15. *                                                                            *
  16. *****************************************************************************/
  17.  
  18. #define in input
  19. #define ol output_low
  20. #define oh output_float
  21. #ifndef TX
  22. #define TX PIN_B7
  23. #define RX PIN_B6
  24. #endif
  25. int dirs;
  26.  
  27. void init_master_bus(int TX, int RX, int BAUD)
  28. {
  29. rst_bus();
  30. #use RS232(stream=ers232, baud=BAUD, XMIT=TX, RCV=RX)
  31. }
  32.  
  33. void send(int dir, char text)
  34. {
  35. wait_freebus();
  36. fprintf(ers232,dir);
  37. fprintf(ers232,text);
  38. rst_bus();
  39. }
  40.  
  41. char rcv()
  42. {
  43. char buff[];
  44. buff=fgets(ers232);
  45. return buff[];
  46. }
  47.  
  48. int new_hw()       //MUST USE AN EXTERNAL INTERRUPT CONNECTED TO RI OUT OF SLAVE
  49. {
  50. dirs++;
  51. fprintf(ers232,dirs);
  52. return dirs;
  53. }
  54.  
  55. //END USER FUNCTIONS
  56. void wait_freebus()
  57. {
  58. while(1)
  59. {if(in(TX)&&in(RX)){
  60. delay_ms(100);
  61. if(in(TX)&&in(RX)){break;}}}
  62. }
  63. void rst_bus()
  64. {
  65. oh(TX);
  66. oh(RX);
  67. }

Esclavo:
Código: C
  1. //                Enhanced RS232
  2. //             A simple Multi-slave
  3. //             sistem with rs232 to
  4. //             use between PIC to
  5. //             PIC or PIC to PC.
  6.  
  7. //               SLAVE VERSIÓN
  8.  
  9. /*****************************************************************************
  10. *                                                                            *
  11. *            THIS LIBRARY WAS CREATED BY ISMAEL CONCHA V.                    *
  12. *            AND YOU ARE ALLOWED TO SHARE &/OR MODIFY                        *
  13. *            AS YOU LIKE, BUT YOU HAVE TO SHARE THE NEW LIBRARY              *
  14. *            IN THE POST OF TODOPIC.COM.AR THAT WAS POSTED.                  *
  15. *                                                                            *
  16. *****************************************************************************/
  17.  
  18. #define in input
  19. #define ol output_low
  20. #define oh output_float
  21. #define og output_high
  22. #ifndef TX
  23. #define TX PIN_B6
  24. #define RX PIN_B7
  25. #define RI PIN_B5
  26. #endif
  27. int dir;
  28.  
  29. void init_bus(int TX, int RX, int BAUD)
  30. {
  31. rst_bus();
  32. #use RS232(stream=ers232, baud=BAUD, XMIT=TX, RCV=RX)
  33. presentate();
  34. dir=rcvc();
  35. ol(RI);
  36. }
  37. void send(char text)
  38. {
  39. wait_freebus();
  40. fprintf(ers232,text);
  41. rst_bus();
  42. }
  43.  
  44. char rcvc()
  45. {
  46. char buff;
  47. buff=fgetc(ers232);
  48. if(buff==dir)
  49. {buff=fgetc(ers232);}
  50. else {buff=0x00;}
  51. return buff;
  52. }
  53.  
  54. char rcvs()
  55. {
  56. char buff[];
  57. buff[0]=fgetc(ers232);
  58. if(buff[0]==dir)
  59. {buff=fgets(ers232);}
  60. else{buff[0]=0x00;
  61. return buff[];
  62. }
  63.  
  64. //END USER FUNCTIONS
  65. void wait_freebus()
  66. {
  67. while(1)
  68. {if(in(TX)&&in(RX)){
  69. delay_ms(100);
  70. if(in(TX)&&in(RX)){break;}}}
  71. }
  72.  
  73. void presentate()
  74. {
  75. wait_freebus();
  76. og(RI);
  77. }

creo que no necesita mucha explicación el código, salvo el comentario que puse dentro.
los pines que elegi como TX y RX, fuero meramente, porque creo que todos los pics los tienen, pero aun puedes seleccionar los pines a usar.
las lineas RX y TX deben ser PULL-UP, esto es para evitar el corto-circuito que mencione arriba.
la linea RI es común para todos los esclavos, y debe ir de momento a un pin con interrupción externa.
el sistema debería poder conectarse al pc mediante un famoso max232 sin ningún problema, pero puede que el max tenga problemas con el pull-up.
creo que un sistema por rs232 es mas facil que un sistema por i2c, ya que el protocolo en si es bastante simple, y creo que esta libreria puede reemplazar el i2c como bus multi-slave para aquellos que recien inician en programacion, como yo  :)

PD: la libreria la escribi y comente en ingles, ya que se que varios usuarios no hablan el español como idioma nativo :P

las librerias aun no las pruebo, prefiero que programadores mas expertos, me indiquen si existe algún error, pero a mi parecer debería funcionar.
Bueno eso, espero que sea útil, si es que no lo habían hecho ya,

Saludos!
« Última modificación: 18 de Septiembre de 2012, 21:52:27 por fantaxmax »
"El presente es suyo, El futuro es mio" N.T.
El conocimiento es gratuito e ilimitado, solo debes saber donde buscarlo.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: eRS232, pequeño idea que tenia en mente
« Respuesta #1 en: 18 de Septiembre de 2012, 22:18:12 »
Por eso surgio el Bus CAN, porque todo esto lo tiene resuelto a nivel de hardware...
A simple vista parece estar bien, deberias ponerle codigo a varios pics a ver si explotan o no... :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: eRS232, pequeño idea que tenia en mente
« Respuesta #2 en: 18 de Septiembre de 2012, 22:30:44 »
tambien puedes usar el sistema del rs485, activa o libera la linea segun se utilice el TX o RX.

El caso es que para multimaestro lo tienes jodido, lo mejor como dice MLGSOFT es el CAN, que solo te tienes que preocupar de enviar y recibir, lo demas se encarga el solito.

Desconectado fantaxmax

  • PIC16
  • ***
  • Mensajes: 107
    • Libertycraft - Minecraft
Re: eRS232, pequeño idea que tenia en mente
« Respuesta #3 en: 18 de Septiembre de 2012, 22:39:17 »
MGLSOFT se puede decir que mi idea esta varios años atrasada entonces, debere aprender un poco mas en protocolos de comunicacion entonces, estoy un poco desinformado en cuanto a protocolos trata :P

MerLiNz vi el protocolo rs485 y no entendi mucho como funciona, ya que aun soy principante, me cuesta entender un poco, aun... aun asi aprendo rapido
"El presente es suyo, El futuro es mio" N.T.
El conocimiento es gratuito e ilimitado, solo debes saber donde buscarlo.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: eRS232, pequeño idea que tenia en mente
« Respuesta #4 en: 18 de Septiembre de 2012, 22:57:29 »
También está el protocolo i2c (multi-maestro, multi-esclavo), que tiene una línea de datos y una de clock, ambas con sus resistencias de pull up, y todos los dispositivos están conectados a esas líneas con colectores abiertos. Esto tiene muchísimas ventajas, por ejemplo, si el maestro está trasmitiendo muy rápido, el esclavo puede retener la linea de clock hasta que se desocupe.
Sin embargo, felicitaciones por tu solución. Siempre es bueno poner a prueba el ingenio ;)

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: eRS232, pequeño idea que tenia en mente
« Respuesta #5 en: 18 de Septiembre de 2012, 23:07:13 »
el rs485 funciona igual que el rs232, la unica diferencia es que la transmision de datos se hace en una sola direccion, para ello lo que hace es cuando esta activo el TX este envia y desactiva los envios de otros pics (deteccion por software), los demas pics se ponen en escucha y reciben los datos (ya puedes detectar si te interesa o no en distintos pics) y luego pues cuando este para de enviar se pone en recepcion. Sin embargo todo esto es por software por lo cual siempre puedes tener colision de datos, es por eso que con el CAN el se encarga de evitar colisiones, gestionar prioridades, control de errores... Mucho mas sencillo, tu envias y te aseguras de que la recepcion es correcta.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: eRS232, pequeño idea que tenia en mente
« Respuesta #6 en: 18 de Septiembre de 2012, 23:08:18 »
Por supuesto!!
Que nuestros comentarios no te desanimen !!
A favor del I2C esta que es multimaestro, en contra que fue desarrollado para estar dentro de un mismo PCB, comunicando dispositivos, o a lo sumo entre dos placas muy cercanas.
Es decir, no es recomendable comunicar con esto dos dispositivos mas lejanos que uno o dos metros...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: eRS232, pequeño idea que tenia en mente
« Respuesta #7 en: 18 de Septiembre de 2012, 23:08:38 »
También está el protocolo i2c (multi-maestro, multi-esclavo), que tiene una línea de datos y una de clock, ambas con sus resistencias de pull up, y todos los dispositivos están conectados a esas líneas con colectores abiertos. Esto tiene muchísimas ventajas, por ejemplo, si el maestro está trasmitiendo muy rápido, el esclavo puede retener la linea de clock hasta que se desocupe.
Sin embargo, felicitaciones por tu solución. Siempre es bueno poner a prueba el ingenio ;)

El caso es que el I2C es para usarse en la misma placa, supongo (aunque el creador del post no lo ha comentado) sera para comunicar entre placas a cierta distancia.

Desconectado fantaxmax

  • PIC16
  • ***
  • Mensajes: 107
    • Libertycraft - Minecraft
Re: eRS232, pequeño idea que tenia en mente
« Respuesta #8 en: 18 de Septiembre de 2012, 23:42:26 »
También está el protocolo i2c (multi-maestro, multi-esclavo), que tiene una línea de datos y una de clock, ambas con sus resistencias de pull up, y todos los dispositivos están conectados a esas líneas con colectores abiertos. Esto tiene muchísimas ventajas, por ejemplo, si el maestro está trasmitiendo muy rápido, el esclavo puede retener la linea de clock hasta que se desocupe.
Sin embargo, felicitaciones por tu solución. Siempre es bueno poner a prueba el ingenio ;)

El caso es que el I2C es para usarse en la misma placa, supongo (aunque el creador del post no lo ha comentado) sera para comunicar entre placas a cierta distancia.

exacto MerLiNz mi intencion es comunicar varios dispositivos distantes, ejemplo, PC<->Alarma Casa-Aire acondicionado-extractor de aire en habitaciones cerradas(baño)-Control automatico de luces y un etc que podria seguir, basicamente esto es una parte de una idea global que tengo para una casa pseudointeligente, lo interesante de esto es que la longitud del cable es igual a la norma rs232, considerando que mi casa es relativamente pequeña, ya que solo es una forma de comunicacion de un protocolo.
"El presente es suyo, El futuro es mio" N.T.
El conocimiento es gratuito e ilimitado, solo debes saber donde buscarlo.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: eRS232, pequeño idea que tenia en mente
« Respuesta #9 en: 19 de Septiembre de 2012, 00:03:28 »
exacto MerLiNz mi intencion es comunicar varios dispositivos distantes, ejemplo, PC<->Alarma Casa-Aire acondicionado-extractor de aire en habitaciones cerradas(baño)-Control automatico de luces y un etc que podria seguir, basicamente esto es una parte de una idea global que tengo para una casa pseudointeligente, lo interesante de esto es que la longitud del cable es igual a la norma rs232, considerando que mi casa es relativamente pequeña, ya que solo es una forma de comunicacion de un protocolo.

Eso se llama "domótica". Hay mucha info en el subforo del mismo nombre, y en internet. Los protocolos que se nombraron aquí (salvo i2c) son muy comunes en domotica, ademas de un protocolo llamado X10 que utiliza la linea electrica de la casa como medio de transmision de datos. Tambien existen protocolos inalambricos, entre los mas comunes zigbee.
Suerte con tu proyecto ;)

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: eRS232, pequeño idea que tenia en mente
« Respuesta #10 en: 19 de Septiembre de 2012, 00:43:29 »
También está el protocolo i2c (multi-maestro, multi-esclavo)

+1... Aunque es un protocolo para tramos cortos... Pero es la misma idea.

Sin embargo, felicitaciones por tu solución. Siempre es bueno poner a prueba el ingenio ;)

+1
No contesto mensajes privados, las consultas en el foro

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: eRS232, pequeño idea que tenia en mente
« Respuesta #11 en: 19 de Septiembre de 2012, 01:52:26 »
Me ha encantado ver cómo has desarrollado una solución a partir de tus conocimientos cuando no sabías la existencia de estas tecnologías que te comentan los compañeros.
Ánimo y sigue aprendiendo; la actitud ya la tienes.

Desconectado fantaxmax

  • PIC16
  • ***
  • Mensajes: 107
    • Libertycraft - Minecraft
Re: eRS232, pequeño idea que tenia en mente
« Respuesta #12 en: 19 de Septiembre de 2012, 10:46:21 »
Muchas gracias por los comentarios de todos, voy a ponerme a aprender los protocolos que aqui mencionan, pero el que mas me interesa es el X10, ya que obtengo alimentacion y comunicacion con los mismos cables, ya que los datos que necesito enviar nunca can a ser muchos salvo algunas veces algunas cadenas de texto.

Saludos a todos!
"El presente es suyo, El futuro es mio" N.T.
El conocimiento es gratuito e ilimitado, solo debes saber donde buscarlo.


 

anything