microcontroladors pic - linguagem c

Upload: jose-minatelle

Post on 07-Jul-2015

2.612 views

Category:

Documents


1 download

TRANSCRIPT

ndiceIntroduo -------------------------------------------------------------------------- Linguagem C --------------------------------------------------------------------- Microcontrolador ---------------------------------------------------------------Estrutura Interna do 18F452 -----------------------------------------------------Funo de cada pino do 18F452 ------------------------------------------------Mapa de Registradores Especiais ----------------------------------------------Princpio de Programao --------------------------------------------------------Introduo Linguagem C -------------------------------------------------------- Representao numrica --------------------------------------------------------- Tipos de dados -------------------------------------------------------------------- Varivel local e global ----------------------------------------------------------- Operadores matemticos --------------------------------------------------------- Controle de Fluxo ----------------------------------------------------------------- Deciso IF -------------------------------------------------------------------------- Deciso IF-ELSE ------------------------------------------------------------------- Deciso SWITCH-CASE --------------------------------------------------------- Loop FOR --------------------------------------------------------------------------- Loop WHILE ----------------------------------------------------------------------- Loop DO-WHILE ------------------------------------------------------------------ Ponteiros e Matrizes --------------------------------------------------------------- Introduo ao MikroC ------------------------------------------------------------- Ambiente MikroC ------------------------------------------------------------------ Criando um Projeto ---------------------------------------------------------------- Device Flags (bits de configurao) --------------------------------------------- Primeiro Projeto -------------------------------------------------------------------- Programa 1 Configurao das portas ------------------------------------------ Gravando o Primeiro Projeto ----------------------------------------------------- Usando o Debug no MikroC ------------------------------------------------------ Programa 2 Uso do Define ------------------------------------------------------ Programa 3 Acionamento de Botes ------------------------------------------- Programa 4 Utilizao do IF-ELSE -------------------------------------------- Programa 5 Utilizao do IF_ELSE -------------------------------------------- Programa 6 Utilizao do IF-ELSE-IF ----------------------------------------- Programa 7 Funo Button ------------------------------------------------------- Programa 8 Eliminando Problema do Debounce ----------------------------- Declarao de Funes ------------------------------------------------------------- Display LCD ------------------------------------------------------------------------- Comandos do LCD ------------------------------------------------------------------ Configurao Modo 4 e Modo 8 Bits --------------------------------------------- Programa 9 Transmisso de mensagem para LCD ------------------------- Programa 10 Transmisso de mensagens para LCD -------------------------- Configuraes do LCD em 4 Bits e 8 Bits --------------------------------------- Mdulo PWM ------------------------------------------------------------------------ Programa 11 - Utilizao do CCP1 ----------------------------------------------- Programa 12 - Utilizao do CCP2 ----------------------------------------------- Programa 13 Utilizando os Mdulos CCP1 e CCP2 ------------------------1 3 3 4 5 6 8 10 11 11 12 13 14 14 15 15 17 18 18 19 20 21 22 23 24 29 30 32 35 39 40 41 42 43 44 45 46 48 49 50 51 52 53 54 55 55 56

- Programa 14 Ajustando os Mdulos usando botes -------------------------- Conversor A/D ----------------------------------------------------------------------- Programa 15 Leitura do Canal AN0 (0 a 1023) ------------------------------- Programa 16 Leitura do canal AN0 (0 a 5V) ---------------------------------- Programa 17 Leitura do Canal A/D com ponto flutuante -------------------- Programa 18 Controle PWM usando conversor A/D ------------------------- Comunicao Serial ----------------------------------------------------------------- Programa 19 Transmisso de dado Serial -------------------------------------- Programa 20 Transmisso/Recepo Serial ------------------------------------ Programa 21 Transmisso/Recepo de Dados-------------------------------- Programa 22 - Uso de Ponteiros na Transmisso de Dados -------------------- Programa 23 Transmisso de Dados -------------------------------------------- Programa 24 Leitura de Temperatura e Transmisso Serial ----------------- Programa 25 Leitura de Temperatura, Comparao e Acionamentos ------ Programa 26 Configurao do TIMER0 em 8 bits Temporizador ------- Programa 27 Configurao do TIMER0 em 16 bits Temporizador ----- Programa 28 Configurao do TIMER0 em 8 bits Contador ------------- Programa 29 Memria EEPROM do PIC -------------------------------------- Introduo a Interrupo ------------------------------------------------------------ Registrador RCON ------------------------------------------------------------------ Registrador INTCON ---------------------------------------------------------------- Registrador INTCON2 ---------------------------------------------------------------- Registrador INTCON3 ---------------------------------------------------------------- Registrador PIE1 ----------------------------------------------------------------------- Registrador PIE2 ----------------------------------------------------------------------- Registrador PIR1 ----------------------------------------------------------------------- Registrador PIR2 ----------------------------------------------------------------------- Registrador IPR1 ----------------------------------------------------------------------- Registrador IPR2 ----------------------------------------------------------------------- Estrutura de Programa utilizando Alta e Baixa Prioridade ----------------------- Programa 30 Tratamento de Interrupo INT0 ---------------------------------- Programa 31 Tratamento de Interrupo INT0 e INT1 ------------------------ Programa 32 Tratamento de Interrupo INT0 e INT1 com Prioridade -----

57 58 63 64 65 66 67 67 68 69 70 71 73 74 79 80 81 82 84 85 86 87 88 89 90 91 92 93 94 94 95 97 99

2

Introduo:Linguagem C Linguagem C foi desenvolvida por Brian Kernighan e Dennis M. Ritchie na dcada de 70 no AT&T Bell Labs. Em pouco tempo, esta linguagem teve grande utilizao em Universidades espalhadas pelo Mundo, tornando-se praticamente oficial em cursos de engenharias. uma linguagem estruturada, eficiente, rpida e to poderosa quanto a Linguagem Assembly. A cada ano vem aumentando o nmero de programadores de Microcontroladores que acabam migrando da Linguagem Assembly para o C. Os programas em C acabam ficando muito mais eficientes e mais rpidos de serem escritos pois os Compiladores de Programas em Linguagem C para Microcontroladores possuem vrias bibliotecas de funes prontas como Comunicao Serial, ADC, EEPRON, I2C, PWM, LCD, etc. Existe no mercado vrios compiladores para desenvolvimento de programas na Linguagem C como Hi-Tech, CCS, PICmicro C, etc. Adotamos para nosso treinamento o compilador MikroC da Microelektronika por ser bastante poderosa e fcil de trabalhar (permite Editar, Simular e Compilar programas das famlias 12, 16 e 18 da Microchip) alm de tambm possuir uma vasta biblioteca de controle de perifricos dos Microcontroladores. Alm disso, a verso estudante gratuito para desenvolvimento de programas de at 2Kwords, o que torna bastante atraente tambm para uso educacional. Pode-se fazer download em www.mikroe.com. Contudo, uma das grandes vantagens de se programar em C que o programador no precisa se preocupar com o acesso a bancos, localizao de memria e perifricos dos Microcontroladores pois o Compilador responsvel por gerenciar esses controles. Toda essa eficincia da Linguagem C proporciona ao programador preocupar-se apenas com o programa em si e o compilador traduz da Linguagem C para a Linguagem de mquina (.HEX) que a linguagem que os Microcontroladores conseguem entender.

3

Microcontrolador Hoje existe uma grande quantidade de Microcontroladores utilizados em projetos de equipamentos eletroeletrnicos. O programador poder escolher entre Intel, Motorola, Atmel, Microchip, etc. A Uptex decidiu pela Microchip pois a mesma encontra-se entre os mais utilizados mundialmente alm de tambm oferecer muitos de seus compiladores gratuitamente. Existe tambm uma vasta literatura orientando profissionais e estudantes quanto s aplicaes e projetos. Isto tudo pode ser verificado no site da Microchip em (Aplication Notes). Aplicas com Dislays LCD (Display de Cristal Lquido), Displays e matrizes de leds, Comunicao Serial, USB, Conversores Analgico/Digital e Controle PWM so alguns exemplos de utilizao em equipamentos suportados por microcontroladores. s verificarmos os equipamentos hoje microcontrolados e pensarmos na evoluo que existe e tudo ainda que possa a vir a existir. Vejamos alguns exemplos de equipamentos: celulares, mquinas de lavar/secar roupas, sistemas de alarme e controle de acesso, brinquedos, iluminao residencial, etc. Existem muitas aplicaes tambm na rea automobilstica, aeroespacial, mdica, agricultura e muitas mais. Agora com voc programador que tm a habilidade de verificar a necessidade e proporcionar ento a funcionalidade de determinado aparelho/sistema atravs de um sistema microcontrolado. O Microcontrolador que iremos trabalhar ser o 18F452 da Microchip. A grande vantagem que possui memria Flash, possibilitando assim escrever/apagar com grande rapidez. Abaixo temos principais caractersticas do 18F452: - 40 pinos podendo ter at 34 I/O (Input/Output digital); - 8 canais A/D de 10 Bits; - 02 Mdulos CCP capture, compare e PWM; - Memria de Programa Flash 32K - Memria RAM 1536 bytes; - Memria EEPROM 256 bytes; - velocidade de processamento at 10MIPS (milhes de instrues por segundo); - Mdulo MSSP (Master Synchronous Serial Port); - Mdulo USART - Possibilita at 100.000 ciclos de escrita/leitura na memria de programa; - Possibilita 1.000.000 de ciclos de escrita/leitura na EEPROM; - Reteno dos dados na memria por at 40 anos; - Possibilita habilitao do Watchdog Timer; - Possibilita interrupo externa atravs de pinos do Microcontrolador; - 4 Temporizadores/Contadores.

4

Estrutura Interna do PIC 18F452

5

Funo de cada pino do 18F452

O PIC 18F452 possui cinco PORTs: PORTA, PORTB, PORTC, PORTD e PORTE. Cada PORT possui pinos com acesso aos perifricos como Conversor Analgico/Digital, Interrupes, I2C, UART, Mdulo CCP, SPI, ou podem ser utilizados como I/O de uso geral. Pino 1 2 3 4 5 6 7 8 9 10 Funo /MCLR / VPP RA0 / AN0 Tipo In-In I/O e input A/D RA1 / AN1 I/O e input A/D RA2 / AN2/ VrefI/O e input A/D RA3/AN3/ Vref+ I/O e input A/D RA4 / T0CKI I/O e Input TMR0 RA5/AN4/SS/LVDIN I/O e Inputs RE0 / RD / AN5 RE1 / WR / AN6 RE2 / CS / AN7 I/O I/O I/O Fonte Fonte Input I/O e Inputs I/O Out e In Funcionalidade Reset externo e programao ICSP I/O digital e entrada do AD0 I/O digital e entrada do AD1 I/O digital, entrada do AD2 e entrada baixa de referncia do A/D I/O digital, entrada do AD3 e entrada de referncia alta do A/D I/O digital e entrada do TMR0 I/O digital, entrada do AD4, entrada do SPI e Detector de LV I/O digital, Leitura da Porta Paralela e entrada do AD5 I/O digital, Escrita da Porta Paralela e entrada do AD6 I/O digital, Seleo da Porta Paralela e entrada do AD7 Positivo da Fonte de Alimentao Negativo da Fonte de Alimentao Entrada do Cristal e entrada do Clock externo I/O digital, Sada do Cristal e sada do Clock externo I/O digital, sada do 2 oscilador e entrada do contador externo Timer1/Timer3

11, 32 VCC 12, 31 GND 13 OSC1 / CLK1 14 15 Osc2 / CLK1 / RA6 RC0/T10S0/T1Ck1

6

16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 33 34 35 36 37 38 39 40

RC1/T10S1/CCP2 RC2 / CCP1 Rc3 / SCK / SCL RD0 / PSP0 RD1 / PSP1 RD2 / PSP2 RD3 / PSP3 RC4 / SDI / SDA RC5 / SD0 RC6 / TX / CK RC7 / RX / DT RD4 / PSP4 RD5 / PSP5 RD6 / PSP6 RD7 / PSP7 RB0 / INT0 RB1 / INT1 RB2 / INT2 RB3 / CCP2 RB4 RB5 / PGM RB6 / PGC RB7 / PGD

I/O In e Out I/O e Out I/O, I/O e I/O I/O e I/O I/O e I/O I/O e I/O I/O e I/O I/O in I/O I/O e out I/O out I/O I/O in I/O I/O e I/O I/O e I/O I/O e I/O I/O e I/O I/O e in I/O e in I/O e in I/O e I/O I/O e in I/O in e in I/O in I/O I/O in I/O

I/O digital, entrada do 2 oscilador e sada do Mdulo CCP2 I/O digital e sada do Mdulo CCP1 I/O digital, in e out do Clock serial para modo SPI e in/out do Clock serial para modo I2C I/O digital e Porta de Comunicao Paralela I/O digital e Porta de Comunicao Paralela I/O digital e Porta de Comunicao Paralela I/O digital e Porta de Comunicao Paralela I/O digital, entrada de Dados SPI e in/out de dados do modo I2C I/O digital e sada de dados SPI I/O digital, Transmisso UART e Clock de sincronismo UART I/O digital, Recepo UART e Dados do UART I/O digital e Porta de Comunicao Paralela I/O digital e Porta de Comunicao Paralela I/O digital e Porta de Comunicao Paralela I/O digital e Porta de Comunicao Paralela I/O digital e entrada de Interrupo Externa 0 I/O digital e entrada de Interrupo Externa 1 I/O digital e entrada de Interrupo Externa 2 I/O digital Mdulo CCP2 I/O digital e entrada de Interrupo por Mudana de Estado I/O digital, Interrupo por Mudana de Estado e Habilita ICSP baixa tenso I/O digital, Interrupo por Mudana de Estado e ICSP in-circuit Debuger I/O digital, Interrupo por Mudana de Estado e ICSP in-circuit Debuger

7

Nos Microcontroladores PIC temos os GPR (General Porpose Registers) que so os registradores de usos gerais que nada mais so do que variveis criadas pelo programador dados volteis. Temos tambm os SFR(Special Funcion Registers) que so os Registradores de uso especfico que na verdade contm o SETUP do Microcontrolador configura como iro trabalhar determinados perifricos como PWM, Conversores A/D, USART, etc. O Microcontrolador 18F452 possui memria RAM de 1536 bytes sendo dividido em 16 bancos de 256 bytes de memria cada um.

Mapa de Registradores Especiais SFRs

8

Temos ento Portas: PORTA PORTE e cada pino de cada porta pode ser configurado como entrada ou sada. No entanto, para podermos configurar como ir trabalhar cada pino de cada porta, temos que fazer uso do SFR TRIS. O Registrador TRISA responsvel pela configurao do PORTA, o TRISB pelo PORTB, o TRISC pelo PORTC, o TRISD pelo PORTD e o TRISE pelo PORTE. muito simples, se colocarmos 0 no bit do TRIS estamos definindo determinado pino como sada e colocando-se 1 no bit do TRIS estamos definindo o pino do PORT como entrada. Vejamos um exemplo: TRISB=0b00001100; Neste caso temos: RB0=sada RB1=sada RB2=entrada RB3=entrada RB4 RB7 = sada Outro exemplo: TRISD=0b11111111; Neste caso temos todo o PORTD configurado como entrada Outro exemplo: TRISC=0b00000000; Neste caso temos todo o PORTC configurado como sada Os outros Registros Especiais iremos entender conforme andamento do curso.

9

Princpio de Programao: A lgebra de Boole e seus operadores so muito utilizados em sistemas digitais e tambm na programao em Linguagens como o Assembly e tambm a Linguagem C. Temos ento as operaes E ou AND, OU ou OR e No ou NOT e tambm NAND, NOR ou XOR ( OR EXCLUSIVO). OR A 0 0 1 1 B 0 1 0 1 S 0 1 1 1 S 0 0 0 1

AND A B 0 0 0 1 1 0 1 1 NOT A S 0 1 1 0 NOR A B 0 0 0 1 1 0 1 1 NAND A B 0 0 0 1 1 0 1 1 XOR A B 0 0 0 1 1 0 1 1

S 1 1 1 0 S 1 0 0 0

S 0 1 1 0

10

Introduo Linguagem C Estrutura Bsica de um programa: Programas em C so baseados em uma ou mais funes que sero executadas, no entanto, a funo Main() a primeira a ser executada. /* ------------------------------------------------abaixo temos um exemplo de estrutura Bsica de um programa em Linguagem C ----------------------------------------------------- */ void main() { Trisb=0x00; Portb=0xFF; } // esta a primeira funo que ser executada // inicializa a funo // aqui entram os comandos que sero executados // finaliza a funo

Observaes: Toda funo deve iniciar abrindo chave e finalizar fechando-se a chave. Toda instruo deve ser finalizada com ponto e vrgula (obrigatoriamente) Logo aps /* so inseridos os comentrios para mltiplas linhas e deve-se Colocar */ para fechar o bloco de comentrios. Utilizamos // para comentrios em apenas uma linha. Representao Numrica: Decimal: Contador=125; Binrio: Portb=0b11010011; Hexadecimal: Varivel1=0xA4; Octal: Teste=075; String: Unsigned char *texto=Uptex Tecnologia Caracter: Usart_write(&);

11

Tipos de Dados: Dado: int char float e double void Tipo Void Char Int Short Long Float Double Modificadores: Tipo Char signed char unsigned char Short int signed short int unsigned short int Int signed unsigned int Short signed short unsigned short long int signed long int unsigned long int Tipo: Nmeros inteiros Caracteres Nmeros decimais (ponto flutuante) valores nulos Tamanho bits Zero 8 16 16 32 32 64 Tamanho - bits 8 8 8 8 8 8 16 16 16 16 16 16 32 32 32 Valor Mnimo Sem valor -128 -32768 -32768 -231 -3,4 x 1038 -1,8 x 10308 Valor Mnimo -128 -128 0 -128 -128 0 -32768 -32768 0 -32768 -32768 0 -231 -231 0 Valor Mximo Sem valor 127 32767 32767 231-1 3,4 x 1038 1,8 x 10308 Valor Mximo 127 127 255 127 127 255 32767 32767 65535 32767 32767 65535 231-1 231-1 232-1

12

Declarao de variveis: Podemos declarar da seguinte maneira: + + + ; Obs: valor pode ou no necessariamente ser inicializado. Exemplos: int contador; short var1; unsigned int contagem = 30500; Observe agora como atribuir valores s variveis: Contador = 10; Var1 = 25; Varivel local: Esta declarada dentro da funo e s pode ser utilizada pela funo portanto, uma varivel temporria. Exemplo: void subrotina_soma () { unsigned Int valor1, valor2; valor1=A; valor2=B; return(valor1+valor2); } Varivel Global: Esta declarada fora da funo e s pode ser utilizada por qualquer funo em qualquer momento. Todas as funes tm acesso s variveis globais. Exemplo: unsigned int valor1, valor 2 void subrotina_soma () { valor1=A; valor2=B; return(valor1+valor2); } // atribui o valor 10 varivel contador // atribui o valor 25 varivel Var1

13

Operadores Matemticos: Aritmticos: Operador + * / % ++ -Descrio Soma dos argumentos Subtrao dos argumentos Multiplicao dos argumentos Diviso dos argumentos Resto da diviso Soma 1 ao argumento (a=a+1) Subtrai 1 ao argumento (a=a-1) Exemplo a+b ab a*b a/b a%b a++ a--

Relacionais: Operador > < >= > 22) { Valor1=x; y=contador+10; } else { Valor2=x; Y=contador-5; } Podemos ainda ter superposio de comandos if-else podendo assim ter uma escolha entre vrias possibilidades. if (expresso1) { comando1; } else if (expresso2) { comando2; comando3; } else { comando4; comando5; } Exemplo: if (contador==12) { Dzia++; X++; } else if (contador12) { Dzia = 0; Z++; }

16

Deciso SWITCH - CASE: switch (varivel) { case valor1: comando1; comando2; break; case valor2: comando3; comando4; comando5; break; default: comando6; } //opcional

Exemplo: void main( ) { int contagem=4; int valor=5; switch (contagem) { case 2: valor++; break; case 5: valor--; break; case 10: valor=0; break; default: valor=5; } }

17

Loop FOR: Este um comando de lao (loop ou repetio). Sintaxe: for (inicializao; condio (trmino); incremento) comando; Podemos tambm ter um bloco de comandos: for (inicializao; condio (trmino); incremento) { comando1; comando2; comandoN; } Exemplo: void main () { int contador; int a = 0; for (contador=0; contador10) { a--; delay_ms(100); } } Loop DO - WHILE: Neste caso, diferente do loop anterior (while), o do - while executa pelo menos uma vez o bloco de comando antes de fazer a avaliao se continua a executar os comandos ou sai do loop. Sintaxe: do { comando1; comando2; } while (expresso); Exemplo: void main( ) { int a=0; do { a++; delay_ms(100); } while (a