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