Hola, estoy iniciándome con arduino y quería comunicar una balanza por un puerto serie de arduino mega. El inconveniente que tengo es que la balanza transmite con un protocolo asincrono (9600 bps, 1 bit de inicio, 7 bits de datos, 1 bit de stop y 1 bit de paridad). Con la libreria serie de arduino solo puedo configurar la velocidad de transmisión por lo que deduzco que será una comunicación síncrona.
¿Como puedo hacer que la comunicación sea asíncrona y configurarla con esos parámetros?
La comunicación es asíncrona… Pero es de 8 bits de datos (8N1).
Te va a tocar leer datasheet,ya que el micro puede trabajar con datos en 5, 6, 7, 8, or 9 Bits y 1 ó 2 bits de Stop.
(Es decir, puede hacer lo que buscas. Ver pág 206 del datasheet).
Tendrás que modificar HardwareSerial.cpp, que es donde se encuentras las funciones que manejan el puerto serie.
No he hecho nunca lo que dices, pero ojeando rápidamente el datasheet, he visto que el registro UCSRnC (Bit 2:1) junto a al registro UCSRnB (Bit 2), te configuran el tamaño del caracter: UCSZn2 UCSZn1 UCSZn0 Character Size
0 1 0 7-bit
También te tendrás que mirar el tema paridad, porque el arduino por defecto no usa paridad. Es el mismo byte de configuracion (UCSRnC, bits 5:4). Tendrás que saber si usa par ó impar.
Tiene pinta que sólo modificando la inicialización(Serial.begin) te sirve… Igual, con poner el registro con los valores adecuados, despues de la orden Serial.begin, te hes suficiente.
Serial.begin(9600);
UCSR0C = (1<<UPM1)|(0<<UPM0)|(0<<USBS)|(1<<UCSZ1)|(0<<UCSZ0);
resto código…
Se supone que te dejaría 9600,7bits, paridad par
Pero repito que nunca lo he hecho, sólo contesto para dar ánimos…ja,ja,ja
Por cierto, para que una comunicación sea síncrona, necesitan compartir una señal de reloj (pin XCK).