Go Down

Topic: Dati seriali (Read 2166 times) previous topic - next topic

staffani

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.

BrainBooster

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?

staffani


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

Si, entrambi a 9600.

Quote

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.

Quote

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

Si, sul pin accanto ad AREF (GND)

Quote

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:
Code: [Select]

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.

leo72

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

staffani

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.

cyberhs

L'emulatore seriale com'è configurato?

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

staffani

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.

staffani

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  :smiley-roll-blue:

Mimmo.

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 :)

staffani


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 :)


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 è?

BrainBooster

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

cyberhs

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?

staffani

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.

BrainBooster

#13
Sep 19, 2012, 05:08 pm Last Edit: Sep 19, 2012, 05:11 pm by BrainBooster Reason: 1
seleziona serial come protocollo e poi basta che scrivi il nome della porta com e clikki sul tasto open

staffani

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.

Go Up