SHIFT REGISTR 74XX595
COME USARE IL SHIFT REGISTER 595 (TTL) O IL 4094 (CMOS)
Il
4094 (74HCT4094) 74xx595 E' un SHIFT REGISTER con caricamento seriale e uscite in parallelo definito con l'acronimo SIPO (Serial In Parallel Output). Vediamone il funzionamento perché si presta molto facilmente alla moltiplicazione delle uscite. E' possibile utilizzare pure dei PISO (Parallel Input Serial Output) con lo scopo di moltiplicare gli ingressi del micro. figura 4094-1: Collegamento test con 4094 Collegamento test con 74xx595 Dunque abbiamo a disposizione un ingresso e 8
uscite. Il Byte da trasferire nelle uscite viene inviato
serialmente nei flip-flop del 4094 attraverso l'ingresso
(pin 2) e sincronizzato dal clock (pin 3). Una volta
caricato l'intero Byte, un impulso sul pin 1 (strobe),
trasferisce il Byte sulle uscite, cambiandone lo stato.
Se necessario, è possibile collegare più 4094 in serie
tra loro semplicemente collegando sia il clock che lo
strobe di tutti i 4094 in parallelo, l'ingresso 2 del
primo shift register al PIC, il piedino 9 (QS)
all'ingresso del successivo 4094 (pin 2). In questo modo
possono essere collegati in cascata più 4094 e
raggiungere le 128/256 o più uscite, limitati dal solo
fan-out del PIC. E tutto questo con soli 3 piedini. Nella figura potete notare il protocollo di accesso del SHIFT REGISTER usato. figura 4094-2.TIF: Protocollo di accesso Il software di gestione del trasferimento del
Byte è molto semplice, date un'occhiata alla routine
"_tx" per capire quanto sia semplice gestire un
shift register. _tx
movlw
08h
; Numero bit da trasmettere
movwf Count _tx_1
bcf
CLK
; Clock (pin 3)
btfss
buff,0
; In buff il Byte da inviare alle uscite del
4094
bcf
Data
; Data (pin 2)
btfsc
buff,0
bsf
Data
nop
bsf
CLK
rrf
buff
; Rotazione a Dx per la lettura del bit successivo
decfsz
Count,f
; Deve essere ripetuto per 8 volte
goto
_tx_1
bsf
Strobe
; Strobe (pin 1) trasferisce il Byte alle uscite del 4094
nop
bcf
Strobe
; Condizione normale
return
; Fine
routine Nel caso siano presenti due o più shift register la routine di trasmissione dei dati può essere la seguente: _tx ;
movlw .8
;
movwf Count ;
movf
buff_3,w
; DATA per il terzo 4094 ;
movwf
buff ;
call
_tx_1
; Trasmetti Byte 3
movlw
.8
movwf
Count
movf
buff_2,w
; DATA per il secondo 4094
movwf
buff
call
_tx_11
; Trasmetti Byte 2
movlw
.8
movwf
Count
movf
buff_1,w
; DATA per il primo 4094
movwf
buff
call
_tx_11
; Trasmetti Byte 1
bsf
Strobe
; Invia dati alle uscite dei 4094
nop
bcf
Strobe
return
; Fine routine _tx_1
bcf
CLK
; Trasmissione di un BYTE per volta
btfss
buff,7
bcf
Data
btfsc
buff,7
bsf
Data
nop
bsf
CLK
rlf
buff,f
decfsz
Count,f
goto
_tx_1
return
La routine è stata testata usando come prova lo schema di figura 4094-1. Inbuff_1, buff_2, buff_3, ecc verranno caricati i dati da inviare ai shift register. Il bit 0 di ogni Byte corrisponde al Q1 del 4094, mentre il bit 7 al Q8. in ANSI C void Send_str_595 (char value) { // in
"value" il valore da inviare al shift register |