programação de microcontroladores

23

Upload: daniel-henrique

Post on 06-Nov-2015

44 views

Category:

Documents


8 download

DESCRIPTION

Resumo simplificado sobre programação de microcontroladores

TRANSCRIPT

  • 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