Mudanças entre as edições de "STE29008-2019-1"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 236: Linha 236:
 
* Análise GPIO
 
* Análise GPIO
 
:avr-objdump -h -S <PROJECT_NAME>.elf > <PROJECT_NAME>.lst
 
:avr-objdump -h -S <PROJECT_NAME>.elf > <PROJECT_NAME>.lst
 +
 +
= 10/04/2019 – Classe GPIO (cont.) =
 +
 +
* Classe GPIO_Port
 +
* Análise conceitual das diferentes versões
 +
* Atividade 2:
 +
**Análise prática das versões passadas em sala de aula (tamanho do construtor e do método set(val)).
 +
**Completar a classe GPIO e GPIO_port para todos os pinos da plataforma Arduino, seguintes IDs:
 +
***[https://drive.google.com/open?id=1-Duj1Ofn1B4K1mi_MfhXVml8XcJv0AOhAhWjeak-Qf8 Mapeamento de Pinos Arduino Mega]
 +
** Os arrays devem ser forçados para memória flash:
 +
***[https://www.nongnu.org/avr-libc/user-manual/pgmspace.html PROGMEM]
 +
** Entregar Código Fonte e Relatório contendo:
 +
*** Análise prática e conceitual das versões
 +
*** Discussão da implementação
 +
**Essas perguntas não precisam ser respondidas como questionário e não devem limitar suas análises.
 +
***1- Por que salvar o _bit como (1 << BIT_PORTA)? É melhor do que usar diretamente (1 << BIT_PORTA)?
 +
***2- Qual tamanho do clear? Por que ele é maior e mais lento que o set? Como resolver?
 +
***3- Por que utilizar grandes vetores na memória Flash? O que isso impacta no acesso a constante?
 +
***4- Comente sobre a versão 1.2 e 1.3. Qual é menor e por quê? Quais as vantagens da v1.3?
 +
***5- Comente sobre a estratégia usada na implementação v2?
 +
***6- Qual o tamanho total dos recursos ocupados pelo atributo do objeto "GPIO" nas vesões sugeridas?
 +
***7- Qual a diferença de expandir as versões passads para todos os pinos do hardware do arduino? Como isso impactaria no "construtor" e no "set"?

Edição das 15h24min de 10 de abril de 2019

Sistemas Embarcados

  • Professor: Roberto de Matos
  • Encontros: quartas às 13:30h e sextas às 15:40h no Laboratório CAD 1.


13/02/2019 – Apresentação


15/02/2019 – Introdução


20/02/2019 – Experimento GPIO

22/02/2019 – Experimento UART



27/02/2019 – ADC

  • Finalizar o UART mestre escravo

01/03/2019 – Interrupções

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


08/03/2019 – Usando C++

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


Portas arduino MEGA.png


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


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 o AVR-Libc).
  • O aluno pode escolher usar o Eclipse ou montar seu próprio Makefile.




Prática


13/03/2019 – Não Houve Aula

15/03/2019 – Usando C++ (cont.)

Atividade - A1

Re-implementar as seguintes atividades usando C++ e AVR-Libc:

Entregar:

Deadline: 31/03/2019

20/03/2019 – Auxílio Atividade (Serial)

  • Análise dos registradores de controle
  • Funcionamento bloqueante da Serial


22/03/2019 – Auxílio Atividade (ADC)

27/03/2019 – Auxílio Atividade (Interrupção)


  • Análise comunicação serial 9600bps 8N1:
    • Tempo por bit = 1/9600 = ~104us
    • Tempo por byte (8N1) = 104us x 10 = 1,04ms
    • Período do clock de 16MHz = 1/16M = 62,5ns
    • Considerando uma instrução por ciclo de clock, temos: 16.666 instruções que podem ser executadas durante a recepção de 1 byte pela serial (9600 8N1).


03/04/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

05/04/2019 – Classe GPIO (cont.)

avr-objdump -h -S <PROJECT_NAME>.elf > <PROJECT_NAME>.lst

10/04/2019 – Classe GPIO (cont.)

  • Classe GPIO_Port
  • Análise conceitual das diferentes versões
  • Atividade 2:
    • Análise prática das versões passadas em sala de aula (tamanho do construtor e do método set(val)).
    • Completar a classe GPIO e GPIO_port para todos os pinos da plataforma Arduino, seguintes IDs:
    • Os arrays devem ser forçados para memória flash:
    • Entregar Código Fonte e Relatório contendo:
      • Análise prática e conceitual das versões
      • Discussão da implementação
    • Essas perguntas não precisam ser respondidas como questionário e não devem limitar suas análises.
      • 1- Por que salvar o _bit como (1 << BIT_PORTA)? É melhor do que usar diretamente (1 << BIT_PORTA)?
      • 2- Qual tamanho do clear? Por que ele é maior e mais lento que o set? Como resolver?
      • 3- Por que utilizar grandes vetores na memória Flash? O que isso impacta no acesso a constante?
      • 4- Comente sobre a versão 1.2 e 1.3. Qual é menor e por quê? Quais as vantagens da v1.3?
      • 5- Comente sobre a estratégia usada na implementação v2?
      • 6- Qual o tamanho total dos recursos ocupados pelo atributo do objeto "GPIO" nas vesões sugeridas?
      • 7- Qual a diferença de expandir as versões passads para todos os pinos do hardware do arduino? Como isso impactaria no "construtor" e no "set"?