Tengo una tarea en la que necesito conectar 5 o más ucontrollers a una PC con el fin de enviar datos que se almacenarán en la PC. Las condiciones son las siguientes:
Conecté con éxito un PIC a la PC usando RS-232, así que sé lo suficiente como para que no pueda conectar fácilmente los 5 PIC directamente a una PC usando RS; Problemas demasiado problemáticos y de distancia. Lo que estoy pensando es algo así como un centro; los 5 PIC se conectan a un PIC maestro que, a cambio, obtiene los datos de los 5 PIC y los envía a la PC. He leído algunas cosas sobre I2C y creo que eso es lo suficientemente factible. También busqué soluciones inalámbricas como XBee; Obtuve SKKCA de Cytron, pero no sé cómo hacer que maneje comunicaciones de datos de muchos a uno.
¿Alguien tiene mejores ideas sobre cómo puedo lograr esto de la manera menos dolorosa y económica posible? Todo este proyecto es un espectáculo de un solo hombre, así que prefiero mantener las cosas simples y económicas.
No sé qué tan atascado estás en el 16F877A, pero esa es una mala elección para algo como esto. Piense en la serie 16 como solo para situaciones especiales, como un gran volumen donde importa un precio un poco más bajo, potencia extra baja o tamaño físico pequeño. No tiene ninguno de estos problemas, y el 16F877A es una pieza antigua de propósito general de todos modos.
Yo usaría algo como un 18F4580, que tiene un transceptor CAN incorporado. Su aplicación solo está pidiendo a gritos CAN. Es un bus diferencial, por lo que tiene buena inmunidad al ruido. Sus distancias se pueden manejar fácilmente incluso a la velocidad máxima de 1 Mbit/s. RS-485, como otros han mencionado, también es diferencial, pero se detiene en las especificaciones eléctricas. Tiene que diseñar su propio protocolo además de eso, teniendo en cuenta las colisiones, los reintentos, el arbitraje, los errores de bits, etc. Esto, por supuesto, es factible, pero hay muchos más pequeños errores que probablemente no sean evidentes a primera vista. Hay muchas maneras de equivocarse, y la mayoría de la gente lo hace, al menos la primera vez.
Con CAN, todo eso está definido en el estándar e implementado en el hardware. Envías un mensaje y simplemente aparece en los otros nodos. Múltiples nodos que intentan transmitir al mismo tiempo se manejan automáticamente. hay un esquema de arbitraje definido que implementan los periféricos CAN de hardware, con reintento automático hasta que el mensaje llega. Cada mensaje también contiene un CRC de 16 bits, que nuevamente se genera y verifica en el hardware.
Tomará un poco de esfuerzo aprender CAN y el periférico CAN, pero esto será menos que hacer su propio protocolo en RS-485, al menos si lo hace bien. Además, es bueno aprender CAN, mientras que RS-485 es un legado de una era pasada.
Si no puede usar un PIC con CAN integrado (aunque hay algunos con el mismo tamaño que el arcaico 16F877A), puede usar el chip CAN externo que se comunica con el PIC a través de SPI. Nuestro lanzamiento gratuito de herramientas de desarrollo de PIC en http://www.embedinc.com/pic/dload.htm incluye el código fuente para controlar el chip CAN externo y el periférico CAN interno de un 18F4580.
Necesitará algo que permita que la PC se comunique con el bus CAN, pero tales cosas están disponibles en el mercado. Tenemos nuestro propio adaptador USB a CAN que aún no se convirtió en un producto, pero estaría dispuesto a publicar el diseño y el código fuente. Si no recuerdo mal, National Instruments es una de las empresas que fabrica adaptadores CAN estándar para PC.
RS485 es, de hecho, la solución habitual para este entorno. CAN también es una buena solución, pero puede ser demasiado para su aplicación. Realmente está diseñado para configuraciones de múltiples maestros. Sin embargo, no lo necesita ya que tiene una PC que controla el bus.
Hay una versión simplificada de CAN llamada LIN Bus que asume un solo maestro conectado a múltiples esclavos. Por lo general, se une a un bus CAN para redes más complejas. Hay chips transceptores disponibles que conectan LIN a un UART TTL estándar y algunos pines PIO. Microchip vende tres y proporciona código de soporte.
Suponiendo que no le gusta la solución RS485 propuesta, ¿qué le parece usar RS232 en una cadena de margarita? Cada esclavo de conteo de tornillos repite todos los métodos sin configuración.
Otra opción es RFID, hacer que cada conteo de tornillos envíe una identificación/mensaje de RFID con el conteo de tornillos como parte de su identificador.
Coloque un transceptor RS-485 en cada placa e implemente una red maestro-esclavo simple. Usaría un chip más moderno que el 16F877A, como el PIC16F887 o un PIC18.
Aquí la energía no es un problema, simplemente puede optar por una solución inalámbrica.
Debido a que necesita una solución de bajo costo, prefiero lo siguiente....
Primero, puede crear una red USART cableada en la que todos los pines RX estén conectados al lado TTL de un MAX único y los pines TX conectados al mismo MAX. Asigne una dirección a cada uno de los esclavos. Los esclavos permanecen inactivos en la línea de comunicación mientras continúa con todas sus demás actividades. Envíe las entradas (número de tornillos utilizados) a una cola, en este caso, simplemente una matriz.
Ahora el lado maestro,
Que es la PC y está conectado al lado RS232 del MAX. Simplemente puede hacer su propio protocolo para comunicarse con cada uno de los esclavos. La mejor manera es usar comunicación de 9 bits con detección de dirección. Puede hacer un conjunto de comandos simple de la siguiente manera,
COMANDO: ECHO_ADDRESS
VALOR HEXAGONAL: 0XAA
SIGNIFICADO: Si se recibe ECHO_ADDRESS, el esclavo direccionado devolverá su dirección.
MANDO: SEND_COUNT
VALOR HEXAGONAL: 0XA1
SIGNIFICADO: Si se recibe SEND_COUNT, el esclavo direccionado envía la cantidad de datos presentes en su búfer.
Creo que esta solución es económica y no es necesario optar por un procesador avanzado. El procesador que seleccionó tiene suficiente RAM y ROM.
Ahora, si actualiza el sistema a conectividad inalámbrica, el método más económico es obtener transceptores de RF comunes. retire el cable conectado a sus pines RX y TX e inserte el transceptor allí. Conecte el mismo transceptor de RF a su MAX. Aquí la frecuencia del transmisor en el lado MAX y la frecuencia del receptor en los esclavos deben ser iguales y viceversa.
Al seleccionar la frecuencia de RF, es mejor considerar las distorsiones del entorno.
Hola,
el inalámbrico que mencioné no es un transceptor inalámbrico moderno como Zigbee, Wi-Fi... Sugerí un transceptor de RF simple de bajo costo. En este caso no necesita una tasa de datos alta. Utilizo el módulo inalámbrico de alrededor de $2 para comunicaciones de menor velocidad de datos y ofrece un rendimiento satisfactorio. Ahora, acerca de por qué sugerí inalámbrico, la respuesta es que creo que el cliente estará más contento si no hay cables o si no se necesita cableado adicional, y el producto se ve bien.
Podemos conectar muchos pines TX juntos. Debido a que nuestro maestro controla el autobús, las posibilidades de colisión son demasiado bajas. Pero tienes razón ahí puede haber colisiones por error de comunicación. Tenemos que proteger el dispositivo de esta colisión, se puede hacer con algún aislador eléctrico.
Puede que esta no sea una solución perfecta, pero funciona para la situación actual.
jason s
kenny
Sodrohu
kenny
kevin vermeer