micro control ad or

Upload: mauro-viana

Post on 07-Jul-2015

32 views

Category:

Documents


0 download

TRANSCRIPT

Instituto Federal de Educao, Cincia e Tecnologia da Paraba

MINICURSO

Microcontrolador PIC 16F877

Alison Lins de Lima Fbio Montenegro Pontes Jonathan B. da Silva Rafael Tavares Coutinho Thiago Pinto

Joo Pessoa, 23 de Maio de 2010

Plano de Curso1. Evoluo da Tecnologia e Surgimento dos microcontroladores; 2. Teoria sobre Microcontrolador 2.1 - O que um microcontrolador e onde se aplica; 2.2 - Diagrama de Blocos bsico de um microcontrolador; 2.3 - Arquitetura e filosofia; 3. Memrias 3.1 - RAM 3.2 - ROM 4. Tipos de PIC (quanto memria de programa) 5. PC e a Pilha 6. Interrupes 7. Polarizao do Pic16F877 7.1 Alimentao 7.2 Circuitos Osciladores 8. Programao 8.1 Assembler 8.2 - C 9. Comandos Bsicos 10. Estrutura bsica de um cdigo em C 11. Prticas 11.1 acionando um led 11.2 pisca pisca com led e variando a frequncia; 11.3 Contador com Display de sete segmentos; Verificar a diferena do cdigo para o nodo comum e o ctodo comum;

11.4 Escrevendo em um LCD de 16x2; 11.5 Usando um boto, para acionar um led;

11.6 Usando um sensor para acionar um led; 11.7 Imprimindo uma varivel no LCD, onde essa varivel o valor da porta. ANEXOS ANEXOS I - Arquitetura do PIC 16F877 ANEXOS II Organizao e caractersticas das memrias do PIC 16F84 ANEXOS III - Pinagem do PIC 16F877 ANEXOS IV Gravao In Circuit

1. Evoluo da Tecnologia e Surgimento dos microcontroladores; 2. Teoria sobre Microcontrolador 2.1. O que um microcontrolador e onde podemos encontr-lo. Def 1.: Podemos definir um microcontrolador com sendo um computador simplificado em um nico circuito integrado, utilizado no controle de processos lgicos. (Entende-se como processo lgico o acionamento de leds, displays sete seguimentos, lcds, rels, sensores ...) Def 2.: So circuitos integrados dotados internamente de um ULA (unidade lgica e aritmtica), uma unidade de controle e conjunto de perifricos (ex.: contadores, temporizadores, portas I/O, memrias). Aplicaes: Indstria Automobilstica i) Injeo Eletrnica; ii) Fechaduras Eletrnicas; Empresas de Segurana i) Alarmes; ii) Sensores de movimentao; iii) Cercas Eltricas; Indstria de Telefonia i) Celulares ii) Binas iii) Centrais Telefnicas Robtica i) Robs para competio e de uso geral Brinquedos i) Bonecos ii) Aeromodelismo Sade i) Equipamentos Mdicos Hospitalares

2.2. Diagrama de Blocos bsico de um microcontrolador

2.3. Arquitetura e filosofia Def.: So as partes que constitui o microcontrolador e como as mesmas esto interligadas. Von Neuman (CISC) - Primeiras arquiteturas pensadas para computadores. Harvard (RISC) HARVARD VON - NEUMAN

As arquiteturas se diferenciam pela ligao da CPU com as memrias de dados e a de programa, na arquitetura de Harvard, a CPU esta conectada as memrias por barramentos separados o que permite o uso do conjunto de instrues (RISC), j na arquitetura de Von Neumann, a CPU esta conectada as memrias pelo mesmo barramento, isso demanda o uso de conjunto de instrues complexas (CISC). Obs.: Arquitetura do PIC 16F877, encontra-se nos anexos. 3. Memrias (VER ANEXO II) 3.1 RAM As memrias RAM so memria de uso temporrio, volteis os dados s permanecem na memria enquanto est ligada, quando a memria desligada todos os dados so perdidos. 3.2 - ROM So memria de gravao permanente, mesmo quando esto desligadas os dados permanecem guardados. Principais Caractersticas das memrias de programa e dados do PIC 16F877: Memria de Programa (Flash) 8k x 14 bits Memria de dados (Ram) 368 bytes Memria de dados (EEprom) 256 bytes

Memria de dados possui registradores de propsitos gerais (GFR) e de propsitos especiais (SFR).

4. Classificao dos PICs (quanto memria de programa) PIC 16C711 C PROM, grava apenas uma vez.

PIC 16CL7XX CL EPROM, grava por eletricidade e apaga por luz ultravioleta. PIC 16F877 F FLASH, grava e apaga por eletricidade.

5. PC e a Pilha PC um registrador que aponta para o endereo da prxima instruo a ser executada. O PC tem 13bits, com isso pode enderear 8k de memria.

OBS.: A partir do PIC 16f84 o PC j possua 13 bits, mesmo tendo uma memria de dados de 1k x 14 bits. A pilha um registrador de oito nveis, no qual so guardados os endereos de retorno das rotinas de interrupes. endereo 3 endereo 2 endereo 1

Quando acontece a primeira interrupo, o endereo armazenado em PC vai para o primeiro nvel da pilha, se por acaso acontece uma segunda interrupo ento novamente o endereo que esta dentro do PC ocupa o primeiro nvel da pilha e o endereo que antes ocupava o primeiro nvel desce para o segundo, quando a interrupo 2 acaba, o endereo que esta no primeiro nvel, posto novamente no PC, que retorna para a posio em que havia parado na primeira interrupo, da o endereo 1 volta para o primeiro nvel da pilhar e da por diante... 6. Interrupes uma parada de emergncia na execuo de uma rotina, que ocorre por um fato interno ou externo e resulta na chamada de uma sub-rotina que comea ser executada e quando esta acaba o microcontrolador volta a executar a rotina principal. 7. Polarizao do Pic16F877

8. Programao 8.1 Assembler uma linguagem de baixo nvel ou linguagem de mquina. Vantagem: Cdigo com o menor tamanho que se pode escrever; Desvantagem: Cada microcontrolador tem seu conjunto de instrues; (Condio Pssima) 8.2 C uma linguagem de alto nvel mais fcil de aprender em relao ao assembler. Vantagem: facilidade no aprendizado e portvel para outros microcontroladores; Desvantagem: cdigo maior do que se o mesmo fosse programado em assembler. 9. Comandos Bsicos de: Entrada Tratamento a BIT input (PIN_D0) input (PIN_D0) Sada Tratamento a BIT output_low(PIN_D0) output_high(PIN_D0) Loop for(i=0; i>0; i++) while(condio) do{ } while(codio) switch / case Condicional if (condio){ }else{} Atraso delay_ms(1000) delay_us(1000) 10. Estrutura Bsica de um programa em C#include #fuses HS,NOWDT,NOPUT,NOBROWNOUT,NOLVP #use delay(clock=20000000) void main (){ comando 1 comando 2 comando 3 } // incluso da Biblioteca do microcontrolador // Palavras de configuraes do microcontrolador // Valor do clock // Corpo principal do programa // // Comandos //

Tratamento a PORTA input _D() input _D()

Tratamento a PORTA output_D(valor) output_D(valor)

for( ; ; ) loop infinito while(1) ou while(true) loop infinito

atraso em milisegundos atraso em microsegundos

11. Prticas Acionando um led#include #fuses HS,NOWDT,NOPUT,NOBROWNOUT,NOLVP #use delay(clock=20000000) void main (){ output_high(PIN_d0); }

Pisca pisca com led e variando a frequncia#include #fuses HS,NOWDT,NOPUT,NOBROWNOUT,NOLVP #use delay(clock=20000000) void main (){ while(1){ output_high(PIN_d0); delay_ms(1000); output_low(PIN_d0); delay_ms(1000); } }

Contador com Display de sete segmentos verso 1#include #fuses hs, NOLVP, NOWDT, NOPUT, NOPROTECT, NOBROWNOUT #Use delay(clock = 20000000) void main(){ while(1){ output_b(0b0000110); // 1 delay_ms(1000); output_b(0b1011011); // 2 delay_ms(1000); output_b(0b1001111); // 3 delay_ms(1000); output_b(0b1100110); // 4 delay_ms(1000); output_b(0b1101101); // 5 delay_ms(1000); output_b(5); delay_ms(1000); output_b(6); delay_ms(1000); output_b(7); delay_ms(1000); } }

Contador com Display de sete segmentos verso 2#include #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=16000000) byte const tabela[]={ 0b10111111, 0b10000110, 0b11011011, 0b11001111, 0b11100110, 0b11101101, 0b11111101, 0b10000111, 0b11111111, 0b11100111 }; Void main(){ int t=500,valor = 0; while(true){ valor ++; if(valor>9) valor = 0; output_b (tabela[valor]); // apresenta o valor delay_ms(t); } }

Escrevendo em um LCD de 16x2;#include #include #fuses HS,NOWDT,NOPUT,NOBROWNOUT,NOPROTECT,NOLVP #use delay(clock=20000000) #include void main (){ ini_lcd_16x2(); while(true){ printf(exibe_lcd,"\f PET ENGENHARIA \n ELETRICA IFPB"); delay_ms(3000); printf(exibe_lcd,"\f delay_ms(3000); printf(exibe_lcd,"\f delay_ms(3000); } } OFERECE \n O MELHOR CURSO");

DE

\nMICROCONTROLADOR");

Usando um boto, para acionar um led;#include #fuses hs,nolvp,nobrownout,nowrt #use delay(clock=20000000) void main(){ while(true){ if(!input(pin_a0)) { // se a0 for pressionado acende o led output_high(pin_d0); } if(!input(pin_a1)){ // se a0 for pressionado desliga o led output_low(pin_d0); } } }

Usando um sensor para acionar um led; O cdigo semelhante ao anterior, a mudana acontece apenas no hardware, ao invs de usarmos um boto na entrada iremos utilizar um sensor. Escrevendo uma varivel no LCD. (varivel inteira)#include #include #fuses HS,NOWDT,NOPUT,NOBROWNOUT,NOPROTECT,NOLVP #use delay(clock=20000000) #include int valor; void main (){ ini_lcd_16x2(); valor = 0; while(true){ printf(exibe_lcd,"\f teste %d",valor); delay_ms(100); valor++; } }

Imprimindo uma varivel no LCD, onde essa varivel o valor da porta.#include #include #fuses HS,NOWDT,NOPUT,NOBROWNOUT,NOPROTECT,NOLVP #use delay(clock=20000000) #include int valor; void main (){ ini_lcd_16x2(); valor = 0; while(true){ valor = input(pin_a0); if(input(pin_a0)) { // se a0 for pressionado acende o led output_high(pin_e2); } printf(exibe_lcd,"\f teste %d",valor); delay_ms(100); } }

ENTRADA E SADA ChaveTRM0 TRM1 CH0 INT CH1 Obs.: os LEDs e as chaves so baixo ativos. Modo Padro (mais simples) #include