Newsgroup: it.hobby.elettronica.digitale
Titolo: Codifica un pò paricolare

Ciao,
un mio cliente mi ha chiesto di creare un sistema di trasmissione dati 
su due fili attraverso due microcontrollori MC68HC908JL8.
Nella sua richiesta mi ï¿œ stato specificato che non posso utilizzare ne 
le interfacce SPI, ne i timer per generare un clock di trasmissione e ne 
gli IRQ (tutto questo perchï¿œ ha giï¿œ creato il pcb con i pin SPI 
utilizzati e il sw che utilizza giï¿œ TIMER e IRQ).
Uno dei 2 uP ï¿œ il MASTER ed ï¿œ lui che si prende cura di 
richiedere/fornire i dati allo SLAVE (2ï¿œ uP).
Io avevo pensato di utilizzare un segnale come DATA e un segnale come 
CLOCK e un pacchetto di dati di un numero di byte fisso.
Il problema ï¿œ che quando trasmetto ogni singolo bit non ho la sicurezza 
che lo SLAVE abbia correttamente letto il bit (in quanto lo SLAVE si puï¿œ 
trovare a leggere il dato in tempi non precisi).
Ho pensato anche, ad ogni singolo bit trasmesso, di cambiare la 
direzione della linea di CLOCK per avere una conferma dallo SLAVE, ma il 
software diventa complesso.
Esite un protocollo che mi permetta di risolvere il problema.
Grazie tantissimo a tutti.
Sabrina

 trovare a leggere il dato in tempi non precisi).
Se lo slave riceve il clock su un pin di interrupt (mi pare che questo 
lo puoi fare, se il micro ne ï¿œ provvisto) puoi avere la "certezza" di 
leggere correttamente sincronizzandoti sui fronti del clock.
Altrimenti se sei paranoico puoi far ritrasmettere allo slave lo stesso 
pacchetto (il clock ï¿œ *sempre* generato dal master).
Tieni conto che se non trasmetti a velocitï¿œ fantasmagoriche non 
dovrebbero esserci grossi problemi.
Marco

 CLOCK e un pacchetto di dati di un numero di byte fisso.
Potrebbe essere un'idea.
In ogni caso, prima di fornire una risposta bisognerebbe sapere:
- Quanto sono distanti i 2 microprocessori?
- Com'ï¿œ l'ambiente in cui "vivono" ? (disturbi, etc...)
- Quanti dati si devono scambiare?
- A che velocitï¿œ?
Se rispondi a queste domande si puï¿œ pensare a qualcosa di piï¿œ dettagliato.
Altrimenti parlando cosï¿œ in generale mi verrebbe da dirti di fare una 
comunicazione seriale asincrona a bassa velocitï¿œ con sopra un piccolo 
protocollo che preveda un minimo di ridondanza o controllo degli 
errori, ma potrebbe non essere la scelta migliore se non si conosce il 
contesto.
-- 
  _|/ Francesco Sacchi - Develer S.r.l., R&D dept.
   |\ 
http://www.develer.com/
 - 
http://www.bertos.org

 su due fili attraverso due microcontrollori MC68HC908JL8.
Ah, dimenticavo.
I fili saranno 3: CLOCK, DATA e GND.
Marco

Francesco Sacchi ha scritto:

Grazie per la risposta Francesco,
- la distanza ï¿œ di circa 50cm senza cavo schermato
- i due micro fanno parte di 2 schede poste vicino ad un tornio
- devo trasmettere 1 pacchetto da 12 byte
- il piï¿œ veloce possibile (potrebbe giï¿œ andare bene 50ms per la 
trasmissione completa.
Ciao e grazie ancora
Sabrina


Se si tratta solo di un pacchetto e non ï¿œ richiesto un protocollo piï¿œ 
complesso io farei cosï¿œ:
- Normalmente, i 2 fili stanno a livello logico alto, uno dedicato 
alla comunicazione Master->Slave, l'altro per la comunicazione 
Slave->Master
- Quando il master vuole il pacchetto, lo richiede allo slave 
semplicemente abbassando il suo filo di comunicazione. In questo 
momento il master si mette in ascolto sulla linea di ricezione dallo 
slave (quindi non sono necessari IRQ).
- Quando lo slave si accorge della richiesta (anche qui non ï¿œ 
necessario un IRQ), inizia ad inviare tutto il pacchetto con una 
comunicazione seriale asincrona molto lenta, tipo 2400 o 4800baud.
- Al pacchetto lo slave aggiunge un checksum; per 12 byte dovrebbe 
bastare un semplice checksum ad 8 bit, magari meglio se un rotating 
checksum che ï¿œ piï¿œ sicuro e non richiede troppi calcoli.
- Il master riceve tutto, disattiva il pin di richiesta e controlla il 
checksum: se non va bene richiede nuovamente il pacchetto.
Purtroppo senza usare gli interrupt, sia il master che lo slave 
saranno bloccati l'uno ad inviare e l'altro a ricevere, e in quel 
frangente non potranno fare altro. Perï¿œ con questo sistema dovrebbe 
funzionare tutto, senza necessitï¿œ di IRQ e con un buon controllo sugli 
errori.
Sono in ogni caso da prevedere timeout vari (tipo: il master richiede 
il pacchetto allo slave ma esso non risponde).


 ha scritto nel messaggio 
news:4afb19fa$0$6830$5fc...@news.tiscali.it...

Il protocollo i2c ï¿œ su 2 fili + gnd.
Esegui una umulazione sw e sei a posto.
Inoltre, come richiesto, lo slave fornisce anche i segnali di ack e potrebbe 
svolgere a sua volta (se necessario) la funzione di master.

 Sabrina
Puoi aggiungere dell'hardware minimo (un paio di pull-up e/o diodi)?
Le due linee di I/O come possono essere configurate (open-collector,
output con possibilità di input diretto al pin anziché dal registro,
ecc.)?
A livello di temporizzazioni come sei messa? Puoi agganciarti ad un
timer o tutto deve essere assolutamente asincrono in polling?
Ciao.
Piccio.

   |\ 
http://www.develer.com/
 - 
http://www.bertos.org
Il protocollo Lin sviluppato mi pare dalla Sony usa un filo per i segnali e 
massa, veniva usato per il controllo dei caricatori cd per auto ed � 
bidirezionale.
Prova a interrogare google se trovi le specifiche del Lin e vedere se ti pu� 
esser utile.