Let's Go Pic!!!

Cap.16.

 

Micro-GT mini shield Display led universale a 4 digit

 
Presentiamo un mini shield estremamente utile per le esercitazioni di controllo de display a 7 segmenti sia di tipo ad anodo comune che di tipo a catodo comune. 

Essenziale per i laboratori scolastici e la realizzazione di tesine. 

Nato per la Micro-GT mini è interfacciabile a qualsiasi microcontrollore.

Descrizione

Questo Mini shield sviluppato per la Micro-GT mini, ma funzionante con qualsiasi sistema a microcontrollore mette a disposizione 4 digit a 7 segmenti con i transistor di pilotaggio sia per il tipo a catodo comune  che anodo comune.

E' possibile il controllo di ogni sibgolo punto decimale benchè sia predisposto un canale preferenziale per l'accensione  ella virgola al digit centrale in modo da semplificare la realizzazione di orologi.

Sono disponibili gli accessi TTL per ogni punto di controllo con la seguente piedinatura:

 

connettore SV1

 

connettore SV2 

connettore SV3

connettore a vite X1

Analisi circuitale

Nello schema compaiono 8 display connessi 2 a 2 al medesimo bus dati.

In realtà saranno alloggiati nel medesimo zoccolo per mantenere la doppia funzionalità in modalità anodo comune o

catodo comune.

Rimangono però sdoppiati i bjt di controllo che saranno di tipo NPN per il tipo a catodo comune e PNP per il tipo a

catodo comune.

 

 

 

 

 

I segnali di comando sono di tipo TTL quindi a 5 volt DC, dato che sia i BC337 che il complementare BC327 hanno una

hfe pari a 250, ed avendo una corrente massima di collettore compresa tra 0,8 e 1A, ne consegue che saturano con soli 2 mA in base.
 

 

Si consiglia di non saldare direttamente il display sul PCB ma di montare uno zoccolo DIL da 40 pin in modo da

garantire l'intercambiabilità del display ad anodo/catodo comune quando si usa lo shield abbinato ad una Micro-GT mini

per ragioni sperimentali.  

Quando invece lo si voglia impegnare a bordo macchina, una volta decisa la tipologia dei display si potrà evitare il

montaggio dei 4 transistor e del connettore inutilizzato.  

Per quanto riguarda il morsetto a vite è predisposto per fornire i riferimenti di tensione e massa direttamente prelevabili

dai morsetti predisposti nella Micro-gt mini X2-1 => Vcc, e X2-2 => Gnd. 

 

Ne consegue che la resistenza di polarizzazione Rb vale 2k2Ω sia per i PNP che per gli NPN.

 

L'equazione di maglia è la seguente:

(Vin-Vbe)/2mA=2k2

 

 

Vediamo nei filmati youtube, commentati da ad.noctis as Marco Gottardo la funzionalita' del display. Potrai anche scaricare i sorgenti e gli hex delle prove in modo da poter provare per conto tuo.

 



Nel primo esercizio e' sviluppato un programma che esegue il countdown sul display meno significativo ciclando nelle cifre da 9 a 0 e poi si ripete.

/**********************************************
*    CONTEGGIO SUL DISPLAY DA 9 A 0    *
*          PIC 16F876A                                        *
*           27/03/2010                                          *
*                                                                          *
*        MARCO VISENTINI                               *
*     Gruppo G-Tronic Robotics                    *
**********************************************/

#include <pic.h>
#include "always.h"
#include "delay.h"
void main(){
TRISB=0;
TRISC=0;
while(1){
PORTB=0b01101111;
PORTC=0b00000001;    
DelayS(1);
PORTB=0b01111111;
DelayS(1);
PORTB=0b00000111;
DelayS(1);
PORTB=0b01111100;
DelayS(1);
PORTB=0b01101101;
DelayS(1);
PORTB=0b01100110;
DelayS(1);
PORTB=0b01001111;
DelayS(1);
PORTB=0b01011011;
DelayS(1);
PORTB=0b00000110;
DelayS(1);
PORTB=0b00111111;
DelayS(2);        
        }

}

clicca qui per scaricare sorgente ed hex del primo programma  -> coutdown.

 

vediamo come multiplexare i digit del display, ovvero come visualizzare due cifre in tempi alternati avendo l'impressione che siano contemporanemente presenti.


 

La seconda prova aggiunge il controllo multiplexato dei catodi comuni dei 4 display, ovvero il countdown viene fatto scorrere sui 4 digit disponibili.

Il video e' molto elequiente.  E' da notare la velocita' con cui la Micro-GT mini riesce a caricare  ll file hex.

/**************************************************
* CONTEGGIO SUL DISPLAY DA 9 A 0   *
*                  PIC 16F876A                       *
*                    27/03/2010                        *
*                                                              *
*                 MARCO VISENTINI                *

*            Gruppo G-Tronic Robotics         *
*                                                               *
***************************************************/

#include <pic.h>
#include "always.h"
#include "delay.h"
void main(){
TRISB=0;
TRISC=0;
while(1){
PORTB=0b01101111;
PORTC=0b00000001;    
DelayS(1);
PORTB=0b01111111;
PORTC=0b00000010;
DelayS(1);
PORTB=0b00000111;
PORTC=0b00000100;
DelayS(1);
PORTB=0b01111100;
PORTC=0b00001000;
DelayS(1);
PORTB=0b01101101;
PORTC=0b00000001;
DelayS(1);
PORTB=0b01100110;
PORTC=0b00100010;
DelayS(1);
PORTB=0b01001111;
PORTC=0b01000100;
DelayS(1);
PORTB=0b01011011;
PORTC=0b00001000;
DelayS(1);
PORTB=0b00000110;
PORTC=0b00000001;
DelayS(1);
PORTB=0b00111111;
PORTC=0b00000010;
DelayS(2);        
        }

}
 



 

da questo link puoi scaricare il file hex e i sorgenti della visualizzazione del countdown

download esercizio countdown con lo shift

 

L'ultimo esercizio proposto riguarda la realizzazione di un cronometro, modificabile anche come orologio a 24 ore che visualizza minuti ore su 4 digit disponibili.

Il software e' presentato nella sua funzionalita' minima e lasciato al lettore del corso Let's GO PIC!!! per completare la realizzazione come utile esercizio.

/**********************************************
*  CONTEGGIO SUL DISPLAY DA 9 A 0     *
*                  PIC 16F876A                                *
*                  27/03/2010                                   *
*                                                                          *
*               MARCO VISENTINI                         *
*         Gruppo G-Tronic Robotics                 *
**********************************************/

#include <pic.h>
#include "always.h"
#include "delay.h"

void main(){
int cont;
char min;
char ore;
char sec;
char min1;
char min2;
char ore1;
char ore2;
TRISB=0;
TRISC=0;
sec=0;
min=0;
ore=0;
min1=0;
min2=0;
ore1=0;
ore2=0;
cont=0;
 
while(1){ 
PORTC=0b00000000;
PORTB=0b10000000;

DelayMs(1);
sec=sec+1;
 
if (sec==60){
    sec=0;
    min1=min1+1;
    
    }
    if (min1==10){
        min2=min2+1;
        min1=0;
        }
        if (min2==6){
        min2=0;
        ore1=ore1+1;
        }
        if (ore1==10){
            ore1=0;
            min1=0;
            ore2=ore2+1;
                if (ore2==2){
            ore1=0;
        }
            }
            
        if ((ore2==2)&&(ore1==4)){
            ore1=0;
            ore2=0;
        }
        if (min1==0){
            PORTB=0b10111111;            
            PORTC=0b00000001;
            DelayMs(1);
            PORTC=0b00000000;
            }
            
        if (min1==1){
            PORTB=0b00000110;
            PORTC=0b00000001;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (min1==2){
            PORTB=0b11011011;
            PORTC=0b00000001;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (min1==3){
            PORTB=0b01001111;
            PORTC=0b00000001;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (min1==4){
            PORTB=0b11100110;
            PORTC=0b00000001;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (min1==5){
            PORTB=0b01101101;
            PORTC=0b00000001;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (min1==6){
            PORTB=0b11111100;
            PORTC=0b00000001;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (min1==7){
    
            PORTB=0b00000111;
            PORTC=0b00000001;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (min1==8){
            PORTB=0b11111111;
            PORTC=0b00000001;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (min1==9){
            PORTB=0b01101111;
            PORTC=0b00000001;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
            
        if (min2==0){
            PORTB=0b00111111;
            PORTC=0b00000010;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (min2==1){
            PORTB=0b00000110;
            PORTC=0b00000010;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (min2==2){
            PORTB=0b01011011;
            PORTC=0b00000010;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (min2==3){
            PORTB=0b01001111;
            PORTC=0b00000010;
            DelayMs(1);;
            PORTC=0b00000000;

            }
            
        if (min2==4){
            PORTB=0b01100110;
            PORTC=0b00000010;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (min2==5){
            PORTB=0b01101101;            
            PORTC=0b00000010;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (min2==6){
            PORTB=0b01111100;            
            PORTC=0b00000010;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (ore1==0){
            PORTB=0b00111111;            
            PORTC=0b00000100;
            DelayMs(1);
            PORTC=0b00000000;

            }
        if (ore1==1){
            PORTB=0b00000110;
            PORTC=0b00000100;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (ore1==2){
            PORTB=0b01011011;            
            PORTC=0b00000100;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (ore1==3){
            PORTB=0b01001111;            
            PORTC=0b00000100;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (ore1==4){
            PORTB=0b01100110;            
            PORTC=0b00000100;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (ore1==5){
            PORTB=0b01101101;            
            PORTC=0b00000100;
            DelayMs(1);
            PORTC=0b00000000;

            }            
        if (ore1==6){
            PORTB=0b01111100;            
            PORTC=0b00000100;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (ore1==7){
            PORTB=0b00000111;            
            PORTC=0b00000100;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (ore1==8){
            PORTB=0b01111111;            
            PORTC=0b00000100;
            DelayMs(1);;
            PORTC=0b00000000;

            }
            
        if (ore1==9){
            PORTB=0b01101111;            
            PORTC=0b00000100;
            DelayMs(1);;
            PORTC=0b00000000;

            }
            
        if (ore1==10){
            PORTB=0b00111111;            
            PORTC=0b00000100;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
            if (ore1==9){
            PORTB=0b01101111;            
            PORTC=0b00000100;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
            
        if (ore2==0){
            PORTB=0b00111111;            
            PORTC=0b00001000;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (ore2==1){
            PORTB=0b00000110;
            PORTC=0b00001000;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
        if (ore2==2){
            PORTB=0b01011011;            
            PORTC=0b00001000;
            DelayMs(1);
            PORTC=0b00000000;

            }
            
            
            
    
    /*    }
        if
        
PORTB=0b01011011;    
PORTC=0b00000001;
DelayMs(1);
PORTB=0b00000110;
PORTC=0b00000010;
DelayMs(1);
PORTB=0b01011011;
PORTC=0b00000100;    
DelayMs(1);
PORTB=0b00000110;
PORTC=0b00001000;
DelayMs(1);



PORTB=0b00000111;
PORTC=0b00000100;
DelayS(1);
PORTB=0b01111100;
PORTC=0b00001000;
DelayS(1);
PORTB=0b01101101;
PORTC=0b00000001;
DelayS(1);
PORTB=0b01100110;
PORTC=0b00100010;
DelayS(1);
PORTB=0b01001111;
PORTC=0b01000100;
DelayS(1);
PORTB=0b01011011;
PORTC=0b00001000;
DelayS(1);
PORTB=0b00000110;
PORTC=0b00000001;
DelayS(1);
PORTB=0b00111111;
PORTC=0b00000010;
DelayS(2);    */    
        }
        

}

Scarica dal link sottostante il progetto hitech C16 per PIC 16F876A il cronometro digitale.

 

scarica il terzo esercizio clicca qua

 


 

I gerber del PCB del mini shield sono disponibili per la realizzazione professionale.

Se volete un vostro esemplare del PCB della Micro-GT mini chiedetela pure con messaggio privato.

 

Con questo abbiamo presentato un versatile strumento che tornera' molto utile non solo a studenti che devono presentari tesi e tesine ma anche agli hobbisti e in qualche caso ai professionisti.

I programmi software presentati sono semplici e utili a livello dimostrativo della funzionalita', potreste produrne di vostri molto piu' potenti.

Buon divertimento a tutti con il corso  Let's GO PIC!!!

 

   This opera "Let's GO PIC16" By G-Tronic Robotics group is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Italy License

 

   Pagina precedente