|
|
|
APRENDENDO A PROGRAMAR NO MIKROBASIC
Após aprendermos a instalar e configurar o nosso compilador agora vamos aprender a programar e compilar para extrairmos o arquivo (HEX) a ser gravado em nosso PIC (Microcontrolador).
Esta parte de nosso estudo talvez seja a mais complicada, por que vamos escrever um programa em linguagem Basic, para que o PIC, faça exatamente o que queremos.
Para isso devemos conhecer um pouco sobre o PIC, Cada perninha "portas (I/O)" do nosso microcontrolador.
Por esse motivo esta aula será um misto de programação e conhecimento do PIC, irei tomar como base para nossa aula os PIC´s 16f84A e o 16f628A por seus comportamentos e números de pernas serem semelhantes.
Usarei uma linguagem com vocês bem prática, maiores detalhes sobre programação veja a aula 5, sei como se sente, o aprendiz e os mais afoitos para por o bichinho pra funcionar. Então mãos à obra!!!
Esta parte de nosso estudo talvez seja a mais complicada, por que vamos escrever um programa em linguagem Basic, para que o PIC, faça exatamente o que queremos.
Para isso devemos conhecer um pouco sobre o PIC, Cada perninha "portas (I/O)" do nosso microcontrolador.
Por esse motivo esta aula será um misto de programação e conhecimento do PIC, irei tomar como base para nossa aula os PIC´s 16f84A e o 16f628A por seus comportamentos e números de pernas serem semelhantes.
Usarei uma linguagem com vocês bem prática, maiores detalhes sobre programação veja a aula 5, sei como se sente, o aprendiz e os mais afoitos para por o bichinho pra funcionar. Então mãos à obra!!!
ACIONANDO UM LCD 16X2 & Led
Em nosso Primeiro programa em Basic, vamos tomar como exemplo o circuito mostrado ao lado que consiste em acionarmos um display de LCD 16x2 e dois led´s o programa é bem simples, vamos analisar linha por linha, com os devidos comentários para facilitar ainda mais o entendimento, o projeto proposto aqui deverá, ser transportado para o protoboard, afim de que o aprendizado na prática, seja absorvido com mais clareza e com a análise de prováveis erros possamos saber o que está causando o(s) erro(s), estimulando assim a procurar, identificar e sanar o problema. Caso você seja, um iniciante e não sabe absolutamente nada, estarei colocando abaixo da página, um circuito mais simples, para que você possa aprender esses primeiros passos em programação com mais facilidade, com um circuito e programa, mais simples.O programa e o circuito proposto aqui consiste em inicializar um LCD 16x2 e dois Led´s. O LCD irá mostrar visualmente através de mensagens de texto o que irá acontecer com os Led´s, mostrando assim cada passo, obedecendo programa realizado.
Em nosso Primeiro programa em Basic, vamos tomar como exemplo o circuito mostrado ao lado que consiste em acionarmos um display de LCD 16x2 e dois led´s o programa é bem simples, vamos analisar linha por linha, com os devidos comentários para facilitar ainda mais o entendimento, o projeto proposto aqui deverá, ser transportado para o protoboard, afim de que o aprendizado na prática, seja absorvido com mais clareza e com a análise de prováveis erros possamos saber o que está causando o(s) erro(s), estimulando assim a procurar, identificar e sanar o problema. Caso você seja, um iniciante e não sabe absolutamente nada, estarei colocando abaixo da página, um circuito mais simples, para que você possa aprender esses primeiros passos em programação com mais facilidade, com um circuito e programa, mais simples.O programa e o circuito proposto aqui consiste em inicializar um LCD 16x2 e dois Led´s. O LCD irá mostrar visualmente através de mensagens de texto o que irá acontecer com os Led´s, mostrando assim cada passo, obedecendo programa realizado.
Nota inicial.: Há uma diferença, programando no MikroBasic versão atualizada e a Versão 7.0.0.2, na hora de inicializar o LCD com a função LCD_INIT(PORTB) "exemplo de nosso programa a ser estudado aqui". Na versão PRO atualizada, é necessário uma configuração, com o uso da função Dim. Na versão que eu uso " MikroBasic 7.0.0.2" eu aplico esta função LCD_INIT(PORTB) normalmente e o compilador gera o arquivo HEX sem erros, ao indicar o PORTB em Lcd_Init(PortB) o compilador assume que RB2,3,4,5,6 e 7 irão controlar o nosso LCD, já na versão atualizada o comando é: LCD_INIT() sendo que as portas usadas para a ligação do LCD, deverão ser direcionadas com a função Dim. Vamos ver como ficam os programas nas duas versões, diga-se de passagem a versão que eu uso me poupa algumas linhas de programação, outra função que tem diferença é Lcd_Cmd(Lcd_Clear) na versão PRO V.6 escreve-se Lcd_Cmd(_LCD_Clear), além destas variações de sintaxe no decorrer de nossos estudos vamos nos deparar com diversas outras. Se achar interessante o MikroBasic versão 7.0.0.2 clique aqui para baixá-lo.
Vejam as diferenças nas linhas de programação abaixo.
Vejam as diferenças nas linhas de programação abaixo.
PROGRAMA VERSÃO 7.0.0.2
Program LED_LCD
Lcd modulo das conecções """ A versão Dim LCD_RS as sbit at RB2_bit """ 7.0.0.2 LCD_EN as sbit at RB3_bit """ dispensa LCD_D4 as sbit at RB4_bit """ esta parte LCD_D5 as sbit at RB5_bit """ do LCD_D6 as sbit at RB6_bit """ Programa LCD_D7 as sbit at RB7_bit LCD_RS_Direction as sbit at TRISB2_bit LCD_EN_Direction as sbit at TRISB3_bit LCD_D4_Direction as sbit at TRISB4_bit LCD_D5_Direction as sbit at TRISB5_bit LCD_D6_Direction as sbit at TRISB6_bit LCD_D7_Direction as sbit at TRISB7_bit ' Fim do módulo de conecções 'Atribuições de nomes que serão subistituídos pelos textos 'correspondentes [16] é o número de caracteres dos 'textos eu 'padronizei 'todos contendo 16 caracteres para facilitar. Dim txt1 as char[16] 'txt1 são caracteres e possui 16 caracteres txt2 as char[16] 'txt2 """"""""""""""""""""""""""""""""""""""""""' txt3 as char[16] 'txt3""""""""""""""""""""""""""""""""""""""""""" txt4 as char[16] 'txt4""""""""""""""""""""""""""""""""""""""""""" txt5 as char[16] 'txt5""""""""""""""""""""""""""""""""""""""""""" txt6 as char[16] 'txt6""""""""""""""""""""""""""""""""""""""""""" txt7 as char[16] 'txt7""""""""""""""""""""""""""""""""""""""""""" 'Executa programa principal main: TrisA = 0 ' configura os pinos RA como analógicos ' em nível baixo 0 TrisB =%00000000 ' configura os pinos RB como digital e em ' nível baixo 0 PortA = (0) 'As portas RA são colocadas como nível ' baixo 0 'Atribuições de textos aos caracteres txt1,2,3,4,5,6 e 7 txt1 = "Ligando LED" 'txt1 equivale ao texto "Ligando LED" txt2 = "Vai ligar Led 1" 'txt2""""""""""""""""""""""""""""""""""""" txt3 = "Ligou Led 1" 'txt3""""""""""""""""""""""""""""""""""""" txt4 = "Vai ligar Led 2" 'txt4""""""""""""""""""""""""""""""""""""" txt5 = "Ligou Led 2" 'txt5""""""""""""""""""""""""""""""""""""" txt6 = "Vai Retornar" 'txt6""""""""""""""""""""""""""""""""""""" txt7 = "para o inicio" 'txt7""""""""""""""""""""""""""""""""""""" ' "Executa a Inicialização do LCD " LCD_INIT(PORTB) 'inicializa LCD veja a diferença Lcd_Cmd(LCD_CLEAR) ' Limpa display LCD_CMD(LCD_CURSOR_OFF) 'inicializa o cursor desligando-o 'Executa Rotina de LCD e LED Lcd_Cmd(LCD_CLEAR) ' Limpa display LCD_OUT(1,2,txt1) 'Escreve o primeiro texto na primeira linha Delay_ms(2000) 'Faz uma pausa com o texto escrito no LCD Lcd_Cmd(LCD_CLEAR) ' Limpa display LCD_OUT(1,2,txt2) 'Escreve o texto 2 na primeira linha Delay_ms(2000) 'Faz uma pausa com o texto escrito no LCD PortA = (4) 'Liga o Led 1 Lcd_Cmd(LCD_CLEAR) ' Limpa display Lcd_Out(1,2,txt3) 'Escreve o texto 3 na primeira linha Delay_ms(2000) 'Faz uma pausa com o texto escrito no LCD e o 'Led permanece aceso Lcd_Cmd(LCD_CLEAR) ' Limpa display Lcd_Out(1,2,txt4) 'Escreve o texto 4 na primeira linha Delay_ms(2000) 'Faz uma pausa com o texto escrito no LCD PortA = (8) 'Liga o Led 2 Lcd_Cmd(LCD_CLEAR) ' Limpa display Lcd_Out(1,2,txt5) 'Escreve o texto 5 na primeira linha Delay_ms(2000) 'Faz uma pausa com o texto escrito no LCD e 'o Led permanece aceso Lcd_Cmd(LCD_CLEAR) ' Limpa display Lcd_Out(1,2,txt6) 'Escreve o texto 6 na primeira linha Lcd_Out(2,2,txt7) 'Escreve o texto 7 na segunda linha Delay_ms(2000) 'Faz uma pausa com o texto escrito no LCD e 'o Led permanece aceso Goto main 'Loop Volta para a linha main apagando o led e reiniciando LCD End. |
Programa PRO versÃo 6.0
Program LED_LCD
'Lcd modulo das conecções Dim LCD_RS as sbit at RB2_bit LCD_EN as sbit at RB3_bit LCD_D4 as sbit at RB4_bit LCD_D5 as sbit at RB5_bit LCD_D6 as sbit at RB6_bit LCD_D7 as sbit at RB7_bit LCD_RS_Direction as sbit at TRISB2_bit LCD_EN_Direction as sbit at TRISB3_bit LCD_D4_Direction as sbit at TRISB4_bit LCD_D5_Direction as sbit at TRISB5_bit LCD_D6_Direction as sbit at TRISB6_bit LCD_D7_Direction as sbit at TRISB7_bit ' End Lcd module connections 'Atribuições de nomes que serão subistituídos pelos textos 'correspondentes [16] é o número de caracteres dos 'textos eu 'padronizei 'todos contendo 16 caracteres para facilitar. Dim txt1 as char[16] 'txt1 são caracteres e possui 16 caracteres txt2 as char[16] 'txt2 """"""""""""""""""""""""""""""""""""""""""' txt3 as char[16] 'txt3""""""""""""""""""""""""""""""""""""""""""" txt4 as char[16] 'txt4""""""""""""""""""""""""""""""""""""""""""" txt5 as char[16] 'txt5""""""""""""""""""""""""""""""""""""""""""" txt6 as char[16] 'txt6""""""""""""""""""""""""""""""""""""""""""" txt7 as char[16] 'txt7""""""""""""""""""""""""""""""""""""""""""" 'Executa programa principal main: TrisA = 0 ' configura os pinos RA como analógicos ' em nível baixo 0 TrisB =%00000000 ' configura os pinos RB como digital e em ' nível baixo 0 PortA = (0) 'As portas RA são colocadas como nível ' baixo 0 'Atribuições de textos aos caracteres txt1,2,3,4,5,6 e 7 txt1 = "Ligando LED" 'txt1 equivale ao texto "Ligando LED" txt2 = "Vai ligar Led 1" 'txt2""""""""""""""""""""""""""""""""""""" txt3 = "Ligou Led 1" 'txt3""""""""""""""""""""""""""""""""""""" txt4 = "Vai ligar Led 2" 'txt4""""""""""""""""""""""""""""""""""""" txt5 = "Ligou Led 2" 'txt5""""""""""""""""""""""""""""""""""""" txt6 = "Vai Retornar" 'txt6""""""""""""""""""""""""""""""""""""" txt7 = "para o inicio" 'txt7""""""""""""""""""""""""""""""""""""" ' "Executa a Inicialização do LCD " Lcd_INIT() 'Inicializa o Lcd veja a diferença Lcd_Cmd(_LCD_CLEAR) 'Limpa display Lcd_Cmd(_LCD_CURSOR_OFF) ' Cursor off desligado 'Executa Rotina de LCD e LED Lcd_Cmd(_LCD_CLEAR) 'Limpa o LCD Lcd_Out(1,2,txt1) 'Escreve o primeiro texto na primeira linha Delay_ms(2000) 'Faz uma pausa com o texto escrito no LCD Lcd_Cmd(_LCD_CLEAR) 'Limpa o LCD Lcd_Out(1,2,txt2) 'Escreve o texto 2 na primeira linha Delay_ms(2000) 'Faz uma pausa com o texto escrito no LCD PortA = (4) 'Liga o Led 1 Lcd_Cmd(_LCD_CLEAR) 'Limpa o LCD Lcd_Out(1,2,txt3) 'Escreve o texto 3 na primeira linha Delay_ms(2000) 'Faz uma pausa com o texto escrito no LCD e o 'Led permanece aceso Lcd_Cmd(_LCD_CLEAR) 'Limpa o LCD Lcd_Out(1,2,txt4) 'Escreve o texto 4 na primeira linha Delay_ms(2000) 'Faz uma pausa com o texto escrito no LCD PortA = (8) 'Liga o Led 2 Lcd_Cmd(_LCD_CLEAR) 'Limpa o LCD Lcd_Out(1,2,txt5) 'Escreve o texto 5 na primeira linha Delay_ms(2000) 'Faz uma pausa com o texto escrito no LCD e 'o Led permanece aceso Lcd_Cmd(_LCD_CLEAR) 'Limpa o LCD Lcd_Out(1,2,txt6) 'Escreve o texto 6 na primeira linha Lcd_Out(2,2,txt7) 'Escreve o texto 7 na segunda linha Delay_ms(2000) 'Faz uma pausa com o texto escrito no LCD e 'o Led permanece aceso Goto main 'Loop Volta para a linha main apagando o led e reiniciando 'o Processo End. |
Explicando o programa e as ligações
Todo início de programa no compilador MikroBasic a 1ª linha deverá inicia com a função (Program) e o (nome do projeto). Se você escrever o programa e der algum erro na compilação copie o programa da direita e cole no Mikrobasic.
1 - As primeiras linhas do programa com a função Dim servem para direcionar as portas do microcontrolador que irão controlar o LCD. 2 - As funções (Dim e Char ) Dim serve para declarar ou nomear algum caractere ou texto (Char) assume que este caractere possui [ ] números de caracteres. 3 - A função (main) em todos os programas em Basic, no compilador MikroBasic, esta função irá existir. É a primeira chamada do programa. Tris e Port são funções diferentes iremos estudá-las melhor na Aula 7 Conhecendo melhor o PIC por ora basta informar, que ele atribuem níveis alto (1) ou baixo (0) nos pinos a serem usado no projeto. 4 - Como anteriormente Dim atribuiu txt1 como caractere agora ele assume que txt1 = "Ligando LED" na verdade ele possui 11 Caracteres e não [16]. 5 - Lcd_Init() Este comando (função) serve para inicializar o LCD e como já foi falado nos comentários as portas que irão controlar o LCD já deverão estarem previamente direcionadas no início do programa com o uso do Dim. Vide Explicação 2.
Nota: como já foi falado anteriormente, vale a pena reforçar, a versão do MikroBasic 7.0.0.2 dispensa o direcionamento dos pinos de controle do LCD, sendo assim, o PIC aqui em questão 16F628A, assumirá que as portas que controlarão o LCD serão: RB2, RB3, RB4, RB5, RB6, RB7. (RB2 ligado a RS do LCD) (RB3 ligado a RW do LCD) (RB4, RB5, RB6, RB7) ligados à (D1, D2, D3, D4 do LCD) veja a imagem ao lado. =====> |
PROGRAMANDO NO MICROBASIC
1) Para iniciarmos abriremos o MikroBasic pró for PIC V 6.0 previamente instalado e já configurado, como mostrado na Aula 2 "Configurando o MikroBasic", se não entendeu os últimos passos, volte e reveja a Aula 2 e iniciaremos nossa programação a partir da janela mostrada na figura acima. Exatamente onde paramos na Aula 2.
3) Escreva o programa a partir da linha 1 começando com: Program LCD_TESTE; se você configurou o novo projeto como na aula 2, essa linha de programa já estará iniciada, apague as linhas abaixo e comece da linha 3 em diante. ( 'LCD modulo das conecções ) ou simplesmente, selecione o programa que analisamos acima, lado direito que corresponde à versão PRO 6.0; copie e cole no seu compilador, MikroBasic PRO v6.0. fazendo desta forma, a ultima linha de comando será a 86, com o comando End.
5) Agora vá na aba Build e clique em Build ou simplesmente use as teclas Ctrl junto com F9 e o nosso compilador fará o trabalho de produzir, nosso arquivo LCD_TESTE.hex. Ele não só produzirá o nosso arquivo (Hex), como também outros relacionados ao projeto, por isso não se assuste, ao abrir a pasta e se deparar com os 13 arquivos gerados.
|
2) Clicando na aba Project Settings, à esquerda da área usada para programação, verifique se o PIC selecionado é o P16F628A e se a frequência de trabalho do Cristal é 4Mz, se estiver conforme a figura acima, basta fechar a aba, senão, corrija o(s) erro(s), feche a aba, para iniciarmos a programação.
4) Chegamos a fase, de compilar. Tudo certo! programa escrito, parâmetros ajustados, agora clique na aba Project e selecione Save Project. após clicar em Save Project, o compilador irá pedir um local (pasta) onde serão guardados os arquivos compilados e o principal arquivo que será gravado no PIC que é o (HEX). Este arquivo terá a extensão .hex estará na sua pasta com o seguinte nome LCD_TESTE.hex.
6) Acima temos duas figuras, a número 1, nos mostra que a compilação foi bem sucedida e a número 2 nos mostra o arquivo LCD_TESTE.hex, gerado dentro da pasta LCD_TESTE, em Meus documentos. Agora que aprendemos um pouco sobre programação e compilação, vamos partir para a parte prática, na Aula 4.
|