Você está na página 1de 41

Universidade do Mindelo

Automação e Controlo
Configurar pino de saída digital
Configurar pino de entrada digital

Pull-down

Pull-up
Configurar pino de entrada digital com pull-up interno
Entrada digital protegida por Optoacoplador
Saída Analógica (PWM)
Pulse Width Modulation –PWM–
Controlar um Servo (PWM)
Entrada Analógica (Tensão de referência interna 5V)

Obs: Se AREF estiver ligado, irá ser usado como referência, no matter what.
Tipos de comunicação entre dispositivos

Comunicação Paralela

Com a comunicação paralela consegue-se enviar vários bits ao mesmo tempo


a cada pulso do relógio.

Todavia requer barramento de dados com 8, 16 ou mais linhas!!!

É uma forma de comunicação simples, rápida e relativamente fácil de se


implementar mas requer muitas linhas I/O.
Tipos de comunicação entre dispositivos

Comunicação Série
Comunicação Série Síncrona – traz sempre um sinal de relógio juntamente com a(s) linha(s) de dado(s)
que se liga a todos os dispositivos do mesmo barramento. Se, por um lado, ter mais uma linha para fazer o
sinal de relógio pode ser considerado uma desvantagem, por outro, consegue-se as maiores velocidades
de transferência de dados. Exemplos de comunicações série síncronas: SPI e I2C.

Comunicação Série Assíncrona – é quando a transferência de dados se faz sem ajuda de um sinal de
relógio externo. Só requer 2 linhas de dados mas exige um esforço extra para se ter uma comunicação
fiável.

Se, numa comunicação série, pudermos enviar e receber dados ao mesmo tempo, dizemos que a
comunicação é full-duplex.
Se só for possível enviar ou receber dados de cada vez, dizemos que a comunicação é half-duplex.
Comunicações Série: 𝐔𝐀𝐑𝐓 –Universal Asynchronous Receiver/Transmitter–
É a forma mais simples de se ligar um MCU a um PC ou dois MCUs.

Em algumas aplicações, é a única chance de se estabelecer uma comunicação: dispositivos remotamente


ligados não poderiam ter um sinal de clock, por exemplo (transmissão por rádio ou infra-vermelhos).
TTL  RS232
Limitações da comunicação Serial (UART)

Sendo a porta Serial assíncrona (inexistência de clock), os dispositivos ligados entre si devem ter uma
velocidade de transferência de dados (baudrate) pré-definida e com pouca margem de erro, sob pena de
se perder pacotes de informação.

São requeridos, pelo menos, um start bit e um (ou dois) stop bit (e possivelmente, mais um parity bit) em
cada pacote, o que significa que a transmissão de 8 bits requer, no mínimo, um pacote de 10 bits, o que
diminui a velocidade de transferência.

A comunicação UART só aceita um número fixo de velocidades de transferência, a saber:


300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 74880, 115200, 230400 e 250000 bps [bits por segundo].
Implementação comunicação UART: Arduino  PC
SoftwareSerial (Arduino)
Comunicações Série: SPI –Serial Peripheral Integration–
Comunicaçõao SPI permite um único mestre em cada barramento (bus) de dados. O número permitido de escravos
só depende do número de pinos disponíveis no mestre para fazer o chip select.

Comunicação SPI é boa para comunicações de alta velocidade full-duplex (envio e recepção simultânea de dados),
suportando velocidades de transmissão até 10 MHz em alguns dispositivos. O hardware de suporte é um simples shift
register, possibilitando facilmente a implementação via software.
Limitações da comunicação SPI

A desvantagem mais óbvia é o número de pinos requeridos. Ligar um mestre a um único escravo requer 4 linhas e,
cada escravo adicional implicará usar mais um pino I/O do mestre para se fazer a linha do chip select.

Ter um número considerável de ligações, potenciado por um elevado número de escravos, é indesejável porque
dificultará o routing em placas de circuito impresso (PCBs).

Outra desvantagem poderá se o facto de um barramento só permitir a existência de um único mestre.

Devido à alta velocidade de transferência de dados, a comunicação SPI só pode ser usada para comunicações a curtas
distâncias.
Exemplo SPI
Exemplo SPI
Comunicações Série: 𝐈 𝟐 𝐂 –Inter Integrated Circuit –
É utilizada quando a distância entre os dispositivos é curta (normalmente, o transmissor e o receptor encontram-se na
mesma placa de circuito impresso).

A ligação é estabelecida através de 2 fios: uma para transmissão de dados e outro para sincronização (sinal de relógio)
e a velocidade de transmissão varia entre 100 kHz e 200 KHz.

Como mostrado na figura, um dispositivo é sempre o mestre (master). Ele activa um dispositivo escravo (slave) antes de
iniciar a comunicação e só pode comunicar com um escravo de cada vez.

Num barramento I2C podem coexistir até 1008 escravos e mais do que mestre, embora os mestres não podem
comunicar entre si e só um pode comunicar com os escravos de cada vez.

Por cada 8 bits enviados, é enviado um bit extra para “ACK/NACK”.


Cada barramento consiste em dois sinais: SCL e SDA. O sinal se clock é sempre gerado pelo mestre activo.

Alguns escravos forçam o sinal de clock para nível baixo para atrasar o envio de mais dados (para ter mais tempo de
tratar a informação recebida antes de receber mais). A isto chama-se “clock stretching”.

Drivers I2C trabalham em modo “open-drain”, isto é, só conseguem colocar o sinal em nível baixo e nunca no nível
alto. Assim evita-se a hipotética situação de um dispositivo tentar colocar uma linha no nível alto enquanto outro
tentaria colocar a mesma linha em nível baixo, eliminado assim o risco de danificar os drivers. Isso evita, também, a
dissipação excessiva de potência.

Cada linha possui resistências pull-up pra restaurar o sinal para nível alto quando nenhum dispositivo o estiver a
colocar em nível baixo. O valor dessas resistências não é fixo mas uma boa regra é usar uma de 4k7 e ajustá-lo se
necessário.

I2C é um protocolo bastante robusto e pode ser usado para fios curtos (2 a 3 metros). Para longas distâncias ou
muitos dispositivos, é melhor usar resistências de valor inferior.
Pelo facto dos dispositivos ligados não colocarem o sinal em nível alto, I2C permite alguma flexibilidade na ligação de
dispositivos com diferentes voltagens nos pinos I/O. Em geral, quando dois dispositivos tiverem níveis de voltagem
diferentes, o que se deve fazer é usar um circuito de “level shifting”. Todavia se a diferença de voltagem entre os
dispositivos for pequena , pode-se usar o truque de se ligar as resistências de pull-up à menor das voltagens. Isto só
funciona quando a menor voltagem dos dois dispositivos exceder a voltagem de entrada a nível alto do dispositivo de
maior voltagem; por exemplo ligar um arduino 5V a um acelerómetro 3,3V.
Exemplo I2C
Exemplo I2C
Shift Register

74HC595
Funções do Arduino: shiftOut( dataPin, clockPin, bitOrder, data);
Funções do Arduino: byte nomeVar = shiftIn( dataPin, clockPin, bitOrder);
Display 7 Segmentos
Display 7 Segmentos
LCD 16x2
RTC
RTC
Memória EEPROM (100000 ciclos escrita)

#include<EEPROM.h>
EEPROM.write( endereço, valor);
EEPROM.uptade( endereço, valor);
byte valor = EEPROM.read(endereço);
Delay e Timers

millis()
micros()
delay()
delayMicroseconds()
Interrupções

(FALLING, RISING, LOW, CHANGE) HIGH->DUE

Você também pode gostar