Collegare 2 dispositivi in parallelo...

Ciao, chiedo consigli su come risolvere questo problema: tramite le porte usart di un microcontrollore Pic ricevo (ed invio) segnali seriali ad un dispositivo esterno. Ho attivato l'interrrupt sulla porta del pic che riceve i segnali in modo da attivare la procedura di lettura di quanto ricevuto e poi di risposta.

Ora pero' vorrei installare un altro dispositivo uguale che faccia lo stesso lavoro: esempio= dalla tastiera1 ( potrebbe essere la 2)invio un comando, attivo cosi' l'interrupt, leggo il comando ed invio una risposta a tutti e due le tastiere .

Ora appunto la domanda: come si possono collegare le due tastiere sulla stessa porta in output ed in input del pic, praticamente in parallelo? Quali accorgimenti ? Grazie . roberto

Reply to
robert0
Loading thread data ...

Il giorno Fri, 22 Apr 2005 09:29:13 GMT, "robert0" ha scritto:

Le tastiere sono collegate in seriale?

Mah, se ho ben capito direi che potresti usare una linea RS485 half-duplex con un protocollo master-slave.

Se qualcuno di questi termini non ti è chiaro chiedi pure o fai una ricerca con Google.

ciao Stefano

Reply to
SB

Grazie per la risposta.

La prima tastiera e' collegata ai pin USART del pic , 2 pin uno per IN l'altro per OUT dati.

Quello che vorrei fare , non mi sono spiegato bene nel mio primo post, e' aggiungere una tastiera che faccia lo stesso "lavoro". Ora la comunicazione seriale mi funziona con una tastiera sola, e vorrei aggiungerne un'altra ma non so se e' sufficiente collegarla agli stessi pin della prima senza ottenere interferenze o problemi di trasmisssione. In pratica poi io non so prima da quale tastiera mi arrivano i dati , puo ' essere la 1 oppure la 2 ma qualsiasi sia deve far scattare l'interrupt ( e per questo devono necessariamente essere collegate entrambe al pin IN del pic) e poi a tutte e due devo inviare una risposta( e per la stessa ragione devono essere collegate entrambe al pin OUT del pic). Esempio ancor piu' pratico: 2 tastiere per ON/OFF centrale antifurto : una e' nell'ingresso l'altra nella cucina dell'alloggio.Da qualsiasi tastiera parta il comando che va alla centrale deve fare scattare l'interrupt con il quale la centrale risponde alle due tastiere accendendo un led di allarme attivato presente in entrambe.

Ora, e' sufficiente collegare in parallelo i cavi che arrivano dalle tastiere o ci sono accorgimenti da tenere presente ( es un diodo che non permetta ai dati che arrivano da una tastiera di andare alla seconda ma che raggiungano solo il pic)? Ciao e scusa la prolissita'. roberto

Reply to
robert0

Il giorno Sat, 23 Apr 2005 08:13:10 GMT, "robert0" ha scritto:

La sintesi è una dote rara ;-) Comunque avevo capito bene.

Non puoi usare più porte RS232 in parallelo, ma devi usare una RS485 in half duplex e fare un protocollo master-slave in daisy-chain per interrogare le tastiere in polling. (esiste anche il tolken ring ma è più complicato e questo non è il caso)

La cosa non è banale, ma richiede modifiche hardware e software.

Il pratica devi inserire un MAX485 al posto del MAX232

formatting link
formatting link

e devi collegare i due pins 6 e 7 del MAX485 in parallelo su tutti i dispositivi.

qui un appnote che spiega un po':

formatting link

Poi occorre un protocollo, e stabilire chi è il master e assegnare un indirizzo per ogni slave

Ti copio anche gli standard di comunicazione:

;STANDARD DI COMUNICAZIONE SECONDO DIN 66019 STX = 02H ;INIZIO TRASMISSIONE ETX = 03H ;FINE TESTO EOT = 04H ;FINE TRASMISSIONE ENQ = 05H ;RICHIESTA COLLEGAMENTO AL TERMINALE ACK = 06H ;DATO RICEVUTO CORRETTAMENTE RISPOSTA "OK" NAK = 15H ;RISPOSTA "NON COMPRESO, RIPETERE"

Il protocollo RS485 dovrebbe usare gli standard STX(02h) per iniziare e ETX(03h) per finire la stringa,e al centro solo caratteri ASCII>20H

In genere prevede anche un checksum o BCC (può essere lo xor di tutte le parole della stringa o gli otto bits bassi della somma, a seconda del protocollo).

La stringa diventa: 02h..addr...dati....03h BCC

Per esempio, per trasmettere all'indirizzo 01 "ABC" diventa: (in bytes esadecimali)

2 30 31 34 31 34 32 34 33 3 +1byte di BCC

"A" che in ascii è 41H diventa 34H 31H cioè l'ascii di 4 e 1 e così via

(Se BCC

Reply to
SB

...

[CUT]...................

Ancora grazie per la completa spiegazione che mi hai dato ... in effetti credevo che la cosa fosse moolto piu' semplice ma credo ci sia un equivoco di fondo su come e' fatto il circuito quindi spiego ancor meglio ( non che voglia insegnare qualcosa ma per rendere piu' chiaro):

il pic ( pic16f877 che uso ora ma anche molti altri) ha la comunicazione seriale integrata quindi non uso nessun altro integrato esterno. Programmando poi con picbasic la trasmissione e' relativamente semplice infatti basta usare il comando Serout x,z[Dati da inviare] per mandare dati dal pin x e Serin y,z[Variabile] per ricevere i dati dal pin y alla velocita' z ( i comandi che ho scritto sono semplificati ,in realta' hanno molti parametri in piu'). Inoltre sul pin y in ricezione posso settare un interrupt, cioe' metto il programma del pic in pausa e se arriva qualcosa dalla tastiera sul pin y il programma si risveglia e legge i dati in arrivo e poi li elabora. Sono quindi 2 soli cavi uno per IN e l'altro per OUT dei dati. Certo per ora un solo dispositivo (cioe' una tastiera) e' connesso a quei

2 pin e come dicevo vorrei aggiungerne un altro.Non mi serve discriminare chi ha inviato i dati , mi basta leggere quanto in arrivo altrimenti si , hai ragione , dovrei usare un altro protocollo (per esempio I2c che e' anch'esso implementato sul Pic ed e' supportato benissimo dal picbasic). Provero' su una bredboard a mettere il pic, le 2 tastiere collegate in parallelo e 2 led connessi a quest'ultime,forse 2 diodi ( non so quali) sugli out delle tastiere affinche' quando una tastiera invia i dati questi "viagggino" solo al pic e non arrivino all'altra tastiera per non creare interferenze. Ciao. roberto
Reply to
robert0

Il giorno Sat, 23 Apr 2005 12:26:38 GMT, "robert0" ha scritto:

UART a 5V con livelli ttl, quindi. Di solito non si usa.

Il protocollo I2C è un bus open collector (più sensibile ai disturbi) e di solito si usa per delle comunicazioni all'interno della scheda o al massimo dello stesso contenitore. In ambiente industriale si usano altre soluzioni come ti ho scritto prima.

Hai sempre la possibilità che se vengono premuti tasti in contemporanea hai un risultato errato, e comunque questo tipo di soluzioni non funziona con fili lunghi o in ambienti disturbati.

ciao Stefano

Reply to
SB

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.