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 Programa em C Escolher o compilador; ???? 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: 𝑪𝑷: Proteção da memória flash (proteção de código). 𝑪𝑷𝑫: 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. 𝑷𝑾𝑹𝑻𝑬: 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 𝑪𝑷 e 𝑪𝑷𝑫: PIC16F628 • 𝑪𝑷: protege a memória de programa (Flash) contra leitura e cópia. • 𝑪𝑷𝑫: 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 depende do clock do μC. não • 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 Resistor pull-up Pino 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: [email protected] 48