Newsgroup: it.hobby.elettronica.digitale
Titolo: SPI ATmega e lunghezza cavi

Ciao a tutti, innanzi tutto un saluto a tutto il gruppo (dato che e'
la prima volta che scrivo qua), ho un piccolo problema con una
comunicazione SPI fra due atmel serie atmega, lo schenario e' questo,
master atmega128 e 4 slave atmega32, il cavo flat che collega il
master agli slave e' lungo circa 50/60 cm (dal master all' ultimo
slave), il mio problema e' che non riesco a salire con la velocita',
al massimo riesco a fare mezzo megabit, per ora non ho aggiunto nulla
nelle porte dei micro, ovvero buffer o driver di linea, pensavo per
risolvere il problema di convertire tutti i segnali in differenziale
(con dei max485 per esempio) la mia necessita' e' di arrivare almeno a
qualche megabit di velocita' (uso un quarzo da 14.7456Mhz sia sui
master che negli slave), puo' essere una soluzione valida o e'
sufficiente un driver es. 74HC245 o similari ???
Grazie mille in anticipo.
Mario Machine'

Mario Machine' ha scritto:

I segnali differenziali sono certamente più affidabili sotto il profilo 
dell'immunità ai disturbi, è anche importante terminare le linee 
correttamente. Cerca sul sito della Maxim qualche IC che abbia 
driver/receiver RS422 multipli.
Giovanni
---
ChibiOS/RT 
http://chibios.sourceforge.net

Mario Machine' ha scritto:

UScire con l'SPI dalla scheda non è cosa buona....
considera solo i possibili disturbi che entreranno direttamente nel micro!
Comunque si può fare, a patto di diminuire la velocità all'aumentare 
della distanza (come hai riscontrato anche tu)
Quindi o bufferizzi o vai in RS485.
Ad esempio con 3 op-amp LM339 (1+2per la bidirezionalità) qualche tempo 
fa sono riuscito a raggiungere i 100 metri con l'I2C
http://dev.emcelettronica.com/02-schematic-0
Per ora solo in inglese, ma la settimana prossima , prometto,
lo pubblico anche in italiano su
http://it.emcelettronica.com
Emanuele

 ha scritto:

Se le schede sono all'interno di un contenitore metallico e i fili sono in un
flat cable, direi che 50/60cm non sono un problema.
Io con una soluzione simile, non con una SPI ma con una USARTvado fino a circa
4Mhz in più di mezzo metro di cavo.
Il problema può essere principalmente nella capacità dei collegamenti rispetto
alla potenza del driver.
In pratica dovrebbe bastare qualche porta come buffer (io uso 1/4 di 74HC126
soprattutto perchè era in più) per risolvere il problema.
I colegamenti in differenziale come RS422 o RS485 si usano quando le distanze
sono molto più grandi e ci si deve muovere in ambienti ostili, ma 50-60cm
all'interno di un ambiente schermato sono un altra cosa.
--
ciao
  Stefano

 soprattutto perchè era in più) per risolvere il problema.
Credo che, in caso di flat cable, alternare i conduttori che portano il
segnale a conduttori collegati a massa o all'alimentazione possa aiutare
parecchio.
Visto che, se si porta un segnale si deve portare anche un riferimento di
massa che faccia un percorso quanto più possibile simile a quello del
segnale, e che è bene che l'alimentazione segua lo stesso percorso, trovo
sia una buona idea usare la metà dei conduttori del flat per portare massa
ed alimentazione.
Tra l'altro questo dà origine ad un layout dello stampato molto comodo, se
si usano connettori standard a due file di contatti, in quanto una fila dei
contatti del connettore sarà dedicato a massa ed alimentazione (con la
possibilità di metterci anche un bel condensatore di spianamento) e l'altra
fila ai segnali.
Nel caso paricolare, userei un flat a 10 poli (quelli a 6 non li uso perché
ho standardizzato a 10 per approvvigionarmi di quantitativi un po'
superiori di cavo e connettori) con i pin 1, 2, 3, 5 a massa, 7, 9, 10
all'alimentazione ed i restanti per MOSI, MISO ed SCK.
Sbaglio?

Sbaglio?
No, anche se nel caso specifico non credo sia determinante.
Cioè in altre parole, se non usa dei driver con abbastanza birra, non
basterebbe.
--
ciao
  Stefano

 basterebbe.
Questo č fuori di dubbio. Ma, secondo te, gli AVR hanno abbastanza birra?
Non mi pare di aver visto nulla di particolare, sul datasheet
dell'ATmega48/88/168, riguardo al pin B0, che č in grado di buttar fuori il
clock di sistema, ovvero fino a 20 MHz.
Non l'ho mai usato, quindi non dico di averlo sperimentato, ma nemmeno di
aver letto approfonditamente il datasheet, perň fossi in lui, ci proverei.

Ciao a tutti, si le schede sono singolarmente in contenitori metallici
ovvero un contenitore contiene una scheda, e collegate esternamente da
un flat, ho pensato ad un circuitino con dei MAX3095 e MAX3042, sono
driver differenziali con una velocita' che mi sembra adeguata a quella
che dovrei usare io, che ne pensate ??? anche perche' oltre ai 3
segnali SPI ho anche altri 8 segnali da portare in giro, una soluzione
con driver, dovrebbe essere abbastanza sicura anche in caso di
eventuali prolungamenti del cavo e/o disturbi vari in giro.

aver letto approfonditamente il datasheet, però fossi in lui, ci proverei.
Io fossi in lui metterei almeno un paio di porte di un 74HC244-245 per bufferare
le uscite, qualche altra per disaccoppiare gli ingressi e dormirei tranquillo.
Al limite aggiungerei qualche resistenza da 10 ohm in serie alle uscite e dei
condensatori cerdis da 100pF massimi sugli ingressi, ma poi occorre guardare
bene le forme d'onda con un oscilloscopio.
--
ciao
  Stefano

 un flat
Un flat esterno?
Se proponessi una cosa del genere ai miei clienti mi picchierebbero.

 aver letto approfonditamente il datasheet, però fossi in lui, ci proverei.
Le porte degli AVR possono erogare al massimo 20mA, da quanto posso
vedere dai miei problemi e prove direi che non sono sufficienti per
pilotare la linea.

 ha scritto:

Ciao, alla fine penso che per stare dalla parte del sicuro al 100%
usero' gli integrati dalla MAXIM MAX3045 e MAX3092, sono driver
differenziali a 10 Mbit, mi consentono di sfruttare tutta la velocita'
dell' SPI ed essendo differenziale non ho problemi per flat o 10cm in
piu' di cavo.


Ciao, forse mi sono spiegato male, ovvero il sistema e' cosi composto,
un contenitore con dentro la CPU e 4 contenitori con dentro gli slave,
il tutto montato in un cestello SUBRACK 19'', in realta' il flat e'
quello che dovrebbe essere un backplane sul retro del subrack.

piu' di cavo.
Le linee differenziali sono adatte a quello che vuoi fare, ma tieni presente che
collegando i dispositivi con dei cavi flat esterni al contenitore in caso di
omologazione CE del dispositivo devi sottoporre i cavi a prove come il burst o
la suscettività alll'emissione irradiata, e se non usi schermature e filtrature
rischi di avere dei problemi lo stesso.
--
ciao
  Stefano

piccola domanda che centra con il titolo della discussione...:
ho delle piste di una spi che passano sotto uno switching da 1A di
corrente massima... questa spi la uso per programmare un atmega; se do
alimentazione a tutta la scheda (quindi lo switching incriminato entra
in funzione) il ponyprog non programma; se invece alimento
esternamente solo il micro tramite un'altra schedina esterna tutto
funziona abbastanza bene... può essere colpa del suddetto switching
che interferisce con le piste di spi (c'è da dire che una volta avevo
provato a togliere questo switching ma non cambiava nulla)? oppure è
possibile che il ripple di circa mezzo volt che ho constatato esserci
sull'alimentazione del micro di fastidio in fase di programmazione? le
piste saranno lunghe sui 10 cm circa... e spessore di 10 mils. grazie
per l'aiuto.
Damiano

 le piste saranno lunghe sui 10 cm circa... e spessore di 10 mils.
Anche quella di reset? Non ha alcun pull-up + condensatore?

si infatti... anche scollegando lo switching non funziona; comuque il
reset ha una pull up... ma non ho messo il condendastore... non credo
sia importante perchè alla fine la scheda si programma alimentandola
esternamente con una tensione più bassa (in pratica metto 3,3 V
sull'alimentazione del micro, a valle dello switching del 5V)...

Damiano....@gmail.com
:

Mah, non so che tipo di switching usi e, anche se lo sapessi, non ti saprei
dire se può interferire con l'alimentazione a valle, comunque non mi sembra
affatto una buona idea "retroalimentarlo".
Quanto al ripple che hai riscontato durante la programmazione, direi che
può solo essere dato un'alimentazione che non è in grado di fornire la
corrente richiesta.
Che questo avvenga perché l'alimentatore è troppo poco potente, perché è
collegato tramite qualche resistenza parassita, perché parte della corrente
viene "mangiata" dallo switcher, o perché hai usato qualche pin di
programmazione per controllare un carico un po' "impegnativo" non posso
dirtelo.

 dirtelo.
no scusa mi sono spiegato male... il ripple c'è sempre, penso perchè
ho usato un induttanza troppo bassa di valore... ne ho ordinate di più
alte... potrebbe essere quello no? comunque alimentando a 3,3 a valle
dell'alimentatore mi permette di programmare il micro... e di fare
tutto... perchè lo sconsigli?
grazie