Newsgroup: it.hobby.elettronica.digitale
Titolo: I/O su USB o parallela? (lungo)

Ciao a tutti.
+++
Tra qualche mese comincero' la costruzione di un plastico ferroviario
per modelli in scala H0 --1:87--.
Tralasciando i sistemi in corrente alternata tipo Marklin, attualmente
ci sono 2 modi per comandare un trenino:
- quello analogico tradizionale, in cui la velocita' e il senso di
marcia sono stabiliti dal segno e dall'entita' della tensione
applicata ai binari
- quello digitale, in cui viene sempre applicata la massima tensione
continua --12V--  a cui viene sovrapposta una serie di segnali
digitali, che vengono interpretati da un decoder a bordo delle
vetture, il quale si incarica di comandare il motore --ed
eventualmente gli altri accessori della vettura, come luci, fischio,
vapore, ecc--.
Oltre ai decoder per le locomotive, ci sono decoder anche per le
carrozze passeggeri --che accendono le luci di coda ed interne--,
decoder per semafori --che accendono le varie luci--, per i lampioni e
per gli scambi --che muovono il deviatore sul binario richiesto--.
In un sistema analogico tradizionale, le luci delle carrozze e delle
locomotive vengono alimentate dai binari e quindi, a meno di un
escamotage, la luce prodotta e' proporzionale alla velocita' del
treno. Naturalmente, questo non e' tanto bello...
Inoltre, in questi sistemi i lampioni, i semafori e gli scambi sono
azionati a mano mediante l'uso di pulsanti e rele'.
E' naturale che, man mano che la dimensione del plastico cresce,
gestire manualmente il tutto diventa sempre piu' difficile e,
soprattutto, e' particolarmente complessa la gestione del movimento di
piu' treni sullo stesso anello.
Per realizzare un sistema digitale, si puo' acquistare --od
autoprodursi-- una o piu' consolle di comando, che tipicamente hanno
una serie di pulsanti per decidere quale locomotiva o quale segnale,
scambio o semaforo azionare ed un jog che si utilizza per impostare la
velocita' e il senso di marcia oppure il valore di quel parametro, la
direzione dello scambio, ecc.
Sarebbe di grande aiuto, molto realistico e bello avere un sinottico
delle stazioni e una serie di segnali che indicano la posizione dei
treni, lo stato dei semafori e quant'altro.
+++
I sistemi digitali hanno i loro pro e i loro contro e non sono ancora
sicuro di voler realizzare il mio impianto in modo digitale. In ogni
caso, vorrei considerare la possibilita' di fare il sinottico su pc e
quindi di comandare semafori e scambi da pc.
Facendo una prima stima, suppongo di dover pilotare singolarmente 200
segnali differenti del mio tracciato --ogni scambio ne riceve 2, ogni
semaforo 3 o 6, accensione dei lampioni, azionamento dei passaggi a
livello, azionamento degli sganciavagoni, rotazione della stazione
locomotive, ecc--, che potrebbero, pero', essere anche di piu'. Nel
momento in cui realizzero' il tutto, sapro' con precisione quanti
sono, ma partiamo con questa stima.
Vista la esosa potenza di calcolo dei computer di oggi, e visto che il
pc che metterei nei pressi del plastico sarebbe dedicato solo a
questo, potrebbe essere proprio la cpu del mio computer a fare da
consolle per il sistema digitale.
Di fatto, quindi, potrei aver bisogno di:
- attivare e disattivare un paio di centinaia di segnali digitali,
ognuno indipendente dagli altri
- leggere un certo numero di sensori digitali --fotocellule per la
presenza o meno di treni nei binari di ricovero nascosti--
- inviare sequenze seriali di dati sui binari. Forse questo e' il
problema piu' grande, perche' e' stato stabilito che i dati digitali
da inviare ai decoder abbiano la stessa ampiezza ma durate differenti.
Quindi, ad esempio, un segnale di 100ns viene interpretato come un "1"
mentre uno di 10ms come uno "0" --ci sono ampi range temporali per i
valori--.
Detto questo, devo decidere che interfaccia usare per leggere e
scrivere dati.
All'ITI avevamo usato la parallela per acquisire dati da sensori e
comandare il driver di un motore, ma la parallela e' una porta
abbastanza delicata, oltre che destinata a scomparire dai pc --gia'
manca in alcuni pc Compaq--. Le seriali, addirittura, su molti pc gia'
ora non ci sono piu'. Oltre al fatto che 115k2 non sarebbero
abbastanza. Poi ci sarebbe l'USB, che potrebbe andarmi piu' che bene.
Pero' fare un device USB e' molto difficile? Ne vale la pena, per una
cosa cosi'? Quali altre possibilita' ho?
Eviterei la costruzione di una scheda interna per bus PCI perche' e'
*particolarmente* antipatico come lavoro e non vorrei nemmeno comprare
una scheda di i/o gia' fatta perche' costa una cifra esorbitante ed il
divertimento di autocostruirmi qualcosa sarebbe gia' finito :)
La parallela, se c'e', e' gia' li' e non ci vuole la scala a scrivere
e leggere dati da quella porta. C'e' da dire che dopo mi vorrebbe un
po' di logica esterna per multiplexare/demultiplexare i segnali, ma
anche questo non e' che richieda grandi sforzi.
Pero' il dubbio e': che baud rate ha la parallela? Cioe', quante volte
al secondo si riesce a cambiare il suo stato? L'invio di dati seriali
dovrei farlo utilizzando un pin della parallela --per caricare la cpu
interna del calcolo della durata dei bit--, ma se la parallela non e'
sufficientemente veloce sono a piedi. Avrei bisogno di una precisione
almeno della frazione di millisecondo. Se nel mio pc nuovo la
parallela manchera', posso sempre comprare un accrocchio
USB/Parallela, se le prestazioni sono sufficienti.
So che per qualcosa di USB ci sono delle difficolta' non trascurabili
dal punto di vista software --in Win98, ad esempio--, ma quelle in
qualche modo si superano: basta avere pazienza. Se devo diventare
matto anche nell'hardware, invece, la cosa si fa davvero lunga.
Che mi consigliate di fare?
Grazie in anticipo.
Saluti.
-- 
    Gianni "bugbarbeq" Rondinini, 26+15, RA, 193, 152
  VBR - Vero Birro RomagnoloŽ, diffidate dalle imitazioni!
  BatMobile EVO Fast Driver - Kawasaki "Gas Gas" ZZ-R 1100
 ICQ# 36893168 - IRCNet: bugbarbeq, @ on #linux-it & #NetBSD
   On contrary of popular belief, Unix *IS* user friendly:
    it just appears to be selective who it is friend with

 Ciao a tutti.
[megacut]

Complimenti per il plastico! :-)
Comunque credo che per quello che devi fare la cosa assolutamente più
convenitne sia usare un microcontrollore (un ST6 o un PIC dovrebbero esere
più che sufficienti...).
Se non ho capito male l'invio sei segnali avviene solamente attraverso i
binari in forma codificata, quindi ti bastano anche poche linee di I/O tutto
sommato (visto che i 200 "canali" vengono gestiti da dei decodificatori...).
Programmando bene il micro dovrebbe essere abbastanza facile fare quello che
dici. Il micro può gestire facilmente intervalli anche più brevi di 10ms...
Basterebbe che il PC invii un comando tipo "accendi questo", "invia questo
dato a quest'altro" o "leggi questo dato" e il micro si incaricherebbe di
modulare il segnale sui binari o leggere i dati e trasmetterli al PC. Questo
"comprimerebbe" moltissimo il flusso di dati tra PC e micro e permetterebbe
di usare perfino la seriale (che è facile anche da gestire via software).
Se la seriale non ti basta puoi utilizzare l'USB usando uno dei chip di
interfaccia con questa porta (che richiedono sempre un microcontrollore
comunque...). Tanto per farti un nome USBN9604 o simili della National. Però
nonostante tutta la mia esperienza nella scrittura di software ti confesso
che non ho la più pallida idea da come si gestica la porta USB da Windows!!!
(Forse non mi sono mai posto il problema...). Se già dà qualche problema
perfino la parallela... (se si vogliono fare le cose bene).
Stevenson

 Quanto ti costa?
(meglio non saperlo)