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. In“buff_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
unsigned short i;
//
for (i=8; i>0; i--) {
data_595 = value.B0; // Data 595
clk_595 =1; // Clock 595
value >>= 1;
Delay_us (2);
clk_595 =0;
}

}

 

 

 


 

RITORNA ALLA MAIN PAGE