Espansione pin Dea bs2... illimitata! (Postato su ilmiorobot il 22-05-2002)
Ho letto
diverso volte la preoccupazione per il numero limitato di piedini (16)
disponibili per le porte input/output.
Credo che la migliore soluzione ci viene già dalla Parallax, e precisamente
leggendo l'esempio sotto la descrizione del comando SHIFOUT del PBASIC Command
Reference.
Riassumendo in italiano, quanto riportato: usando un chip 74hc595 ed utilizzando
tre uscite pin per il suo indirizzamento, se ne ottengono 8 utilizzabili in
uscita. Se poi si utilizzano 2 di questi chips, collegati in cascata, si
ottengono 16 uscite extra impegnando solamente 3 !!!
Per avere pin in ingresso basta utilizzare il chip 74hc165 e l'istruzione
SHIFTIN.
Sull'esempio citato è riportato, oltre alle istruzioni di programmazione, anche
lo schema elettrico.
Spero di aver dato una buona notizia.
Un'ultima osservazione: i chips menzionati sono facilmente reperibili e costano
meno di 1 euro l'uno.
Saluti a tutti.
Pino03
Chiarimenti sulle Espansioni Pin
(postato su ilmiorobot il 24-10-2002)
o meglio, cosa si può e cosa non si può fare con le Espansioni Pin che si stanno
realizzando con i vari 595/165 e 138/151.
Esistono tre diversi tipi di segnali che si dovrebbero controllare con le porte
in ingresso ed uscita:
Segnali statici. Sono i più semplici. Si tratta di impostare le porte in
uscita con comandi tipo: High, Low, Toggle, (o leggere porte in ingresso con il
comando Input). Questi comandi impostano le porte ad uno stato prefissato, alto
o basso, per un tempo infinito, o meglio sino all’esecuzione, sulla stessa porta
di un altro comando. Le espansioni realizzate con i 595 o 165 sono adatte per
simulare questi comandi tramite l’istruzione Shiftout o Shiftin e adatte,
quindi, a controllare led, relè, Dc Motor, etc., oppure a leggere degli input
statici come i Baffi.
Segnali dinamici. Questi sono segnali che variano con frequenze diverse.
Possono essere controllati tramite istruzioni tipo: Freqout, Pulsin, Pulsout,
Count. Questi comandi non possono essere simulati con i soli 595/165, ma bisogna
implementare l’espansione con integrati 138 o 151.
L’ integrato 138 permette di ‘ruotare’ la normale porta DeA (è stata utilizzata
la 3) su una delle 8 possibili uscite del 138, e precisamente sull’uscita
selezionata tramite gli ingrassi A, B, C. Cioè la combinazione applicata ai
piedini A, B, C specifica quale delle uscite (da Q0 a Q7) di questo integrato è
abilitata. Ovviamente, sfruttiamo tre porte del 595 per alimentare i piedini A,
B, C. La porta 3 delle DeA viene usata come uscita comune per tutte le 8 porte
estese possibili.
La sequenza di programmazione sarà:
‘collegare lo Speaker all’uscita Q3 del 138
OutExt1 var byte 'estensione pin in uscita (1’ byte)
OutExt2 var byte 'estensione pin in uscita (2' byte)
DPin con 3 'Data pin to 74HC595.
Clock con 5 'Shift
clock to 74HC595.
Latch con 14 'Moves 74HC595 data from register to output latch.
OutExt1 = $03 'imposta selezione A,B,C = 011
OutExt2 = $00 'impostazione 2 byte (non usato nel nostro caso)
SHIFTOUT DPin,Clock,MSBFIRST,[OutExt2, OutExt1] 'invia 16 bits sui 595
PULSOUT Latch,1 'imposta uscite 595.
FREQOUT DPin, 100, 2500 ' manda
un Bip allo Speaker
Variando, a piacere la selezione dei tre ingressi del 138 si abiliteranno, di
volta in volta le uscite da Q0 a Q7 del 138.
L’integrato 151 ha un funzionamento analogo al 138. Utilizza le stesse tre porte
in uscita dal 595 (che abbiamo utilizzato per il 138) per abilitare la selezione
desiderata di uno degli 8 ingressi (da D0 a D7). Si deve utilizzare un’atra
porta normale DeA, nell’esempio la 15, per leggere l’input selezionato.
La sequenza di programmazione sarà abbastanza simile alla precedente:
OutExt1 var byte 'estensione pin in uscita (1’ byte)
OutExt2 var byte 'estensione pin in uscita (2' byte)
time var word
DPin con 3 'Data pin to 74HC595.
Clock con 5 'Shift
clock to 74HC595.
Latch con 14 'Moves 74HC595 data from register to output latch.
InpCom con 15 ‘input comune per gli 8 ingressi
del 151
OutExt1 = $01 'imposta selezione A,B,C = 001
OutExt2 = $00 'impostazione 2 byte (non usato nel nostro caso)
PULSIN InpCom, 1 , time 'legge gli impulsi provenienti dall’ingresso D1 del 151
Variando, a piacere la selezione dei tre ingressi del 151 si abiliteranno, di
volta in volta i diversi ingressi, da D0 a D7, del 151.
Nello schema non è riportato il 165, ma è già stato riportato su altri forum.
I vantaggi di tutto questo?
Con due integrati 595, un 165, un 138, un 151 ed utilizzando 4 porte normali DeA
si ottengono: 13 uscite statiche, 8 ingressi statiti, 8 uscite dinamiche ed 8
ingressi dinamici.
Credo ne valga proprio la pena.
Segnali bidirezionali.
Con questo termine, intendo la possibilità di impostare la stessa porta in
ingresso ed in uscita alternativamente. Per intenderci meglio, pensate alla
sequenza per controllare i fotoresistori tramite i comandi High x e poi Rctime
x. Questo, purtroppo, non è possibile farlo con i circuiti descritti
sinora, poiché non si può mettere in corto un’uscita dal 595 o dal 138 ed un
ingresso del 165 o del 151. Per ottenere anche questa possibilità si dovrebbe
aggiungere un altro integrato che permette di avere ingressi ed uscite
bidirezionali. Sto facendo degli esperimenti utilizzando dei tri-state 74397.
I risultati non sono, sinora, esaltanti, perché sono riuscito ad avere la bidirezionalità delle porte, utilizzando comandi dinamici, ma non si riesce ad avere degli input esatti eseguendo i comandi Rctime. Inoltre l’estensione sta diventando troppo complessa. Comunque chi vuole cimentarsi può continuare da dove sono arrivato.
Nello schema di esempio ho utilizzato 3 uscite estese per abilitare rispettivamente: i pin bidi in uscita, i pin bidi in ingresso e gli ingressi dal 165. Solo una di queste tre selezioni deve essere attiva allo stesso istante.
Oltre al tipo di segnale da controllare bisogna considerare anche la velocità
di esecuzione del programma. La gestione delle porte estese richiede più
istruzioni per ‘simulare’ una porta normale. Questo deve portare a valutare
attentamente cosa si vuole controllare con queste porte. Considerate, ad
esempio, il loop stretto che si deve eseguire per mantenere un movimento
costante dei servomotori. Chi ha già realizzato il controllo integrato di servo,
telecomando, sensori IR e navigazione autonoma, sa quanto ha penato (o sta
ancora penando) per eliminare l’avanzamento a scatti. Risulta quindi evidente
che bisogna evitare di utilizzare le espansioni dei pin per controllare i servo,
gli infrarossi di navigazione ed il Telecomando. Mentre sono perfettamente utili
per controllare tantissimi led, i motori del manipolatore, display vari, etc. ….
Ma vi conviene provare e riprovare.
Pino03