STE29008-2019-2

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Sistemas Embarcados: Diário de Aula 2019-2

29/07/2019 – Apresentação

31/07/2019 – Introdução

05/08/2019 – GPIO


  • Definição das Duplas:
    • Daniel e Anderson
    • Ameliza e Natalia
    • Guilherme e Marcone
    • Allex e Douglas
    • Fabiano e Filipe Kuhnen
    • Felipe Cardoso e Luiza
    • Gustavo e Gabriel

07/08/2019 – Experimento UART

12/08/2019 – Projeto 1: Sensor de Temperatura - Arduino

Atividade

O objetivo deste experimento é apresentar um exemplo básico de programação de sistema embarcado com microcontrolador. Para isto, será desenvolvido um sensor de temperatura com comunicação serial utilizando a plataforma Arduino.

  • Material necessário:
    • Arduino Uno;
    • Termistor NTC 10KOhm;
    • Resistor 10KOhm;
    • Matriz de contato;
    • Computador com IDE do Arduino instalada.
  • Para completar o desafio, utilize o site arduino.cc como referência, e construa um sketch (programa na IDE do Arduino) que, a cada 1 segundo, pisque um LED (veja o LED já na placa do Arduino no pino 13), e leia um valor do sensor de temperatura e escreva, em graus celcius, na tela. Um pseudo-código da sua aplicação seria:
loop() {
    ligaLED();
    AdquireTemperatura(); // lê do ADC e converte para Celcius
    desligaLED();
    ImprimeResultado(); // pela serial
    dorme1segundo();
}
  • Para completar esta atividade, você precisará:
    • Montar um circuito com divisor de tensão utilizando o NTC e o resistor para aquisição do sinal através de uma porta analógica do Arduino
    • Especificar um modelo (equação) para obter o valor da resistência do NTC a partir do valor de tensão lido no canal analógico do Arduino;
    • Utilizar o modelo de Steinhart-Hart para obter a temperatura a partir da resistência;
    • Calibrar o seu sistema para temperaturas entre 0 e 50 graus celcius (utilize esta calculadora e a tabela de resistência-temperatura do seu NTC abaixo);
    • No programa arduino, implemente duas versões do software: uma utilizando apenas "float" e outra utilizando apenas "int 32-bits" (compare as versões).
  • Entregue um relatório curto (1 página), comparando os resultados obtidos em termos de:
    • Uso de memória de programa (flash - código-fonte);
    • Uso de memória de dados (RAM);
    • Tempo necessário para o cálculo (conecte o pino do LED a um osciloscópio - o tempo que o LED fica acesso é o tempo que leva para fazer o cálculo).
  • Observações:
    • O trabalho deve ser executado em dupla.
    • Entrega até 18/08 via Sigaa


NTC-10Kohm-tabela.jpg

14/08/2019 – Projeto 1: Sensor de Temperatura - Arduino (cont.)

19/08/2019 – Correção Projeto 1

  • Implementado em conjunto a versão long e float.


21/08/2019 – Usando C++

Mudança de nível de abstração


Portas arduino MEGA.png


Fonte: https://www.arduino.cc/en/Hacking/PinMapping2560


Megapdf.jpg

ATmega2560: I/O Ports


  • Tabela verdade de configuração das portas:

Port Pin Configurations.png


  • Endereços registradores de I/O:

Io registers address 2560.png

GCC, avr-libc

Fluxo Ferramentas:

Avr-gcc.png


AVR-LIBC:

Desenvolvimento:

  • É obrigatório a instalação das ferramentas (Toolchain e AVR-Libc).
  • O aluno pode escolher usar o MPLAB X ou montar seu próprio Makefile.
  • Gravação:
    • avrdude
    • MPLAB X: avrdude -c avrispmkII -P /dev/ttyUSB0 -D -p ${Device} -U flash:w:${ImagePath}:i
    • Terminal: avrdude -c avrispmkII -P<PORTA> -D -p ATmega2560 -U flash:w:<HEX>:i

Prática

26/08/2019 – Usando C++ (cont.)

Prática

  • Configuração da ferramenta:
    • Tools -> Options -> Embedded -> Build Tools-> Add
    • Base Directory: /opt/microchip/avr8-gnu-toolchain/bin
  • Implemente um programa usando GCC e avr-libc para ligar um led (D13) quando um botão (A0) for pressionado (exemplo)

Notas


28/08/2019 – Usando C++ Serial

Objetivos

  • Entender o periférico Serial e implementar métodos de configuração, envio e recepção.
  • Datasheet ATmega2560

Experimento

  • Implementar comunicação serial 9600bps 8N1


02/09/2019 – Usando C++ ADC

Objetivos

  • Entender o periférico ADC e implementar métodos de configuração e leitura do ADC.
  • Datasheet ATmega2560

Experimento

  • Implementar leitura do ADC

Exercício

  • Implementar o "sensor de temperatura" com C++ e AVR-LIBC
  • Comparar o tamanho do código gerado
  • Entrega: 08/09


04/09/2019 – Interrupção

  • Desafio:
    • Usando Round Robin sem interrupções implementar um sistema com um LED e um botão. O sistema deve piscar o LED (D13) a cada 1 segundos e ao botão (D2) ser pressionado envia uma mensagem pela serial.


09/10/2019 – Classe GPIO


#include <avr/io.h>
#include <util/delay.h>
#include "GPIO.h"


//LEDS PLACA (acende com '0')
GPIO led0(0, GPIO::OUTPUT);		//PE0
GPIO led1(1, GPIO::OUTPUT);		//PE1

//LEDS PLACA (acende com '1')
GPIO led13(13, GPIO::OUTPUT);	//PB7

//Adicionar LED
GPIO led4(4, GPIO::OUTPUT);		//PG5
GPIO led6(6, GPIO::OUTPUT);		//PH0

int main(void){

	UCSR0B = 0;

	led0.set(1);
	led1.set(1);
	led6.clear();
	led4.clear();
	led13.clear();
	_delay_ms(1000);
	led0.clear();
	led1.clear();
	led6.set(1);
	led4.set(1);
	led13.set(1);
	_delay_ms(1000);

	while (1){
		led0.toggle();
		led1.toggle();
		led6.toggle();
		led4.toggle();
		led13.toggle();
		_delay_ms(1000);
	}

}

Megapdf.jpg