Busque no blog

segunda-feira, 8 de julho de 2013

Zilog - ZDSII a IDE de programação free em C. - 2 Parte

Zilog - Acendendo um LED com Z8 encore XP! - Parte 2 



Configurando as PORTAS do Z8 Encore corretamente.

          As portas de qualquer microcontrolador são acessos do mesmo ao mundo externo e devem estar configuradas de acordo com o que se quer fazer com elas, isso por que podemos fornecer sinais a esses pinos e usar sinais que saem desses pinos ou portas, se não forem, corretamente, configuradas, podem gerar curto circuitos ou a queima do microcontrolador. 
          Quando configurados como entrada, é possível usar esses pinos para acordar o microcontrolador se estiver no modo "STOP" e alguns pinos podem gerar interrupções a serem acessadas e processadas pelo microcontrolador. No modo entrada, a função "Analog to Digital converter" é acessada, também. 
          Quando configurados como saídas, é possível usar esses pinos como driver padrão ou driver de alta corrente elétrica para acionar cargas. Podem ser usados como "Open drain", permitindo que o microcontrolador forneça nível baixo ou zero a uma carga quando acionado o pino correspondente, porém quando não o nível um ou alto passa a ser usado ou por um circuito externo ou pelo microcontrolador. Em modo saída, pode, também, ser usado com as funções alternativas que cada pino possui, como UART, Timer,PWM, I2C e etc., 
          Para usar a função alternativa, as PORTAS e Pinos do microcontrolador devem ser adequadamente configuradas.

Registro de I/O de uso geral.

          Como estamos usando os três pinos do PORTA, usaremos os pinos de PA0~PA2 e para poder ter acesso a ele no mundo externo, vamos dar uma olhada na tabela a seguir e perceber que precisamos manipular os outros registros de endereçamento e outro de controle. É assim que vamos configurar as PORTAS e o PINOS do microcontrolador. 


Tabela referente a PORTA A


Bit
7
6
5
4
3
2
1
0
Field
PADDR[7:0]
Reset
00H
R /W
R/W
Endereço
PA=FD0H ; PB = FD4H ; PC = FD8H
Bit
Descrição dos endereços .
[7:0]
PADDR
Endereços das portas
O endereço das portas seleciona um dos sub-registros acessível pelo registro de controle das portas.
00H = Sem função, contem alguma proteção contra configuração acidental.
01H = Direção dos dados – 0 é saída e 1 é entrada.
02H = Função alternativa – habilita periféricos como UART, Timers e etc.
03H = Controle de saída – Open drain
04H = Habilita driver de alta corrente – ideal para suprir mais potência para cargas.
05H = Habilita acordar do modo “STOP” - ou por pino ou a PORTA .
06H = Habilita Pull-up – coloca os resistores de pull-up ao vcc.
07H ~FFH = Sem função.
Valores referentes ao conjunto de sub-registros do microcontrolador da série Encore XP! F0822
_________________________________________________________________________________

          O registro de controle das portas de A~C determina que valores serão colocados nos sub-registros correspondentes aos registros endereçados pelo registro de endereço de portas. 
          PxCTL ( onde x é a porta de A~C) é o registro de controle de portas, que é zerado quando de um reset no microcontrolador e tem como endereço das portas de PA~PC em FD1H, FD6H, FD9H, para o microcontrolador da série Encore XP! F0822.
          Agora, vamos conhecer os outros três registros associados com a porta A, que são eles : 

  • PAADDR, que fica no endereço FD0H, permite ao PACTL configurar os sub-registros.
  • PACTL, que fica no endereço FD1H, configura ou transfere dados de configuração aos sub-registros.
  • PAIN, que fica no endereço FD2H, permite que seja lido os valores de dados contido nele.
  • PAOUT, que fica no endereço FD3H, coloca os valores entre 0 e 1 na saída da porta ou pinos.
          Todos esses 4 registros estão presentes nas portas de A~H de todos os microcontroladores da linha Z8 Encore, diferenciando apenas nos valores dos endereços de cada porta, controle de portas e demais registros. Não é necessário se preocupar tanto com isso, pois o arquivo de cabeçalho ez8.h já vem com esses valores corretos na sua macro interna, bastando, apenas, recordar os nomes desses registros e sub-registros de PxADDR, PxCTL, PxIN e PxOUT como tendo x o nome da porta correspondente a que se quer configurar e usar. No nosso exemplo, x fica como PxADDR em PAADDR, pois estamos utilizando a porta A. 
          
Acessando sub-registros através de PxCTL (PACTL)

          Existem 5 perguntas a se fazer, antes de configurar cada porta, para que, nessa sequência, se tenha um bom desenvolvimento de projeto ou programação, tanto em C quanto em ASM, que são elas : 
  1. A porta ou pino é de entrada de dados ou de saída de dados ?
  2. A porta será usada como de uso geral ou com função específica, como UART, Timer e etc ?
  3. Se for usada como saída, é em operação normal ou open drain ? 
  4. Se for usada como saída, é em modo normal ou driver de alta corrente (high drive) ? 
  5. Se for usada como entrada, habilito o modo acordar de um STOP e queremos ou não usar o A/D, se usado em modo função alternativa ? 
          Como visto na tabela acima, referente ao endereçamento que dá acesso aos sub - registros através de PxCTL ( no caso PACTL), teríamos um total de 5 diferentes registros para cada porta, somando os registros de entrada e de saída, teríamos um total de 7 registros para cada porta. Para um microcontrolador maior em recursos, mais um se somaria, o que te daria uma enorme quantidade de endereços para memorizar e poder usar, ficando dispendioso o aprendizado e, consequentemente, difícil de trabalhar. Então a Zilog, criou este método de usar só dois registros de endereçamento, o PxADDR, e o registro de controle de portas, o PxCTL, onde x é o valor da porta de A~H correspondente a porta que se quer usar, facilitando o trabalho do programador e deixando que o compilador e o microcontrolador se encarreguem desse monte de endereços de registros e sub registros.
          As 5 perguntas, acima feitas, são configuradas escrevendo valores no registro PxCTL, onde x é um nome de A~H da porta correspondente. Por exemplo, se colocarmos um valor de 0x04H em PAADDR, estamos selecionando o sub-registro "High drive" e podemos configurar ele atravéz de PxCTL colocando um valor que corresponda aos pinos de 0~7 da porta x. assim se coloco 0x0F em PxCTL, estou habilitando todos pinos de 0~3 como sendo high drive  da porta x e de 4~7 como sendo saída padrão. 
          
Configurando porta A como saída em alta corrente elétrica.

          Agora temos subsídios para fazer o LED acender e mais adiante, fazer ele piscar. É bom lembrar que configurando os pinos do microcontrolador para saída em modo normal ele irá drenar corrente de aproximadamente 2mA, o que é muito pouco para acender um LED sem queimar o micro ou nem fazer acender, já que o microcontrolador possui proteção interna contra sobrecorrente. Para isso, configuramos o pino correspondente aos LEDs em modo High drive que nos permite acessar perto de 20mA de corrente elétrica a ser drenada para o circuito do LED. 
          Não devemos colocar todos os pinos como high drive se desejarmos um uso mais econômico do consumo de energia, principalmente se estiver usando pilhas ou baterias, o que esgotaria essa energia em pouco tempo. 
          Como estamos em modo apresentação, vamos colocar todos os pinos em high drive para o leitor poder ver seu LED acender desta vez e, assim ter uma visão melhor de como funciona o processo de programação. 
          Vamos acrescentar mais algumas linhas de código no nosso programa e ver o que acontece depois. Com o programa já aberto, acrescente as linha que estão faltando, não precisa reescrever tudo novamente, como se segue : 

#include
void main( void )
    {
     PAADDR = 4 ; // selecionamos high drive.
     PACTL = 0xFF ; // colocamos 1 no sub-registro PHDEA[7:0], habilitando todos os pinos em High drive.
     PAADDR = 0x01 ; // selecionamos direção dos dados.
     PACTL = 0x00 ; // todos como saída, 0's no registro DDA[7:0]
     PAADDR = 0x00 ; // prevenção contra má configuração.
     PAOUT = 0xFF ; // porta A em nível 1
     // PAOUT = 0x00 ; // Porta A em zero.
    // PAOUT = 0xFF ; // Porta A em 1, novamente.
     return;
    }
     
          Escrevemos o valor 4 no registro PAADDR para selecionar o sub-registro High Drive de nome PHDEA[7:0]  e com PACTL com um valor de 0xFF, colocamos todos os bits de PHDEA[7:0] habilitados para high drive. 
          Note que em direção dos dados, 0 é saída e 1 entrada.
          Agora compilamos e montamos o programa com F7 ou clicando em montar e compilar e vemos o resultado de sucesso da compilação, enviamos o arquivo ou baixamos o programa compilado para o microcontrolador e temos o LED aceso, ou seja, funcionando o programa, caso isso não ocorra, será necessário resetar o microcontrolador fisicamente, aterrando, momentaneamente o pino de reset..
          Como se pode ver, programar em C para os microcontroladores da Zilog é muito fácil e divertido, muito diferente de muitas linhas de microcontroladores que dificultam com seleção de banco de memórias e outras dificuldades. Em Z8 Encore, isso é mais fácil e rápido. 
          

Considerações Finais (até o próximo post da série )

          Quando conectamos cargas como LED, buzzers ou qualquer carga entre a saída de um pino do microcontrolador e o Vcc, estamos fazendo de forma usual e explicamos por quê : 
  • A saída de sinal de algum pino do microcontrolador tem um  valor mais próximo de 0 Vcc que Vcc acionado, onde há uma tensão positiva bem baixa dos 3.3V da fonte de alimentação.
  • Na linha Z8 Encore, o máximo de queda de tensão elétrica é de 0.6V, o que nos dá (3.3 - 0.6) 2.7V na sua saída.
  • O mínimo de tensão elétrica é de 2.4V quando se liga um LED em série com resistor e o conjunto ligado ao terra ou gnd.
  • Resumindo, se tem mais brilho no LED com ele ligado ao 3.3Vcc da fonte de alimentação, em série com um resistor limitador e a outra ponta ao pino do microcontrolador. Pois se tem 2.7V e não 2.4V, se ligado ao gnd. 
          
                                                                   Continua ....

          


Nenhum comentário:

Postar um comentário