Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Dati paralleli 4bit trasmissione a distanza


Messaggi consigliati

Inserito:

Salve a tutti... ho la necessità di fare una piccola cosa..

Devo gestire 2 display lcd con controller hitachi HD44780 (classicissimo da fare col pic).. uno è su una scheda in locale e uno dovrebbe stare a circa 4-5 metri ...

tralasciando il fatto che uno è da 4x20 e uno è da 8x2, come posso trasmettere i 4 bit ,per il funzionamento in 4bit-mode, a distanza? pensavo a una serializzazione ma non so se è la soluzione migliore


Inserita:

cioa io avevo fatto qualcosa per controllare un LCD da remoto con un integrato I2C

lo trovi nel progetto cubloc di PLC Forum

Inserita:

ciao accacca ho cercato sul forum del procetto cubloc ma ho trovato solo una foto di gabriele riva che gestisce 2 lcd in contemporanea

puoi aiutarmi?

grazie!

Inserita:

se usassi integrati tipo shift register come il 4014 e il 4015 per serializzare il dato e magari per alzare il livello di tensione un max232 potrei risolvere la faccenda? certo dovrei trasmettere sia i dati che il clock..

qualche idea?

Inserita:

usatissimi con i microcontrollori sono gli integrati CMOS (serie 4000 "standard") tipo 4094, integrano (con architettura a 8 bit) uno shift register che pilota un registro di memoria che và in uscita su 3state.

Ti servirebbero solo tre segnali: un Dato, un CK e un Load.

Mandi serialmente il dato su D che viene impilato nello shift ad ogni colpo di Ck, poi mandi un fronte su Load che riversa il contenuto dello shift sul registro di uscita, lo stesso segnale Load (magari negato, vedi sulle caratteristiche..) lo puoi usare per dare al display il segnale di "dato valido".

Interessante è che il 4094 ha anche l'uscita dell'overflow dello shift in modo da poterne impilare un'altro di seguito....

Con un solo integrato da un terzo di euro piloti direttamente a 8 bit il tuo LCD abbreviando pure la procedura di scrittura (singolo byte invece di doppio nibble), e se ti servono altre uscite (led, display 7segmenti, buzzer, ec..) puoi sempre impilare un secondo 4094!

Ripeto: per estendere il numero dei pin di Output, magari in luoghi "remoti" i CD4094 sono una mano santa.....

Inserita:

Scusa leggo oggi grazie al valido intervento di ludo69

il link è questo

però non so se ci arrivi senza forumcard

Inserita:

ringrazio tutti e 2 per la risposta!!

ludo69: l'integrato che mi hai proposto è un serial to parallel giusto? avendo però a disposizione solo dati paralleli e volendoli serializzare, dovrei prima inserire un altro shift register che mi carica gli 8 bit e poi li serializza.. no?

accacca: purtroppo non ho la forum card e non riesco a vedere la pagina sad.gif

Inserita:

Caro Simons,

credo che tu dovrai pur utilizzare un microcontrollore per pilotare il display, quindi il lavoro di serializzazione lo farei SW così da impegnare, pure, meno pin del dispositivo....

Se devi inviare gli STESSI dati ai due display e voi la vita facile, allora puoi mettere sulle STESSE linee un altro CD4094 che ti pilota direttamente il display locale, così risparmi (se serve: il costo è un IC) svariati piedini sul microcontrollore!

Con un ST7 sono riuscito ad EMULARE il protocollo SIO di una porta seriale RS232.... visto che nell'ST7 NON è integrata la porta seriale RS232!!!

Inserita:

hai ragione ludo!! ci ho pensato un attimo dopo aver postato!! smile.gif

praticamente il procedimento sarà:

carico sul 4094 il byte da spedire all'lcd usando il pin DATA e il pin CLOCK

quando ho caricato il dato, alzo lo STROBE per mettere l'uscita sui pin paralleli del 4094 e contemporaneamente alzo l'enable dell'lcd per il dato valido..

al massimo avrò bisogno di 2 segnali di strobe se voglio visualizzare 2 cose diverse sui 2 display!

Giusto no?

Inserita:

l'appetito vien mangiando.....

lo STESSO strobe lo potresti mandare SIA al 4094 che al LCD in maniera tale che alla transizione (ipotesi: potrebbe essere l'inverso!) L->H il dato viene caricato all'uscita del 4094, poi (a dato quindi stabile..) alla transizione H->L il dato viene ritenuto valido dal LCD.

Se vuoi esagerare puoi usare un solo Strobe per tutto: basta mettere sui pin di uscita del microcontrollore, zona "locale", un 4094 la cui uscita di overflow la usi per impilare UN ALTRO 4094 (quello remoto!).

In questo modo basta mandare serialmente prima i bit del LCD-REMOTO, poi i bit del LCD-LOCALE e quindi su Strobe transizione L->H (i DUE registri caricano il dato) e poi transizione H->L (i due LCD caricano il dato).

In pratica: una porta doppia da 8+8=16 bit di cui il primo byte remoto, il secondo locale.....

Ti sarà utile quindi sul SW prevedere una "immagine" del dato corrente in due byte di memoria che poi con una subrutine spari fuori all'occorrenza.

Unico limite: la fantasia!

Inserita:

sai cosa.. l'lcd prevede una transizione L-H per l'enable.. quindi non so se ce la faccio con la temporizzazione dell'lcd.. cioè se dò lo strobe al register non so se i dati fanno in tempo a transitare nei buffer di uscita e quindi se l'lcd riesce a prendere il dato con la dovuta temporizzazione

Inserita:

Visto che il driver LCD ha un suo strobe invece del 4094 (shift registrato) puoi mettere un comune shift register (74HC164)oppure lo stesso 4094 con lo Strobe sempre attivo...

Il bello del 4094 (o ancor meglio la versione "robusta" 74HC4094: +/-5mA per pin con limite distruttivo di +/-25mA)è che puoi usarlo, visto il suo registro, come porta parallela di uscita pilotata in seriale per led/display7seg. insomma è una buona risorsa per remotare/estendereN'pin delle porte di uscita.

Inserita: (modificato)

Sottoscrivo la soluzione di Ludo69 vedo che ormai la soluzione ha preso una strada ben definita

Non potendo aggiugnere informazioni sul progetto di PLC Forum (non sarebbe corretto nei confronti di Gabriele) ti aggiungo un Link alla soluzione I2C trovato con google

sulla priam riga della descrzione c'è un linkad un altro progetto con la soluzioen proposta da Ludo

Modificato: da accacca
Inserita:

ultima domanda...

per la trasmissione seriale devo elevare il livello ttl a +/-12V oppure posso mandare diretto il segnale ttl?

Inserita: (modificato)

puoi mandare i livelli TTL, ma io metterei in serie alle uscite della scheda madre delle resistenze da 330 Ohm in modo da salvaguardare il dispositivo da possibili corto circuiti del cavo di remotazione, e alla fine del cavo metterei dei condensatori verso massa da.... 1000 pF? con in parallelo resistori da 3,3 kOhm in modo da filtrare eventuali disturbi a "glitc" captati dal cavo.... se hai problemi di disturbo puoi anche mettere alle due estremità del cavo dei nuclei per annullare le correnti di modo comune..... ma questa è un'altra storia!

P.S.

il "IIC" (o "I-quadro-C") bus è un sistema a trasmissione seriale che comprende un intero protocollo (credo sia uno standard creato da Philips) di comunicazione bidirezionale punto-multipunto con tanto di IRQ-request dai dispositivi remoti, quì invece ci stiamo solo sollazzando con dei shift register..... cioè infilando su un filo dei bit come perline in una collanina, altro che diadema della corona imperiale!

(rendo l'idea?)

Modificato: da ludo69
Inserita:

si.. capisco cosa vuoi dire... stavo appunto considerando l'idea di un bus I2C visto che ho trovato l'integrato di cui si parla nell'articolo di accacca .. i2c port extender

http://www.nxp.com/acrobat_download/datasheets/PCF8574_4.pdf

adesso mi guardo un po' com'è fatto e vedo di combinarci qualcosa.. visto che il pic ha già predisposta la funzione per il bus I2C..

Inserita:

ho visto inoltre che essendo un dispositivo in I2C , è indirizzabile per usarne fino a 8 insieme, quindi usandone 2 posso comandare sia il display in locale che quello in remoto semplicemente usando l'address dell' IC .. senza stare a smanettare con strobe e roba varia..

Inserita:

Fai bene, ma io con la mia formazione "industriale" non lo farei: i shift register sono prodotti dagli anni '70 e sono quindi uno standard industriale che una fabbrichetta spersa nel mondo continuerà a fare pure tra generazioni (credo), a volte gli integrati "specifici" hanno una vita di 10...20 anni e poi per trovarli....

In ditta proposero un'automazione custom basata su schede Z80, esistendo già all'epoca i primi microcontrollori storcemmo il naso, ma a distanza di circa 20 ANNI i ricambi per quelle schede (IC sere 74LS e famiglia Zilog Z80) ancora si trovano, di quello che avevamo adocchiato come possibile microcontrollore integrato..... oggi non se ne vede neanche l'ombra!

Industrialmente "Rustico&generico" batte "sofisticato&specifico" su tutta la linea!

(a meno di voler costringere il cliente dopo una decina di anni a fare nuovi investimenti.... wink.gif )

Inserita:

ciao, capisco quello che vuoi dire, però forse usando il bus I2C avrei meno errori di trasmissione.. no? così non sto a ricostruirmi un protocollo mio per la trasmissione.. inoltre essendo gli integrati indirizzabili usando solo 2 linee attivo quante uscite voglio...

se usassi gli shift register (che comunque per un'applicazione così semplice andrebbero pi

che bene) avrei bisogno di uno strobe per ogni register per attivare o meno le uscite..

non essendo un'applicazione industriale e quindi molto banale credo che opterò per il bus i2c..

grazie ludo wink.gif

Inserita:

Se la cosa comncia a complicarsi a livello di integrati puoi sempre utilizzare un secondo pic che gestisce il display remoto e comunica con il micro principale tramite RS485.

E' un po' sprecata per la distanza che hai ma puoi un domani arrivare anche molto piu' in la' senza problemi.

Gli unici problemi sono il costo, in quanto servono 2 transciever e 2 micro ma quello remoto puo' essere scelto tra i piu' economici in grado di gestire il display e il lavorarci un po' con il software.

Non servono conversioni di livello perche' funziona con i 5V a singola alimentazione, anche diverse.

Bastano 2 pin del pic, o al limite solo 1 in quanto da una parte e' sempre in trasmissione e dall' altra in ricezione.

Con 2 pin hai la gestione bidirezionale e qindi puoi implementare una sorta di handshake per la verifica.

Il segnale "RS485" che fa capo ad un pin del PIC imposti la trasmissione/ricezione del transciever: Alto=TX , Basso=RX.

I segnali di TX o RX transitano su "InOut" che fa capo ad un altro pin.

Il flusso del programma sara' piu' o meno fatto in questo modo:

Il pic "master":

- Operazioni varie: display, led, letture, ecc.

- Inzializza il buffer di Trasmissione (tutti i byte=0)

- Prepara i dati da inviare (buffer TX)

- Eventuali controlli sul CRC o altro

- Poni RS485=1 (Trasmissione)

- Invia i dati da trasmettere sul pin "InOut" (configurato come uscita)

eventuale controllo sulla risposta:

- Poni RS485=0 'Ricezione

- Inzializza il buffer di ricezione (tutti i byte=0)

- Leggi i dati ricevuti sul pin "InOut" (configurato come ingresso) memorizzandoli da qualche parte (buffer RX) con eventuale timeout (se riceve qualcosa entro un certo tempo, altrimenti passa ad altro).

- Eventuali controlli sul CRC o altro di quanto ricevuto

- Ripeti dall' inizio

Per il pic "remoto"

- Poni RS485=0 'Ricezione

- Inzializza il buffer di ricezione (tutti i byte=0)

- Leggi i dati ricevuti sul pin "InOut" (configurato come ingresso) memorizzandoli da qualche parte (buffer RX) con eventuale timeout (se riceve qualcosa entro un certo tempo, altrimenti passa ad altro).

- Eventuali controlli sul CRC o altro di quanto ricevuto

- ....altre operazioni:display, led, letture, ecc.

eventuale risposta:

- Inzializza il buffer di trasmissione (tutti i byte=0)

- Prepara i dati da inviare (buffer TX)

- Eventuali controlli sul CRC o altro

- Poni RS485=1 (Trasmissione)

- Invia i dati da trasmettere sul pin "InOut" (configurato come uscita)

- Ripeti dall' inizio

L' ho buttato giu' velocemente, anche lo schema...sara' sicuramente migliorabile.smile.gif

user posted image

Un qualcosa di simile l' ho fatto per costruirmi un rozzo slave in protocollo modbus RTU da utilizzare per i test a banco degli scada o altri software, senza dover acquistare un plc vero e proprio.

Se interessa ho un po' di porzioni di codice in picbasic che ho utilizzato.

Inserita:

io sono per le cose semplici, mi sentirei di indicare al nostro amico o la porta parallela IIC-bus (nel caso sia facilmente reperibile dal suo spacciatore abituale ph34r.gif ), oppure un comunissimo shift register (questo lo spacciano pure davanti all'asilo... sad.gif ).

Che dire, la semplicità è... STUPEFACENTE! cool.gif

Inserita:

grazie mille anche a mf, però preferisco la semplicità dell'I2C e shift register... smile.gif reperibile è reperibile visto che compro su ebay smile.gif

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...