Ribaltare (not) comunicazione seriale

E' possibile ribaltare a livello software la trasmissione seriale?
Cioe' fare a livello software ciò che farebbe un porta logica NOT? quindi parlo di tutto il treno..
Nel caso affermativo, si puo' distinguere anche per singola direzione (solo TX oppure solo RX)?

Quale è il tuo problema ??? Cosa devi esattamente fare ???

Guglielmo

La domanda e' generica, volevo sapere se a livello software esiste un comando per ribaltare la situazione, per vari utilizzi a prescindere dal problema attuale.
Al momento il problema specifico e' che devo interfacciarmi in seriale con un' elettronica che lavora a 12V i cui terminali devono essere messi in PullUP, quindi dovrei utilizzare due transistor, uno per adattare il livello logico e l' altro per ribaltare il segnale che e' stato ribaltato dal primo transistor.

Ok, allora, per negare i vari bit esiste l'operatore not (~) ma ... non puoi applicarlo al "protocollo seriale" bensì solo alle variabili.

Ho idea che se devi adattare una trasmissione seriale, e vuoi usare la Serial, ... la cosa più semplice sia quella di aggiungere dell'HW esterno ... oppure ...
... devi scriverti la tua Serial con le specifiche che ti occorrono ... :roll_eyes:

Guglielmo

si si so che posso ribaltare il dato, la mia intenzione era di ribaltare tutto il protocollo.
con l' hardware non ho dfficolta' a farlo, ma mi era venuta questa curiosita'....per snellire il tutto (che poi e' solo 1 transistor + resistenza a canale).

Strana la seriale a 12V. Sei sicuro che non é una RS232?

Ciao Uwe

uwefed:
Strana la seriale a 12V. Sei sicuro che non é una RS232?

Ciao Uwe

si e' una seriale a 12V. E' una centralina auto di vecchia generazione, su linea KL a 12V in NRZ.

@ Deltoz : Quello che potresti probabilmente fare, a parte ovviamente adattare i livelli, è partire dalla SoftwareSerial (... implementazione via software di una porta seriale) modificandone il codice e facendone una tua che effettua le dovute conversioni dei bit ...

Guglielmo

Grazie per il consiglio Guglielmo.
Ma preferisco usare la UART Hardware e ci aggiungo un transistor per rinvertire il segnale, mi e' piu' comodo dell' uso della softwareserial.
L' ideale sarebbe stato avere questa possibilita' sulla UART Hardware, ma pazienza... :slight_smile:

UWE, che io sappia la seriale ha valori di tensione +-12V, ed infatti ci sono quando utilizzi i convertitori di livello ci sono i condensatori per accumulare la tensione generata dalle pompe di carica dei convertitori stessi.

Tornando al problema, in genere è più semplice cambiare una scocchezza software che non aggiungere transistor qua e la... La funzione che ti serve è la Bitwise NOT, vedi tu dove ti conviene metterla.

Secondo me ti conviene semplicemente negare la variabile tutte le volte che devi trasmettere in quanto ci sono un sacco di overload delle funzioni della seriale.

@Janos : Janos, se leggi tutta la discussione, vedi che il problema non è quello di invertire una variabile (... si è già parlato dell'operatore di "not") ma ... di cambiare il verso segnali elettrici della seriale che, se ho ben capito, lui deve interfacciare con un qualche cosa simile al NRZ ... o giù di li ... :wink:

Guglielmo

gpb01:
@Janos : Janos, se leggi tutta la discussione, vedi che il problema non è quello di invertire una variabile (... si è già parlato dell'operatore di "not") ma ... di cambiare il verso segnali elettrici della seriale che, se ho ben capito, lui deve interfacciare con un qualche cosa simile al NRZ ... o giù di li ... :wink:

Guglielmo

Infatti! io devo comunicare con questa centralina che ha una seriale con protocollo NRZ a logica positiva che lavora a 12V.
E' open collector e devo metterle in PullUP.
L'hardware lo sto facendo io ed e' in via di prototipazione quindi non ho problemi ad aggiungere un transistor e una resistenza o un integrato invertente (ma se era evitabile era meglio).
la mia MCU lavora a 3V3, la sua uscita TX la mando ad un fotoaccoppiatore , per adattare il livello a 12V e isolare galvanicamente, che pero' mi ribalta tutto il protocollo (visto che lavoro in pullUp), quindi devo usare un altro transistor e resistenza per ribaltare nuovamente tutto il protocollo.
E ovviamente il tutto anche sulla linea RX.

mmmmm.....forse ho trovato, inverto l' ingresso sul fotoaccoppiatore, in questo modo inverto la sua funzione.
Anziché comandare l' anodo vado a comandare il catodo del diodo led!
provo e vi faccio sapere :slight_smile:

@Guglielmo
Hai ragione, non c'avevo capito una mazza... :wink:

@Deltoz
Non sono sicuro di aver capito bene: i segnali tx e rx con i quali devi interfacciarti sono open-collector npn?

Ma vuoi realizzare una cosa del genere?


--> Guida alla realizzazione del cavo OBD-II

Grazie ai fotoaccopiatori la seriale può avere i livelli TTL.

Janos:
@Guglielmo
Hai ragione, non c'avevo capito una mazza... :wink:

@Deltoz
Non sono sicuro di aver capito bene: i segnali tx e rx con i quali devi interfacciarti sono open-collector npn?

Si esatto, open collector npn con logica a 12V.

PaoloP:
Ma vuoi realizzare una cosa del genere?


--> Guida alla realizzazione del cavo OBD-II

Grazie ai fotoaccopiatori la seriale può avere i livelli TTL.

No Paolo, questa e' un' interfaccia RS232 / OBD2. ( ma e' abbastanza simile).
Io devo interfacciare una MCU 1284P che lavora a 3V3 (ne abbiamo gia parlato) ad una centralina di vecchia generazione (non standard OBD) di cui conosco il protocollo.
credo che con il fotoaccoppiatore pilotato sul catodo dovrei risolvere.

Si, pilotando il Fotoaccoppiatore in sink risolvi perchè sui registri USART non è previsto da atmel un bit per inversione

icio:
Si, pilotando il Fotoaccoppiatore in sink risolvi perchè sui registri USART non è previsto da atmel un bit per inversione

Confermo, provato e funziona, pilotando direttamente il catodo.
Qualche noia con la scelte delle resistenze per verticalizzare il piu' possibile il fronte di salita in uscita, ma alla fine e' andato tutto per il verso giusto.