Pages: [1]   Go Down
Author Topic: a vueltas con los puertos serie  (Read 1550 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 20
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola

El caso es que tengo un router lynksys wrt54gl conectado por puerto serie a un receptor satelite para poder conectar el receptor a un programa que se ejecuta en el router. El problema surge porque el receptor satelite además de los datos que necesito para hacer funcionar el router manda datos "basura" de más por el puerto serie.

La idea es conectar el router que trabaja a 3.3v directamente a los pines TX y RX de la placa (esto ya lo probe y podía conectarme sin problemas con un programa tipo hyperterminal del router) y conectar el puerto serie de la placa al puerto serie del receptor satélite.

De esta forma la idea era "limpiar" la señal que me llegue del receptor antes de enviarla al router y enviar directamente la señal que venga del router sin modificar hacia el receptor.

Es esto posible ¿?

Por otro lado como puedo saber los datos que envia el receptor satelite hacia el router si tengo que tener el receptor conectado al router para que el primero envie datos al segundo. Podria hablitar otros dos pines digitales como TX2 y RX2 y conectar el puerto serie de la placa al PC para monitorear el tráfico ¿?

Saludos y gracias.
Logged

Madrid
Offline Offline
Full Member
***
Karma: 0
Posts: 217
¡¡ Siempre aprendiendo !!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La placa Arduino sólo soporta un puerto serie por hardware ... puedes intentar utilizar un segundo por software.

Échale un vistazo a esto ... te puede servir:

Libería software serial (simula un segundo puerto serie por software): http://www.arduino.cc/en/Reference/SoftwareSerial

Libería para implementar I2C (conexión de dispositivos medianet un bus serie): http://www.arduino.cc/en/Reference/Wire

Salu2,

Igor
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 20
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola

Gracias por tu respuesta Igor, pero me parece que no me va a servir, porque he visto en el enlace que me has puesto que el puerto serie por software solo puede trabajar a 9600 y yo necesito hacer la comunicacion a 115200.

De todas formas si quisiera probar con este segundo puerto para conectarlo al receptor satelite tendría que utilizar un max232 o similar para convertir la señal verdad ¿? Y en este caso si que se podría conectar la placa al PC para monitorear el tráfico no ¿?

Por lo que veo entonces la placa tiene "en principio" un único puerto al que se puede acceder bien por los pines 0 y 1 o bien por el puerto serie de la placa ¿?.

Saludos y gracias por tu ayuda.
Logged

Madrid
Offline Offline
Full Member
***
Karma: 0
Posts: 217
¡¡ Siempre aprendiendo !!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Hola,
 
Quote
De todas formas si quisiera probar con este segundo puerto para conectarlo al receptor satelite tendría que utilizar un max232 o similar para convertir la señal verdad ¿?

Sí ... necesitas el MAX232.

Quote
Y en este caso si que se podría conectar la placa al PC para monitorear el tráfico no ¿?

La placa la puedes conectar a un dispositivo por cada puerto serie, pero nunca a dos a la vez. Es decir ... no puedes conectarla a receptor de satélite y al mismo tiempo monitorizarlo todo desde el PC por ese mismo puerto. Las conexiones serie son punto a punto. O escribes y lees del receptor ... o lo monitorizas, pero no ambas cosas.

Quote
Por lo que veo entonces la placa tiene "en principio" un único puerto al que se puede acceder bien por los pines 0 y 1 o bien por el puerto serie de la placa ¿?.

Sí ... sólo un puerto serie (hardware), que lo puedes utilizar para una única conexión. Lo puedes utilizar o a través del los pines 0 (Rx) y 1 (Tx), o directamente a través del puerto USB (o serie si es una placa serie de las viejas), pero no por ambos sitios simultanemanete.


Salu2,

Igor
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 20
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola

Gracias por tus excelentes aclaraciones.

Teniendo en cuenta que lo que quiero conectar es un router que trabaja en ttl a 3.3v y un receptor satelite que trabaja con la señal rs232, lo más práctico sería utilizar el puerto serie por software para conectar con el router y el puerto serie de la placa (tengo un arduino serie montado a mano) para conectar directamente al deco no ¿? De esta forma me ahorro el max 232.

Lo que no tengo ni idea es como poder monitorizar o debugar el programa, porque ni desde el receptor ni desde el router puedo ver lo que pasa ...

Saludos y muchisimas gracias por tu ayuda.
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 153
veroboaring is the new XGame - Extreme Veroboarder
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bueno estamos todos con algo parecido..

Lo que yo necesito hacer es implementar un multiplexor de puerto serie, dejando libre claro el que tiene USART, la idea es crear entre 3 a 4 puertos pero utilizando software, que por lo que vi no es tan raro solo que hay que tener idea la concurrencia de los datos y recalcular la espera.

Seria interesante tambien poder leer puertos a distintas velocidades, esto con solo software y sin USART me parece que se hace medio dificil, habria que implementar una constante de delay mas alta y multiplicarla por un indice de velocidad a utilizar.

La otra idea seria utilizar varios AtMegas conectados por SPI, I2C me parece bastante lenta si no hay un buffer de por medio, al menos esto con un F84 y una 24C16 nunca lo pude hacer andar.

Ideas?

Gracias
Francisco desde Bs As
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 20
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola

Pues al final voy a empezar a hacer unas pequeñas pruebas conectado el receptor al PC. En principio simplemente quiero probar a conectarlos y que comuniquen correctamente estando conectado cada uno a un puerto serie del arduino  (puerto hardware / puerto software).

Receptor => Puerto Serie Soft (rx)  => Puerto Serie Hard (tx) => PC
PC => Puerto Serie Hard (rx) => Puerto Serie Soft (tx) => Receptor

En principio creo  ;D  :smiley  que la comunicación empieza desde el receptor que hace una petición al programa del PC. Suponiendo que esto es así, he conseguido apañar el siguiente código de un par de ejemplos de las referencias de arduino.

Code:
#define bit9600Delay 84  
#define halfBit9600Delay 42

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

void setup()
{
  Serial.begin(9600); // abre el puerto serie, y le asigna la velocidad de 9600 bps
  pinMode(rx,INPUT);
  pinMode(tx,OUTPUT);
  digitalWrite(tx,HIGH);
  
}

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();
    // AQUI ES DONDE LUEGO TRABAJARÍA EL SWval PARA LIMPIARLO
    Serial.print(SWval);
    // envía datos sólo si los recibe:
      if (Serial.available() > 0)
        {
        // lee el byte de entrada:
        incomingByte = Serial.read();
          SWprint(incomingByte);
      }

    SWprint(SWval);
}

Estaría bien el código ¿?. En principio lo he compilado y no da error, pero me gustaría alguna opinión más autorizada antes de conectar la historia.

Lo único que pretendo hacer es leer por el puerto serie soft lo que viene del receptor, pasarlo por el puerto serie hard al PC, esperar la respuesta de este por el mismo puerto hard y mandarla al receptor por el puerto serie soft.

Despúes ya sería cuestión de trabajarse la señal.

El arduino iria conectado al receptor mediante un cable nokia que ya he usado en un par de montajes para convertir la señal TTL a rs232.

Se agradece enormemente cualquier comentario.

Saludos y suerte.
« Last Edit: September 07, 2008, 06:52:42 pm by poomerang2 » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 20
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola

Alguién ha probado la comunicación serie por software ¿? Es que acabo de ver esto y no se si debería añadirlo ...

http://antipastohw.blogspot.com/2008/02/arduino-software-serial-correction.html

Saludos y suerte
Logged

Pages: [1]   Go Up
Jump to: