Learning   Examples | Foundations | Hacking | Links

RS-232

En este tutorial vas a aprender como comunicarte con un ordenador usando un circuito de adaptación RS-232 de un sólo canal (MAX3323) y una conexión serie por software en el Arduino. Un tutorial general sobre Puerto serie por Software se puede ver Aquí.

Material necesario:

  • Ordenador con un programa terminal instalado (Hyperterminal o RealTerm en PC, Zterm en Mac, Cutecom en Linux)
  • Cable serie que permita conectar un extremo a la placa de entrenamiento
  • Chip MAX3323 (o similar)
  • 4 condensadores de i uF
  • Placa de entrenamiento
  • Cables
  • Placa Arduino
  • LED - opcional, para debug.

Prepara la placa

Conecta el chip MAX3323 en la placa de entrenamiento. Conecta la alimentación de 5V y tierra (GND) de la placa de entrenamiento a los pines de 5V y GND de Arduino. Conecta el pin 15 del chip MAX3323 a tierra y los pines 16 y 14-11 a 5V. Si estas usando un LED, conéctalo entre el pin 13 y GND.

Los cables de 5V son rojos, los cables de tierra (GND) son negros

Conecta un condensador de 1 uF entre los pines 1 y 3, otro entre los pines 4 y 5, otro entre el pin 1 y GND y el último entre el pin 6 y GND. Si estás usando condensadores con polaridad asegúrate de que el terminal negativo se conecta a la parte negativa (pines 3 y 5 y GND).

Los cables de 5V son rojos, los cables de tierra (GND) son negros

Piensa que pines de Arduino quieres usar para tus líneas de transmisión (TX) y recepción (RX). En este tutorial vamos a usar el pin 6 de Arduino para recibir y el pin 7 para transmitir. Conecta tu pin TX (7) al pin 10 del MAX3323 (T1IN). Conecta tu pin RX (6) al pin 9 del MAX3323 (R1OUT)

Cable TX Verde, cable RX azul, cable 5V rojo, cable GND negro

Cables

(Diagrama de pines del conector serie DB9)

Si no tienes uno hecho, necesitas hacer un cable para conectar el puerto serie (o adaptador USB-Serie) de tu ordenador a la placa de entrenamiento. Para esto, coje un conector DB9 de radioshack. Elige tres colores diferentes de cable, uno para TX, uno para RX y otro para tierra (GND). Suelda el cable TX al pin 2 del conector DB9, el cable RX al pin 3 y GND al pin 5.

Conecta los pines 1 y 6 al pin 4 y el pin 7 al pin 8. Aisla las conexiones de los cables para evitar cortocircuitos accidentales.

Tapa el conector con una cacasa metálica para proteger la señal y permitir la conexión fácil a tu puerto serie.

Conecta la línea TX de tu ordenador al pin 8 (R1IN) del MAX3323 y la línea RX al pin 7 (T1OUT). Conecta la lína de tierra (GND) de tu ordenador a la tierra de la placa de entrenamiento.

Cable TX Verde, cable RX azul, cables +5V rojos, cables GND negros

Programar el Arduino

Ahora escribiremos el código para habilitar la comunicación serie. Este programa simplemente esperará un carácter que llegará por el puerto serie, luego lo transmite de vuelta en mayúsculas por el puerto serie. Este es un buen programa general para comprobar el puerto serie, deberías ser capaz de extrapolarlo para cubrir tus necesidades de puerto serie. Carga el siguiente código en la placa Arduino:

//Created August 23 2006
//Heather Dewey-Hagborg
//http://www.arduino.cc

#include <ctype.h>

#define bit9600Delay 84  
#define halfBit9600Delay 42
#define bit4800Delay 188 
#define halfBit4800Delay 94 

byte rx = 6;
byte tx = 7;
byte SWval;

void setup() {
  pinMode(rx,INPUT);
  pinMode(tx,OUTPUT);
  digitalWrite(tx,HIGH);
  digitalWrite(13,HIGH); //turn on debugging LED
  SWprint('h');  //debugging hello
  SWprint('i');
  SWprint(10); //carriage return
}

void SWprint(int data)
{
  byte mask;
  //startbit
  digitalWrite(tx,LOW);
  delayMicroseconds(bit9600Delay);
  for (mask = 0x01; mask>0; mask <<= 1) {
    if (data & mask){ // choose bit
     digitalWrite(tx,HIGH); // send 1
    }
    else{
     digitalWrite(tx,LOW); // send 0
    }
    delayMicroseconds(bit9600Delay);
  }
  //stop bit
  digitalWrite(tx, HIGH);
  delayMicroseconds(bit9600Delay);
}

int SWread()
{
  byte val = 0;
  while (digitalRead(rx));
  //wait for start bit
  if (digitalRead(rx) == LOW) {
    delayMicroseconds(halfBit9600Delay);
    for (int offset = 0; offset < 8; offset++) {
     delayMicroseconds(bit9600Delay);
     val |= digitalRead(rx) << offset;
    }
    //wait for stop bit + extra
    delayMicroseconds(bit9600Delay); 
    delayMicroseconds(bit9600Delay);
    return val;
  }
}

void loop()
{
    SWval = SWread(); 
    SWprint(toupper(SWval));
}

Abre tu programa terminal de puerto serie y configuralo a 9600 baudios, 8 bits de datos, 1 bit de stop, sin paridad y sin control de flujo. Pulsa el botón de reset de Arduino. La palabra "hi" debería aparecer en la ventana del terminal seguida de un retorno de carro (CR). Aquí puedes ver una imagen del aspecto del Hyperterminal, la aplicación terminal gratuita preinstalada en windows.

Ahora prueba a teclear un carácter en minúscula en la ventana del terminal. Deberías ver las letras que has tecleado devueltas en mayúsculas.

Si esto funciona, enhorabuena! tu conexión serie esta funcionada tal como querías. Ahora puedes usar tu nueva conexión serie con el ordenador para envíar estados de depuración de tu código, y envíar comandos a tu microcontrolador.

Código y tutorial de Heather Dewey-Hagborg, fotos de Thomas Dexter

Share