Collegamento RS232 con MAX3232

Salve a tutti, ho un progetto da realizzare che consiste nel collegare un "Torsiometro" ad ArduinoUno e quando i valori di misurazione sono fuori da un range si accende una lampada rossa, quando sono dentro il range si accende una lampada verde, fin qui sembra facile...., il torsiometro ha un'uscita dei dati in RS232 PIN 1-4 DCD,Pin2 TX, Pin3 RX, Ping5 GND, i valoti che escono sono in caratteri ASCII codificati in esadecimale.
Ho usato un MAX3232 per la comunicazione seriale fra il Torsiometro(BTR) e Arduino, ho collegato dalla parte TTL (Arduino) RX,TX, +3,3V, e GND, dalla parte RS232 (BTR) RX,TX e GND, ho ripettato il flusso RX/TX, cioè dal MAX3232 in TX al BTR in RX e viceversa, ho usato la libreria SoftwareSerial per configurare i PIN 10 TX e 13 RX, per poter fare dei debug sulla seriale USB; purtroppo non riesco a comunicare in nessuno dei due sensi, cioè dal SerialMonitor non vedo nulla.
Ho un dubbio: nel connettore DB9 ho fatto le saldature TX (Pin2).RX(Pin3) e GND(Pin5), sono sufficenti? perché ho visto che ci sono dei cablaggi con dei ponti......
Non metto di esempio nessuno Sketch perché ho fatto molte prove e francamente non so quale potrebbe essere quello che va meglio.
Saluti a tutti.

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Mostra il link del torsiometro e lo schema che stai utilizzando.

presentazione fatta (me n'ero dimenticato :slight_smile: )
di seguito il link del torsiometro

In allegato una parte del manuale operativo del torsiometro dove vengono illustrati i collegamenti RS232 e il tipo di dati che "spara" sulla seriale.

BTR.pdf (730 KB)

Sempre in allegato uno schizzo di come ho collegato Arduino al MAX3232 e al BTR.

Sul MAX3232 non vedo i 4 condensatori elettrolitici da 1μ e l'alimentazione a 5V

Alimentatore da 5V non c'era nella foto, ne ho uno da 5V che inserisco nello spinotto dell'Arduino, i condensatori?? hemmm ho guardato parecchi post ma non ho visto che ci volevano, l'integrato che ho preso è già su basetta e penavo fossero già saldati, per la precisione è questo:

http://www.ebay.it/itm/MAX3232-5V-MINI-RS232-TTL-ADAPTADOR-MODULO-ARDUINO-DIMINUTO-CSE-/221783448755?pt=LH_DefaultDomain_186&hash=item33a352dcb3

@Actarus : veramente, a vederla così, quella è solo una breakout board con sopra un max232 fatta per chi NON sa saldare quel chip (SOIC) e quindi gli rende i pin più accessibili ... NULLA ALTRO ... devi mettere TU tutti componenti necessari secondo gli schemi d'uso. ::slight_smile:

Guarda QUESTA della SparkFun e vedi la differenza ... ci sono già saldati i condensatori necessari ... :wink:

Guglielmo

Questo è l'integrato visto da dietro,pensavo che bastassero i condensatori che sono già saldati.

per cui nella breadboard devo inserire i condensatori come se fosse il chip "nudo"? ho guardato quello della SparkFun e mi sembra uguale al mio, l'unica differenza è che i condensatori sono saldati sopra il chip, invece quello che ho io sono saldati sotto il chip (vedasi immagine allegata nella risposta precedente).

Actarus:
Questo è l'integrato visto da dietro,pensavo che bastassero i condensatori che sono già saldati.

Aha ... ok, NON si vedevano :smiley: :smiley: :smiley:

In effetti dovrebbero bastare ...

Guglielmo

P.S. : Abbiamo postato assieme. :slight_smile: No, direi che sulla schedina già ci sono i condensatori necessari e quindi dovrebbe andare ...

con questo semplice Sketch, non dovrei vedere i dati che mi arrivano dal PIN 8 & 10 sul monitor Seriale del PC di Arduino?

non va :frowning:

#include <SoftwareSerial.h>

//creo una nuova porta seriale via software
SoftwareSerial PortaSeriale = SoftwareSerial(10, 8);

//variabile
char EchoChar = 0;

void setup() {
//definisco il pin10(RX) come ingresso
pinMode(10, INPUT);
//definisco il pin8(TX) come uscita
pinMode(8, OUTPUT);
//setto la velocita della seriale software
PortaSeriale.begin(9600);
Serial.begin(9600);
}

void loop() {
//leggo dalla seriale(pin10)
EchoChar = PortaSeriale.read();
//invio il dato letto

Serial.print(EchoChar);

delay(10);

}

... se, come da REGOLAMENTO, non racchiudi il codice tra i tag CODE ... alcuni caratteri vengono mal interpretati ed il codice risulta errato/incompleto.

Cortesemente riprendi il tuo post e correggilo, grazie,

Guglielmo

P.S. : NO, non devi definire i pin della SoftwareSerial con la pinMode !

Questo codice è AMPIAMENTE collaudato :smiley: ... per fare scambio di dati tra la vera seriale (Serial) e la SoftwareSerial :

#include <SoftwareSerial.h>

#define  SS_RX 10            // PIN to receive from SoftwareSerial
#define  SS_TX 11            // PIN TO transmit to SoftwareSerial

SoftwareSerial ssSerial(SS_RX, SS_TX);

void setup()
{
  delay (2000);
  //
  Serial.begin(9600);        // Initialize USB Serial port
  //
  Serial.println("--- Ports ready ---");
  Serial.println("");
}

void loop()
{
  if (ssSerial.available() > 0) Serial.write(ssSerial.read());
  if (Serial.available() > 0) ssSerial.write(Serial.read());
}

Guglielmo

grande !!! l'ho provato or ora e.... non funzia :-((
ho pero' un paio di dubbi:

  1. sul DB9 parte MAX3232 ho saldato solo tre PIN, 2,3,5, ho trovato uno schema cha fa anche dei ponticelli fra il pin 1,4 e 7 e il pin 7,8, non ho fatto i ponticelli per paura di bruciare qualcosa ma vanno fatti?
  2. il PIN + segnale positivo dalla parte RS232 del MAX3232 non l'ho collegato a nulla, è corretto?

grazie.

Dovresti avere un collegamento tipo ...


Guglielmo

Si, è così, ho collegato il 2,3 e 5 nel seguente modo:

[DB9] 2-->TX [MAX3232] -->RX // [MAX3232]-->TX [ARDUINO] PIN-8 RX
[DB9] 3-->RX [MAX3232] -->TX // [MAX3232]-->RX [ARDUINO] PIN-10 TX

allego uno schema che ho trovato in rete che spiega come fare RS232 DB9 collegato al MAX3232, pensi che potrebbe andare cosi?

Mi sembra che hai invertito i pin verso Arduino ... il pin 11 del chip deve andare verso il pin che su Arduino hai dichiarato TX (Arduino pin 11 nel mio esempio) ed il pin 12 del chip deve andare verso il pin che su Arduino hai dichiarato RX (Arduino pin 10 nel mio esempio) ... ::slight_smile:

Guglielmo

Per cui RX del MAX3232 va nel PIN 10 configurato in IN Arduino e il TX del MAX3232 nel PIN 11 OUT Arduino, per cui RX e TX vanno pari su MAX3232 e Arduino (non invertiti).
Ho fatto un po' di prove:
Ho modificato il DB9 come da schema ma non va, ho invertito RX&TX e non va
Ho rimesso il DB9 come era originariamente e invertito RX&TX e non va uff.
metto un'immagine "dell'impianto"
Ho collegato il torsiometro a PC e i dati li trasmette, probabile che il MAX3232 sia fritto? inizialmente l'ho alimentato nell'uscita a 5V, poi spostato su 3,3V.

Ardu3232.JPG