Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Sistemas Embarcados: Interfaces de Entradas e Saídas DCA0119 Sistemas Digitais Heitor Medeiros Florencio
Tópicos da Aula Programação de Microcontroladores: Bits de configuração. Sinais digitais de entrada e saída: Portas I/O. Portas de MCU PIC. Portas de MCU AVR. 2
Programação de μc Alimentar o μc; Escolher a fonte de clock; Gravador Escolher a forma de gravação; Arquivo.hex Compilador C Escolher o compilador; Programa em C???? 3
Programação de μc Programa em C Compilador C Arquivo.hex Gravador Existem registradores especiais nos microcontroladores que, através dos bits ou flags desses registradores, podemos configurar o características funcionais dos μc. A biblioteca do μc deve incluir esses bits/flags para que o usuário tenha permissão de altera-los. 4
Fuses: bits de configuração A configuração dos bits de configuração (fuses) do microcontrolador deve ser a primeira coisa a ser feita na programação. Cada microcontroladores tem seus fuses. A configuração incorreta de fuses pode levar o microcontrolador a funcionalidades incorretas, ou até mesmo danificá-lo. Exemplos: Desabilitar a programação da memória flash. Impedir a execução do programa principal. Esses bits determinam o funcionamento do μc: Modo do oscilador. Contador para resetar. Modo de programação. Proteção do código. 5
Fuses: PIC16F628A Os principais bits de configuração (fuses) que influenciam no funcionamento dos componentes do μc PIC16F628 são: CP: Proteção da memória flash (proteção de código). CPD: Proteção da memória EEPROM (proteção de dados). LVP: Habilita a tensão para programação ICSP. BOREN: Proteção contra baixa tensão de execução. MCLRE: Fuse de reset. FOSC0, FOSC1, FOSC2: Seleciona a fonte de clock. PWRTE: Habilita um período de reset quando alimentado. WDTE: Watchdog Reiniciar o μc após um período de tempo sem funcionamento. 6
Fuses: PIC16F628A Obs.: Os principais bits de configuração citados anteriormente estão no registrador CONFIG. 7
CP e CPD: PIC16F628 CP: protege a memória de programa (Flash) contra leitura e cópia. CPD: protege a memória interna de dados (EEPROM) contra leitura e gravações externas. 8
LVP: PIC16F628A Na gravação utilizando ICSP, o pino MCLR eleva a tensão para garantir a correta transferência dos dados. LVP: pino utilizado para permitir a gravação com a própria tensão de alimentação. O pino PGM é referente ao bit LVP na gravação. 9
BOREN e MCLRE: PIC16F628A BOREN: Brown-out Reset Enable. A CPU é reinicializada quando a tensão cai abaixo de um limite definido Vbor por um período superior a Tbor. MCLRE: Reinicializa o microcontrolador quando o pino recebe tensão 0V. 10
FOSC0, FOSC1, FOSC2: PIC16F628A FOSC0, FOSC1, FOSC2: Seleciona a fonte de clock. Obs.: Além de definir a fonte de clock, o programador deve definir o valor do clock através da flag XTAL. 11
FOSC0, FOSC1, FOSC2: PIC16F628A Exemplo: Oscilador Interno com clock de 4MHz. Utilizando o MPLAB X e o compilador XC8. 12
WDTE: Watchdog Watchdog é um contador, independente dos outros componentes do μc, que reinicia o microcontrolador após um certo período de tempo. O temporizador Watchdog não depende do clock do μc. Funciona como um cão de guarda. O tempo do watchdog é definido pela flags TMR0 (temporizador 0), normalmente 18ms. 13
WDTE: Watchdog 14
WDTE: Watchdog Vantagens: Contra bugs: caso o programa venha gerar um bug que trave o a execução do microcontrolador em um determinado comando, o estouro do watchdog reinicializará o programa. Falhas inesperáveis: caso a falha esteja no próprio oscilador da microcontrolador, a reinicialização do uc pode resolver. 15
Configurando Fuses PIC no MPLAB X (1) 16
Configurando Fuses PIC no MPLAB X (2) (3) 17
Fuses: ATMega328 Fuses: PORF: Power-on Reset. EXTRF: External Reset. BORF: Brown-out Reset. WDRF: Watchdog System Reset. Todos os fuses mostrados acima estão no registrador MCUSR: 18
Watchdog: ATMega328 É possível escolher vários tempos do temporizador watchdog. 19
Watchdog: ATMega328 Bit 7 - WDIF: Watchdog Interrupt Flag Bit 6 - WDIE: Watchdog Interrupt Enable Bit 4 - WDCE: Watchdog Change Enable Bit 3 - WDE: Watchdog System Reset Enable Bit 5, 2..0 - WDP3..0: Watchdog Timer Prescaler 3, 2, 1 and 0 20
Watchdog: ATMega328 Bit 5, 2..0 - WDP3..0: Watchdog Timer Prescaler 3, 2, 1 and 0 21
Configurando Fuses AVR no Atmel Studio Tools -> Device Programming. 22
Configurando Fuses AVR Configurando via AtmelStudio. Também é possível configurar via comandos no argumento do AVRDUDE. 23
Sinais Digitais de Entrada e Saída (Portas I/O) 24
Sinais Digitais I/O A programação de microcontroladores inclui a lógica de programação a ser embarcada e a configuração de registradores dos componentes o μc. Atualmente, a maioria dos microcontroladores são baseados na tecnologia de sinais digitais TTL (Lógica Transistor Transistor). 25
Portas I/O Os microcontroladores dividem seus pinos digitais de entrada e saída (pinos I/O) em grupos, chamados de Portas I/O. Exemplo: PIC16F628A 2 portas I/0 (16 pinos I/O). Exemplo: ATMega328 3 portas I/0 (24 pinos I/0). 26
Portas I/0: Registradores Todos esses pinos digitais I/O são configurados através da combinação de valores de alguns registradores. Os registradores definem o estado do pino: Nível alto. Nível baixo. Alta impedância. Coletor aberto / dreno aberto. 27
Coletor Aberto / Dreno Aberto Coletor aberto (para tecnologia TTL) e dreno aberto (para tecnologia CMOS) representa o mesmo funcionamento. Circuitos com tecnologia TTL apresentam tensão de 5V de saída para nível lógico 1. Se você quiser atuar com esse sinal de saída em um dispositivo que necessita de uma tensão maior para o nível lógico 1? Por exemplo, um dispositivo que precise de 12 V? 28
Coletor Aberto usando Resistor de pull-up Solução: Colocar o pino digital de saída para configuração coletor/dreno aberto e utilizar um resistor de pull-up. A saída digital (0 ou 1) do C.I., no caso do μc, será a base de um transistor Q1. O transistor Q1 será conectado a um Vcc e GND externo, que será definido pelo usuário para obter a tensão desejada. 29
Coletor Aberto usando Resistor de pull-up Solução: Colocar o pino digital de saída para configuração coletor/dreno aberto e utilizar um resistor de pull-up. Atenção: Verifique os limites de corrente de pull-up definido no CI. A saída digital (0 ou 1) do C.I., no caso do μc, será a base de um transistor Q1. O transistor Q1 será conectado a um Vcc e GND externo, que será definido pelo usuário para obter a tensão desejada. 30
Resistor de Pull-up ou Pull-down na Entrada μc PB0 Qual o valor da tensão aplicada ao pino de entrada PB0: quando o botão estiver pressionado? quando o botão não estiver pressionado?? 31
Resistor de Pull-up ou Pull-down na Entrada μc PB0 Qual o valor da tensão aplicada ao pino de entrada PB0: quando o botão estiver pressionado? Resp.: 5V. quando o botão não estiver pressionado?? Resp.:????? 5V?? 0V?? (circuito aberto). 32
Resistor de Pull-up ou Pull-down na Entrada O resistor de pull-up ou pull-down são utilizados na entrada de pinos digitais para assegurar que a tensão aplicada (nível lógico aplicado) é ~0V ou ~5V. Mesmo quando o botão não estiver pressionado (circuito aberto no botão), o circuito com resistor de pull-up ou down força uma tensão de 0V ou ~5V. 33
Resistor de Pull-up ou Pull-down na Entrada Atualmente, a maioria dos microcontroladores integram, de forma opcional, a ligação de resistores de pull-up ou pulldown nas suas entradas digitais. 34
Portas I/0: Registradores As portas I/O dos μcs são configuráveis através de registradores. Microcontroladores da família AVR utilizam os registradores: Registrador PORT (dados leitura/escrita); Registrador DDR (controle de direção do pino de I/O- escrita/leitura); Registrador PIN (leitura do pino de I/O apenas leitura). Microcontroladores da família PIC utilizam os registradores: Registrador PORT (dados leitura/escrita); Registrador TRIS (controle de direção do pino I/O leitura/escrita); Registrador LAT (armazena o valor do último comando de escrita). 35
Portas I/O: PIC16F628A Analisando o datasheet verifica-se que cada pino pode ter uma configuração diferente devido as diversas funcionalidades que ele pode executar. Exemplos: 36
Portas I/O: PIC16F628A Um diagrama genérico de um pino I/0: 37
TRIS - PORT: PIC16F628A O registrador TRIS define se o pino/porta é de entrada ou saída de dados: TRISA = 00000000; //os oito bits da porta A são bits de saída (0); TRISA = 11111111; //os oito bits da porta A são bits de entrada (1); TRISA = 11110001; //os bits 7, 6, 5, 4 e 0 são de entrada; //os bits 1, 2 e 3 são de saída; Existem alguns compiladores que permitem acessar um bit específico da porta. 38
TRIS - PORT: PIC16F628A O registrador PORT define: qual o nível lógico que será escrito na saída.. aux = PORTA; //a variável aux vai armazenar o nível lógico lido; Dado que o registrador TRISA esteja com o valor 1 - entrada. qual o nível lógico lido na entrada.. PORTA = 11111111; //todos os bits da porta A terão o nível lógico 1 ; Dado que o registrador TRISA esteja com o valor 0 - saída. 39
Portas I/O: ATMega328 Esquema geral de todos os pinos lógicos: Diodos de proteção; Resistor de pull-up; Todas as porta em microcontroladores AVR: Permite utilizar o pino com resistores de pull-up; Permite utilizar o pino na configuração tri-state outputs ( 0, 1 ou Z alta impedância). Permite a configurar a direção, o valor e se vai utilizar pull-up ou não. 40
Portas I/O: ATMega328 DDR Pino Resistor pull-up PORT PIN 41
DDR - PORT: ATMega328 O registrador DDR define se o pino funcionará como saída ou entrada de dados: DDRA = 00000000; //os oito bits da porta A são bits de entrada (0); DDRA = 11111111; //os oito bits da porta A são bits de saída (1); DDRA = 11110001; //os bits 7, 6, 5, 4 e 0 são de saída; //os bits 1, 2 e 3 são de entrada; 42
DDR - PORT: ATMega328 O registrador PORT define: qual o nível lógico que será escrito na saída.. aux = PORTA; //a variável aux vai armazenar o nível lógico lido; Dado que o registrador TRISA esteja com o valor 1 - entrada. qual o nível lógico lido na entrada.. PORTA = 11111111; //todos os bits da porta A terão o nível lógico 1 ; Dado que o registrador TRISA esteja com o valor 0 - saída. 43
Práticas 44
Programando em PIC Exercícios: Acender o LED1. Acender o LED1 e o LED2. Piscar o LED1 (utilizar função delay). Demoboard PICKIT3 PIC18F54K20 45
Programando em AVR Exercícios: Acender o LED1. Acender o LED1 e o LED2. Piscar o LED1 (utilizar função delay). Atmel Studio avrdude ATMega328 46
Referências http://www.embarcados.com.br/configuration-bits-dopic16f877a/ http://www.embarcados.com.br/niveis-e-limites-de-tensoesdigitais/ 47
Dúvidas? Dúvidas por email: heitorm@dca.ufrn.br 48