SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
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

Semelhante a Comunicação Serial Síncrona Microcontroladores

Webinar Gravado: Um Estudo sobre a I2C e o Futuro com a I3C
Webinar Gravado: Um Estudo sobre a I2C e o Futuro com a I3CWebinar Gravado: Um Estudo sobre a I2C e o Futuro com a I3C
Webinar Gravado: Um Estudo sobre a I2C e o Futuro com a I3CEmbarcados
 
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02Cláudio Alves
 
Microcontroladores pic ling c unicamp
Microcontroladores pic ling c unicampMicrocontroladores pic ling c unicamp
Microcontroladores pic ling c unicampFrancisco Fambrini
 
Arduino Hack Day por Vinicius Senger
Arduino Hack Day por Vinicius SengerArduino Hack Day por Vinicius Senger
Arduino Hack Day por Vinicius SengerGlobalcode
 
Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PC
Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PCFrequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PC
Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PCPaulo Duarte
 
Fc51 guia de programação inversores danfoss
Fc51 guia de programação inversores danfossFc51 guia de programação inversores danfoss
Fc51 guia de programação inversores danfossClaudio Arkan
 
Microcontroladores PIC.pptx
Microcontroladores PIC.pptxMicrocontroladores PIC.pptx
Microcontroladores PIC.pptxfmtpereira
 
Guia Geral Automação
Guia Geral AutomaçãoGuia Geral Automação
Guia Geral AutomaçãoDIEGO323752
 
Manual do Terminal Inteligente TI 4245 Intelbras - LojaTotalseg.com.br
Manual do Terminal Inteligente TI 4245 Intelbras - LojaTotalseg.com.brManual do Terminal Inteligente TI 4245 Intelbras - LojaTotalseg.com.br
Manual do Terminal Inteligente TI 4245 Intelbras - LojaTotalseg.com.brLojaTotalseg
 
Controle de protótipo movimentado por liga de memória de forma (sma) pelo pc,...
Controle de protótipo movimentado por liga de memória de forma (sma) pelo pc,...Controle de protótipo movimentado por liga de memória de forma (sma) pelo pc,...
Controle de protótipo movimentado por liga de memória de forma (sma) pelo pc,...fesaab
 
Clp varios modelos
Clp varios modelosClp varios modelos
Clp varios modelosdetectfelix
 
Clp varios modelos
Clp varios modelosClp varios modelos
Clp varios modelosdetectfelix
 
UFCD-6072-Microcontroladores-Registos.pptx
UFCD-6072-Microcontroladores-Registos.pptxUFCD-6072-Microcontroladores-Registos.pptx
UFCD-6072-Microcontroladores-Registos.pptxcentroclinicosalus
 

Semelhante a Comunicação Serial Síncrona Microcontroladores (20)

Basico de protocolos
Basico de protocolosBasico de protocolos
Basico de protocolos
 
Webinar Gravado: Um Estudo sobre a I2C e o Futuro com a I3C
Webinar Gravado: Um Estudo sobre a I2C e o Futuro com a I3CWebinar Gravado: Um Estudo sobre a I2C e o Futuro com a I3C
Webinar Gravado: Um Estudo sobre a I2C e o Futuro com a I3C
 
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
 
Microcontroladores pic ling c unicamp
Microcontroladores pic ling c unicampMicrocontroladores pic ling c unicamp
Microcontroladores pic ling c unicamp
 
Arduino Hack Day por Vinicius Senger
Arduino Hack Day por Vinicius SengerArduino Hack Day por Vinicius Senger
Arduino Hack Day por Vinicius Senger
 
Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PC
Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PCFrequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PC
Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PC
 
Tcpip v2 sessao_4
Tcpip v2 sessao_4Tcpip v2 sessao_4
Tcpip v2 sessao_4
 
Pic aula1
Pic   aula1Pic   aula1
Pic aula1
 
Mini curso arduino
Mini curso arduinoMini curso arduino
Mini curso arduino
 
Fc51 guia de programação inversores danfoss
Fc51 guia de programação inversores danfossFc51 guia de programação inversores danfoss
Fc51 guia de programação inversores danfoss
 
Microcontroladores PIC.pptx
Microcontroladores PIC.pptxMicrocontroladores PIC.pptx
Microcontroladores PIC.pptx
 
Pisca 2 leds
Pisca 2  ledsPisca 2  leds
Pisca 2 leds
 
Roteiro exp9
Roteiro exp9Roteiro exp9
Roteiro exp9
 
Guia Geral Automação
Guia Geral AutomaçãoGuia Geral Automação
Guia Geral Automação
 
Manual do Terminal Inteligente TI 4245 Intelbras - LojaTotalseg.com.br
Manual do Terminal Inteligente TI 4245 Intelbras - LojaTotalseg.com.brManual do Terminal Inteligente TI 4245 Intelbras - LojaTotalseg.com.br
Manual do Terminal Inteligente TI 4245 Intelbras - LojaTotalseg.com.br
 
Controle de protótipo movimentado por liga de memória de forma (sma) pelo pc,...
Controle de protótipo movimentado por liga de memória de forma (sma) pelo pc,...Controle de protótipo movimentado por liga de memória de forma (sma) pelo pc,...
Controle de protótipo movimentado por liga de memória de forma (sma) pelo pc,...
 
Clp varios modelos
Clp varios modelosClp varios modelos
Clp varios modelos
 
Clp varios modelos
Clp varios modelosClp varios modelos
Clp varios modelos
 
UFCD-6072-Microcontroladores-Registos.pptx
UFCD-6072-Microcontroladores-Registos.pptxUFCD-6072-Microcontroladores-Registos.pptx
UFCD-6072-Microcontroladores-Registos.pptx
 
PAINEL DE TELEMETRIA PT5430
PAINEL DE TELEMETRIA PT5430PAINEL DE TELEMETRIA PT5430
PAINEL DE TELEMETRIA PT5430
 

Último

Apresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPMApresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPMdiminutcasamentos
 
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docxTRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docxFlvioDadinhoNNhamizi
 
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptxVagner Soares da Costa
 
Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3filiperigueira1
 
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdfPROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdfdanielemarques481
 
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptxVagner Soares da Costa
 
Tipos de Cargas - Conhecendo suas Características e Classificações.pdf
Tipos de Cargas - Conhecendo suas Características e Classificações.pdfTipos de Cargas - Conhecendo suas Características e Classificações.pdf
Tipos de Cargas - Conhecendo suas Características e Classificações.pdfMarcos Boaventura
 

Último (7)

Apresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPMApresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPM
 
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docxTRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
 
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
 
Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3
 
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdfPROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
 
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
 
Tipos de Cargas - Conhecendo suas Características e Classificações.pdf
Tipos de Cargas - Conhecendo suas Características e Classificações.pdfTipos de Cargas - Conhecendo suas Características e Classificações.pdf
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
  • 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); }}