Consigli e suggerimenti

Per me =E8 la prima volta che posto su questo NG e l'elettronica un hobby oltre che una passione.

Sto cercando di realizzare un sistema che mi consenta di inviare e ricevere comandi a diversi circuiti sparsi per casa mia utilizzando un bus...

Con l'assemblaggo e la programmazione assembly dei micro me la cavo abbastanza bene, ma non ho molta famigliarit=E0 con i componenti disponibili sul mercato, nel senso che potrei realizzare il sistema non usando proprio i componenti e le soluzioni migliori... dal mio precedente post (sui IC MAXIM) potete capire che faccio un po di confusione.

Se vi spiego cosa vorrei fare e in che modo, ver=F2 che mi date qualche suggerimento?

Sapevo di poter contare su di voi! ;)

Ho un circuito con un microcontrollore collegato su un bus: questo circuito viene definito come Master.

Allo stesso bus posso collegare un numero variabile di altri circuiti che chiamer=F2 Slave.

La distanza tra i circuiti Slave pu=F2 variare da pochi centimetri a diverse decine di metri... ma la lunghezza complessiva del bus non dovrebbe superare i 300 o 400 metri.

Il Master invia dati e interroga gli Slave con un polling continuo... naturalmente ogni Slave ha un indirizzo univoco.

E' importante che il tempo di ciclo di polling di tutti gli Slave sia il pi=F9 basso possibile, in modo da avere un immediato riscontro al comando inviato.

Inoltre (date le mie personali risorse) il costo dei singoli Slave dovrebbe essere ridotto al minimo... e proprio per questo motivo non mi interessa che la comunicazione sul bus sia full-duplex.

Quindi, secondo voi:

- Che tipo di Micro dovrei usare per il Master e per gli Slave?

- Che interfaccia potrei adottare per interfacciare il Master e gli Slave al Bus?

- Dovendo ridurre al minimo il numero dei fili del Bus senza compromettere il funzionamento quanti ne dovrei usare?

- Schemi? Link? Codici? Suggerimenti?

Io avevo pensato di usare dei Micro della MicroChip e le interfaccie verso il Bus della Maxim, utilizzando due fili intrecciati per il Bus... ma mi rendo conto che potrebbe non essere la soluzione migliore.

Se volete potete rispondermi in forma privata alla mia mail: snipped-for-privacy@yahoo.it

Il massimo sarebbe avere anche qualche consiglio su come interfacciare il Master ad un personal computer...! :)

Grassie!

Giuly

Reply to
Giuly
Loading thread data ...

Il giorno 21 Aug 2006 05:40:30 -0700, "Giuly" ha scritto:

Per molti qui è anche un occupazione ;-)

Fino qui la RS485 è l'ideale.

Questo dipende dal baud rate che selezioni e dal ritardo alla risposta che otterrai dopo un interrogazione, comunque si parla di millisecondi.

Bene, la RS485 lavora ottimamente

Dipende, io ti consiglio gli Atmel AVR per la velocità (16Mips @16Mhz) e per la semplicità di programmazione soprattutto se usi l'assembler

Qui trovi un thread con molte info e links:

formatting link

Il MAX485 va benissimo,

1 per ogni periferica (o no ?) ;-))

Non posso guglare adesso perchè sono collegato col cellulare. (sarei in ferie ma ogni tanto guardo la posta e i messaggi)

Il cavo è meglio sia schermato oltre che intrecciato e fai attenzione ai ground loops, altrimenti ti tiri dietro dei problemi.

Ti ho già risposto prima su i.h.e.

-- ciao Stefano

Reply to
SB

No, no! Se collego 256 Slave non posso permettermi di far passare 256 cavetti! Infatti volevo usare un bus proprio per usare una coppia di cavi per tutti gli Slave.

Giulia

Reply to
Giuly

Il giorno 21 Aug 2006 07:08:27 -0700, "Giuly" ha scritto:

Pensavo ti riferissi ai drivers, si il doppino può essere unico se non fai collegamenti a stella.

Attenzione che la linea deve essere terminata con una resistenza da 50 - 100 ohms per evitare riflessioni se vuoi andare veloce.

-- ciao Stefano

Reply to
SB

Con il protocollo master-slave che hai scelto questo non è possibile, o quantomeno dipende dalla velocità del bus.

Potresti fare in modo che il master interroghi solo gli slave sicuramente presenti, però con questo sistema la latenza aumenta col numero di slave installati e non è più fissa.

Se gli slave attivi presumi siano pochi per volta, potresti pensare di usare un protocollo di comunicazione CSMA/CD, multimaster. In pratica non esiste la distinzione tra master e slave e ognuno può trasmettere quando vuole. In questo modo si rende anche possibile la comunicazione diretta tra slave, senza per forza passare dal master. Ogni nodo della rete deve però essere in grado di sapere se il bus è occupato per non trasmettere quando è già in corso un'altra trasmissione. Inoltre deve essere previsto dal protocollo un robusto controllo di errore (CRC) e una ritrasmissione dei pacchetti non ricevuti. E' più complesso da implementare e debuggare ma ti garantisce una latenza minore. Inoltre funziona bene se i dati da inviare e i trasmettitori attivi sono pochi. Viceversa il bus sarebbe di continuo occupato e pieno di conflitti, rendendo di fatto la comunicazione impossibile.

PIC o AVR, io come Stefano preferisco gli AVR, ma è solo una questione di gusti.

L'RS485 mi sembra una buona scelta.

Se l'alimentazione degli slave è genrata localmente 3 sono sufficienti (2 per l'RS485 + la massa) altrimenti 4.

Purtroppo adesso al volo non ho nulla, l'unica cosa che posso fornirti è la descrizione di un protocollo aperto, tra l'altro già segnalato in un altro post, lo SNAP:

formatting link

Mi sembra una buona soluzione, è solo da affinare nei dettagli. Tipo che se vuoi connettere 256 dispositivi sul bus, l'interfaccia deve essere da

1/8 di carico standard.

Il master potrebbe essere esso stesso un PC, basterebbe solo un'interfaccia RS232/RS485, segui i consigli dati da Stefano se vuoi costruirla oppure acquistane una già fatta.

Prego

Reply to
Francesco Sacchi

puoi usare un CAN bus: si usano due fili, ci sono dozzine di CPU con CAN controller integrati ed il protocollo e' tutto hardware, i driver di linea sono economici e molto sicuri (82C250 o simili, con alcuni si raggiungono i 110 carichi). Per i micro ti suggerisco gli AVR, sono molto piu' semplici da usare dei PIC e si trova anche il compilatore C free (Gnu). La topologia di linea e' point-to-point, terminata alle due estremita' (come un bus per RS485)da 100..120Ohm. Per 400m la velocità non deve essere eccessiva. i cablaggi a stella sono da evitare. comunque e' possibile dividere la rete in diversi tronconi usando due bus driver per separare i segmenti.

In alternativa una bella RS485 con un protocollo master/slave. Per fare polling solo sugli slave presenti basta fare un giro preventivo per rilevare gli slave in rete e poi pollare sole questi. Aggiungi un indirizzo 'broadcast'(lo 0) per inviare a tutti gli slave contemporamente lo stesso messaggio.

Il CAN comunque e' meglio :-)

bye brix

Reply to
brix

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.