Busque no blog

domingo, 17 de novembro de 2013

Módulo de som e voz para projetos - arduino ou stick.

Módulo de som para projetos - Arduino ou qualquer MCU 

            
               Que tal colocar voz e som nas suas aplicações ? 
               (andrepereira@ig.com.br - 21 991267264 - RJ )


Olá pessoal, quanto tempo a gente não se fala, ou seja, não se lê ?
Pois bem ! Vocês pediram e serão atendidos. O tempo parado foi para poder criar um projeto que atendessem a alguns de vocês e se você se identificou com o assunto, obrigado, você é a pessoa que tornou isso possível com sua sugestão, sua ideia e sua crítica.
Estamos lançando um módulo de som que pode ser usado para reproduzir sons diversos, desde um música, um aviso, uma criação para festas ou avisos sonoros de alerta ou uma secretária eletrônica microcontrolada, o importante é a sua imaginação onde usar e isso é com você. Cabe a mim, criar o

quinta-feira, 25 de julho de 2013

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

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




Configurando as PORTAS do Z8 Encore corretamente.

          Vamos continuar nossa série com uma implementação mais completa e mais avançada. Nesta parte vamos falar de operações lógicas que facilitam a vida de programadores C que é a operação de mudar bits individualmente ou em bytes para mudar o status de um pino ou bit de algum registrador, o que facilita e muito no uso de registradores como I/Os em modo geral e em função alternativa.
          Observe a tabela a seguir, com relação a manipulação de bits com operação lógica e

segunda-feira, 8 de julho de 2013

Cleaps-tech(tecnologia eletrônica): Lixo de informática - onde descartar alguns itens ...

Cleaps-tech(tecnologia eletrônica): Lixo de informática - onde descartar alguns itens ...: Lixo de informática - onde descartar alguns itens ?     ( contato : André Pereira da Silva - andrepereira@ig.com.br - 21 91267264 )  ...

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 ....

          


domingo, 7 de julho de 2013

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

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




_________________________________________________________________________________
Abrindo e programando com o ZDSII
_________________________________________________________________________________

           Neste artigo vamos nos concentrar na IDE da Zilog, o ZDSII que tem versão para a linha Z8 encore e ZNEO, além das demais linhas desta empresa. Vamos começar um programa para ligar e fazer piscar um LED além de outras funcionalidades que o programa e a IDE permitirem. Espero que venha a ser muito útil aos nossos leitores e ficamos aguardando seus comentários.
          Em www.zilog.com, na aba da figura a seguir é possível adquirir a IDE diretamente no site do fabricante e sempre nas versões atualizadas.


          Depois de fazer o download, instalar e abrir o programa, vamos por a mão na massa. Na figura a seguir temos o programa aberto, se conseguiu acompanhar o último post, deve saber como abrir e usar o ZDSII, então vamos lá.


          A partir de agora vamos nos concentrar no programa partindo do esquemático do projeto, este consiste no desenho a seguir que mostra a ligação dos LEDs ao Z8F0822 e valores dos resistores.



          Não vamos discorrer sobre o circuito completo, o mesmo se chama um150.pdf e pode ser encontrado no site da Zilog em www.zilog.com e pode ser baixado gratuitamente. Se o fez, vamos comentar o código e fazer o led acender conforme.
          Com o ZDSII aberto, vamos criar um projeto no local de instalação do programa na pasta samples.
          Nesta pasta, vamos criar uma nova pasta ou subpasta de nome "projeto_novo" e vamos dar um nome ao projeto como sendo "novo_projeto", conforme imagem a seguir e os passos descritos.


          Logo depois, sua pasta ficara como a figura seguinte descreve.


          E temos nossa nova pasta de projetos que vamos criar do zero.


          Depois clicamos em "Select" e temos nossa nova pasta, prontinha para ser usada e abusada. Agora vamos começar a fazer nosso projeto e ver o led funcionar.

Criando um projeto executável. 


  • No MENU selecione "File" -> "New Project". (Na caixa que se abre, deixe como na figura a seguir, porém deve dar um nome ao projeto que foi escolhido como sendo "novo_projeto" clicando no quadradinho a direita com pontinhos dentro do lado de "Project Name").
  • Na janela que se abre, conforme a figura abaixo, deixe como está e clique em "Next".



  • Na figura que se abre, marque ou com final KIT ou KITG. Em "Setup" marque a frequência do seu cristal. Em "Debug Tool" selecione "SerialSmartCable" e no seu "Setup", marque "Baud Rate - 57600" e o "Port" vai depender da sua porta serial ou física ou emulada com cabo USB - SERIAL. Clique em "Next" depois "Next" novamente e finalmente em "Finish".

          O ZDSII criou um arquivo de projeto "novo_projeto.zdsproj" e é nesse projeto que vamos trabalhar, criando nosso programa para ser compilado e rodar na placa que estiver a MCU Z8F0822 da zilog.

Adicionando um arquivo fonte ao projeto.

  • No Menu, clique em "File" -> "New File". Abre uma janela em branco dentro da IDE e é nessa janela que vamos escrever nosso programa e fazer o led funcionar. Antes vamos fazer uma brincadeira para que se possa fixar a real maneira de trabalhar com esses microcontroladores.
  • Agora vamos salvar o arquivo, mesmo vazio, para ter um nome e podermos acrescentar ao projeto. Para isso, podemos pressionar "ctrl-s", clicar na figura "Save As" ou no menu em "File" -> "New File". Ao abrir a janela "Save As" edite um nome para o arquivo. Aqui, vamos trabalhar com C inicialmente, para que o arquivo fique menor e mais compreensível aos programadores de outros microcontroladores. Posteriormente, o mesmo arquivo poderá ser em asm. No nosso caso é "novo_projeto.c".
  • No menu e em "Project" -> "Add Files", escolha o arquivo que acaba de criar, ou seja, novo_projeto.c . Clique em Add e pronto.
          Agora temos um arquivo fonte no projeto atual, vamos incluir algumas linhas de código e fazer a compilação para ver o que ocorre. Escreva, na parte em branco que se abriu, ou o arquivo novo_projeto.c o texto a seguir :
          Salve o arquivo e clique em "Build" no Menu e em "Build" ou pressione F7 para compilar e montar o projeto. Aguarde um pouco e verá na aba de baixo o texto "Build Succeeded", indicando que a compilação foi bem sucedida, conforme texto abaixo : 

OUTPUT CHECKSUM
=============== 
novo_projeto.hex 8452 
novo_projeto.lod 8452 
Build succeeded.
    Aqui, vamos mostrar como configurar o PORT ou pinos do microcontrolador conforme desejarmos, como estamos usando um LED, configuraremos os pinos para "High Drive output", colocar os bits dos pinos em nível alto ou baixo ou o PORT todo, caso seja desejado. Fazer com que cada pino ou bit funcione independente dos outros do mesmo port, fazer operações lógicas e aritméticas e criar funções que agreguem mais recursos ao programa.
          
Acessando os pinos do PORTx (  x = A~C )        

          Para acessar os PORTS ou pinos do microcontrolador da linha Z8 ENCORE, acessamos de fato os registros de memórias mapeadas, isso quer dizer que podemos escrever ou ler dados dessas regiões de memórias onde os dados podem ser transferidos de ou para registros especiais que exercem funções específicas. Esses registros estão conectados de alguma forma aos pinos ou PORTs e alteram suas operações ou comportamento. Vamos acessar um PORT ou pinos que consigam drenar muita corrente elétrica e colocar este em modo saída, pois vamos acionar um LED ou LEDs e faremos isso em linguagem de programação C ou ASM. No programa anterior, criamos um arquivo e o compilamos e montamos, agora é incluir trechos de código que correspondam com a ação que queremos, no nosso caso o arquivo , que contem informações sobre o mnemônico do código e permitirá que este compile sem erro. Inclua no topo do código este a chamada deste arquivo como se segue : 

#include 
void main(void)                    // Função principal do programa
                  {
                   PAOUT = 0xFF; // nome do PORT em maiúsculo.
                   PAOUT = 0x00 ; // Toda linha termina em ; se não for função. 
                   PAOUT = 0xFF ; // 0xFF =11111111 e 0x00 = 00000000 em binário.
                   return ; // não é nome de registro, por isso é minúsculo.
                   }

O arquivo de cabeçalho ez8.h

          Arquivo de cabeçalho, quando apropriadamente usados em linguagem C são fundamentais para gerar interfaces entre os registros e dar nomes aos operandos e registros. São fundamentais para definir o hardware e o software para um funcionamento perfeito, pois permitem que longas extensões de programas fiquem em um arquivo em separado e apenas chamado pelo programa principal com "#include". Para o nosso caso, estamos definindo o PORTA com valor 0xFF que é 1 nos oito bits e 0x00, que é zero, em todos os 8 pinos do microcontrolador no PORTA. Isso é definido dentro do arquivo ez8.h como é mostrado neste trecho de código: 

#define PAOUT  (*(unsigned char volatile far*)0xFD3)

          O endereço do registro de saída do PORTA é, em hexadecimal, FD3 e por isso não precisamos definir este endereço no nosso código, uma vez que já é pre definido no arquivo de cabeçalho ez8.h. Quando escrevemos PAOUT = 0x00, estamos, de fato, escrevendo (*(unsigned char volatile far*)0xFD3) = 0x00. Observe como seria mais dispendioso escrever isso em um código complexo. Por este motivo, o arquivo de cabeçalho já o fez, deixando que a gente apenas referencie o que ele definiu em "#define", que é "PAOUT=0x00".
          Agora vamos compilar o programa e montar com F7 e teremos como resposta no quadro do rodapé, "Build succeeded" indicando que o arquivo foi compilado e montado com sucesso. 
          Se você executar o programa em modo DEBUG, vai perceber que o programa roda normalmente com as mudanças de valores nos registros do PORTA, porém se baixar o código gerado para o microcontrolador,os LEDs continuarão apagados. Isso foi de propósito. Antes de acender os LEDs, vamos a mais lições, para compreender como funcionam as outras opções de registros em modo propósito geral e função alternativa, pois cada pino pode exercer mais de uma função mas nem sempre ao mesmo tempo. 
          
                                                                     Continua .... 

domingo, 5 de maio de 2013

Zilog - Usando os pinos de I/Os dos Microcontroladores Z8 encore XP - exemplo.

Zilog - (PS0199) - Aprenda a usar as IOs desse microcontrolador. Exemplo de código.




     Finalidade :
      Neste trabalho vamos mostrar como é fácil e rápido usar a IDE da ZILOG na programação de microcontroladores Zilog. usaremos os exemplos que já constam na documentação do programa e as formas de trabalhar com o mesmo. Este trabalho possui muita informação importante a respeito de como ler e escrever nos registros e nas entradas e saídas do microcontrolador em diferentes modos de operação.

     Exemplo de código para a linha Z8 encore.
          Os microcontroladores da Zilog com core Z8 encore XP são muito fáceis de serem programados e usados em diversos projetos de uso geral. Aqui vamos nos ater ao fato de mostrar como podemos criar nosso código, compilar e descarregar dentro dos microcontroladores de maneira rápida e fácil.
          Primeiro de tudo, devemos ir no site www.zilog.com e baixar a ultima versão do software ZDSII, que é uma IDE completa e sem limites em C e asm para programação e debugagem. Se você perdeu os ultimos posts sobre como montar um gravador serial para esta linha, procure no blog em http://cleapseletroeletronica.blogspot.com.br/2012_10_01_archive.html e fazer o seu.
          Vou imaginar que você fez o download e a instalação. Agora vamos abrir o programa ZDSII para a linha Z8 ENCORE XP e para tal ou abrimos no menu iniciar ou na área de trabalho, isso pode ser  tanto no windows quanto no Linux. Essa é a sacada boa do compilador da Zilog, pode ser usado em duas plataformas de sistemas operacionais diferentes e sem estresse.
          Clique no menu iniciar e ache a pasta do programa, abra-o.
       


           
          Teremos o programa aberto em poucos segundos com a aparência como se segue na figura a seguir e é a partir daí que poderemos realizar nosso trabalho de projetos.


          A partir daí é só ir em FILE e, se for criar um projeto novo, em NEW Project, ou abrir um existente, em Open Project. No nosso caso, abriremos um projeto já existente, pois o espaço aqui não permite aprofundar nessa parte agora, que ficará para um outro momento, que é mostrar como começar do zero.


          Abre-se a janela a seguir e vamos em C:\ Arquivos de programa\ZiLOG\ZDSII_Z8Encore!5.0\samples\XP_F0822\XP_F0822_ledBlink_asm\src,  clicamos no arquivo de projeto que se segue.

          E temos a figura a seguir com o programa pronto para ser compilado e enviado ao microcontrolador e não podemos antes de configurar o hardware de gravação e escolha do microcontrolador exato e para isso vamos em project em em settings.


          Abre-se a figura seguinte e em Debuger Tool selecionamos SerialSmartCable e em setup, escolhemos a configuração de nossa porta serial no computador. Em Target e clicando em SETUP é possível alterar o valor do cristal que será usado no microcontrolador. Como se vê na figura abaixo.


          Clicamos em compilar :

       

          E, se tivermos como resposta, a figura que mostra no rodapé do programa, como succeed, então o programa não tem erros e podemos gravar no microcontrolador.


Agora é clicar em  e conectar ao microcontrolador para debuggar e gravar seu programa compilado. Se tivermos a figura a seguinte é por que, ou o hardware está com problemas ou não está conectado adequadamente e por isso é bom verificar o que possa estar acontecendo. 


          Agora, se a mensagem for diferente e como é mostrado na figura abaixo, tudo certo, é só programar o microcontrolador e começar a fuçar no programa e ir modificando os parâmetros para ver o que acontece no microcontrolador e o que muda nos registradores no canto direito do programa, isso é debugar e verificar o interior do microcontrolador e acertar o que esteja fora do desejado. 


Depois de tudo isso, é só clicar em  Download code e baixar seu arquivo .hex no microcontrolador e começar a brincar ou fazer seus projetos. 
           Espero que com esse tutorial de como usar o programa ZDSII da Zilog, tenhamos alcançado seus objetivos, apesar de o texto do título falar de exemplo, é isso mesmo o nosso proposto, ou seja usar um exemplo pronto de programa e deixar o leitor fazer suas modificações e verificações, com isso queremos incitar a criatividade e a curiosidade. 
          Os microcontroladores da Zilog são robustos e com uma gama muito grande de periféricos que permitem um desenvolvimento de projetos e protótipos. 
          Caso tenham dúvidas, sugestões e reclamações, nosso site www.cleapseletroeletronica.com e nosso email andrepereira@ig.com.br estão abertos aos nossos leitores. 
          Tentaremos fazer mais exemplos e projetos com os microcontroladores da Zilog e aguardamos suas sugestões. Até a próxima. 

segunda-feira, 8 de abril de 2013

Zilog - Usando os pinos de I/Os dos Microcontroladores Z8 encore XP - parte 2

Zilog - (PS0199) - Aprenda a usar as I/Os desse microcontrolador. Parte 2



         
Continuação : 

          Dando continuidade com o nosso trabalho sobre o uso e configuração das I/Os dos microcontroladores da Zilog linha Z8 Encore, vamos falar mais um pouco dos periféricos e outras particularidades do microcontrolador e desenvolver algum exemplo prático. 
         
Configurando os I/Os para operação de funções alternativas.

          Quando os pinos de I/Os são configurados para operação de funções alternativas, é dado acesso a funções especiais do microcontrolador como os TIMERS, Comunicação serial e demais periféricos. Para definir as I/Os para operação de funções alternativas, o registro de endereço do port em questão, deve ser definido como tipo de função alternativa que se queira naquele pino ou port e o registro de controle deve ser preenchido com valores pertinentes aos pinos do port específico envolvido com a função que se deseja usar nesse pino. A tabela a seguir lista as funções alternativas associadas com cada pino do port dos microcontroladores Z8 Encore XP.


Tabela – Mapeamento de funções alternativas dos PORTS













PORT Pino Mnemônico Descrição da função alternativa









PORTA PA0 T0IN Entrada do timer 0



PA1 T0OUT Saída do timer 0



PA2 N/A Sem função alternativa



PA3 CTS0 (Ativo EM 0) UART 0 limpa antes de enviar



PA4 RXD0/IRRX0 UART 0/IrDA 0 recebe dados



PA5 TXD0/IRTX0 UART 0/IrDA 0 transmite dados



PA6 SCL I²C clock ( OPEN-DRAIN automaticamente)



PA7 SDA I²C Data ( Open-drain automaticamente )


PORTB PB0 ANA0 Entrada analógica do ADC



PB1 ANA1 Entrada analógica do ADC



PB2 ANA2 Entrada analógica do ADC



PB3 ANA3 Entrada analógica do ADC



PB4 ANA4 Entrada analógica do ADC



PB5 ANA5 Entrada analógica do ADC



PB6 ANA6 Entrada analógica do ADC



PB7 ANA7 Entrada analógica do ADC


PORTC PC0 T1IN Entrada do Timer 1



PC1 T1OUT Saída do Timer 1



PC2 SS (ATIVO EM 0 ) SPI seletor de escravo



PC3 SCK SPI serial clock



PC4 MOSI SPI saída mestre, entrada escravo



PC5 MISO SPI entrada mestre, saída escravo



PC6 T2IN entrada do Timer 2



PC7 T2OUT Saída do Timer 2


PORTD PD0 T3IN Entrada do Timer 3



PD1 T3OUT Saída do Timer 3



PD2 N/A Sem função alternativa



PD3 N/A Sem função alternativa



PD4 RXD1/IRRX1 UART 1/ IrDA 1 recebe dados



PD5 TXD1/IRTX1 UART 1/ IrDA 1 transmite dados



PD6 CTS1 (Ativo em 0 ) UART 1 limpa para enviar



PD7 RCOUT Saída do oscilador RC do timer watch-dog


PORTE PE[7:0] N/A Sem função alternativa


PORTF PF[7:0] N/A Sem função alternativa


PORTG PG[7:0] N/A Sem função alternativa


PORTH PH0 ANA8 Entrada analógica do ADC



PH1 ANA9 Entrada analógica do ADC



PH2 ANA10 Entrada analógica do ADC



PH3 ANA11 Entrada analógica do ADC



          Por exemplo, digamos que se decida usar o periférico Timer 0 do microcontrolador Z8 Encore XP, configurando ou definindo o pino do PORTA para operação de função alternativa. Só e somente a função de saída no pino é considerado nesse exemplo.
          O  código do exemplo 1, mostra como é configurado ou definido o pino PA1 do PORTA para operação de função alternativa configurando os bits apropriados no registradores adequados.

Exemplo 1 :

  /***************************************************/
 //      inicialização                                                          //
 /***************************************************/

PAADDR = 0x02 ;    // Registro do endereço do PORTA seleciona sub-registro de função alternativa.
PACTL |= 0X02 ;      // Registro de controle do PORTA seta saída do TIMER0.
PAADDR = 0X01 ;   // Registro de endereço do PORTA sub-registro de direção de dados.
PACTL &= 0Xfd ;    // Registro de controle do PORTA define bit 1 como saída, se Timer 0 selecionado.
PAADDR = 0X03 ;   // Registro de endereço do PORTA seleciona o sub-registro de controle de saída.
PACTL &= 0Xfd ;    // Registro de  controle do PORTA define o bit 1 como push-pull.
PAADDR = 0X00 ;   // Permite bloquear os sub-registros contra alterações inadvertidas depois de
                                     configurados.

Exemplo 2 :

/*****************************************************/
// Inicialização                                                                    //
/*****************************************************/

PAADDR = 0X02 ;  // Registro de endereço do PORTA seleciona sub-registro de função alternativa.
PACTL  |= 0X01 ;   // Registro de controle do PORTA define entrada do Timer0.
PAADDR = 0X01 ; // Registro de endereço do PORTA seleciona sub-registro de direção de dados.
PACTL |= 0X01 ;   // Registro de controle do PORTA define bit 0 como entrada, se Timer 0 selecionado.
PAADDR = 0X00 ; // Permite bloquear os sub-registros contra alterações inadvertidas depois de
                                   configurados.

NOTA: Os registros dos ports de A~H selecionam as funcionalidades dos I/Os acessíveis através dos registros de controle dos ports de A~H. Definindo os pinos dos ports como 1 nos registros dos endereços dos ports de A~H, através dos registros de controle dos ports, habilita o port correspondente para operação de função alternativa.

Definindo as I/Os como operação de modo misto.

          Agora que aprendemos como definir os pinos dos microcontroladores Z8 Encore como entrada, saída e operação de função alternativa, temos, aqui, um exemplo de como usar, simultaneamente, pinos diferentes no mesmo PORT como entrada, saída e operação de função alternativa. 
          Por exemplo, assuma que você queira usar o pino do Timer 0 como saída definindo isso no pino PA1 do PORTA. Deseja-se usar os pinos PA4 e PA5 como entrada, deseja-se, também, usar os pinos PA6 e PA7 como saídas dreno aberto. Depois de definir isso nos registradores, você deseja ler dados dos pinos [4,5] e escrever dados nos pinos [6,7] com lógica [1,0].
          O código a seguir ilustra melhor como configurar o PORTA para operação mista. 

/******************************************************************************/
// Inicialização                                                             //
/*****************************************************************************/ 

PAADDR = 0x02 ;  // Registro de endereço do PORTA seleciona sub-registro de função alternativa.
PACTL |= 0x02 ;  // Registro de controle do PORTA define saída do Timer 0, demais pinos livres como I/O. 
PAADDR = 0x01 ; // Registro de endereço do PORTA seleciona sub-registro de direção de dados.
PACTL &= 0x3d ; //3d = 00111101 define os bits 1,6 e 7 como saída e os pinos 4 e 5, como entrada.

PAADDR = 0X03 ;   // Registro de endereço do PORTA seleciona o sub-registro de controle de saída.
PACTL &= 0Xfd ;    // Registro de  controle do PORTA define o bit 1 como push-pull.
PAADDR = 0X00 ;   // Permite bloquear os sub-registros contra alterações inadvertidas depois de configurados.  
data = code ; // Lê os dados do registro de entrada do PORTA para dentro da variável 'data'.
data = data & 0x03 ; // Faz uma operação lógica AND com 00110000 para mascarar os valores dos bits 4 e 5.
PAOUT = data | 0x40 ; //Faz uma operação lógica OR do valor em data com 01000000 e escreve no registro de saída do PORTA para setar os bits [6,7] para [1,0].

Conclusão :

       Os pinos de I/Os são facilmente configuráveis usando os registros de endereços de ports junto com os registros de controle dos ports e seus respectivos sub-registros como explicado nesse documento. 
          O pino de qualquer I/O pode ser usado como fonte de interrupção externa quando configurados, somente, como entrada.
          A tabela neste documento, acima descrita, demonstra que as funções de periféricos on-chip dos microcontroladores Z8 Encore XP depende de posição de bitsnos ports. 
          O acesso aos I/Os dos ports é feito através do registro de dados de entrada e de saída. 


          Nesse ponto, finalizamos a parte de ensinar a acessar, configurar e usar os recursos de pinos e periféricos dos microcontroladores da Zilog para quem tivesse alguma dúvida. Nos posts seguintes, estarei procurando implementar algumas aplicações de exemplos para que o que foi ensinado possa ser visto no mundo real e ajudar aos demais a entenderem o fascinante mundo dos microcontroladores, em especial, os da zilog, a projetarem seus circuitos e projetos. Espero que tenham gostado e até a terceira parte dessa série.