Você está na página 1de 19

2017/18 – 3.

º Ano – 1º Semestre - LABSI

INTERLIGAÇÃO SENSORES E ATUADORES

ELABORADO POR:
ANDRÉ ROCHA, N.º 1130809

DANIEL VIEIRA, N.º 1161365

DOCENTE:
ENG.º RUI BRITO

Licenciatura em Engenharia Eletrotécnica e de Computadores


2017/18 – 3.º Ano – 1º Semestre - LABSI

Índice
Introdução ..................................................................................................................................... 2
Hardware/Esquema ...................................................................................................................... 3
Condensador de desacoplamento ............................................................................................ 3
Botão de Reset do microcontrolador ........................................................................................ 4
LED............................................................................................................................................. 4
Potenciómetro .......................................................................................................................... 4
Software ........................................................................................................................................ 5
IDE e programador .................................................................................................................... 5
Código do microcontrolador ..................................................................................................... 5
Descrição da solução apresentada ............................................................................................ 6
Linguagem Assembly ......................................................................................................... 9
Fluxogramas .................................................................................................................. 9
Código.......................................................................................................................... 11
Linguagem C .................................................................................................................... 13
Fluxogramas ................................................................................................................ 13
Código.......................................................................................................................... 15
Conclusão .................................................................................................................................... 16
Bibliografia .................................................................................................................................. 18

Índice de Figuras
Figura 1 - Esquema do circuito utilizado ....................................................................................... 3
Figura 2 - Esquema de ligação do programador ........................................................................... 5
Figura 3 – Versão 1 - Fluxograma do programa principal ............................................................. 9
Figura 4 – Versão 1 - Fluxograma da interrupção TC0 .................................................................. 9
Figura 5 – Versão 1 - Fluxograma interrupção ADC .................................................................... 10
Figura 6 – Versão 2 - Fluxograma do programa principal .......................................................... 13
Figura 7 – Versão 2 - Fluxograma da interrupçãoTC0 ................................................................ 13
Figura 8 – Versão 2 - Fluxograma da interrupção ADC ............................................................... 14

Licenciatura em Engenharia Eletrotécnica e de Computadores Página 1 de 18


2017/18 – 3.º Ano – 1º Semestre - LABSI

Introdução
O trabalho realizado enquadra-se no âmbito do estudo da disciplina de Laboratório de
Sistemas, tendo como objetivo a implementação de um sistema com recurso a um
microcontrolador capaz de fazer a aquisição de um sinal analógico convertido para um valor
digital com oito bits. O sistema deve também ser capaz de controlar um actuador por PWM e,
em simultâneo, gerar uma onda quadrada de 1 Hz.
Foram desenvolvidos dois códigos, isto é, duas versões de código que produzem o mesmo
resultado, ainda que em linguagens diferentes, sendo a primeira em Assembly e outra em
linguagem C, de forma a confrontar o modo de implementação em cada uma.
No sentido de desenvolver competências no âmbito da implementação prática, o sistema
físico (hardware) foi montado em placa de testes (breadboard) e foi utilizado um
microcontrolador ATMEGA328p.

Licenciatura em Engenharia Eletrotécnica e de Computadores Página 2 de 18


2017/18 – 3.º Ano – 1º Semestre - LABSI

Hardware/Esquema
Foram utilizados diversos componentes, de acordo com o esquema da figura abaixo.

Figura 1 - Esquema do circuito utilizado

O sistema foi implementado com recurso a placa de testes (breadboard), sendo utilizado o
microcontrolador ATMEGA328p, com cristal externo de 16𝑀ℎ𝑧.

Ainda que, na prática, se tenha recorrido a uma fonte de alimentação de 5V, no caso de utilizar
um regulador de tensão, conforme o esquema apresentado, seria fornecida uma tensão entre
9 a 12𝑉, obtendo na saída os 5𝑉 necessários para alimentar o circuito do microcontrolador. O
LED à saída do regulador serve para ter uma informação visual de que o circuito se encontra
alimentado. No restante circuito serão de destacar os aspetos abaixo abordados.

Condensador de desacoplamento
À entrada do microcontrolador foi usado um condensador de 100𝑛𝐹 para desacoplamento. O
circuito digital consome corrente por picos, não havendo constância da mesma. Assim,
utilizando o condensador na sua entrada melhora a estabilidade do funcionamento do
microcontrolador, atenuando as oscilações entre os sinais lidos e emitidos. Por outro lado,
diminui a emissão de ruídos eletromagnéticos para o circuito restante (admitindo um circuito
mais complexo, em que existissem mais circuitos na mesma rede).

Licenciatura em Engenharia Eletrotécnica e de Computadores Página 3 de 18


2017/18 – 3.º Ano – 1º Semestre - LABSI

Botão de Reset do microcontrolador


O microcontrolador tem a função de reset no pino 1, ativado ao nível lógico baixo, pelo que se
utilizou uma resistência de Pull-UP, de forma a não deixar o pino num estado indefinido. Visto
que, desta forma, se mantém no pino o nível lógico alto, até que seja premido o botão de
botão de reset, evitando a ativação involuntária do mesmo por ruído.

Considerando que a entrada do microcontrolador possui alta impedância, na ordem de


100kΩ, de forma a não ter um alto consumo, quando a entrada estiver ativada, e com vista a
garantir que a queda de tensão, por efeito de ruído, nunca será suficiente para ser
interpretado um nível lógico baixo, utiliza-se uma resistência de aproximadamente um décimo
da impedância de entrada, sendo neste caso de 10kΩ.

LED
De acordo com o datasheet dos LED utilizados, estes possuem corrente de condução 𝐼𝐹 =
20𝑚𝐴 e tensão 𝑉𝐹 = 1,65𝑉 (típica de 1,65𝑉 e máxima de 2,0𝑉). Considerando que a
resistência elétrica do LED, quando polarizado diretamente, é muito baixa, é importante
limitar a corrente que passa pelo mesmo. Nesse sentido, é utilizada uma resistência em série,
cujo dimensionamento impede que haja dano no LED. Portanto, considerando a corrente de
condução do mesmo e que o ramo em que está inserido será alimentado por uma tensão de
5𝑉, calculou-se o valor da resistência a inserir no ramo de acordo com:

5,0 − 1,65
𝑅𝑠é𝑟𝑖𝑒 = = 335Ω
20 ∙ 10−3
( )
2

No cálculo foi considerado o pior cenário, tensão 𝑉𝐹 = 1,65𝑉, e margem de segurança de


metade da corrente 𝐼𝐹 . Dado que são utilizadas resistências standard, escolheu-se a mais
próxima, de 330Ω.

Potenciómetro
O potenciómetro de 10kΩ foi utilizado para fazer a variação da tensão à entrada do pino
ADC0, por via do divisor de tensão do seu ponto médio, conforme o esquema apresentado.

Licenciatura em Engenharia Eletrotécnica e de Computadores Página 4 de 18


2017/18 – 3.º Ano – 1º Semestre - LABSI

Software
IDE e programador
Para o desenvolvimento do código a implementar no microcontrolador ATMEGA328p, foi
utilizado o ambiente de desenvolvimento Atmel Studio 7. Adicionalmente, recorreu-se à placa
de desenvolvimento do Arduino para efetuar a programação via USB-Serial, conforme o
esquema abaixo ilustrado.

Figura 2 - Esquema de ligação do programador

Código do microcontrolador
Foram efetuados 2 códigos (Assembly e C). Os códigos foram classificados de acordo com a
seguinte estrutura:

Versão 1: Linguagem Assembly;

Versão 2: Linguagem C.

Licenciatura em Engenharia Eletrotécnica e de Computadores Página 5 de 18


2017/18 – 3.º Ano – 1º Semestre - LABSI

Descrição da solução apresentad a


A solução desenvolvida terá uma lógica de funcionamento bastante semelhante para os dois
programas desenvolvidos, não havendo diferenças assinaláveis a referenciar.
Considerando o programa feito anteriormente (no trabalho 1), para a apresentação de uma
onda quadrada, à frequência de 1𝐻𝑧, a solução desenvolvida aproveita essa base e acrescenta
a geração de uma onda quadrada de largura variável (PWM), no pino 12 do microcontrolador
ATMEGA328p (OC0A - PD6). De igual modo, tendo em vista a otimização dos recursos,
recorreu-se à utilização de apenas um timer, TIMER 0 (TC0), para o desenvolvimento de todas
as ondas e base de tempo para o funcionamento do código. Assim, configurou-se o TC0 para o
modo de funcionamento 3, i.e., em modo Fast PWM, com o TOP em 0xFF.
Considerando que a interrupção de overflow se dá no ponto máximo, de forma análoga ao
definido no trabalho anterior, com o modo CTC, garante-se, na interrupção Timer/Counter0
Overflow (TIMER0_OVF), que a base de tempo para o ciclo de funcionamento é constante.
Os cálculos desenvolvidos para a configuração do Timer TC0, com temporização de 1𝑚𝑠, são:
𝑓𝐶𝐿𝐾
𝑓𝑂𝐶0𝐴 = ⇔
𝑃𝑆𝐶 ∙ 256
1 16 ∙ 106
⇔ = ⇔ 𝑃𝑆𝐶 = 62,5
1 ∙ 10−3 𝑃𝑆𝐶 ∙ 256
Sendo o valor de prescaler mais próximo de 64, tem-se:

16 ∙ 106
𝑓𝑂𝐶0𝐴 = ≅ 976,56𝐻𝑧
64 ∙ 256
Desta forma, considerando que o período é o inverso da frequência, ajustando o valor do
contador de 500ms, obtém-se:

1
𝑇𝑂𝐶0𝐴 = ≅ 1024𝜇𝑠
976,56
500 ∙ 10−3
𝑇500𝑚𝑠 = ≅ 488
1024 ∙ 10−6
Por outro lado, tendo em conta o objetivo deste trabalho e considerando que a modulação da
onda de saída no pino OC0A é controlada pelo valor constante no registo OCR0A, o mais
adequado será usar o “Clear OC0A on Compare Match”, no “Compare Output Mode”, de modo
a que a comparação do OCR0A, no nível mínimo, garante que se mantém a saída no nível
lógico baixo.

Licenciatura em Engenharia Eletrotécnica e de Computadores Página 6 de 18


2017/18 – 3.º Ano – 1º Semestre - LABSI

Por conseguinte, foram efetuadas, nos registos do TC0, as seguintes configurações:

TCCR0A
7 6 5 4 3 2 1 0
FOC0A FOC0B COM0B1 COM0B0 WGM01 WGM00
0 0 0 0 1 1

TCCR0B
7 6 5 4 3 2 1 0
COM0A1 COM0A0 WGM02 CS0[2:0]
1 0 0 0 1 1

TIMSK0
7 6 5 4 3 2 1 0
OCIEB OCIEA TOIE
0 0 1

OCR0A
7 6 5 4 3 2 1 0
OCR0A[7:0]
0 0 0 0 0 0 0 0

𝑇𝑜𝑛
O controlo da razão cíclica (𝐷 = 𝑇
) é feito com recurso a um potenciómetro, que fará variar
a tensão à entrada do conversor ADC0 (pino 23 – PC0), tendo como referência a tensão AVCC
(REFS0=1 e REFS1=0).

Neste trabalho, como são utilizados 8 bits respeitantes ao resultado da conversão, alinhou-se à
esquerda (ADLAR = 1), rejeitando os 2 bits menos significativos. Aproveitando esse facto e uma
vez que há uma nova ordem de conversão a cada interrupção de overflow do TC0 (500𝑚𝑠),
não se vislumbrou haver necessidade de efetuar o tratamento da leitura, dado que o registo
OCR0A possui o mesmo número de bits, permitindo fazer cópia direta entre os registos.

De acordo com o datasheet do ATMEGA328p, para que seja conseguida a máxima resolução
do conversor AD de 10 bits, a frequência do sinal de relógio (𝑓𝑐𝑙𝑘𝐴𝐷𝐶 ) deve estar compreendida
entre 50𝐾ℎ𝑧 e 200𝐾ℎ𝑧. Ainda que se pretenda conversões de 8 bits, considerando esta regra,
calculou-se o fator de divisão de clock de acordo com:

𝑓𝑐𝑙𝑘 16 ∙ 106
𝐹𝑎𝑡𝑜𝑟 𝑑𝑒 𝑑𝑖𝑣𝑖𝑠ã𝑜 = = = 128
𝑓𝑐𝑙𝑘𝐴𝐷𝐶 125 ∙ 103

Conforme sugerido acima, a cada interrupção do TC0, é decrementado o contador de 500𝑚𝑠 e


feita a comparação deste com 0, de forma a verificar se esse tempo já passou. Caso tenha
passado, faz Toggle ao bit do 𝐿𝐸𝐷500𝑚𝑠 e repõe o contador. De seguida, é ativado o ADC
(ADEN=1), é ativada a interrupção de conversão completa (ADIF=1) e é dada ordem de
conversão (ADSC=1).

Licenciatura em Engenharia Eletrotécnica e de Computadores Página 7 de 18


2017/18 – 3.º Ano – 1º Semestre - LABSI

Assim que terminar a conversão é ativada a flag (ADIF) de interrupção, sendo que como no
registo de status está ativado o I-bit, pelo que há um salto para o vetor de interrupção “ADC
Conversion Complete” (0x002A). Na interrupção é copiado o valor de ADCH para OCR0A, de
forma a que a alterar a razão cíclica, variando dessa forma a tensão média fornecida ao LED e,
por consequência, a potência a este fornecida em cada período. Imediatamente a seguir é
reposta a configuração inicial do ADC, sendo este desligado, o que permite tornar o sistema
mais eficiente, uma vez que este só será ligado quando necessário.

Por fim, importa referir que grande parte do tempo de execução das instruções referentes às
interrupções diz respeito à leitura do ADC. Conforme referido no fluxograma, de um total de
207,30𝜇𝑠 de execução das instruções, 205,50𝜇𝑠 correspondem ao tempo necessário para o
ADC efetuar a conversão.

Licenciatura em Engenharia Eletrotécnica e de Computadores Página 8 de 18


2017/18 – 3.º Ano – 1º Semestre - LABSI

Linguagem Assembly
Fluxogramas

Figura 3 – Versão 1 - Fluxograma do programa principal

Figura 4 – Versão 1 - Fluxograma da interrupção TC0

Licenciatura em Engenharia Eletrotécnica e de Computadores Página 9 de 18


2017/18 – 3.º Ano – 1º Semestre - LABSI

Figura 5 – Versão 1 - Fluxograma interrupção ADC

Licenciatura em Engenharia Eletrotécnica e de Computadores Página 10 de 18


2017/18 – 3.º Ano – 1º Semestre - LABSI

Código
; EX02.C LINGUAGEM ASSEMBLY
;
; CREATED: 01/10/2017 21:31:01
; AUTHORS: ANDRE ROCHA 1130809@ISEP.IPP.PT
; DANIEL VIEIRA 1161365@ISEP.IPP.PT

.include "m328Pdef.inc"

.cseg
.org 0x0000
rjmp init
.org 0x0020 // VETOR DE INTERRUPCAO TIMER0 OVERFLOW
rjmp TCNT0_OVF
.org 0x002A // VETOR DE INTERRUPCAO ADC COMPLETO
rjmp ADC_DONE

// INICIALIZACOES
init:
ldi r16, low(RAMEND) // INICIALIZAR A STACK
out SPL, r16
ldi r16, high(RAMEND)
out SPH, r16

sbi DDRB, 5 // CONFIGURAR PB5 COMO SAIDA


ldi r16, 0 // INICIAR LED EM OFF
out PORTB, r16

cbi DDRC, 0 // CONFIGURAR PC0 (ADC0) COMO ENTRADA (APENAS PARA FICAR EVIDENTE)

sbi DDRD, 6 // CONFIGURAR PD6 (OC0A) COMO SAIDA


ldi r16, 0 // INICIAR LED EM OFF
out PORTD, r16

// TIMER 0
// F_PWM = 16E6 / (14 x 256) = 976,56 HZ
// T_PWM = 976,56^-1 = 1024 US
// 1024 US x 488 = 499,71 MS = ~500 MILISSEGUNDOS

ldi r16, 0b10000011 // MODO FAST PWM (MODE 3) CLEAR ON COMPARE MATCH
Out TCCR0A, r16

ldi r16, 0b00000011 // PSC = 64


Out TCCR0B, r16

ldi r16, 0 // INICIA A 0


out OCR0A, r16

ldi r16, 0b00000001 // ATIVAR INTERRUPCAO TIMER0 OVF (TOIE0)


sts TIMSK0, r16

// ADC0
ldi r16, 0b01100000 // AVCC, ALINHADO A ESQ, CANAL 0
sts ADMUX, r16

ldi r16, 0b000000111 // ADEN = 0, DIVISOR DE FREQ 128


sts ADCSRA, r16

ldi r17, 244 // CONTADOR PARA 250MS


ldi r18, 2 // CONTADOR PARA 2X244X1024US = 500MS
sei // ATIVAR INTERRUPCOES

// CODIGO MAIN
main:
jmp main

// INTERRUPCAO ADC0
ADC_DONE:
lds r16, ADCH // GUARDAR VALOR DO ADCH
out OCR0A, r16 // ALTERAR VALOR DO PWM

ldi r16, 0b000000111 // DESLIGAR ADC


sts ADCSRA, r16
reti

// INTERRUPCAO TC0
TCNT0_OVF:
ldi r16, 0b11001111 // LIGAR ADC E INICIAR A CONVERSAO
sts ADCSRA, r16

dec r17

Licenciatura em Engenharia Eletrotécnica e de Computadores Página 11 de 18


2017/18 – 3.º Ano – 1º Semestre - LABSI

breq tcnt // SE R17 = 0, REPOE R17 E DECREMENTA R18


reti // VOLTA PARA O CICLO

// CONTADOR DE TEMPO
tcnt:
ldi r17, 244 // REINICIAR VALOR CONTADOR R17
dec r18
breq toggle // SE R18 = 0, FAZ TOGGLE AO LED
reti // CASO CONTRARIO VOLTA AO CICLO

// FAZER TOGGLE AO LED


toggle:
ldi r20, 0b00100000
ldi r18, 2
in r19, PORTB // GUARDAR VALOR DO ESTADO DE PORTB
andi r19, 0b00100000 // ISOLAR PB5
eor r20, r19
out PORTB, r20 // TOGGLE LED
reti

Licenciatura em Engenharia Eletrotécnica e de Computadores Página 12 de 18


2017/18 – 3.º Ano – 1º Semestre - LABSI

Linguagem C
Fluxogramas

Figura 6 – Versão 2 - Fluxograma do programa principal

Figura 7 – Versão 2 - Fluxograma da interrupçãoTC0

Licenciatura em Engenharia Eletrotécnica e de Computadores Página 13 de 18


2017/18 – 3.º Ano – 1º Semestre - LABSI

Figura 8 – Versão 2 - Fluxograma da interrupção ADC

Licenciatura em Engenharia Eletrotécnica e de Computadores Página 14 de 18


2017/18 – 3.º Ano – 1º Semestre - LABSI

Código
/*
EX02.C LINGUAGEM C

CREATED: 01/10/2017 15:35:13


AUTHORS: ANDRE ROCHA 1130809@ISEP.IPP.PT
DANIEL VIEIRA 1161365@ISEP.IPP.PT
*/

// CONSTANTES
#define LED1 32 // LED 1HZ
#define LED2 64 // LED PWM

// BIBLIOTECAS
#include <avr/io.h>
#include <avr/interrupt.h>

// VARIAVEIS
volatile unsigned int ctd_500ms = 488; // VARIAVEL PARA CONTAR 500MS

// PROTOTIPOS DE FUNCOES
void init(void);

int main(void)
{
init();
while (1);
}

ISR (TIMER0_OVF_vect)
{
ctd_500ms--;

if (ctd_500ms == 0)
{

PORTB ^= LED1; // INVERTE O BIT PB5


ctd_500ms = 500; // REINICIAR VALOR DO CONTADOR
}

ADCSRA |= (1 << ADEN) | (1 << ADIE); // LIGAR ADC


ADCSRA |= (1 << ADSC); // INICIAR CONVERSAO ADC
}

// FAZER INTERRUPCAO ADC ALTERAR PWM


ISR (ADC_vect)
{
OCR0A = ADCH; // ALTERAR PWM
ADCSRA &= ADEN; // DESLIGAR ADC (ADEN = 7 = 0b00000111)
}

void init(void)
{
DDRB = LED1; // DEFINIR O PB5 COMO SAIDA
PORTB = 0; // INICIALIZAR O LED1 COMO DESLIGADO

DDRC = 0; // PC0 COMO ENTRADA

DDRD = LED2; // DEFINIR O PD6 (OC0A) COMO SAÍDA


PORTD = 0; // INICIALIZAR O LED2 COMO DESLIGADO

// FAST PWM, OC0A ON


TCCR0A |= (1 << COM0A1) | (0 << COM0A0) | (1 << WGM01) | (1 << WGM00);
// PSC64
// T = (PSC * 256) / 16x10E6 = 1 MS
// 500 X 10E-3 = 500 MILISEGUNDOS
TCCR0B |= (0 << WGM02) | (0 << CS02) | (1 << CS01) | (1 << CS00);

OCR0A = 0; // INICIAR DESLIGADO


TIMSK0 |= (1 << TOIE0); // ATIVA INT PARA TIMER0 OVF

// CONFIGURACAO DO ADC
// AVCC, ALINHADO A ESQ, CANAL 0
ADMUX |= (1<<REFS0) | (1<<ADLAR);
// ADEN = 0, DIVISOR DE FREQ 128
ADCSRA |= (0<<ADEN)|(1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2);

sei(); // ATIVAR INTERRUPCOES


}

Licenciatura em Engenharia Eletrotécnica e de Computadores Página 15 de 18


2017/18 – 3.º Ano – 1º Semestre - LABSI

Conclusão
A implementação do sistema de sensores e atuadores impôs que fossem avaliadas várias
possibilidades para a sua execução, sendo que se conclui que a opção de utilizar apenas o
Timer TC0 para gerar a base tempo de funcionamento do programa, bem como para gerar a
onda quadrada de largura variável (PWM), se revelou acertada. Por um lado, são poupados
recursos, uma vez que se utilizou apenas um temporizador. Por outro, o código desenvolvido
tornou-se bastante simples e intuitivo.

A utilização de interrupções externas, para a contagem do tempo e para o fim de conversão,


permitiu que o tempo gasto nas instruções das mesmas seja bastante curto, minimizando,
desta forma, os eventuais congestionamentos do programa principal. É certo que, no código
desenvolvido, este se resume a um ciclo infinito, sem produção de qualquer ação. Porém, este
trabalho será exemplificativo de programas mais complexos, o que justifica a análise
desenvolvida na procura da sua otimização.

O processo de aquisição de sinal, neste caso tratando-se de conversão de sinal analógico em


digital, para interação com um sistema de atuadores, exemplificado pelo LED, será da maior
pertinência no contexto do projeto de máquinas, dada a sua massiva implementação em
contexto prático. Assim, este trabalho, ainda que aparentemente de simples execução,
permite, do ponto de vista do seu estudo, trabalhar as diversas competências essenciais num
projetista de sistemas.

Uma dessas será a importância de avaliar a evolução do programa em termos temporais,


sendo exemplo disso o tempo que o microcontrolador demora para realizar a conversão AD.
No caso em análise, revelou-se interessante verificar que o referido tempo ocupa grande parte
do tempo de execução, sendo da ordem dos 205,50𝜇𝑠. Para além do erro inerente à
configuração do Timer, este foi devidamente acautelado no tempo base de programa, uma vez
que seria fundamental a base de tempo da interrupção de overflow ser suficiente para que
conseguisse obter a leitura e consequente alteração da razão cíclica da onda gerada para o LED
(PWM). A frequência utilizada, de aproximadamente 976,56𝐻𝑧, apresenta-se como, pelo
menos, quatro vezes superior ao necessário, tendo uma boa margem de segurança. Numa
eventual evolução do sistema, esta teria que ser reavaliada de forma a manter a premissa
acima referida.

Considerando que uma parte deste trabalho (geração de onda quadrada a 1𝐻𝑧 para o LED)
seria semelhante ao trabalho anterior e, dada a simplicidade da utilização do AD, em termos
da utilização das linguagens Assembly e C, não houve diferenças significativas. Nesse sentido, o
código desenvolvido aproveita essa base, sendo bastante semelhante ao anteriormente
apresentado, apenas acrescendo o controlo da leitura do AD e da saída do atuador.

Licenciatura em Engenharia Eletrotécnica e de Computadores Página 16 de 18


2017/18 – 3.º Ano – 1º Semestre - LABSI

Licenciatura em Engenharia Eletrotécnica e de Computadores Página 17 de 18


2017/18 – 3.º Ano – 1º Semestre - LABSI

Bibliografia
LABSI – Nuno Dias, Eletrónica Geral;

LABSI – Nuno Dias, Sensores;

SDIG2 – Lino Figueiredo, Apontamentos teóricos;

ATMEL – Atmega328/P Datasheet;

https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard.

Licenciatura em Engenharia Eletrotécnica e de Computadores Página 18 de 18

Você também pode gostar