Busque no blog

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

domingo, 14 de julho de 2013

Lixo eletrônico - Doe. Reaproveitamos, reutilizamos e destinamos a empre...

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