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
Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
Comunicação Serial
Síncrona
(SPI e TWI)
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).
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.
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.
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
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;
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);
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;
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.
Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
Funcionamento da interface TWI
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;
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
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
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
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
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;
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
Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
EXEMPLO:
Realizar a comunicação TWI com o CI PCF8574:
Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
EXEMPLO:
#define F_CPU 16000000UL
#define F_SCL 100000L
#include <avr/io.h>
#include <util/delay.h>
#define SDA DDC4
#define SCL DDC5
#define TWI_START (1<<TWINT)+(1<<TWSTA)+(1<<TWEN)
#define TWI_STOP (1<<TWINT)+(1<<TWSTO)+(1<<TWEN)
#define TWI_ACK (1<<TWINT)+(1<<TWEA)+(1<<TWEN)
#define TWI_NACK (1<<TWINT)+(1<<TWEN)
#define TWI_SEND (1<<TWINT)+(1<<TWEN)
#define TWI_RDY (TWCR & (1<<TWINT))
#define TWI_STATUS (TWSR & 0xF8)
#define START_ANSW 0x08
#define MT_SLA_ACK 0x18
#define MT_DATA_ACK 0x28
#define TW_REP_START 0x10
#define TWI_READ 1
#define TWI_WRITE 0
Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
void twi_init()
{
TWSR=0; // configura divisor de freq. para 1.
TWBR = ((F_CPU/F_SCL)-16)/2; // define a frequencia do TWI
}
uint8_t twi_start()
{
TWCR=TWI_START;
while(!TWI_RDY);
if(TWI_STATUS != START_ANSW)
return 1;
return 0;
}
void twi_stop()
{
TWCR = TWI_STOP;
while(TWCR & (1<<TWSTO));
}
Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
uint8_t twi_slaveaddr(uint8_t addr, uint8_t rw)
// addr = endereco do dispositivo slave
// rw = operacao: 0=escrita, 1=leitura
{
TWDR = (addr<<1)+rw;
TWCR = TWI_SEND;
while(!TWI_RDY);
if(TWI_STATUS != MT_SLA_ACK)
return 1;
return 0;
}
uint8_t twisendData(uint8_t dado)
{
TWDR = dado;
TWCR = TWI_SEND;
while(!TWI_RDY);
if(TWI_STATUS != MT_DATA_ACK)
return 1;
return 0;
}
Comunicação Serial Síncrona
EL08D – Microcontroladores 2
Prof. Gabriel Kovalhuk 2020/1
uint8_t twi_getNack()
{
TWCR = TWI_NACK;
while(!TWI_RDY);
return TWDR;
}
int main(void)
{
uint8_t dado=0x01, dd = 1;
DDRC = (1<<SDA) + (1<<SCL);
twi_init();
while (1)
{
twi_start();
twi_slaveaddr(0x20, TWI_WRITE);
twisendData(dado);
twi_stop();
if(dado == 0x80)
dd = -1;
if(dado == 0x01)
dd = 1;
dado = (dd == 1)? dado * 2: dado / 2;
_delay_ms(500);
}}

Mais conteúdo relacionado

PDF
Comunicação serial
DOCX
Comunicação i2 c
RTF
Protocolos de comunicação
ODP
Uart[3]
PDF
Microcontroladores pic ling c unicamp
PDF
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
PDF
Roteiro exp9
Comunicação serial
Comunicação i2 c
Protocolos de comunicação
Uart[3]
Microcontroladores pic ling c unicamp
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Roteiro exp9

Último (20)

PPTX
1_Integração DE SEGURANÇA TRABALHO.2.pptx
PPTX
Apresentação Estatística - Analise Multivariada
PPTX
ENGENHARIA DE GESTÃO LOGÍSTICA E DOS TRANSPORTES.pptx
PPT
aula biologia do solo na agronomia introdução
PDF
aula 5 - Curvas horizontais circulares.pdf
PDF
Artigo sobre industria de petroleo em pdf
PPTX
NR35 - Treinamento Aurea Medic - altura.pptx
PPTX
Aplicacion de model de markowitzz de optimizaion
PDF
Aspectos Tecnicos e Legais da Insalubridade.pdf
PPTX
Slide_Atualizações dos Protocolos de BLS e ACLS.pptx
PPT
Aula Ciência e Tecnologia dos Materiais - Metais e ligas não ferrosas
PPTX
APOSTILA DE AGENTE DE INSPEÇÃONBR 5426.pptx
PPT
1 - Serviços em Eletricidade - 1° SOS RCP DEA - Rev a.ppt
PPTX
Reciclagem do Munck.pptxdddddddddddddddd
DOCX
Cópia de Ordem de Serviço NR 01- Leonardo.docx
PPT
aula sobre biologia celular - introdução.ppt
PDF
07-Equipamento+de+protecao+individual+contra+queda+de+altura+Trava-queda+desl...
PPTX
1 Conceitos-de-Gestao-da-Qualidaade.pptx
PPTX
Panorama - Saneamento Rural PE - 21.05.25.pptx
PDF
Aula 7 - Choque Eletrico e Queimaduras.pdf.pdf
1_Integração DE SEGURANÇA TRABALHO.2.pptx
Apresentação Estatística - Analise Multivariada
ENGENHARIA DE GESTÃO LOGÍSTICA E DOS TRANSPORTES.pptx
aula biologia do solo na agronomia introdução
aula 5 - Curvas horizontais circulares.pdf
Artigo sobre industria de petroleo em pdf
NR35 - Treinamento Aurea Medic - altura.pptx
Aplicacion de model de markowitzz de optimizaion
Aspectos Tecnicos e Legais da Insalubridade.pdf
Slide_Atualizações dos Protocolos de BLS e ACLS.pptx
Aula Ciência e Tecnologia dos Materiais - Metais e ligas não ferrosas
APOSTILA DE AGENTE DE INSPEÇÃONBR 5426.pptx
1 - Serviços em Eletricidade - 1° SOS RCP DEA - Rev a.ppt
Reciclagem do Munck.pptxdddddddddddddddd
Cópia de Ordem de Serviço NR 01- Leonardo.docx
aula sobre biologia celular - introdução.ppt
07-Equipamento+de+protecao+individual+contra+queda+de+altura+Trava-queda+desl...
1 Conceitos-de-Gestao-da-Qualidaade.pptx
Panorama - Saneamento Rural PE - 21.05.25.pptx
Aula 7 - Choque Eletrico e Queimaduras.pdf.pdf
Anúncio
Anúncio

gk_2021_01_Aula07-twi.pdf

  • 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
  • 2. Comunicação Serial Síncrona EL08D – Microcontroladores 2 Prof. Gabriel Kovalhuk 2020/1 Comunicação Serial Síncrona (SPI e TWI)
  • 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.
  • 11. Comunicação Serial Síncrona EL08D – Microcontroladores 2 Prof. Gabriel Kovalhuk 2020/1 Funcionamento da interface TWI
  • 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:
  • 20. Comunicação Serial Síncrona EL08D – Microcontroladores 2 Prof. Gabriel Kovalhuk 2020/1 EXEMPLO: #define F_CPU 16000000UL #define F_SCL 100000L #include <avr/io.h> #include <util/delay.h> #define SDA DDC4 #define SCL DDC5 #define TWI_START (1<<TWINT)+(1<<TWSTA)+(1<<TWEN) #define TWI_STOP (1<<TWINT)+(1<<TWSTO)+(1<<TWEN) #define TWI_ACK (1<<TWINT)+(1<<TWEA)+(1<<TWEN) #define TWI_NACK (1<<TWINT)+(1<<TWEN) #define TWI_SEND (1<<TWINT)+(1<<TWEN) #define TWI_RDY (TWCR & (1<<TWINT)) #define TWI_STATUS (TWSR & 0xF8) #define START_ANSW 0x08 #define MT_SLA_ACK 0x18 #define MT_DATA_ACK 0x28 #define TW_REP_START 0x10 #define TWI_READ 1 #define TWI_WRITE 0
  • 21. Comunicação Serial Síncrona EL08D – Microcontroladores 2 Prof. Gabriel Kovalhuk 2020/1 void twi_init() { TWSR=0; // configura divisor de freq. para 1. TWBR = ((F_CPU/F_SCL)-16)/2; // define a frequencia do TWI } uint8_t twi_start() { TWCR=TWI_START; while(!TWI_RDY); if(TWI_STATUS != START_ANSW) return 1; return 0; } void twi_stop() { TWCR = TWI_STOP; while(TWCR & (1<<TWSTO)); }
  • 22. Comunicação Serial Síncrona EL08D – Microcontroladores 2 Prof. Gabriel Kovalhuk 2020/1 uint8_t twi_slaveaddr(uint8_t addr, uint8_t rw) // addr = endereco do dispositivo slave // rw = operacao: 0=escrita, 1=leitura { TWDR = (addr<<1)+rw; TWCR = TWI_SEND; while(!TWI_RDY); if(TWI_STATUS != MT_SLA_ACK) return 1; return 0; } uint8_t twisendData(uint8_t dado) { TWDR = dado; TWCR = TWI_SEND; while(!TWI_RDY); if(TWI_STATUS != MT_DATA_ACK) return 1; return 0; }
  • 23. Comunicação Serial Síncrona EL08D – Microcontroladores 2 Prof. Gabriel Kovalhuk 2020/1 uint8_t twi_getNack() { TWCR = TWI_NACK; while(!TWI_RDY); return TWDR; } int main(void) { uint8_t dado=0x01, dd = 1; DDRC = (1<<SDA) + (1<<SCL); twi_init(); while (1) { twi_start(); twi_slaveaddr(0x20, TWI_WRITE); twisendData(dado); twi_stop(); if(dado == 0x80) dd = -1; if(dado == 0x01) dd = 1; dado = (dd == 1)? dado * 2: dado / 2; _delay_ms(500); }}