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?
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?
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.
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...
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
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
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
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.
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."