¿El puerto serie de Arduino espera 8-n-1 o 7-e-1?

2

Estoy explorando la comunicación serial usando el arduino, y hasta ahora no he tenido demasiados problemas. Hasta ahora al menos. Estoy usando un módulo externo para leer una capacitancia (el módulo es un DN060-02v04 de JYETech) y se supone que transmite automáticamente una gran cantidad de información sobre sus lecturas. De acuerdo con la documentación que lo acompaña, se transmite en formato 8-n-1 a 38400bps corregido. Bastante simple, estoy usando SoftwareSerial y tengo la velocidad de transmisión configurada correctamente. Se supone que debo obtener una serie de bytes que representan caracteres ascii, sin embargo, los números que recibo no parecen corresponder a nada utilizable. Estoy pensando que tal vez el arduino esté tratando de leer en formato 7-e-1, pero no estoy seguro porque no puedo encontrar ninguna información al respecto. También podría estar haciendo otra cosa mal, pero realmente no puedo pensar en nada. Así que la pregunta real: ¿Se comunica el arduino usando 8-n-1 o 7-e-1?

Más detalles: estoy usando un arduino UNO, ejecutándome en linux y usando la versión 1.0 de arduino para programarlo.

EDITAR: Código fuente:

#include <SoftwareSerial.h>

//                       rx  tx
SoftwareSerial capSerial(2, 13);
int tmp;
int next;

void setup()
{
  capSerial.begin(38400);
  Serial.begin(38400);
} 

void loop()
{
  if (capSerial.available() > 0)
  {
    tmp = next;
    next = capSerial.read();
    Serial.print(next);
    Serial.print('\n');
  }
}
    
pregunta Annath

1 respuesta

1

El Arduino por defecto hace comunicación 8-n-1 Serial, estoy bastante seguro. Se ha hablado en la lista de correo de los desarrolladores sobre la extensión de la API en serie con parámetros opcionales para cambiar la configuración predeterminada, pero eso no está en la API actual, que yo sepa.

Intentaría aumentar tu velocidad de transmisión en serie a 115200 (y recuerda configurar tu programa de terminal para utilizar la misma velocidad de transmisión). Existe una posibilidad externa de que esté bloqueando la Serie de software haciendo eco a la misma velocidad que está recibiendo.

Otra forma de descartar esta teoría sería leer los datos ASCII de las lecturas de Soft Serial en un búfer e imprimir solo en su puerto Serial cuando el búfer esté lleno.

Actualizar

Es posible que desee verificar algunas cosas del hardware. El pin Tx de su módulo debe estar conectado al pin Rx del Arduino, y el pin GND de su módulo debe estar conectado al pin GND de su Arduino. Con esas dos conexiones en su lugar, debería poder recibir datos del transmisor sin problemas, suponiendo que tanto el módulo como el Arduino estén funcionando a 5V.

Lo siguiente que intentaría, suponiendo que el cableado sea correcto, sería no usar el Software Serial en absoluto. Solo necesita recibir de su módulo y solo necesita transmitir a su computadora por el aspecto de las cosas. Solo conéctelo para que su pin Arduino Tx no vaya a su módulo, y las salidas de Serial.print deben ir a la terminal de su computadora como de costumbre. Module Tx = Arduino DIG0, Module GND = Arduino GND y solo cambia tu programa a:

int next;

void setup()
{
  Serial.begin(38400);
}

void loop()
{
  if (Serial.available() > 0)
  {
    next = Serial.read();
    Serial.print(next);
    Serial.print('\n');
  }
}

La única otra cosa que puedo sugerir es que el manual puede ser inexacto, y puede probar las otras velocidades en baudios comunes para la interfaz de su dispositivo (por ejemplo, 9600, 14400, etc. - hay un número pequeño) y ver si comienza a decodificar correctamente.

    
respondido por el vicatcu

Lea otras preguntas en las etiquetas

Comentarios Recientes

Sí, un puerto serie Arduino puede esperar 8 o 7 filas (8 canales, 6 canales, 6re; generalmente se requieren títulos analógicos antiguos) si se actualizan los siguientes valores. Bytes de Internet por segundo ( Mbps) el eje x es la palabra índice para el valor de paridad entre los canales de generación de pulso de pulso y la frecuencia de elemento de fila de líneas de sensor que se utilizará como frecuencia de bit a: superior / inferior, b: medio, c: bajo, d: alto para pulso de datos r: seq de filas de pulsos... Lees verder