Cuando hice el regulador de velocidad de los coolers de mi ruidoso switch, elegí usar RS-232 para la comunicación una vez instalado en módulo en el switch y usé un adaptador USB-UART tambien llamado USB-TTL mientras desarrollaba.
En la fotico podemos ver de izquiera a derecha el cable USB proveniente de la computadora, el adaptador USB-UART y a la derecha medio escondido el controlador de velocidad de los coolers.
+---------+ +-----------+ +----------+
| compu | | +-------+ | | +------+ |
| | | | UART ---------- UART | |
| | | +---|---+ | | +------+ |
| +-----+ | | +---|---+ | | |
| | USB --------- USB | | | control |
| +-----+ | | +-------+ | | cooler |
+---------+ +-----------+ +----------+
Por decisiones tomadas y justificadas en el otro proyecto, al conectar el adaptador RS-232 al módulo de control, ese cosito con el conector DB9 que apareció a la izquierda del controlador de velocidades, necesito un adaptador RS-232 - USB, que no tengo.
+---------+ +-----------+ +----------+ +----------+
| compu | | +-------+ | | +------+ | | control |
| | | | RS-232 ------------ RS-232| | | cooler |
| | | +---|---+ | | +---|--+ | | |
| +-----+ | | +---|---+ | | +---|--+ | | +------+ |
| | USB --------- USB | | | | UART -------- UART | |
| +-----+ | | +-------+ | | +------+ | | +------+ |
+---------+ +-----------+ +----------+ +----------+
Mientras lo consigo, puedo usar una EDU-CIAA-NXP con el poncho educativo de UNSJ que tiene RS-232 y aprovechar que tiene un display para mostrar la información de temperatura, humedad y PWM aplicado a los coolers que envía el controlador de velocidades con el siguiente formato:
# T1:18.10, H1:60.00, T2:18.90, H2:60.00, CS:84
T1: temperatura sensor 1
H1: humedad sensor 1
T2: temperatura sensor 2
H2: humedad sensor 2
CS: duty cycle del PWM, cuanto mayor, mayor la velocidad de los coolers.
Use sAPI del firmware_v3 en el tag r1.2.0 pues en r1.3.0 algo falla:
git clone https://github.com/ciaa/firmware_v3.git
git checkout r1.2.0
creé una carpeta "projects"en la cual hice un symlink a mi proyecto:
cd firmware_v3
mkdir projects
cd projects
ln -s ../../../cpantel/SerialDisplayAdapter
cd ..
luego en program.mk
PROGRAM_PATH = projects/SerialDisplayAdapter
estado actual | data[0] | acción | pasa a estado |
seek | '#' | lcdClearAndHome(); | seekT1 |
seekT1 | ':' | readT1 | |
readT1 | ',' | lcdSendStringRaw(space); | seekH1 |
readT1 | * | lcdSendStringRaw(data); | |
seekH1 | ':' | readH1 | |
readH1 | ',' | lcdGoToXY( 0, 1 ); | seekT2 |
readH1 | * | lcdSendStringRaw(data); | |
seekT2 | ':' | readT2 | |
readT2 | ',' | lcdSendStringRaw(space); | seekH2 |
readT2 | * | lcdSendStringRaw(data); | |
seekH2 | ':' | readH2 | |
readH2 | ',' | lcdSendStringRaw(space); | seekCS |
readH2 | * | lcdSendStringRaw(data); | |
seekCS | ':' | readCS | |
readCS | eol | seek | |
readCS | * | lcdSendStringRaw(data); |
Lo que hace es descartar todo caracter hasta hallar '#' como identificador de linea de datos, es que yo puedo estar operando y no hay necesidad de que aparezca nada en el display, sólo debo tener cuidado de no ingreser ningún '#' por que si no se me va a trabar la FSM, mmmh, le pongo que si encuentra un '#' y no está en estado SEEK que se resetee a SEEK y listo, dame dos minutos... listo.
Tuve la tentación de en lugar de usar switches e ifs anidados utilizar una estructura parametrizable, pero este proyecto es sólo un accesorio para otro más grande que ya quiero terminar y si me meto en tanto detalle no voy a terminar nunca.
Lamentablemente, mientras hacía pruebas quemé el max232n del poncho educativo y ahora estoy usando el poncho PLC con un adaptador TTL-RS-232
Mostrando los mensajes del switch |
Abajo a la izquierda el adaptador, en el display las temperaturas, humedades y velocidad del cooler.
Lecturas por serial |
El código en https://github.com/cpantel/SerialDisplayAdapter, pronto progresará cuando le agregue un termómetro y registre la información para ajustar los parámetros.
No hay comentarios:
Publicar un comentario