Programação de Microcontroladores
-
Upload
daniel-henrique -
Category
Documents
-
view
44 -
download
8
description
Transcript of Programação de Microcontroladores
-
As figuras seguintes resumem as ferramentas (programas, dispositivos) e conceitos (conhecimentos) necessrios para implementar a programao de um microcontrolador.
Ferramentas e conceitos
2
-
A programao de microcontroladores demanda diversos conhecimentos.
Ferramentas e conceitos
3
-
Linguagem C Estrutura de um programa
4
diretivas para o pr-processador declarao de variveis globais prototipagem de funes void main () { decalarao de variveis locais da funo main comandos da funo main // incluem tambm chamadas para funes } tipo funo (lista de argumentos) { declarao das varivies locais da funo comandos; }
-
Linguagem C Gerao de arquivo .hex
5
-
So regras de como o compilador ou montador dever processar o cdigo fonte. Importantes diretivas da linguagem C # define e # undef definio de macros e constantes Ex.: # define MSG calendrio 2015 # include inclui um arquivo externo ao cdigo fonte, tal arquivo pode ser
outro cdigo fonte, arquivo de cabealho ou arquivo de definies. Ex.: # include c:\Meus Documentos\Projetos\file.h Ex.: # include
# pragma usada para compatiblidade de compilador # if realiza testes
Linguagem C Diretivas de pr-processamento
6
-
Linguagem C Operadores e variveis
7
Tipos de Variveis
Operador Exemplo Descrio
char 1 byte -128 a 127
Unsigned char
1 byte 0 a 255
int 2 bytes -32768 a
32767
Unsigned int
2 bytes 0 a 65535
float 4 bytes -1.7x1038 a
1.7x1038
Ex.: 1) char lista; 2) int a, b, c; 3) float temperatura;
Operador de atribuio e os aritmticos
Operador Exemplo Descrio
= k = 8.745 Atribuio
+ a + 8 + tempo Soma
- Tempo -c Subtrao
/ Tempo / a Diviso
* a * b Multiplicao
% Tempo % b Resto da diviso
++ x = x + 1 (++x) Incremento
-- x = x -1 (--x) Decremento
Ex.: 1) c = a + b 7; 2) y = ++ x ( y = x+ 1); 3) m += n (m = m + n ) // atrib. composta
-
Linguagem C Controle de Fluxo
8
Comando "IF" ou "IF-ELSE"
if ( expresso ) { comando; }
if ( expresso ) { comando 1; } else { comando 2; }
Ex.: if ( temp > 70 ) { liga_saida = 1 ; } else { cont = ++ cont ; }
Comando "IF" - "ELSE-IF"
if ( expresso ) { comando 1; } else if (expresso 2) { comando 2; } else (expresso 3) { comando 3; }
Ex : if ( temp 30) && (temp
-
Linguagem C Controle de Fluxo
9
Comando "SWITCH-CASE"
switch ( varivel ) { case valor1: comando 1; break; case valor2: comando 2; break; default: comando_n; }
Ex.: switch ( pressao ) { case 1: printf ( "valor 1 \n ); break; case 2: printf ( "valor 2 \n ); break; default: printf ("valor = %f", 'n'); }
Comando FOR"
for (incio ; teste de trmino ; incremento) { comando; }
Ex.: for (cont = 10 ; cont < 100 ; cont ++) { a = b + 20 valor = a*1.2 }
-
Linguagem C Operadores e variveis
10
Operadores relacionais
Operador Exemplo Descrio
== a == 8 Avalia se
igual
!= a != 8 Avalia se diferente
> a > 8 Avalia se
maior
< a < 8 Avalia se Menor
>= a >= 8 Avalia se maior ou
igual
2) { ..
Operador Condicional
(testa-expr) ? faa-se-1 ? faa-se-0 ;
( x % 2 != 0 ) ? printf ("%d e Impar \ n", x): printf ("%d e Par \n", x);
-
Linguagem C Controle de Fluxo
11
Comando WHILE"
while ( expressao ) { comando; }
Ex.: while ( a < 100 ) { a += 10; // a = a + 10 cont = cont++; } // Testa a condio para depois executar ou no a instruo
Comando DO-WHILE"
do { comando; } while ( expressao )
Ex.: do { t -= 0.5 ; // t = t 0.5 } while ( t > 20 ) // Executa-se uma instruo e depois testa-se a condio
-
Linguagem C Funes
12
Funes
tipo nome ( tipo1 arg1, ..., tipon argn ) { declaraes; comandos; return expressao (opcional) }
Ex.: int maximo ( int x , int y ) { int z; z = ( x >= y )? x : y; return z; } Obs: Toda funo pode receber parmetros (variveis) e retornar um parmetro) , no obrigatioriamente.
Exemplos de chamadas para funes
Sem parmetro e sem retorno calcula ( ); Sem parmetro e com retorno x = calcula ( ); Com parmetro mas sem retorno calcula (a, b ); Com parmetro e com retorno x = calcula (a, b);
Parmetros da funo
-
Linguagem C Passagem de parmetros
13
Passagem por "VALOR"
int a, b, c; int calcula (int x, int y) { x= x + (++y) return x; } int main (void) { a =5 b= 10 c = calcula (a, b); }
Obs.: O valor de "a" copiado para "x"; O valor de "b" copiado para "y". A funo recebe o contedo de "a" e de
"b". Ainda que os valores de "a" e "b"
mudem na funo main, os valores de "x" e "y" no sero atualizados.
Passagem por REFERNCIA"
Int a, b, c; Int calcula ( int *x, int *y) { x = x + (++y) Return x; } Int main (void) { a=5; b = 10 ; c = calcula ( &a, &b); }
Obs.: O contedo do endereo de "a passado
para "x". O contedo do endereo de "b" passado
para "y". A funo recebe o contedo dos endereos de "a" e de "b".
Se "a" e "b" mudarem na funo main, os valores de "x" e "y" sero atualizados.
-
Criao de projeto no MPLAB X
14
Clique em "Next".
Para criar um novo projeto, clique em " File " "New Project".
-
Criao de projeto no MPLAB X
15
Selecione o gravador que ser usado para gravar o PIC e clique em "Next".
No campo "Family" escolha o tipo de PIC e no campo " Device" escolha o modelo. Em seguida pressione "Next".
-
Criao de projeto no MPLAB X
16
Clique com o boto direito do mouse sobre a opo "Source Files", em seguida selecione "New" "Empty File".
Selecione o compilador que ser usado para e clique em "Next".
-
Criao de projeto no MPLAB X
17
Nomeio o arquivo que ter o cdigo fonte, colocando a extenso .c e em seguida clique em "Finish".
Aps a escrita do cdigo fonte, v ao menu "Run" e clique em "Build main project" para compilar o programa.
-
um microcontrolador de 8 bits da Microchip da famlia 18F.
Alguns recursos : memria flash de 32 K, 36 pinos de I/O, 13 canais A/D de 10bits, 4 temporizadores, suporte a RS232 e Rs485.
Microncontrolador PIC18F4520
18
-
PIC18F4520 Bits de Configurao
19
Alguns bits de configurao do PIC
PWRT gera atraso de 65,6 ms para iniciar o cdigo do microncontrolador ON/OFF
OSC - Define modo de oscilao. LP / XT / HS / RC / EC / ECI06 / HSPLL / RCIO6 / INTIO67 / INTI07
BOR - Provoca reset da CPU no caso da tenso cair abaixo de certo limite. ON/OFF
WDT - Sistema interno que evita que o programa pare em um determinado ponto. ON/OFF
LVP - Se a opo estiver ativa, para gravar o PIC basta ter nvel lgico. ON/OFF
Para configurar todos os bits de configurao de formao prtica, v ao menu "Window" e em seguida selecione "Pic memory views" e clique em "Configuration bits.
-
PIC18F4520 Alguns registradores e suas configs.
20
TRIS (A,B,C,D,E) - configura sentido do fluxo de dados da porta. (0 = Sada; 1= Entrada)
Ex: TRISA = 0b00010000; // bit TRISA4 configurado como entrada e assim pino RA4 ser entrada.
PORT (A,B,C,D,E) escreve/l o nvel dos pinos associados porta. (0 = 0 V; 1= VCC)
Ex: PORTB = 0b00100000; // bit RA5 configurado como nvel lgica 1 (VCC).
LAT (A,B,C,D,E) - armazena o valor do ultimo comando de escrita. Ex: LATA = 0x00; //Limpa PORTA
ADCON (0,1,2) - conversor analgico digital; atravs dos 4 bits PCFG0:PCFG3 pode-se configurar os pino digital ou analgico.
ADCON1 = 0b00000000;
ADCON1 = 0b00001111; Desliga A/D canal 1:
Liga A/D canal 1:
-
Cada compilador diferente na forma de programao, embora todos
suportem a mesma linguagem C.
O compilador MPLAB C18 projetado para gerar executveis para microcontroladores PIC18, com suporte ao padro ANSI C.
FUNES: strcatpgm2ram - Anexa uma cpia da string fonte para o fim do string destino.
ConvertADC Inicia o processo de converso A/D.
BusyADC Indica se perifrico A/D est em processo de converso.
Delay10KTCYx - efetua um atraso em mltiplos de 10000 ciclos de instruo
(TcT). Cada ciclo corresponde a 1us.
Compilador C18 Algumas funes
21
-
22
Hardware Cdigo Fonte
# include // Define o PIC184520 #pragma config OSC = XT // Clock interno #pragma config WDT = OFF // Desliga Watchdog #pragma config LVP = OFF // Desliga prog.baixa tenso #define LED PortDbits.RD7 #define BOTAO PortAbits.RA4 void main (void) { ADCON1 = 0b00001111; // Desliga AD TRISA = 0b00010000; // Configura PORTA TRISB = 0b00000000; // Configura PORTB TRISD = 0b00000000; //Configura PORTD PORTD = 0b00000000; //Limpa PORTD PORTB = 0b00100000; // Habilita LEDS while (1) { if (BOTAO == 0) { // Botao pressionado ? LED = 1; //Sim, ento liga o led } else { LED = 0; // No, ento apaga o led }}}
Obs.: Sada RB5 aciona base do transistor, que libera passagem de corrente do coletor para o emissor. Porm a sada RD7 s fica em nvel lgico 1 quando o boto pressionado.
Leitura de sinal de entrada digital e acionamento de sada
-
23
Hardware Cdigo Fonte
# include // Define o PIC184520 # include #pragma config OSC = XT // Clock interno #pragma config WDT = OFF // Desliga Watchdog #pragma config LVP = OFF // Desliga prog.baixa tenso #define LED PortDbits.RD0 void main (void) { ADCON1 = 0b00001111; // Desliga AD TRISDbits.RD0 = 0; // RD0 como sada TRISBbits. RB5 = 0; // RB5 como sada PORTBbits.RB5 = 1; // Habilita LEDS
while (1) { LED = 1; Delay10KTCYx (100); LED = 0; Delay10KTCYx (100); }}
Obs.: Sada RB5 aciona base do transistor, que libera passagem do coletor para o emissor. Isso permite acionamento do led, pois RD0 est em nvel lgico 1.
Uso de delay no acionamento de sada