Este proyecto surgio por la necesidad de un compañero de iluminar varias zonas pequeñas de un pub de diversos colores. Cada zona estaria iluminado de un color diferente a las demas, aumque puede ser que se repita alguna. Estos colores estarian constantemente encendidos sin sufrir ningun cambio, hasta que pasado cierto tiempo, se cambiarian uno, dos, tres… de ellos y asi constantemente.
Para este fin, lo logico seria utilizar varios TLC5940 para ese fin, pero los 28 leds no van a estar juntos con lo que decidi buscarle otra solucion y me encontre con el control del Leds RGB mediante PWM del compañero Nocturno y me parecio una genial idea. Con esta solucion, tendria 1 Maestro y 28 Esclavos (1 esclavo por zona).
Esta nueva solucion ahora plantea otro problema: ¿Que tipo de comunicacion utilizar para comunicar el master con los 28 esclavos? Pues solo tuve que navegar un rato para dar con dos soluciones sencillas:
- Un bus 485. El master podria ser un ordenador u otro Pic y luego los esclavos. Esta solucion es bastante sencilla y nos podria servir para hacer una comunicacion bidireccional en caso de querer leer el estado de un esclavo o incluso para comunicarnos con 1 solo esclavo.
- DMX512, algo que ya he manejado profesionalmente, pero nunca en diseños propios. Seria parecido al bus 485 solo que siempre se mandaria toda la trama y todos cogerian su informacion con lo que no tendriamos problemas con el direccionamiento, pero no tendriamos comunicacion bidireccional.
Por el momento en esta primera version, lo que se ha probado es; la comunicacion con 1 solo esclavo siguiendo una comunicacion serie entre el ordenador, con un simple programa hecho en VB6, (master) y un receptor (esclavo), pero puede servir para multiples receptores con una comunicacion unidireccional en modo bus 485 ya que disponen de direccionamiento individual y de grupo.
Como podeis ver en la siguiente imagen, el esquema principal es bastante sencillo:

Y como podeis comprobar en la siguiente imagen, el programa para el ordenador tiene un interface bastante sencillo y simple:

Funcionamiento:
El comando a escribir se compone de 2 partes. Por un lado la direccion y por otro lado el comando de colores:
- Para la direccion tenemos 3 opciones: ID (individual direction), GD (group direction) y TD (todas diecciones). Despues de una de estas 3 opciones solo tendremos que indicar la direccion del receptor sobre el que queremos actuar.
- Para los colores tenemos otras 3 opciones: R (Red, rojo), G (Green, verde) y B (Blue, azul). Al igual que con la direccion, despues de la letra indicamos un valor de 0 a 255 (min – max).
Ejemplos:
- ID1R100G100B100: Pone los colores rojo, verde y azul del dispositivo con direccion individual 1 a un valor de 100.
- GD5R100G200: Pone el color rojo en un valor de 100 y el verde en un valor de 200 a los dispositivos con la direccion de grupo 5.
- TDR0B255: Pone el color rojo a 0 y el azul a 255 de todos los dispositivos.
Aclarar que tanto el soft del pic como el del VB no son definitivos, esa es la razon de no estar explicado. Por otra parte para la simulacion, al ser un unico esclavo, no he añadido el MAX485 ni sus controles en el programa, pero es algo que habra que añadir para una comunicacion bidireccional sin problemas.
Para acabar, posibles mejoras que tengo en mente:
- Principalmente conseguir una comunicacion bidireccional completa para el bus 485.
- Para no saturar los esclavos, conseguir que estos controlen un TLC5940 con lo que pueda servir para varias zonas, siempre y cuando esten proximas.
- En vez de usar comunicacion RS485, cambiar al protocolo del DMX512 o poner para escojer la que se quiera.
- Un modulo externo con el que poder asignar las direcciones individuales de cada dispositivo para no tener que hacerlos en el programa del Pic, o hacer añadir algun comando extra al programa del master para ello.
La simulacion se puede hacer tanto por virtual terminal como con el programa en VB. En este segundo caso habra que usar el VSPE y cambiar los puertos a los que simule el programa.