• Nenhum resultado encontrado

Programação Aplicada à Automação. Parte 1

N/A
N/A
Protected

Academic year: 2021

Share "Programação Aplicada à Automação. Parte 1"

Copied!
75
0
0

Texto

(1)

Programação Aplicada à

Automação

(2)

Sumário

Microgenios

Descrição das funções dos pinos Memória de Programa

Introdução as portas de I/O

Criação de um projeto no MICROC O registrador TRIS O registrador PORT O registrador ADCON1 Operadores Programas Exercícios propostos 2

(3)

Microgenios

(4)
(5)
(6)

PIC18F452 Microchip

(7)
(8)
(9)

DESCRIÇÃO DAS FUNÇÕES DOS

PINOS

(10)

Descrição das funções dos pinos

• O PIC18F452 possui no total de 40 pinos de

I/O divididos entre as PORTA, PORTB, PORTC, PORTD e PORTE.

(11)

Descrição das funções dos pinos

• Os µC PIC possuem pinos físicos destinados à

comunicação de dados com os circuitos externos. Através desses pinos podemos enviar níveis lógicos (0 ou 1) para, por

exemplo, acender ou apagar um LED, acionar displays, LCD, ler botões e sensores, etc.

(12)

• PORTA: encontramos 7 pinos físicos

intitulados de RA0 a RA7 que podem ser utilizados como I/0 de uso geral ou como conversor analógico/digital A/D, além de possuir também a função de detecção de baixa tensão (LVD), referência analógica do A/D e contador externo.

Descrição das funções dos pinos

(13)

• PORT B: encontramos 8 pinos intitulado de RB0 a RB7 configuráveis como I/O de uso

geral. Nesse port podemos trabalhar com três interrupções externas, módulo CCP e pinos de gravação e debugger.

(14)

• PORT C: encontramos 8 pinos intitulados de RC0 a RC7 configuráveis como I/O de uso

geral, saída do oscilador do timer, módulo CCP, clock e data para os modos SPI, I2C e UART.

Descrição das funções dos pinos

(15)

• PORT D: encontramos 8 pinos intitulado de RD0 a RD7 que podem ser configurado como I/O de uso geral ou ser configurado como PSP para ter saída TTL (por exemplo

interfaciamento com microprocessador).

(16)

• PORT E: podemos utilizá-lo como PORT de I/O de uso geral ou utilizar os pinos de WR e CS

para acesso ao modo paralelo Slave Port (acesso a memória externa por exemplo).

Descrição das funções dos pinos

(17)

Memória de Programa

• A memória de programa utilizada no

microcontrolador é do tipo FLASH (sufixo “F”) que permite ser gravada/apagada no mínimo 1000 vezes. Este tipo de memória utilizada é ideal para ser utilizada em desenvolvimento de projetos e até mesmo em produtos finais.

(18)

Memória de Programa

• A memória de programa do PIC18F452 incia-se no endereço 0000h e atinge o valor máximo de 7FFFh, ou seja, 32767K byte

(32Kbyte).

(19)

Memória de Programa

• O endereço inicial 0000h é chamado de vetor reset. A instrução de programa que estiver

nesse endereço de memória será a primeira a ser executada pelo processador do PIC.

• Sempre que energizarmos ou resetarmos o µC, o contador de programa PC apontará sempre para este primeiro endereço de memória.

(20)

Memória de Programa

• Em seguida temos os endereços 0008h e 0018h. Estes endereços são chamados de vetores de interrupção.

(21)
(22)

Introdução as portas de I/O

• Os registradores PORTB, PORTC e PORTD

possuem 8 pinos de I/O cada.

(23)

Introdução as portas de I/O

• O PORTE possui 3 pinos de I/O.

(24)

Introdução as portas de I/O

• O PORTA 6 pinos de I/O.

(25)

Introdução as portas de I/O

• Cada porta de I/O possui três registradores

que controlam suas funções: um registrador PORT, LAT e um registrador TRIS.

(26)

Introdução as portas de I/O

• Os registradores PORT(PORTA, PORTB, PORTC, PORTD, PORTE), armazena os dados das

portas paralelas (I/O’s) do µC.

• Qualquer escrita realizada em um desses registros automaticamente altera todo o conteúdo presente na saída do chip.

(27)

Introdução as portas de I/O

• O registrador TRIS é utilizado para configurar cada pino da respectiva porta como entrada ou saída. Além de cada bit desse registrador corresponde a um pino da porta.

• Se o bit estiver em 1, o pino correspondente esta configurado como entrada de dados, e se estiver em 0 configuramos este pino como

(28)

CRIAÇÃO DE UM PROJETO NO MICRO

C

(29)

mikroC

• Baixe a versão de demonstração do compilador mikroC através do site do fabricante: www.mikroe.com

• Para criarmos uma aplicação, acompanhe o modelo passo a passo.

(30)
(31)

1 – Abra o mikroC e vá ao menu

Project > New Project

(32)

2 – Aparecerá a seguinte tela de configuraçã o do projeto. 32

(33)

3 – No menu New Projet, preencha o painel de configuração conforme valores seguintes:

Project Name – pisca_pisca1

Project Path – (escolha uma pasta no seu PC) Description – deixar em branco

Device – P18F452 Clock – 008.000000 Oscilador – HS

Watchdog – OFF

LVP – OFF (Low Voltagem Programming – desligado) Brown Out – OFF

Debuger – OFF

(34)

5 – Digite o programa.

(35)

//pisca_pisca1.c void main()

{

trisd = 0; //*configura portd como saída

portd = 0; //*zera todos os pinos como saída while (1)

{

portd = 0B11111111; //*seta todos os pinos do portd

delay_ms(1000); //*tempo de 1 segundo portd = 0; //* zera todo o portd; delay_ms(1000);

(36)

8 – Abrir PICKit 2 – verifique comunicação

(37)
(38)

9 – Abrir o programa pisca_pisca1 em menu File > Import Hex

(39)

10 – No módulo – modo PROG ativado 11 - No PICkit2 clicar no botão WRITE 12 – No módulo – ativar modo RUN

(40)

• No módulo – desativar modo RUN • No PICkit2 clicar no botão ERASE

(41)
(42)

O registrador PORT

(43)
(44)

OPERADORES

(45)
(46)
(47)
(48)
(49)
(50)

Programas

Led2 Pisca_pisca2 Pisca_pisca3 Pisca_pisca4 Decremento Incremento / decremento

Incremento / decremento pulo 2 Inverte

(51)
(52)

//led2 void main() { trisd = 0; portd = 0; while(1) { portd = 0B10101010; delay_ms (1000); portd = 0; portd = 0B01010101; delay_ms(1000); portd = 0; } } 52

(53)
(54)

//pisca_pisca2.c void main() { trisd = 0; trisb = 0; portd = 0; portb = 0; while (1) { portd = 0B11111111; portb = 0B01010101; delay_ms(1000); portd = 0; portb = 0B10101010; delay_ms(1000); } } 54

(55)
(56)

//pisca_pisca3 void main() { trisd = 0; trisb = 0; portd = 0; portb = 0; while (1) { portd = 0B11111111; delay_ms(1000); portd = 0; portb = 255; delay_ms(1000); portd = 0B01010101; portb = 0B10101010; delay_ms(1000); } } 56

(57)
(58)

58 //pisca_pisca4.c void main() { trisd = 0; trisb = 0; portd = 255; portb = 255; while (1) { portd = 0B01111111; delay_ms(100); portd = 0B10111111; delay_ms(100); portd = 0B11011111; delay_ms(100); portd = 0B11101111; delay_ms(100); portd = 0B11110111; delay_ms(100); portd = 0B11111011; delay_ms(100); portd = 0B11111101; delay_ms(100); portd = 0B11111110; delay_ms(100); portd = 0B11111111; delay_ms(100); portb = 0B01111111; delay_ms(100); portb = 0B10111111; delay_ms(100); portb = 0B11011111; delay_ms(100); portb = 0B11101111; delay_ms(100); portb = 0B11110111; delay_ms(100); portb = 0B11111011; delay_ms(100); portb = 0B11111101; delay_ms(100); portb = 0B11111110; delay_ms(100); portb = 0B11111111; delay_ms(100); portb = 255; portd = 255; } }

(59)
(60)

//pisca_pisca_decr.c void main() { int x; trisd = 0; portd = 255; while (1) { x = 0B00000001; portd = x; delay_ms(300); x = x<<1; portd = x; delay_ms(300); x = x<<1; portd = x; delay_ms(300); x = x<<1; 60 portd = x; delay_ms(300); x = x<<1; portd = x; delay_ms(300); x = x<<1; portd = x; delay_ms(300); x = x<<1; portd = x; delay_ms(300); x = x<<1; portd = x; delay_ms(300); } }

(61)
(62)

//pisca_pisca_decre1 void main() { int x; int i; trisd = 0; portd = 255; while (1) { x = 0B00000001; for(i=1;i <=8; i++) { portd = x; delay_ms(300); x = x<<1; } } } 62

(63)
(64)

//pisca_pisca_incr void main() { int x; int i; trisd = 0; portd = 255; while (1) { x = 0B10000000; for(i=1;i <=8; i++) { portd = x; delay_ms(300); x = x>>1; } } } 64

(65)
(66)

//pisca_pisca_inc void main() { int x; int i; trisd = 0; trisb = 0; portd = 0; portb = 0; while (1) { x = 0B10000000; for(i=1;i <=8; i++) { portd = x; delay_ms(50); x = x>>1; } 66 portd = 0; x = 0B00000001; for(i=1;i <=8; i++) { portb = x; delay_ms(50); x = x<<1; } portb =0; } }

(67)
(68)

68 //pisca_pisca_incoulo2 void main() { int x; int i; trisd = 0; portd = 0; while (1) { x = 0B10000000; for(i=1;i <=8; i++) { portd = x; delay_ms(50); x = x >> 2; } x = 0B00000001; for(i=1;i <=8; i++) { portd = x; delay_ms(50); x = x << 2; } } }

(69)
(70)

//inverte void main() { trisd = 0; portd = 0B10101010; while(1) {

portd = ~portd; //*inverte estado do portd delay_ms (200);

} }

(71)
(72)

Exercício Proposto 1

Programa para fazer os leds piscarem de modo sequencial entre as duas fileiras. A fileira led 1 está conectada no PORTD, a fileira led 2 está conectada no PORTB. O DIP switch da fileira de leds 1 e 2 deve estar na posição on o restante na posição off.

Sendo:

portd = 0b00000001 portb = 0b10000000;

(73)

//ledseq void main() {

int i; //declara a variavel inteira

trisb = 0; //define o PORTB como saida trisd = 0; //define o PORTD como saida portb = 0; //coloca o PORTB em nivel baixo portd = 0; //coloca o PORTD em nivel baixo while(1)

{

portd = 0b00000001; //somente o pino rd0 em nivel alto for(i = 0; i < 8; i++)

{

delay_ms(100); //aguarda 100 ms

portd = portd << 1; //desloca um bit p/esq }

portb = 0b10000000; //somente o pino rb7 em nive alto for(i = 0; i < 8; i++)

{

delay_ms(100); //aguarda 100 ms

(74)

Exercício Proposto 2

Programa para fazer cada 4 leds piscarem de modo alternado entre as duas fileiras. A fileira led 1 está conectada no PORTD, a fileira led 2

está conectada no PORTB. O DIP switch da fileira de leds 1 e 2 deve estar na posição on o restante na posição off.

Sendo:

portd = 0b00001111 portb = 0b11110000;

(75)

//ledalter void main() {

trisb = 0; //define o PORTB como saida trisd = 0; //define o PORTD como saida

portb = 0; //coloca o PORTB em nivel baixo portd = 0; //coloca o PORTD em nivel baixo while(1)

{

portd = 0b00001111; //rd0 rd1 rd2 rd3 em alto portb = 0b11110000; //rb7 rb6 rb5 rb4 em alto delay_ms(200); //aguarda 200 ms

portd = ~portd; //inverte o PORTD portb = ~portb; //inverte o PORTB delay_ms(200); //aguarda 200 ms }

Referências

Documentos relacionados

Na maior parte das análises é necessário efectuar operações aritméticas sobre os resultados de uma medição, ou combinar os resultados de várias medições, cada uma

Todas as notas fiscais de entrada e saída (matérias primas, ativo imobilizado, vendas, remessas) e prestação de serviços, devem ser ordenadas e deixadas à nossa

Orientadora: Claudia Piantá Costa Cabral Coordenadora: Maria Luiza Sanvitto..

Foi nesse ponto que se verificou algumas inconsistências próprias do comportamento humano, como: embora achem que não receberiam seu benefício futuramente, a maioria das

A Associação de Pais e Amigos do Autista – Espaço Potencial Marília, executa o serviço de Proteção Especial de Média Complexidade para pessoas com transtorno de espectro autista

value of posttraumatic growth., XIV Conference of European Society for Traumatic Stress Studies Trauma in Changing Societies: Social Contexts and Clinical Practice10-13 June

Poucas vozes foram discordantes (apenas 6%) ressaltando o papel dos docentes: “Não, o que faz diferença na qualidade do ensino é o comprometimento dos

A dimensão gestão, voltada para a descentralização da estrutura organizacional do aparelho do Estado por meio da criação de novos formatos organizacionais, como