Sposto qui la conversazione, perché per la piega che ha preso, mi sembra
più in tema.
Il giorno 15 febbraio 2017 10:22, Michele Bert <micbert75@xxxxxxxxx> ha
scritto:
Sul pc di un amico ho fatto un paio di prove.
1. Ho collegato le mie due interfacce USB-RS232 allo stesso pc, e tra di
loro con un adattatore NULL-MODEM (che credo incroci TX-RX e RTS-CTS, non
so se fa altro). Ho aperto i due dispositivi con due istanze di putty, e...
abra cadabra, sim sala bim... quello che scrivo su uno, compare dall'altra.
2. Nella medesima configurazione ho fatto il loop tra i pin 2-3 (la massa
in effetti in questo caso non serve), ed ecco che su uno dei terminali
ottengo l'echo dei caratteri che digito.
Ne deduco che il problema fosse in come usavo il minicom. I prossimi passi
saranno:
1. ripetere i test sul pc originale
2. ripetere i test sulla macchina virtuale
In ogni caso oggi mi hanno suggerito una possibile spiegazione alla
situazione che mi ha spito a fare tutti questi test, ovvero la mancata
comunicazione tra la xubuntu virtuale ed una scheda di controllo con un
PIC. Esula un po' dall'argomento della lista, ma la riporto, nel caso fosse
utile a qualcuno (anche se non è ancora confermata).
Lo standard RS232 prevede la trasmissione dati attraverso due tensioni
(sulle linee TX e RX) comprese tra 3V e 15V, positivi per rappresentare uno
0 logico, e negativi per un 1 logico, Alcune moderne interfacce USB, avendo
a disposizione solo l'alimentazione 0-5V della USB, usano questi due
livelli, e in molti casi funzionano (ecco perché le due interfacce tra loro
comunicano benissimo). Ad alcune vecchie seriali invece non (sempre)
bastano 0V per riconoscere un 1 logico, e questo potrebbe essere il caso
della mia vecchia scheda di controllo.
Se questo è il caso, avrò bisogno di un amplificatore di segnale...
La spiegazione che dai è _parzialmente_ corretta. Lo standard RS232
prevede un invertitore di segnale / amplificatore / smidt trigger.
L'invertitore converte il segnale alto (lo standar prevede segnali validi
tra i +3V e i +15V) in _zero_ logico (0V TTL) mentre il segnale basso
(-3V - -15V) in _uno_ logico (+5V TTL). Lo smidt trigger garantisce il
passaggio secco tra un livello e l'altro senza rimbalzi. Il livello tra
+3V e -3V non è definito e da luogo a risultati impredicibili.
Quindi non si parla di una semplice traslazione di livello tra 0-5V e +3
+15V ma tra 0/5V e +3+15/-3-15V a livelli invertiti.
Per fare ciò normalmente si usano dei chip come il MAX232 che, tramite un
circuito oscillante interno, raddoppia e inverte i +5V di alimentazione
per ottenere un +10/-10V per garantire il rispetto dello standard RS232.
Vedi ad esempio:
https://www.sparkfun.com/tutorials/215
Alcuni circuiti omettono tale convertitore di livello e quindi _non_
seguono lo standard RS232 e sono detti TTL Serial.
Ciò detto comunque non cambia molto la questione. Se devi comunicare con
un pic, che ha dentro una seriale ma naturalmente non un convertitore di
livello rs232, devi verificare che questo convertitore sia presente sulla
scheda, altrimenti è meglio usare un dispositivo non RS232 ma ttl
direttamente, controllando che il livello sia 5V perché alle volte ci
sono chip che vanno a 3V e rischi di bruciare tutto.
Usa per esempio un dispositivo come questo, universale per 3 e 5V:
https://www.amazon.it/FT232RL-Serial-Adapter-Module-Arduino/dp/B01IBIT0QC%
3FSubscriptionId%3DAKIAILSHYYTFIVPWUY6Q%26tag%3Dduc01-21%26linkCode%3Dxm2%
26camp%3D2025%26creative%3D165953%26creativeASIN%3DB01IBIT0QC