Dati seriali

Ciao a tutti, rieccomi al galoppo.
Sto interfacciando Arduino UNO con un software per pc.
Ho, però, problemi con i dati seriali.
La configurazione è:

  • Arduino UNO e Serial Monitor;
  • pin 0 ed 1 su cavo adattatore seriale/usb TTL;
  • emulatore porta seriale su pc.

Usando Serial.print("1"), sul Serial Monitor dell'IDE, visualizzo 1.
Ma, e quì l'amara scoperta, l'emulatore che gira sul pc riceve una "g" (67 hex, 103 dec).

Infatti, provando al posto dell'emulatore, il software a cui si interfaccerà Arduino, non ottengo nessuna reazione.
Dove mi sto incartando?
Perchè l'emulatore non riceve il numero 1 che gli ho mandato ma una g?

Grazie anticipatamente,
Mimmo.

sicuro che l'emulatore comunichi alla stessa velocità della seriale?
che si aspetti dei bytes e non dell'ascii?
che la massa del convertitore usb-seriale sia collegata con quella di arduino?
di aver collegato Tx di arduino con Rx del convertitore e viceversa?

BrainBooster:
sicuro che l'emulatore comunichi alla stessa velocità della seriale?

Si, entrambi a 9600.

che si aspetti dei bytes e non dell'ascii?

.... il comando completo da inviare è ZZAU02... ma escono i pupazzetti se visualizzati in ascii...
Precisamente A9 A9 55 7D 9B 00 hex.

che la massa del convertitore usb-seriale sia collegata con quella di arduino?

Si, sul pin accanto ad AREF (GND)

di aver collegato Tx di arduino con Rx del convertitore e viceversa?

Si, infatti i dati escono, ma arrivano sballati sull'emulatore, mentre il serial monitor dell'IDE me li visualizza corretti.
[/quote]

Questo il codice:

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

void loop() {
 Serial.print("ZZAU02");
 delay(1000);
  }

L'emulatore è Advance Serial Port Monitor, un software semplicissimo che di solito uso come sniffer.

Prova a spedire con Serial.write i singoli byte e vedi se vengono interpretati correttamente.

Niente da fare. Temo sia il cavo adattatore.
Ho provato a mettere l'emulatore sulla stessa porta di Arduino UNO (com 15) e riceve i dati correttamente.
La cosa che mi lascia perplesso è che collegando il software che devo pilotare, sulla stessa porta della UNO, non accade nulla.

Sono stanco, è da questa mattina che ci sbatto la testa, ora mi riposo un po e poi si vede.

Intanto grazie per le risposte.

Mimmo.

L'emulatore seriale com'è configurato?

Dovrebbe essere 9600, no parity, data 8 bit, 1 stop bit, no handshaking.

Buongiorno a tutti, eccomi dopo un bel riposo.

Tanto per non fare il pirlone, ho controllato i livelli dell'adattatore seriale/usb all'oscilloscopio per accertarmi ancora una volta che fosse TTL.
Confermato, i valori sono 0-5V.

La cosa particolare, facendo delle prove è risultata come sotto:
INVIATO RICEVUTO (decimanle)
A 95
B 47
C 94
D 46
E 93

Questo, aprendo la COM dell'adattatore e visualizzandola con Advance Serial Port Monitor (COM 19).
Se con Advance Serial Port Monitor apro la porta di Arduino UNO, la COM 15, visualizzo correttamente i caratteri inviati tramite la sua usb.
Il Serial Monitor dell'IDE, da i valori corretti.
Notate come i valori alternati vadano a scalare. Che stranezza, non me ne faccio una ragione.In Windows, la porta del cavetto è settata bene, 9600 8N1, nessun controllo di flusso.

Dedurrei che il cavetto funziona ma qualcosa non pareggia i conti...

Mimmo.

Rieccomi.
Assodato che è il cavo convertitore.

Ho provato a scambiare dati tra la porta seriale hardware ed una creata apposta, software.
Ebbene, il cavetto convertitore restituisce valori differenti dalla tabella ascii sia in ricezione che in trasmissione.

Potrebbe imputarsi al fatto che è cinese e che il driver installato effettui una qualche operazione di conversione dei dati per adattarli ad una tabella ascii per tastiere cinesi?
L'ho buttata lì tanto per farmene una ragione :roll_eyes:

Mimmo.

perchè non provi a fare un loopback?
cioè sul cavetto collega tx con rx d apri un terminale, se tutto funziona correttamente, qalsiasi cosa scrivi sul terminale dovrebbe tornarti indietro così come l'hai scritta.
e così ti levi i dubbi sul cavetto :slight_smile:

BrainBooster:
perchè non provi a fare un loopback?
cioè sul cavetto collega tx con rx d apri un terminale, se tutto funziona correttamente, qalsiasi cosa scrivi sul terminale dovrebbe tornarti indietro così come l'hai scritta.
e così ti levi i dubbi sul cavetto :slight_smile:

Stavolta divento scemo.
Grazie della dritta. Il cavo funziona regolarmente in loopback. Mando 1 e ricevo 1 ecc.

Lo collego all'Arduino uno e faccio uno scambio di dati tra il cavetto su seriale software e la seriale hardware e.... scrivo 1 e ricevo g. La cosa è bidirezionale, quindi sia se mando da seriale hardware che da software.

Ma allora, la colpa di chi è?

prova con putty e dimmi se hai gli stessi risultati
http://www.putty.org/

Mi sembra del tutto evidente che la "colpa" ricade sul software di emulazione.

Forse viene influenzato in qualche modo dall'emulatore dell'IDE.

Perché non provi ricaricare i driver dell'Advance Serial Port Monitor o addirittura tutto il programma?

Sarà che non è molto intuitivo per me o forse è un passo avanti ma non vede altro che la Com1 (fisica) del pc e non capisco come usarlo.

Ora metto Arduino sotto oscilloscopio e controllo i valori di tensione della porta seriale.

seleziona serial come protocollo e poi basta che scrivi il nome della porta com e clikki sul tasto open

Svelato l'arcano, l'oscilloscopio non mente.

I segnali TTL del cavetto sono opposti a quelli di Arduino.
In trasmissione, Arduino ha lo stato logico alto sul pin TX e modula basso.

In trasmissione, il cavetto ha lo stato logico basso sul pin TX e modula alto.

Ecco svelato il perchè dei dati a pene di segugio. Vedo se ho un integrato inverter nel cassetto e dovrei risolvere.

Mimmo.

ma il convertitore usb2serial cos'è?
ftdi
prolific
cypress
altro.. ?

Una cineseria che presi diversi anni fa, un HL-340 ma non so che chipset monta, probabilmente un CH340.
Fatto sta che ha i livelli TTL invertiti e non è utile a niente.

Cercando in rete ho appena trovato questo:

"The actual chip is probably a CH340 (the 341 also supports a parallel port). It may be some other chip compatible with the CH340.
There are two versions of the CH340. One is intended for use with RS-232 drivers and receivers, such as the MAX-232. The other version uses the opposite logic levels on the I/O's and is intended for use with infrared links."

Mimmo.