Modulo display NSM4202

by

Chessa Salvatore


GESTIONE DEL MODULO TRAMITE ST6x10


Modulo NMS 4202

Girando per le varie fiere/mercato che si tengono tutto l'anno nelle varie citta' italiane, mi sono imbattuto su questo modulino vizualizzatore. E' prodotto dalla THREE FIVE Semiconductor costa solo 10.000 lire, ma sostituisce a tutti gli effetti 4 shift register tipo CD4094 , + 4 driver tipo ULN 2003 + 4 digit a 7 segmenti + 2 led + 1 circuito stampato di discrete dimensioni e di notevole difficolta' realizzative. Veramente un'ottimo aggeggio !! Date le sue minuscole dimensioni, (vedere immagini a lato) e la richiesta di soli 3 bit (Clock,Data e Chip Enable) e' l'ideale in congiunzione ad un micro controllore. Io lo utilizzo pilotato da un ST62T10 in varie applicazioni. Nell'immagine sottostante potete vedere un contagiri/minuto (RPM meter) .
RPM meter 20-9000 giri Modulo NSM 4202 visto da sotto
Data la sua duttilita' ho pensato di mettere a disposizione il software di gestione per chi dovesse imbattersi in questo sito e se lo trovasse tra le mani senza sapere che farne. Per lo schema di collegamento tra NMS 4202 e ST6 cliccate su -----[ Schema.
Poiche' i led del modulo non sono codificati, e' possibile ottenere anche diverse lettere dell'alfabeto,predisponendo le variabili e inviando il codice idoneo. Ma questo lo lascio fare a voi.






;  -----------------------------------------
;        sezione variabili (084H ..0BFH) 
;  -----------------------------------------


FLAGS         .DEF  084H    ; flags di programma
;              -----------    Bit 0
;              -----------    Bit 1
;              -----------    Bit 2
;              -----------    Bit 3
;              -----------    Bit 4
;              -----------    Bit 5
;              -----------    Bit 6
;              -----------    Bit 7

DISPLAY       .DEF  0B0H    ;( B0h )= unit… da inviare al display
                            ;( B1h )= decine
                            ;( B2h )= centinaia
                            ;( B3h )= migliaia

TX_BYTE       .DEF  0B4H    ; byte da inviare serialmente al modulo

MASCHERE      .DEF  0B5H    ; le seguenti 10 locazioni fino a ( 0BEh )
                            ; sono occupate da variabili che
                            ; contengono le maschere per formare
                            ; i 10 numeri ( 0..9 ) nel modulo


;  -----------------------------------------
;        sezione costanti  (0880H USER ROM  
;  -----------------------------------------


CSEL      .EQU  0     ; (Out)  bit 0 porta ( A )= Chip enable del Modulo
DATA      .EQU  1     ; (Out)  bit 1 porta ( A )= Data del Modulo
CLK_DIS   .EQU  2     ; (Out)  bit 2 porta ( A )= Clock del Modulo

;----------------------------------------------------------------

BEGIN:
        CALL    INIT_MASK        ; inizializzo le variabili
                                 ; per i 7 segmenti del modulo
        CALL    NSM4202          ; invio i 4 byte al modulo
        JP      BEGIN            ;


;  ---------------------------------------------------
;   questa routine invia il valore decimale in 4 byte
;   che parte dalla label ( DISPLAY) in forma seriale
;   per il modulo a 4 digit tipo ( NSM4202 )
;  ---------------------------------------------------

NSM4202:

        CALL    START_BIT        ; --------------------------------------
        LDI     V,4              ;
        LDI     A,DISPLAY        ;
        ADDI    A,3              ; questa parte invia il bit di start
        LD      X,A              ; quindi preleva l'indirizzo contenuto
FB1:    LD      A,(X)            ; nella variabile display a partire
        CPI     A,0              ; da questo indirizzo e per i 4 byte
        JRNZ    FB2              ; successivi preleva il dato contenuto
        CALL    SEND_BYTE        ; e lo invia al modulo per la
        DEC     X                ; visualizzazione.
        DEC     V                ; poichŠ il modulo richiede la sequenza
        LD      A,V              ; migliaia/centinaia/decine/unit…
        CPI     A,1              ; parte dal quarto byte e retrocede
        JRNZ    FB1              ;

FB2:    LDI     Y,MASCHERE       ;
        LD      A,(X)            ; questa parte converte il numero
        ADD     A,Y              ; prelevato nella corrispondente
        LD      Y,A              ; maschera necessaria al modulo per
        LD      A,(Y)            ; ricreare nei sette segmenti la cifra
        CALL    SEND_BYTE        ;
        DEC     X                ;
        DEC     V                ;
        LD      A,V              ;
        CPI     A,0              ;
        JRNZ    FB2              ;
        JP      STOP_BIT         ; --------------------------------------

SEND_BYTE:                    

        LDI     W,8              ; --------------------------------------
FC1:    SLA     A                ;
        LD      TX_BYTE,A        ; il byte e' inviato serialmente
        LD      A,DRA            ; all'uscita tramite 8 shift
        RES     DATA,A           ; successivi a partire dal bit 7
        JRNC    FC2              ;
        SET     DATA,A           ;
FC2:    CALL    SEND_BIT         ;
        DEC     W                ;
        LD      A,W              ;
        CPI     A,0              ;
        JRZ     FC3              ;
        LD      A,TX_BYTE        ;
        JP      FC1              ; --------------------------------------
FC3:    RET 

STOP_BIT: 

        LD      A,DRA            ; --------------------------------------
        RES     DATA,A           ;
        JRR     6,FLAGS,FD1      ; se il bit 6 dei flag Š a 0 salta
        SET     DATA,A           ; altrimenti accendi il led
FD1:    CALL    SEND_BIT         ;
        RES     DATA,A           ;
        JRR     7,FLAGS,FD2      ; se il bit 7 dei flag Š a 0 salta
        SET     DATA,A           ; altrimenti accendi il led
FD2:    CALL    SEND_BIT         ;
        SET     DATA,A           ; metti a 1 il bit di stop
        CALL    SEND_BIT         ; --------------------------------------
        RET 


START_BIT: 

        LD      A,DRA            ; --------------------------------------
        RES     CSEL,A           ; questa parte abilita
        SET     DATA,A           ; il chip select del modulo

SEND_BIT: 

        LD      DRA,A            ; --------------------------------------
        LDI     WDOG,0FEH        ;
        SET     CLK_DIS,A        ;
        LD      DRA,A            ; questa routine invia l'impulso
        NOP                      ; di clock per l'accettazione del
        LDI     WDOG,0FEH        ; dato da parte del modulo
        RES     CLK_DIS,A        ;
        LD      DRA,A            ; --------------------------------------
        RET  

;  -----------------------------------------
;     inizializzazione variabili maschere
;  -----------------------------------------


INIT_MASK:

        LDI   WDOG,0FEH         ; --------------------------------------
        LDI   X,MASCHERE        ;
        LDI   A,11111100B       ; ( 0 )    questa parte provvede ad inserire
        LD    (X),A             ;          nella ram delle maschere
        INC   X                 ;          riconosciute dal modulo per creare
        LDI   A,01100000B       ; ( 1 )    nei sette segmenti le cifre
        LD    (X),A             ;          corrispondenti.
        INC   X                 ;
        LDI   A,11011010B       ; ( 2 )    come avviene la conversione: la
        LD    (X),A             ;          label maschere punta all'indirizzo
        INC   X                 ;          (B5H) esadecimale pertanto
        LDI   A,11110010B       ; ( 3 )
        LD    (X),A             ;          >  B5h contiene la maschera dello 0
        INC   X                 ;          >  B6h     "          "        "  1
        LDI   A,01100110B       ; ( 4 )    >  B7h     "          "        "  2
        LD    (X),A             ;          >  B8h     "          "        "  3
        INC   X                 ;          >  B9h     "          "        "  4
        LDI   WDOG,0FEH         ;          >  BAh     "          "        "  5
        LDI   A,10110110B       ; ( 5 )    >  BBh     "          "        "  6
        LD    (X),A             ;          >  BCh     "          "        "  7
        INC   X                 ;          >  BDh     "          "        "  8
        LDI   A,10111110B       ; ( 6 )    >  BEh     "          "        "  9
        LD    (X),A             ;
        INC   X                 ;          supponendo di voler convertire il
        LDI   A,11100000B       ; ( 7 )    numero 7 si preleva l'indirizzo
        LD    (X),A             ;          di partenza della tabella (B5H)
        INC   X                 ;          si aggiunge la cifra da convertire
        LDI   A,11111110B       ; ( 8 )    (B5H + 7 =BCH)
        LD    (X),A             ;          quindi l'indirizzo bch contiene
        INC   X                 ;          la maschera del numero 7 da inviare
        LDI   A,11110110B       ; ( 9 )    al display
        LD    (X),A             ; --------------------------------------
        RET  


Home