O documento descreve a comunicação serial síncrona I2C (TWI) entre dispositivos mestre e escravo, incluindo seu funcionamento, registradores e exemplo de código para comunicação com um CI PCF8574 usando um microcontrolador ATmega328P.
Tipos de Cargas - Conhecendo suas Características e Classificações.pdf
Comunicação Serial Síncrona Microcontroladores
1. Comunicação Serial Síncrona
Microcontroladores 2
EL08D
Turma M12
Prof. Gabriel Kovalhuk
E-mail: kovalhuk@utfpr.edu.br
Site: http://paginapessoal.utfpr.edu.br/kovalhuk
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
3. Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
I2C (Inter Inter Circuit) ou TWI (Two Wire Interface)
• É uma arquitetura Mestre-Escravo (Master-Slave);
• permite a comunicação entre um dispositivo mestre e vários
dispositivos escravo;
• A comunicação é sempre half-duplex, ou seja, apenas um
dispositivo pode transmitir a cada instante;
• O barramento da interface TWI é composta de apenas dois sinais:
SDA (dados) e SCL(clock).
4. Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
I2C (Inter Inter Circuit) ou TWI (Two Wire Interface)
• Estes dois sinais trafegam em dois fios onde existe um resistor de
pull-up para cada sinal.
• Isto garante que os sinais estarão sempre em nível lógico alto
quando não houver comunicação.
5. Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
• Para identificar com qual escravo o mestre vai se comunicar, existe
no frame de comunicação um campo de endereço de 7 bits;
• Porém, apenas 112 escravos podem ser usados, existem 16
endereços reservados;
• Cada tipo de dispositivo escravo possui um endereço próprio,
definido no processo de fabricação;
• Muitos dispositivos possuem um endereço base fixo e alguns bits
para modificar este endereço base;
SDA P0
SCL P1
P2
INT P3
P4
A2 P5
A1 P6
A0 A7
PCF8574
Pinos
de
Entrada
e
Saída
Pinos de
Comunicação
Pino de
Interrupção
Pinos de
Definição do
Endereço
• No PCF8574 o endereço base é 0x20.
Cada CI pode ser configurado para ter
um endereço entre 0x20 e 0x27, através
dos pinos A2:0.
• No PCF8574A 0 endereço base é 0x38.
6. Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
• Exemplo:
SDA P0
SCL P1
P2
INT P3
P4
A2 P5
A1 P6
A0 A7
PCF8574A
+Vcc
End: 0x39
SDA P0
SCL P1
P2
INT P3
P4
A2 P5
A1 P6
A0 A7
PCF8574
+Vcc
End: 0x21
SDA P0
SCL P1
P2
INT P3
P4
A2 P5
A1 P6
A0 A7
PCF8574
End: 0x20
+Vcc
SDA
SCL
ATMEGA328
+Vcc
2 x 4k7W
8 x 10kW
8 x 470W
7. Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
Exemplos de dispositivos com interface TWI
• DS1307: relógio de tempo real;
• PCA8565A: : relógio de tempo real;
• AD5241/AD5242: potenciômetro digital;
• 24Cxx: memória EEPRM;
• LM73: sensor de temperatura;
8. Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
Funcionamento da interface TWI
• A comunicação sempre é iniciada e finalizada pelo mestre;
• O mestre é responsável por gerar o sinal de clock e enviar o
endereço para identificar o escravo;
• Para iniciar a comunicação, o mestre coloca a linha SDA em nível
baixo e, logo em seguida, ativa o clock (SCL)
• Após iniciar a comunicação, o mestre envia os 7 bits do endereço e
um oitavo bit indicando a operação a ser realizada (leitura ou
escrita);
9. Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
Funcionamento da interface TWI
• Após enviar o endereço e a operação, o mestre espera um retorno
do escravo;
• Se existir um escravo com o endereço enviado pelo mestre, este
escravo envia um bit em nível baixo para o mestre. Isto é chamado
de ACK (acknolegment);
• Se não existir um escravo com o endereço enviado pelo mestre, a
linha SDA ficará em nível lógico alto (isto é chamado de NACK –
not acknolegment) e o mestre saberá que o escravo não existe;
10. Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
Funcionamento da interface TWI
• Após o mestre receber o ACK do escravo, o dado é transmitido,
conforme a operação:
• se for escrita (bit=0), o mestre envia os 8 bits de dados para o
escravo;
• se for leitura (bit=1) o escravo envia os 8 bits de dados para o
mestre;
• Ao final dos 8 bits, um nono bit é enviado sinalizando com um sinal
de ACK, se tiver mais dados a serem transmitidos ou um sinal de
NACK avisando que a comunicação terminou;
• Por fim, o mestre mantém a linha em nível baixo por mais um
período de clock encerrando a comunicação.
12. Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
Características da interface TWI no ATMEGA328
• Pode ser configurado como mestre ou como escravo;
• Se for escravo, permite configurar o endereço do escravo;
• O reconhecimento do endereço, quando configurado como
escravo, faz com que a CPU saia do modo de baixo consumo;
• suporta o modo multi-mestre com arbitragem de uso do
barramento;
• permite transferências numa taxa de até 400kHz;
• compatível com o protocolo I2C da Philips;
13. Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
Características da interface TWI no ATMEGA328
• Diagrama em blocos da interface TWi no ATMEGA328:
Fonte ATEMEGA328 Datasheet
14. Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
Registradores da interface TWI
• Bit 7:0 – TWBR7:0 (TWI Baud Rate): Seleciona o fator de divisão do gerador de
taxa de transmissão (gerador do SCL).
• Bit 7:0: É o registrador de dados da interface TWI.
TWBR – TWI Bit Rate Register:
BIT 7 6 5 4 3 2 1 0
function
Read/Write R/W R/W R/W R/W R/W R/W R;W R/W
Initial Value 0 0 0 0 0 0 0 0
TWDR – TWI Data Register:
BIT 7 6 5 4 3 2 1 0
function MSB LSB
Read/Write R/W R/W R/W R/W R/W R/W R;W R/W
Initial Value 0 0 0 0 0 0 0 0
15. Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
Registradores da interface TWI
• Bit 7:0: Define o endereço, quando configurado como escravo.
TWAR – TWI Address Register:
BIT 7 6 5 4 3 2 1 0
function MSB LSB
Read/Write R/W R/W R/W R/W R/W R/W R;W R/W
Initial Value 0 0 0 0 0 0 0 0
16. Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
Registradores da interface TWI
• Bit 7 – TWINT (TWI Interrupt Flag): este bit é setado por hardware quando uma
tarefa é terminada. Se o bit TWIE do registrador TWCR e o bit I do registrador SREG
estiverem setados, o programa é desviado para a função de interrupção (ISR) do
TWI. Este bit deve ser zerado por software, escrevendo 1 nele, mesmo que seja
usada uma função de interrupção.
• Bit 6 – TWEA (TWI Enable Ackoledge): este bit, quando setado permite a geração
do pulso de ACK;
TWCR – TWI Control Register:
BIT 7 6 5 4 3 2 1 0
function TWINT TWEA TWSTA TWSTO TWWC TWEN - TWIE
Read/Write R R R R R R R R/W
Initial Value 0 0 0 0 0 0 0 0
17. Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
• Bit 5 – TWSTA (TWI Start Condition Bit): este bit deve ser setado, na condição de
master para iniciar o processo de comunicação, ou seja, para gerar o start-bit. O
circuito verifica se o barramento está livre. Caso não esteja, fica esperando até que
ocorra uma condição de STOP. Este bit deve ser resetado depois que a condição de
START tiver sido transmitida;
• Bit 4 – TWSTO (TWI Stop Condition Bit): este bit deve ser setado, no modo
mestre para gerara condição de stop no barramento e é automaticamente resetado
após esta condição estiver terminada;
• Bit 3 – TWWC (TWI Write Collision Flag): este bit é setado quando se tenta
escrever no registrador TWDR quando o bit TWINT=0 e é resetado quando se
escreve no registrador TWDR quando o bit TWINT=1;
• Bit 2 – TWEN (TWI Enable): este bit, quando setado, habilita a interface TWI. Isto
reconfigura os pinos SDA (PC4) e SCL (PC5) para assumir as funções da interface
TWI;
• Bit 0 – TWIE (TWI Interrupr Enable): este bit, quando setado, habilita a interrupção
da interface TWI;
18. Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
Registradores da interface TWI
• Bit 7:3 – TWS7:3 (TWI Status): estes bits contém os códigos de status da interface
TWI. Estes códigos podem ser vistos no datasheet do ATMEGA328P.
• Bit 1:0 – TWPS1:0 (TWI Prescaler Select): selecionam a taxa de transferência de
dados conforme a tabela:
TWSR – TWI Status Register:
BIT 7 6 5 4 3 2 1 0
function TWS7 TWS6 TWS5 TWS4 TWS3 - TWPS1 TWPS0
Read/Write R R R R R R R/w R/W
Initial Value 0 0 0 0 0 0 0 0
TWPS1 TWPS0 Prescaler
0 0 1
0 1 4
1 0 16
1 1 64
19. Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
EXEMPLO:
Realizar a comunicação TWI com o CI PCF8574: