Este artigo é o terceiro de uma série que faz uso do PC em aplicações mecatrônicas. Conforme dissemos nos anteriores (MEC289 e MEC290) ele foi escrito em 2002 quando os computadores ainda tinham portas paralelas. Se você tem um velho computador com porta paralela pode aproveitar os projetos e ensinamentos desta série de artigos.
No artigo anterior desta série (MEC289) descrevemos como controlar um LED através da porta paralela do PC. Neste, veremos como checar, através desta mesma porta, se uma chave está pressionada ou não. A partir de agora utilizaremos a atualização do software SuperLogo para a versão 3.0 que está disponível para download gratuito no site da Unicamp ( http://www.nied.unicamp.br ) na seção “Publicações e Software”.
Porém, antes de começarmos a tratar do tema proposto, analisaremos as questões que deixamos em aberto no final do último artigo.
Questão 1
Você já sabe salvar e carregar os programas (procedimentos) que fez?
Para salvar os programas (que na realidade são os nossos procedimentos), basta teclar em “Arquivos” , depois teclar em “Salvar” na barra de Menu e escolher uma pasta e um nome conforme o exemplo a figura 1.
Com isso, salvamos todos os procedimentos que estiverem abertos dentro do arquivo CONTROLELGO. Da próxima vez que quisermos carregar os procedimentos do CONTROLELGO, bastará teclar “Arquivos “ e depois teclar em “Abrir” e escolher o nome do arquivo, que no nosso exemplo é CONTROLELGO.
QUESTÃO 2
Considerando que a janela “d1” fica sempre ativa, você já usou o comando apaguejanela ? (dica: no nosso programa tente apaguejanela “d1”)
Quando criamos uma janela no Logo, ela permanece ativa até que seja enviado um comando de apaguejanela, no nosso caso chamamos a janela de C“. Então o comando será, conforme sugerimos, apaguejanela “d1”.
QUESTÃO 3
É fácil colocar mais um botão para terminar o programa? Como se faz?
Sim,.é muito fácil colocar mais um botão em nosso programa, para isso, basta ir até “editar procedimentos” (teclar “Procedimentos” e depois em “Editar”) que aparecerá uma janela (conforme figura 2) com todos os procedimentos que podemos editar, e escolher o procedimento controle.
Então, iremos alterar o procedimento onde as letras estão em negrito:
Com isso o nosso programa irá assemelhar-se à figura 3. Teste e veja como ficou. Lembrando que para executar novamente o programa bastará teclar “controle” na barra de comandos.
QUESTÃO 4
Como se faz para acender mais LEDs?
A porta paralela tem disponível um byte (8 bits, você se lembra?) e na nossa montagem utilizamos somente o bit DO no qual quando escrevemos 1 o LED acende, e quando escrevemos 0 o LED apaga. Para colocar mais um LED, basta adicionar mais um circuito de acionamento e em vez de conectar em D0 , devemos conectar em D1.
Agora para ligar/desligar os LEDs teremos que utilizar a tabela 1.
COLETANDO INFORMAÇÕES
Agora que já analisamos as questões, abordaremos um assunto novo que é manusear entradas que, em conjunto com o manuseio de saídas, nos permitirá fazer várias automações.
Nós vimos anteriormente que para acender um LED tínhamos que escrever no port 378h (888 em decimal). Na figura 4 mostramos uma representação desse partem formato de byte dividido em bits e suas conexões com a porta paralela.
As linhas D0 a D7 representam as linhas de dados do conector da porta paralela.
Note que as outras estão nos registradores 379h (889 decimal) e 37Ah (890 decimal), que são registradores de controle da porta paralela. Essas linhas são de entrada e de saída.
No nosso caso vamos utilizar somente a linha de “Fault”, que é uma linha de entrada onde iremos conectar uma tecla conforme o esquema elétrico dado da figura 5 e montagem ilustrada na figura 6.
Quando a tecla não estiver pressionada, iremos ter nível lógico 1, o que irá corresponder a bit 1 no bit “Fault” do registrador 379h (889 decimal). Agora, se pressionarmos a tecla, iremos ter nível lógico zero na linha de “Fault” e zero no bit de “Fault” do registrador 379h (889 decimal).
Pronto. Agora já temos a nossa placa modificada com a tecla e sabemos como identificar se a tecla foi pressionada ou não.
TESTANDO A CHAVE COM O SUPERLOGO
Conecte na porta paralela a placa sem as pilhas, pois as mesmas são necessárias somente para acender o LED.
No LOGO, iremos utilizar o comando “portaentadab”.Se formos até “Ajuda” do SuperLogo, teremos a descrição do comando como:
portaentradab id_da_porta
Esse comando irá ler 1 byte (caractere) da porta especificada em id_da_porta e retorna-lo com um inteiro.
O id_da_porta especifica uma porta de “hardware”. Não confunda esse comando com Abraporta e Leiacaractereporta, que são para comunicação via portas Serial e Paralela. Veja também Portaentrada e Portasaídab.
id_da_porta: (INTEIRO) Especifica de qual porta de hardware você deseja ler.
Em outras palavras, esse comando lê a porta especificada e retorna o valor lido na forma de um caractere (byte), ou seja, os nossos 8 bits ! Então, vamos ver como funciona:
Sem a tecla da placa estar pressionada, execute o comando abaixo na janela de comandos:
mostre portaentradab 889
O SuperLogo irá mostrar o valor 120 que em hexadecimal e 78h e em binário é 01111000. A tabela 2 exibe a sobreposição do valor binário em cima do registrador 379h.
O "~“ no final de uma linha significa que a linha foi quebrada, ou seja, a linha de baixo faz parte do mesmo comando.
Observe que o bit “Fault” está com 1. Agora se executarmos o comando novamente com a tecla pressionada, teremos o valor 112 que em hexadecimal e 70h e em binário é 01110000. A tabela 3 ilustra a sobreposição deste sobre o registrador 379h.
Note que, desta vez, o bit “Fault” está com zero. Agora você deverá estar pensando:
Eu sei que quando eu aciono o LED preciso executar apenas uma vez o comando “portasaída 888 1” , mas para saber se a chave esta pressionada ou não, tenho que executar várias vezes o comando “portaentradab 889", pois em dado momento a tecla pode estar pressionada e noutro não.
Para solucionar esta questão, contaremos com um poderoso recurso do LOGO, que é o temporizador, que executa um procedimento na frequência de tempo que estipularmos. Por exemplo, se estipularmos uma temporização de 200 milissegundos (1/5 de segundo) para fazer a leitura da chave, então a cada 200 milissegundos o procedimento de ler chave será executado. Para entender melhor este comando, vamos modificar o nosso procedimento de controle para:
além de utilizar os procedimentos LIGA e DESLIGA que fizemos no artigo da edição anterior.
Não se esqueça de salvar todos os procedimentos, pois quando utilizamos o temporizador temos que ter muito cuidado, visto que se programarmos algo errado poderemos perder o controle do programa, veja em “Ajuda” a descrição do comando “ativetemporizador”.
Nesse ponto é só colocar as pilhas e testar esse novo procedimento “controle”, e ver o que acontece. Se tudo estiver certo, iremos ter uma tela parecida com a mostrada na figura 7; caso contrário, verifique se você efetuou corretamente os passos que descrevemos. Agora, toda vez que apertarmos a chave aparecerá o texto de “TECLA PRESSIONADA”, e quando soltarmos, o texto “TECLA SOLTA” irá ser escrito na janela do programa.
Mas, como funcionam os comandos novos que utilizamos no procedimento “vechave”? Vamos ver:
desativetemporizador 1 - desativa o temporizador 1.Teoricamente não seria necessário colocá-lo, mas para efeitos de depurar o programa (passo a passo) é recomendável fazê-lo.
atribua “chave portaentradab 889 - Aqui, estamos criando uma variável chamada chave e atribuindo o valor lido na porta 889 em decimal ou 379 em hexadecimal.
atribua “chave bite :chave 8 - Esse comando atribui o valor a variável chave com o resultado da operação lógica “E” entre o valor inicial de chave (lido na porta paralela) e o valor 8. Fazemos isso para “isolar” o valor do bit correspondente a nossa chave. Para ficar mais claro, vamos exemplificar a operação “E” utilizando a tabela 4, onde lemos o valor da porta paralela (120 em decimal e 78 em hexadecimal). A tabela ilustra o resultado da operação.
A operação “ E “ é feita bit a bit e obedece a lógica exibida na tabela 5.
Resumindo: se um dos valores for “zero” o, resultado será “zero” independente do outro valor ser “um”; com isso conseguiremos “isolar” o bit que queremos verificar.
No nosso caso, se o bit false estiver em 1 (tecla solta), o resultado da operação será 8 conforme a tabela 4, e se estiver apertada, o resultado será “zero”.
senão :chave = 0 [mudeestático “TECLA [PRESSIONADA]] [mudeestático “TECLA [SOLTA]] - Aqui temos um comando de decisão. Se o conteúdo da chave for igual a “zero”, será executado o procedimento mudeestático “TECLA [PRESSIONADA]; caso contrário será executado o procedimento mudeestático “TECLA [SOLTA].
ativetemporizador 1 200 [VECHAVE] - Aqui ativamos novamente o nosso temporizador com intervalo de 200 milissegundos e a cada intervalo deste será executado o procedimento VECHAVE.
Você notou que os nossos programas estão ficando mais complexos? Recorda-se que tudo começou com o desenho de um quadrado pela nossa tartaruga?
Com isso, pode perceber que para fazer um programa complexo (ou quase!) nós o dividimos em várias tarefas ou procedimentos (no nosso caso LIGA, DESLIGA e VECHAVE). Você deve ter notado também que testamos cada procedimento e comando independentemente e, com isso, conseguimos entender e analisar de uma maneira mais fácil seu funcionamento.
De uma maneira que talvez não tenha percebido, nós fizemos uma depuração do programa e da nossa placa. Mas, o mais importante de tudo, é que dividimos o nosso “grande” problema em “pequenos” problemas. Podemos entender melhor se analisarmos o fluxograma do nosso programa na figura 8.
Note que o fluxograma não são os comandos, mas sim a descrição simplificada do nosso programa ou do que queremos que ele faça.
Você deve estar se perguntando: Mas porque eles estão me falando dessas coisas "chatas"?
Concordamos que o assunto é chato, mas é muito importante, pois quando entendemos o problema, fica mais fácil de programar e de depurar o programa, seja pelo próprio autor ou por outra pessoa. Isso significa que sempre devemos nos preocupar com a documentação de nossos programas e projetos, com a descrição do que ele faz, as rotinas que ele tem, fluxogramas, desenhos, fotos entre outras coisas que possam nos ajudar a “lembrar” o que fizemos. Imagine, por exemplo, daqui a 6 meses você rever o procedimento de VECHAVE e se perguntar:
Porque eu utilizei 8 no comando atribua “chave bite chave 8 e não 16? Será que 8 é o valor correto?
Você sabe qual é o melhor momento para se fazer a documentação do programa ou projeto?
Se respondeu no final, talvez nunca a faça, pois sempre haverá outra coisa a ser realizada mais interessante do que documentação e ela sempre será deixada de lado. Então, o melhor momento para documentar um projeto é durante a sua execução, porque as informações estão nascendo “fresquinhas” na sua mente.
Bem, estamos finalizando mais um artigo desta série. Conseguimos controlar um LED e saber se uma tecla está pressionada ou não, e entendemos a importância da documentação. A partir do próximo artigo iniciaremos um projeto de Automação. Enquanto você aguarda, tente fazer:
1- Um programa onde:
Pressionando a chave na placa, acende o LED, e quando soltamos o LED apaga. Não vale ligar com fio a chave diretamente no LED!
2- Um programa onde eu pressiono a chave na placa e o LED acende, e quando solto a chave o LED permanece aceso; se eu pressionar a chave novamente, o LED se apagará e assim sucessivamente.
Revisado 2016