Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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.
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.
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).
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.
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