• Nenhum resultado encontrado

Módulos de Comunicação Série

N/A
N/A
Protected

Academic year: 2022

Share "Módulos de Comunicação Série"

Copied!
38
0
0

Texto

(1)

Módulos de Comunicação Série

O módulo EUSART - Enhanced Universal Synchronous Asynchronous Receiver Transmitter - Receptor/

Transmissor Síncrono/Assíncrono Série Avançado, é um periférico interno de comunicações I/O série. Tam- bém é conhecido como SCI - Serial Communications Interface - Interface de Comunicações Série.

Contém todos os geradores de relógio, “shift-registers” e registos de dados necessários para fazer uma emissão, ou recepção, de dados série, independentemente da execução do programa principal. Como o seu nome indica, aparte do uso do relógio para sincronização, este módulo também pode estabelecer comunicações assíncronas, o que o torna insubstituivel em algumas aplicações.

Como exemplo, no caso de ser difi cil, ou impossivel, de disponibilizar canais especiais de Relógio e Dados, ex.: controlo remoto por rádio ou infravermelhos, o módulo EUSART é uma solução bastante conveni- ente.

O sistema EUSART, dentro do PIC16F887, tem as seguintes características:

Transmissão/Recepção Assíncrona em Full-Duplex (envia e recebe ao mesmo tempo);

Tamanho de dados confi guravel entre 8 ou 9 bits;

Detecção de endereço no modo de 9 bits;

Detecção de erro, de registo de entrada já cheio;

Comunicação Hall-Duplex (ou envia, ou recebe) no modo Síncrono Mestre, ou Escravo.

(2)

Modo Assíncrono da EUSART

A EUSART transmite e recebe dados, usando um formato normalizado de “non-return-to-zero (NRZ)”, ou não-retorna-ao-zero. Como de pode ver na fi gura abaixo, este modo não usa sinal de relógio, enquanto os dados estão a ser transferidos:

EUSART em modo Assíncrono

Cada pacote de dados é transferido da seguinte maneira:

Quando parado, o pino de saída está no estado lógico 1;

Cada transmissão de dados começa com um bit START, que é sempre zero (0);

Cada pacote de dados tem 8 ou 9 bits de tamanho, onde o LSB é sempre o primeiro a ser transferido;

Cada transmissão de dados termina com um bit de STOP, que tem sempre estado lógico (1).

(3)

Transmissor Assíncrono da EUSART

Transmissor Assíncrono da EUSART

De maneira a possibilitar a transmissão de dados com o módulo EUSART, é necessário confi gurá-lo para trabalhar como transmissor. Ou seja, é necessário defi nir o estado dos seguintes bits:

TXEN = 1 - O transmissor da EUSART está ligado, activando este bit no registo TXSTA;

SYNC = 0 - A EUSART está confi gurada para funcionar em modo assíncrono, desactivando este bit do registo TXSTA;

SPEN = 1 - Activando este bit do registo RCSTA, a EUSART é activada e o pino TX/CK é automaticamente confi gurado como saída. Se este bit é simultaneamente usado para alguma função analógica, esta deve ser desactivada, limpando o bit correspondente no registo ANSEL.

O cerne do transmissor EUSART, é o “shift-register” TSR, que não é directamente acessivel pelo utilizador. De maneira a iniciar a transmissão, o módulo deve estar ligado, activando o bit TXEN. Os dados a enviar, devem ser escritos no registo TXREG, o que vai causar a seguinte sequência de eventos:

(4)

O byte é imediatamente transferido para o “shift-register” TSR;

O registo TXREG mantém-se vazio, o que é indicado pela fl ag TXIF do PIR1. Se o bit TXIE do registo PIE1 estiver activo, uma interrupção é gerada. De qualquer modo, quer a interrupção esteja activa, ou não, esta fl ag é sempre activada. Também, não pode ser apagada pelo sotware, mas é apagada quando se escreve para o TXREG;

A electrónica “empurra” os dados para o pino TX, ao mesmo ritmo do relógio interno: START bit ... dados ... STOP bit;

Quando o último bit abandona o TSR, o bit TRMT do registo TXSTA é automaticamente activado;

Se, entretanto, o TXREG recebeu um novo caracter, todo o procedimento é repetido imediatamente ao STOP bit do caracter anteriormente transmitido.

O envio de dados de 9 bits, é habilitado activando o bit TX9 do TXSTA. O bit TX9D do TXSTA é o nono MSB. Quando da transferência, o TX9D deverá ser escrito, antes de escrever para o TXREG. Todos os noves bits de dados serão transmitidos, assim que a escrita no TXREG estiver completa.

(5)

Receptor Assíncrono da EUSART

Receptor Assíncrono da EUSART

Para activar a recepção de dados, é necessário fazer o seguinte:

CREN = 1 - O receptor da EUSART é ligado, activando este bit no registo RCSTA;

SYNC = 0 - A EUSART está confi gurada para funcionar em modo assíncrono, desactivando este bit do registo TXSTA;

SPEN = 1 - Activando este bit do registo RCSTA, a EUSART é activada e o pino TX/CK é automaticamente confi gurado como saída. Se este bit é simultaneamente usado para alguma função analógica, esta deve ser desactivada, limpando o bit correspondente no registo ANSEL.

Quando estes passos forem concluidos, e o START bit detectado, os dados são transferidos para o shift-regis- ter RSR pelo pino RX. Quando o STOP bit fôr recebido, a seguinte ocorre:

(6)

Os dados são automaticamente transferidos para o RCREG, se vazio;

A fl ag RCIF é activada, e uma interrupção, se estiver habilitada pelo bit RCIE no PIE1, ocorre. De igual forma ao transmissor, a fl ag é limpa apenas quando se lê do RCREG. Não esquecer que é uma memória de recepção de dois bytes, o que permite receber dois caracteres simultaneamente;

Se o RCREG estiver ocupado, com os dois bytes e o shift-register detectar um STOP bit, o bit the Over- fl ow OERR vai ser activado. Neste caso, os dados que chegaram são perdidos, e o bit OERR deverá ser limpo pelo software. Tal é feito desactivando e activando o bit CREN. NOTA: não é possivel receber novos dados, enquanto o bit OERR estiver activo;

Se o STOP bit for zero, o bit FERR do RCSTA é activado, indicando erro na recepção;

Para receber dados com 9 bits, é necessário activar o bit RX9 no RCSTA.

Detecção de Erros na Recepção

Há dois tipos de erros que o microcontrolador pode detectar automaticamente. O primeiro é chamado de erro de Framing, e ocorre quando o receptor não detecta o STOP bit no tempo certo. Este erro é indicado pelo bit FERR do RCSTA.

Se este bit estiver activado, signifi ca que a última recepção de dados pode estar incorrecta.

É importante lembrar:

Um erro de Framing não gera uma interrupção por si próprio;

Se este bit estiver activo, os últimos dados têem erros;

Um erro de Framing, não impossibilita a recepção de dados;

O bit FERR é limpo, lendo os dados recebidos;

O bit FERR não pode ser limpo por software. Se necessário, pode ser limpo, desactivando o bit SPEN do RCSTA. Vai simultaneamente causar Reset de todo o sistema EUSART.

Outro tipo de erro, é chamado de “Overrun”. A memória de receoção pode conter dois caracteres. Um erro overrun vai ser gerado se o terceiro caracter é recebido. Simplesmente não há espaço para outro byte, e um error é inevitavel. Quando esta situação acontece, o bit OERR do RCSTA é activado. As consequências são as seguintes:

(7)

Os dados já recebidos, e armazenados na memória de recepção, podem ser normalmente lidos;

Nenhum byte adicional vai ser recebido, enquanto o bit OERR não for desactivado;

Este bit não é directamente acessivel. Para o limpar, é necessário desactivar o bit CREN do RCSTA, ou fazendo um Reset ao módulo EUSART, limpando o bit SPEN do TCSTA.

Recepção de dados de 9 bits

Além de receber dados de 8 bits, o sistema EUSART suporta recepção de dados com 9 bits.

No lado transmissor, o nono bit está “agarrado” ao byte original, mesmo antes do STOP bit. No lado receptor, quando o bit RX9 do RCSTA está activo, o nono bit vai ser automaticamente escrito no bit RX9D, do mesmo registo.

Quando este byte é recebido, o programador deve ter em atenção em como o vai ler. O nono bit deverá ser lido antes de ler os restantes 8 bits, pois se não o fi zer, o nono bit será automaticamente limpo.

Recepção de dados a 9 bits

(8)

Detecção de endereços

Quando o bit ADDEN do registo RCSTA está activo, o módulo EUSART está habilitado a receber dados de 9 bits, onde todos os dados de 8 bits serão ignorados. Embora pareça uma restrição, este modo permite a comunicação série entre vários microcontroladores.

O principio de operação é simples. O Mestre envia 9 bits, que representa o endereço de um microcontrolador.

Todos os microcontroladores Escravos que partilham a linha de transmissão, recebem estes dados. Todos os escravos deverão ter o bit ADDEN activado, para permitir a detecção de endereço.

Depois da recepção, cada Escravo verifi ca se esse endereço é o seu. O software, depois de confi rmar o endereço, deverá desactivar a detecção de endereço, limpando o bit ADDEN. O dispositivo Mestre continua o envio de dados de 8 bits. Todos os dados passando pela linha de transmissão, vão ser recebidos e reconhecidos apenas pelo Escravo já correctamente endereçado. Após receber o último byte, o Escravo deverá activar o bit AD- DEN.

de maneira a poder detectar outra vez os endereços.

(9)

Registo TXSTA

CSRC - Bit de selecção da origem do relógio. É apenas usado no modo síncrono.

1 - modo Mestre. Clock é gerado internamente pelo gerador de Baud Rate;

0 - modo Escravo. Clock é gerado por uma fonte externa.

TX9 - Bit de activação de transmissão de 9 bits 1 - Transmissão a 9 bits

0 - Transmissão a 8 bits

TXEN - Bit de activação da Transmissão 1 - Transmissão activa

0 - Transmissão desligada

SYNC - Bit de selecção do modo da EUSART 1 - EUSART funciona no modo síncrono 0 - EUSART funciona no modo assíncrono

SENDB - Bit de envio de caracter de “break”. Apenas usado em modo assíncrono, e apenas no caso de desco- brir o standard do barramento LIN

1 - O envio do caracter Break activado 0 - O envio do caracter Break terminou

BRGH - Bit de selecção de High Baud Rate (alta velocidade de relógio) no modo assíncrono. Não afecta a EUSART no modo síncrono.

(10)

1 - EUSART funciona em alta velocidade 0 - EUSART funciona em baixa velocidade

TRMT - Bit de estado do Shift-Register de Transmissão 1 - Registo TSR está vazio

0 - Registo TSR está cheio

TX9D - Nono bit de dados transmitidos. Pode ser usado para endereço ou para bit de paridade.

Registo RCSTA

SPEN - Bit de activação da porta Série

1 - Porta Série activa. Os pinos RX/DT e TX/CK são automaticamente confi gurados como entrada e saída, respectivamente

0 - Porta Série desactivada

RX9 - Bit de activação da Recepção de 9 bits 1 - Recepção de 9 bits

0 - Recepção de 8 bits

SREN - Bit de activação de Recepção singular. Usado apenas em modo síncrono, quando o microcontrolador funciona como Mestre

1 - Recepção singular activada 0 - Recepção singular desactivada

(11)

CREN - Bit de activação de Recepção contínua Modo Assíncrono:

1 - Recepção contínua activada 0 - Recepção contínua desactivada Modo Síncrono

1 - Recepção contínua activada, até o bit CREN ser limpo 0 - Recepção contínua desactivada

ADDEN - Bit de activação de Detecção de Endereço 1 - Activa a detecção de endereço, com recepção a 9 bits

0 - Desactiva a detecção de endereço, e o nono bit pode ser usado como bit de paridade

FERR - Bit de erro de “Framing”

1 - Na recepção, erro de Framing detectado 0 - Sem erro de Framing

OERR - Bit de erro de “Overrun”

1 - Na recepção, erro de Overrun detectado 0 - Sem erro de Overrun

RX9D - O nono bit dos dados recebidos, pode ser usado com endereço, ou bit de paridade

BRG - Baud Rate Generator - Gerador de Relógio para a EUSART

Se se olhar atentamente para o diagrama do receptor/transmissor assíncrono da EUSART, em ambos os casos, pode ver-se que o sinal de relógio do temporizador local BRG, é usado para a sincronização. A mesma fonte de relógio é usada no modo síncrono.

Este temporizador consiste em dois registos de 8 bits, num total de 16 bits.

(12)

Gerador de Baud Rate da EUSART

Um número escrito para estes dois registos, determina o Baud Rate - Velocidade da porta Série. Além do mais, ambos o bit BRGH do TXSTA e o bit BRGH16 do BAUDCTL, infl uenciam a frequência de relógio.

A fórmula usada para calcular o Baud Rate, é dada pela tabela abaixo:

Bits BRG / EUSART Mode Baud Rate Formula

SYNC BRG1G BRGH

0 0 0 8-bit / assíncrono Fosc / [64 (n + 1)]

0 0 1 8-bit / assíncrono Fosc / [16 (n + 1)]

0 1 0 16-bit / assíncrono Fosc / [16 (n + 1)]

0 1 1 16-bit / assíncrono Fosc / [4 (n + 1)]

1 0 x 16-bit / assíncrono Fosc / [4 (n + 1)]

1 1 x 16-bit / assíncrono Fosc / [4 (n + 1)]

As tabelas seguintes, contêem valores que devem ser escritos no registo SPBRG, e nos bits SYNC, BRGH e BRGH16, de maneira a obter Baud Rates padronizadas.

As fórmulas usadas para determinar o Baurd Rate, são:

(13)
(14)
(15)

Registo BAUDCTL

(16)

ABDOVF - Flag de Overfl ow da detecção de Auto-Baud-Rate, é apenas usado no modo assíncrono, durante a detecção do baud rate

1 - Temporizador Auto Baud Rate chegou ao fi m 0 - Temporizador Auto Baud Rate não chegou ao fi m

RCIDL - Flag de Recepção parada, apenas usado no modo assíncrono 1 - A recepção está parada

0 - O START bit foi recebido, e a recepção está em progresso.

SCKP - Bit de selecção da polaridade do Relógio Síncrono Modo Assíncrono:

1 - Dados invertidos na transmissão no pino RC6/TX/CK 0 - Dados não invertidos na transmissão no pino RC6/TX/CK Modo Síncrono:

1 - Sincronização no fl anco ascendente do relógio 0 - Síncronização no fl anco descendente do relógio

WUE - Bit que habilita o Wake-up (“acordar”) pela EUSART

1 - O receptor aguarda por um fl anco descendente no pino RC7/RX/DT, para acordar o microcontrolador do modo Sleep

0 - O receptor funciona normalmente

ABDEN - Bit de habilitação de Detecção Automática do Baud Rate, apenas em modo assíncrono

1 - Modo de detecção automática do baud rate está ligado. Este bit é automaticamente limpo aquando da detecção do baud rate

0 - Modo de detecção automática do baud rate está desligado

(17)

Resumidamente:

Enviar dados pela EUSART em modo assíncrono:

O baud rate deverá ser ajustado, pelos bits BRGH do registo TXSTA, e BRG16 do registo BAUDCTL, e pelos registos SPBRGH eSPBRG;

O bit SYNC do TXSTA deverá ser limpo, e o bit SPEN do RCSTA deverá ser activado, de maneira a ligar a porta série;

Na transmissão de 9 bits, o bit TX9 do TXSTA deverá ser activado;

A transmissão de dados é habilitada, activando o bit TXEN do TXSTA. O bit TXIF do PIR1 é automati- camente activado;

Se for necessário haver um interrupção, o bit TXIE do PIE1, e os GIE e PEIE do INTCON deverão ser activados;

Na transmissão de 9 bits, o valor do nono bit deverá ser escrito no bit TX9D do TXSTA;

A transmissão inicia quando se escreve no registo TXREG;

Receber dados pela EURSAR em modo assíncrono:

O baud rate deverá ser ajustado, pelos bits BRGH do registo TXSTA, e BRG16 do registo BAUDCTL, e pelos registos SPBRGH eSPBRG;

O bit SYNC do TXSTA deverá ser limpo, e o bit SPEN do RCSTA deverá ser activado, de maneira a ligar a porta série;

Se for necessário haver uma interrupção, o bit RCIE do PIE1, e os GIE e PEIE do INTCON deverão ser activados;

Na recepção de 9 bits, o bit RX9 do RCSTA deverá ser activado;

A recepção de dados deverá ser habilitada, activando o bit CREN do RXSTA;

O registo RCSTA deverá ser lido, para tirar a informação de possiveis erros que ocorreram durante a transmisssão. Na recepção a 9 bits, o nono bit estará armazenado neste registo;

O byte recebido e armazenado no registo RCREG, deverá ser lido.

(18)

Activar o modo de Detecção de Endereço:

O baud rate deverá ser ajustado, pelos bits BRGH do registo TXSTA, e BRG16 do registo BAUDCTL, e pelos registos SPBRGH e SPBRG;

O bit SYNC do TXSTA deverá ser limpo, e o bit SPEN do RCSTA deverá ser activado, de maneira a ligar a porta série;

Se for necessário haver uma interrupção, o bit RCIE do PIE1, e os GIE e PEIE do INTCON deverão ser activados;

O bit RX9 do RCSTA deverá ser activado;

O bit ADDEN do RCSTA deverá ser activado, o que habilita que um caracter recebido, seja interpretado como endereço;

A recepção de dados deverá ser habilitada, activando o bit CREN do RXSTA;

Imediatamente após os 9 bits serem recebidos, o bit RCIF do PIR1 é automaticamente activado. Se habil- itada, uma interrupção é gerada;

O registo RCSTA deverá ser lido, para tirar a informação de possiveis erros que ocorreram durante a transmisssão. Na recepção a 9 bits, o nono bit estará armazenado neste registo;

Os 8 bits recebidos e armazenados no registo RCREG, deverão ser lidos. Agora deve ser feita a verifi cação do endereço. Se coincidirem, é necessário limpar o bit ADDEN do RCSTA, o que possibilita a continui- dade da recepção em 8 bits.

(19)

Modo Síncrono da EUSART

O módulo MSSP - Master Sínchronous Serial Port, Porta Série Síncrona Mestre, é bastante útil, porque é ao mesmo tempo um dos mais complexos circuitos dentro do microcontrolador. Ele permite comunicações de alta velocidade entre o microcontrolador e periféricos externos, usando algumas linhas de I/O. É comum usá-lo para ligar a ecrãns LCD, conversores A/D, EEPROM’s série, shift-registers, entre outros.

A principal funcionalidade deste tipo de comunicações é a de ser síncrona, e óptimo para sistemas onde há um só Mestre, e um ou mais Escravos. O dispositivo Mestre tem os circuitos necessários para a geração do Baud Rate, e fornece o Relógio para todos os dispositivos do sistema. Os dispositivos Escravos, podem dessa maneira, eliminar o gerador de Relógio interno.

O módulo MSSP funciona das seguintes maneiras:

Modo SPI, Serial Peripheral Interface Modo I2C, Inter-Integrated Circuit

Módulo MSSP

(20)

Como se pode ver na fi gura, um módulo MSSP representa metade do hardware necessário para estabelecer uma comunicação série, enquanto que a outra metade está presente no dispositivo com que se vai trocar a informação. Apesar dos módulos serem iguais em ambos os lados, os seus modos são essencialmente diferentes, dependendo se operam como Mestre ou Escravo:

Se o microcontrolador a ser programado, controla outros dispositivos, então vai funcionar como Mestre.

Um módulo defi nido como tal, vai gerar o relógio quando necessário, e apenas quando informação é en- viada/recebida.

Depende do Mestre, se a ligação é estabelecida, ou não.

Se o microcontrolador a ser programado, é parte de um sistema periférico, então vai funcionar como dis- positivo Escravo. Então, terá sempre de aguardar os pedidos por parte do Mestre.

Modo SPI

O modo de SPI permite o envio/recepção simultânea, de dados de 8 bits, usando 3 linhas I/O;

SDO - Saída de dados série - linha de transmissão;

SDI - Entrada de dados série - linha de recepção;

SCK - Relógio série - linha de síncronização.

Em conjunto com esta linha, se o microcontrolador trocar informação com vários periféricos, a quarta linha, SS, também pode ser usada. Ver fi gura abaixo.

SS - Selecção de Escravo - um pino adicional usado para selecção de dispositivo. Está apenas activo se o micro- controlador está em modo Escravo.

Quando opera em modo SPI, o módulo MSSP usa um total de 4 registos:

SSPSTAT - registo de estado;

(21)

SSPCON - registo de controlo;

SSPBUF - registo de armazenamento de dados;

SSPSR - shift register (não disponivel directamente)

Os primeiros três registos são possiveis de escrever/ler, e podem ser alterado a qualquer momento, enquanto que o quarto registo, como não está disponivel, é usado para converter os dados para formato série.

Modo SPI

Como pode ser visto na fi gura abaixo, o cerne do módulo SPI consiste em, dois registos ligados aos pinos para receber, transmitir e sincronizar.

Modo SPI

O Shift Register, SSPRS, é directamente ligado aos pinos do microcontrolador, e usado para transmissão de dados em formato série. O SSPRS tem a sua entrada e saída, e desloca os dados para dentro/fora do disposi- tivo. Por outras palavras, cada bit que aparece na entrada (linha de recepção) simultaneamente empurra outro bit para a saída (linha de transmissão).

(22)

O registo SSPBUF, é um bloco de memória para temporariamente armazenar a informação escrita no SSPRS, até que os dados recebidos estejam prontos. Após a recepção dos 8 bits de dados, esse byte é deslocado para o SSPBUF.

Esta dupla memória dos dados recebidos, SSPBUF, permite ao próximo byte ser recebido, antes de ler os dados acabados de receber. Qualquer escrita no SSPBUF durante a transmissão/recepção de dados, é ignorada.

Nomeadamente, se as confi gurações do modo forem esquecidas, a transferência de dados SPI signifi ca que apenas se escreve e lê deste registo. Enquanto que o funcionamento do módulo em si, é automaticamente feito por hardware.

Resumidamente:

Antes de inicializar o SPI, é necessário especifi car certos pontos:

Modo Mestre, o pino SCK é a saída de relógio;

Modo Escravo, o pino SCK é a entrada de relógio;

Fase do bit de entrada, no meio ou no fi m do ciclo de relógio, bit SMP;

Flanco do relógio, bit CKE;

Baud Rate, só no modo Mestre;

Modo de selecção de Escravo, no modo Escravo apenas.

Passo 1

O byte a transmitir, deve ser escrito para a memória temporária SSPBUF.

Imediatamente depois, se o módulo SPI opera em modo Mestre, o microcon- trolador vai automaticamente fazer os passos 2, 3 e 4. Se o módulo SPI opera como Escravo, o microcontrolador não vai fazer nenhum destes passos, até que o pino SCK detectar um sinal de relógio.

(23)

Passo 2

Este byte é agora deslocado para o registo SSPSR, e a memória temporária SSPBUF não é limpa.

Passo 3

Sincronizado com o relógio de entrada, este byte é empurrado para o pino de saída, sendo o MSB primeiro, enquanto o registo é simultaneamente preenchido com bits do pino de entrada. No modo Mestre, o microcon- trolador gera o relógio, enquanto o Escravo usa o relógio externo SCK.

Passo 4

O registo SSPSR está preenchido, quando os 8 bits de dados forem recebidos. É indicado activando os bits BF e SSPIF. O byte recebido é automaticamente movido do SSPSR para o SSPBUF.

Como a transferência é feita automaticamente, o programa prin- cipal é normalmente executado, enquanto a transferência está em progresso. Nesse caso, a função do bit SSPIF é gerar uma inter- rupção, quando a transmissão está completa.

Passo 5

Finalmente, o byte armazenado no SSPBUF está pronto a ser usado, e movido para qualquer registo disponivel.

(24)

Modo I2C

O modo I2C é especialmente útil quando, o microcontrolador e um circuito integrado com o qual o micro deverá trocar informação, estiverem montados no mesmo sistema. Esta forma de transmissão de dados é co- mum a outros microcontroladores, ou circuitos integrados especializados, tais como memórias, sensores de temperatura, expansores de porta, relógios em tempo-real, etc.

Similarmente ao SPI, a transferência de dados por I2C é síncrona e bidireccional. Desta vez, apenas dois pinos são usados para a transferência de dados. Estes são o SDA, dados série, e o SCL, relógio série. O programador deve confi gurar estes pinos como entradas/saídas, através dos bits do TRISC.

Provavelmente não é directamente perceptivel, mas observando regras particulares (protocolos), este modo possibilita que 122 dispositivos diferentes estajam simultaneamente ligados, usando apenas dois pinos I/O.

Funciona da seguinte maneira; o relógio necessário para sincronizar a operação de ambos os dispositivos, é sempre gerado pelo Mestre. A frequência de relógio mais habitual é de 100KHz, mas não há limite no caso de frequência mínima.

Quando o Mestre e Escravo estão sincronizados com o relógio, toda a troca de dados é sempre iniciada pelo Mestre. Assim que o módulo MSSP está activo, fi ca a aguardar uma condição de Start.

Primeiro, o Mestre envia o bit de Start, depois o endereço de 7 bits do Escravo, e fi nalmente o bit que especifi ca se vai ler ou escrever no Escravo. A seguir ao bit de Start, os oito bits são enviados para o registo SSPSR.

Todos os Escravos partilham a linha de transmissão, e vão simultaneamente receber o primeiro byte, mas apenas um deles tem o endereço coincidente.

(25)

Depois do primeiro byte ter sido enviado, o Mestre entra em modo de recepção, e aguarda o ACK - Acknowl- edge (confi rmação) do Escravo com o endereço coindicente. Se o Escravo envia um ACK lógico 1, a transferên- cia vai continuar até o Mestre enviar o bit de Stop.

Esta é uma simples explicação de como dois dispositivos comunicam. Se necessário, este microcontrolador é capaz de controlar situações mais complicadas, onde 1024 dispositivos diferentes, partilhados por diferentes Mestres, estão ligados.

Transferência de Dados

A fi gura em baixo, mostra o diagrama de blocos do módulo MSSP no modo I2C:

(26)

Diagrama de blocos do módulo MSSP, em modo I2C

O módulo usa estes registos, para trabalhar em I2C.

SSPCON - registo de controlo 1 SSPCON2 - registo de controlo 2 SSPSTAT - registo de estado

SSPBUF - registo de memória temporária para transmissão/recepção SSPSR - registo Shift-Register (não directamente acessível)

SSPADD - registo de endereço SSPMSK - registo de máscara.

(27)

Registo SSPSTAT

SMP - Bit de amostragem

Modo SPI Mestre, este bit indica a fase dos dados 1 - O estado lógico é lido no fi m do ciclo de relógio, 0 - O estado lógico é lido no meio do ciclo de relógio.

Modo SPI Escravo. Este bit deve estar limpo, quando se usa SPI Escravo Modo I2C, Mestre ou Escravo

1 - Slew Rate - Controlo de interferências desligado, para velocidades de 100KHz;

0 - Slew Rate - Controlo de interferências ligado, para velocidades de 400KHz ou maiores.

CKE - Bit de selecção do fl anco de relógio CKP=0:

1 - Os dados são transmitidos no fl anco ascendente;

0 - Os dados são transmitidos no fl anco descendente.

CKP=1:

1 - Os dados são transmitidos no fl anco descendente.

0 - Os dados são transmitidos no fl anco ascendente;

D/A - bit de Dados/Endereço, é usado no modo I2C apenas 1 - Indica que o último byte recebido ou transmitido, foi de dados;

0 - Indica que o último byte recebido ou transmitido, foi de endereço.

P - O bit de Stop, é usado no modo I2C apenas 1 - O Stop bit foi detectado;

(28)

0 - O Stop bit não foi detectado;

S - Bit de Start, é usado no modo I2C apenas 1 - O bit de Start foi detectado;

0 - O bit de Start não foi detectado;

R/W - Bit de Escrita/Leitura, usado em I2C apenas. Este bit guarda a informação R/W a seguir ao endereço.

Só é válido desde a coincidência de endereço, até ao próximo bit de Start, Stop ou não-ACK.

I2C Escravo:

1 - Ler dados;

0 - Escrever dados.

I2C Mestre:

1 - Transmissão em progresso;

0 - Transmissão parada.

UA - Bit de refrescamento do endereço. É usado no modo de 10 bits de I2C.

1 - Indica que é necessário fazer o refrescamento do endereço no registo SSPADD;

0 - O endereço no SSPADD está correcto, e não precisa de ser refrescado.

BF - Bit de estado do Buff er - memória intermédia temporária Durante a recepção em SPI ou I2C:

1 - Recepção completa. O SSPBUF está completo;

0 - Recepção não completa. O SSPBUF está vazio.

Durante a transmissão em SPI ou I2C:

1 - Transmissão de dados em andamento (não inclui os bits ACK e STOP);

0 - Transmissão de dados completa (não inclui os bits ACK e STOP).

(29)

Registo SSPCON

WCOL - bit de detecção de Colisão de Escrita

1 - Colisão detectada. Uma escrita para o SSPBUF foi tentada, enquanto que a condição I2C não era válida para uma transmissão se iniciar;

0 - Não houve colisão.

SSPOV - Bit indicador de “Overfl ow” de Recepção

1 - Um novo byte foi recebido, enquanto o SSPSR continha o byte anterior. Como não há espaço para a recep- ção dos dados, um destes dois bytes deve ser limpo. Neste caso, o byte dentro do SSPSR é perdido;

0 - Dados série correctamente recebidos.

SSPEN - Bit que habilita a porta série síncrona, e inicializa o módulo MSSP:

No modo SPI:

1 - Liga módulo MSSP e confi gura os pinos SCK, SDO, SDI e SS, para a porta série;

0 - Desliga módulo MSSP e confi gura estes pinos como portas I/O.

No modo I2C:

1 - Liga módulo MSSP e confi gura os pinos SDA e SCL, para a porta série;

0 - Desliga módulo MSSP e confi gura estes pinos como portas I/O.

CKP - Bit de selecção da polaridade do Relógio, não usado em I2C Mestre No modo SPI:

1 - Modo de descanso para o relógio, é nível lógico alto;

0 - Modo de descanso para o relógio, é nível lógico baixo.

No modo I2C Escravo:

(30)

1 - Habilita o relógio;

0 - Mantém o relógio a estado lógico 0, para dar mais tempo à estabilização dos dados.

SSPM3-SSPM0 - Bits de selecção da porta série Síncrona. O modo é defi nido por estes três bits:

SSPM3 SSPM2 SSPM1 SSPM0 Mode

0 0 0 0 SPI Mestre, clock = Fosc/4

0 0 0 1 SPI Mestre, clock = Fosc/16

0 0 1 0 SPI Mestre, clock = Fosc/64

0 0 1 1 SPI Mestre, clock = (saída TMR)/2

0 1 0 0 SPI Escravo, pino SS de controlo ligado

0 1 0 1 SPI Escravo, pino SS de controlo desligado, SS pode ser

usado como pino I/O

0 1 1 0 I²C Escravo, endereço de 7-bit usado

0 1 1 1 I²C Escravo, endereço de 10-bit usado

1 0 0 0 I²C Mestre, clock = Fosc / [4(SSPAD+1)]

1 0 0 1 Máscara usada no modo I²C Escravo

1 0 1 0 Não usado

1 0 1 1 Modo controlado I²C Mestre

1 1 0 0 Não usado

1 1 0 1 Não usado

1 1 1 0 I²C Escravo, endereço de 7-bit usado, bits START e STOP activam a interrupção

1 1 1 1 I²C Escravo, endereço de 10-bit usado, bits START e STOP activam a interrupção

Registo SSPCON2

(31)

GCEN - Bit de habilitação de Chamada Geral No modo I2C Escravo apenas:

1 - Habilita uma interrupção, quando uma chamada geral de endereço 0x000 é recebida no SSPSR;

0 - Chamada geral de endereço desligado.

ACKSTAT - Bit de estado de ACKnowledge - confi rmação No modo I2C Mestre transmissão apenas:

1 - ACK não foi recebido do Escravo;

0 - ACK foi recebido do Escravo.

ACKDT - Bit de ACKnowledge No modo I2C Mestre recepção apenas:

1 - Não houve ACK;

0 - Houve ACK.

ACKEN - Bit de habilitação de ACKnowledge No modo I2C Mestre recepção apenas:

1 - Inicia condição ACK nos pinos SDA e SCL, e transmite bit ACKDT. É automaticamente limpo por hardware;

0 - Condição ACK não iniciada.

RCEN - Bit habilitação da Recepção No modo I2C Mestre apenas:

1 - Possibilita a recepção no modo I2C;

0 - Recepção desligada.

PEN - Bit de habilitação da condição de STOP No modo I2C Mestre apenas:

1 - Inicia uma condição de STOP nos pinos SDA e SCL. Seguidamente, este bit é automaticamente limpo por hardware;

0 - Condição de STOP não iniciada.

(32)

RSEN - Bit de habilitação da condição de Repetição de START No modo I2C Mestre apenas:

1 - Inicia uma condição de START nos pinos SDA e SCL. Seguidamente, este bit é automaticamente limpo por hardware;

0 - A repetição de START não é iniciada.

SEN - Bit de habilitação de condição de START ligada/prolongada (Enabled/Stretch) No modo I2C Mestre apenas:

1 - Inicia uma condição de START nos pinos SDA e SCL. Seguidamente, este bit é automaticamente limpo por hardware;

0 - A condição de START não é iniciada.

I2C em modo Mestre

O caso mais comum é quando o microcontrolador funciona como Mestre, e os periféricos como Escravos. Esta é a razão de apenas se falar aqui deste modo. Também se vai considerar que o endereço é de 7 bits, e o sistema electrónico só tem um microcontrolador, ou um só mestre.

De maneira a ligar o módulo MSSP neste modo, é necessário fazer o seguinte:

Confi gurar o Baud Rate, registo SSPADD;

Confi gurar o Slew Rate - Controlo de interferências, bit SMP no registo SSPSTAT;

Seleccionar o modo, registo SSPCON.

Depois destes passo feitos, e do módulo ter sido ligado pelo bit SSPEN do SSPCON, deverá esperar-se pela electrónica interna indicar que está pronta para transmissão: bit SSPIF do registo PIR1 activado.

Este bit deverá ser limpo por software, e seguidamente o microcontrolador está pronto a iniciar uma comuni- cação com os periféricos.

(33)

I2C em modo Mestre

Transmissão de dados no modo I2C Mestre

Cada condição de relógio no pino SDA, é iniciado com estado lógico 0, que aparece após ligar o bit SEN do SSPCON2. Mesmo depois de ligar, o microcontrolador aguarda um momento antes de iniciar a comunicação.

É a chamada Condição de Start, durante a qual há estabilização interna da electrónica. Se todas as condições satisfazerem, o bit SSPIF do PIR1 é activado, e a transferência de dados é iniciada, assim que o registo SSP- BUF for carregado com um byte.

Como só um máximo de 112 dispositivos podem partilhar a mesma linha de transmissão, o primeiro byte enviado contém o endereço de apenas um Escravo. Cada compo- nente tem o seu endereço escrito no próprio datasheet. O oitavo bit deste primeiro byte, especifi ca se o Mestre vai enviar ou receber dados. Neste caso vai-se receber infor- mação, e o oitavo bit deverá ser lógico 0.

(34)

Quando o endereço coincide, o microcontrolador tem de esperar pelo bit de ACK. O Escravo con- fi rma o endereço, limpando o bit ACKSTAT do SSPCON2. Se houver coincidência de endereço, todos os bytes serão enviados da mesma forma.

A transmissão de dados termina activando o bit SEN do SSPCON2. A condição de STOP ocorre, o que possibilita o pino SDA a receber a condição: Start - Endereço - ACK - Dados - ACK ... Dados - ACK - Stop.

Recepção de dados no modo I2C Mestre

A preparação para a recepção de dados, é similar à de transmissão de dados, com a excepção de que, o último bit do byte de endereço, é lógico 1. Especifi ca que o Mestre espera receber informação do Escravo endereçado.

O seguinte vai ocorrer:

Depois da preparação interna terminar e do bit START ser activado, o Escravo dá início ao envio de um byte de cada vez. Estes bytes são armazenados no registo SSPSR. Cada byte é carregado para o SSPBUF, de onde pode ser lido. Ao ler este registo, o bit ACK é automaticamente enviado, signifi cando que o Mestre está pronto para receber novo byte.

No fi nal, a recepção de dados termina activando o bit STOP:

(35)

Recepção de dados no modo I2C Mestre

Start - Endereço - ACK - Dados - ACK .... Dados - ACK - Stop.

É desta maneira que o ACK é enviado ao Escravo.

Gerador de Baud Rate

De maneira a sincronizar as comunicações, todos os eventos no pino SDA devem ser síncronizados com o relógio gerado no Mestre. Este relógio é gerado por um simples oscilador, em que a frequência depende do oscilador principal do microcontrolador, do valor escrito no registo SSPADD e do modo corrente de SPI e I2C.

(36)

A frequência de relógio dos modos descritos neste manual, dependem do cristal de quartzo e do registo SSPADD. A fórmula usada para a calcular está na fi gura abaixo:

Gerador de Baud Rate

(37)

Quando o microcontrolador comunica com os periféricos, pode acontecer que a transferência de dados falha por alguma razão. Neste caso, é recomendada a verifi cação do estado de alguns bit, que podem ajudar a clari- fi car o problema. Na prática, o estado destes bits é verifi cado através da execução de uma subrotina, depois da transmissão/recepção de um byte.

WCOL - SPCON,7 - Se se tentar escrever um novo byte para o SSPBUF, enquanto estiver em progresso uma transmissão/recepção, o bit WCOL vai ser activado e o conteúdo do SSPBUF mantém-se inalterado. A escrita não ocorre e, depois disto, o WCOL deverá ser limpo por software.

BF - SSPSTAT,0 - No modo de transmissão, este bit é activado quando o CPU escreve para o SSPBUF, e mantém-se activo enquanto o byte é deslocado para fora do registo SSPSR. No modo de recepção, este bit é activado quando um byte é carregado para o SSPBUF. É limpo quando o SSPBUF é lido.

SSPOC - SSPCON,6 - No modo de recepção, este bit é activado quando um novo byte é recebido pelo SSPSR, quando o byte anterior ainda não foi lido do SSPBUF.

Pinos SDA e SCL - Quando o módulo SSP está activo, estes pinos transformam-se em saídas Open Drain (Dreno Comum). Signifi ca que, estes pinos, devem ser ligados a resistências de Pull-Up (entre o pino e o terminal positivo da alimentação).

Resistências de saída para os Drenos Abertos dos Transistores internos

(38)

Resumidamente:

De maneira a estabelecer uma comunicação série no modo I2C, o seguinte tem que ser tomado em conta:

Ajustar o modo e enviar o endereço:

O valor que determina o Baud Rate, deve ser escrito para o registo SSPADD

Slew Rate - Controlo de interferências, deve ser desligado, limpando o bit SMP do registo SSPSTAT De modo a escolher modo Mestre, o valor binário 1000 deverá ser escrito nos bits SSPM3-SSPM0 do registo SSPCON

O bit SEN do registo SSPCON2 deverá ser activado - Condição START

O bit SSPIF é automaticamente activado no fi m do START, quando o módulo está pronto a funcionar.

Deverá ser limpo por software

O endereço do Escravo deverá ser escrito para o SSPBUF

Quando o byte é enviado, o bit SSPIF é automaticamente activado quando o ACK é recebido do Escravo.

Transmissão de dados:

Os dados a enviar, deverão ser carregados no SSPBUF

Quando o byte é enviado, o bit SSPIF é automaticamente activado quando o ACK é recebido do Escravo De maneira a informar o Escravo que a transmissão está completa, uma condição de STOP deverá ser iniciada, activando o bit PEN no SSCON.

Recepção de dados:

De maneira a ligar a recepção de dados, o bit RSEN do SSPCON2 deverá ser activado

O bit SSPIF assinala a recepção de um byte. Quando o byte é lido do SSPBUF, o bit ACKEN do SSP- CON2 deverá ser activado, de maneira a enviar o bit de ACK

De maneira a informar o Escravo que a transmissão está completa, uma condição de STOP deverá ser iniciada, activando o bit PEN no SSCON.

Referências

Documentos relacionados

 Numéricos das das Propriedades Propriedades do do Ar Ar Úmido, Úmido, Cartas Cartas Psicrométricas, Psicrométricas, Processos Processos Psicrométricos, Psicrométricos,

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

As motivações subjacentes ao julgamento criminal são consideradas variáveis importantes para compreender as decisões de sentença, tendo em vista que a ambiguidade entre

Não possuindo uma lei federal específica para resíduos de equipamentos eletroeletrônicos, os quais são englobados na lei de resíduos sólidos, a lei que

Este trabalho tem como objetivo a implementação de estratégias metodológicas para o estudo de comportamentos sociais em animais modelo de autismo, bem como, caracterizar, por meio

O processo da construção e permanência do projeto de vida a dois, que articula individualidades e relação conjugal, de fato, como escreve Féres-Carneiro e Ziviani (2009), é um

No artigo contido no anexo 4, “THE INTERPLAY BETWEEN EVENT AND BACKGROUND SEDIMENTATION AND THE ORIGIN OF FOSSIL-RICH CARBONATE CONCRETIONS: A CASE STUDY IN

“O Renegade diesel é um oceano azul para nós, onde navegamos so- zinhos, sem concorrência no Brasil nesse tamanho de veículo”, diz Sérgio Ferreira, diretor-geral da Jeep