quinta-feira, 10 de março de 2011

Picaxe 08M - Display de sete segmentos

Se preferir assista no youtube.

O display de sete segmentos é muito usado em circuito com microcntroladores. Esta postagem mostra como ligá-lo ao picaxe 08M com o auxilio do shift register 74hc595, já que este picaxe possui apenas quatro pinos que podem ser usados como saída.

A postagem "Arduino dimmer com display de sete segmentos" traz alguns detalhes sobre o display de sete segmentos que serão úteis nesta montagem. Os dígitos serão formados a partir da mesma tabela, acrescentando-se um zero à direita do bit menos significativo de cada número da tabela para completar o byte. 

O 08M envia cada byte, bit a bit, para o 7495 que tem suas oito saídas ligadas ao display. A saída Q7 foi ligada ao pino correspondente ao ponto. Um bom tutorial sobre o shift register pode ser encontrado no site do arduino. Basicamente para usá-lo é preciso três sinais: um clock para o shift, um clock para o latch e o terceiro deve conter o bit de dado.

O Programa

Para formar um número no display são enviados oito bits através do pino "out0" do picaxe, denominado aqui como dataPin. Por exemplo, para formar o número zero, considerando 1 para segmento aceso e 0 para apagado, temos que enviar o byte "11111100" que corresponde, em decimal, a 252. O programa  segue a sequência abaixo:

1 - Armazena o byte em "b0" que começa no bit 0 e termina no bit 7;
2 - Coloca o clock do latch em nível baixo;
3 - Coloca o clock do shift em nível baixo. Preparando-o para a passagem do bit que acontece na mudança   do clock do nível baixo para o alto (0 para 1);
4 - Verifica o estado do bit0, que neste caso é 0 colocando o dataPin em nível baixo;
5 - Coloca o clock do shift em nível alto. O bit0 vai para a saída do primeiro registrador do shift que também é a entrada do segundo;
6 - Os paços 3 , 4 e 5 se repetem para os outros sete bits. Cada vez que um bit é adicionado os outros são "empurrados" para o registrador seguinte;
7 - Após completar o envio dos oito bits coloca o clock do latch em nível alto fazendo com que todos os bits apareçam na saída do CI, mostrando assim o dígito no display.


symbol dataPin = 0  ' pino do dados seriais

symbol latchPin = 2  ' clock do latch apos ter todos os dado vai a nivel alto para mostrar na saida

symbol shiftPin = 1  ' clock do registrador de deslocamento

symbol cnt1 = b1

symbol dados = b0


main: 'laco principal


   for b4=0 to 9
   
'lookup armazena o numero que esta na posicao b4 na variavel "dados"

             '0   1  2   3   4   5   6   7   8   9
   lookup b4,(252,96,218,242,102,182,190,224,254,246),dados
   
   low latchPin 'clock do latch em nivel baixo

      for cnt1 =0 to 7 
    
        low shiftPin   'clk do shift em nivel baixo 
        
    
  ' a cada passagem verifica se o bit correspondente
  ' é zero ou um e coloca a saida em nivel alto ou baixo respectivamente  
  
      select cnt1
    
    case 0
    {
     if bit0 = 1 then
         
        high dataPin
     else
       low dataPin
     endif 
    }
    
    case 1
    {
     if bit1 = 1 then
         
        high dataPin
     else
       low dataPin
     endif 
    }
    
    
    case 2
    {
     if bit2 = 1 then
         
        high dataPin
     else
       low dataPin
     endif 
    }
    
    
    case 3
    {
     if bit3 = 1 then
         
        high dataPin
     else
       low dataPin
     endif 
    }
   
    case 4
    {
     if bit4 = 1 then
         
        high dataPin
     else
       low dataPin
     endif 
    }
    
    case 5
    {
     if bit5 = 1 then
         
        high dataPin
     else
       low dataPin
     endif 
    }
    
    case 6
    {
     if bit6 = 1 then
         
        high dataPin
     else
       low dataPin
     endif 
    }
    
    case 7
    {
     if bit7 = 1 then
         
        high dataPin
     else
       low dataPin
     endif 
    }
    
    endselect
        
      
       high shiftPin 'clk shift pin em nivel alto envia o bit para o proximo registrador
    
      next cnt1

   high latchPin 'clock do latch apos ter todos os dado (8 bits)
                'vai a nivel alto para mostrar na saida do 7495
                
    pause 945   'entre numeros
    
    next b4     ' fim do laco for

    
goto main ' fim do laco pricipal