manual comunicação série assíncrona rs-232

18
Escola Secundária Serafim Leite Disciplina: SDAC Comunicação Série Assíncrona RS232 2008/2009 Professora Ana Reis Professor Marco Vasconcelos

Upload: ana-reis

Post on 23-Mar-2016

225 views

Category:

Documents


0 download

DESCRIPTION

Manual de auxílio para os Alunos da disciplina de SDAC

TRANSCRIPT

Escola Secundária Serafim Leite Disciplina: SDAC

Comunicação Série Assíncrona RS­232 2008/2009

Professora Ana Reis Professor Marco Vasconcelos

Microcontrolador PIC16F877A

Página 2 de 18

Índice 1. Comunicação Série Assíncrona ...................................................................................................................... 3 2. USART ............................................................................................................................................................. 4 2.1 Registo TXSTA ........................................................................................................................................... 4 2.2 Registo RCSTA .......................................................................................................................................... 5

3. Gerador de Baud Rate .................................................................................................................................... 6 4. USART em Modo Assíncrono ......................................................................................................................... 8 4.1 Transmissor Assíncrono ........................................................................................................................... 8 4.1.1 Interrupção no Módulo Transmissor ................................................................................................ 9

4.2 Receptor Assíncrono .............................................................................................................................. 10 4.2.1 Interrupção no Módulo Receptor ....................................................................................................... 11

5. Padrão RS‐232 .............................................................................................................................................. 12 5.1 Especificação Mecânica ......................................................................................................................... 12 5.2 Conexão RS‐232 Null Modem ................................................................................................................ 14 5.3 Conexão RS‐232 entre o PIC16F877A e o PC ......................................................................................... 15 5.4 Especificação Eléctrica ........................................................................................................................... 16 5.5 RS‐232 Driver/Receiver (MAX232) ......................................................................................................... 17

6. Bibliografia ................................................................................................................................................... 18

Microcontrolador PIC16F877A

1. Comunicação Série Assíncrona

Diagrama 1

Uma única linha de transmissão é suficiente para implementar uma comunicação série assíncrona. A transmissão é feita bit a bit para que haja sincronização entre o transmissor e o receptor. Cada bit deve se manter na linha de transmissão durante um período de tempo denominado Período Bit que define a taxa de transferência utilizada na transmissão, que é dada em bits por segundo (bps). Quando não existe nenhuma transmissão em andamento, a linha de transmissão se encontra em um estado meio ocioso que é representado pelo nível lógico 1 presente na linha.

Figura 1

• Start Bit: é a sinalização para o receptor de que uma transmissão está sendo iniciada. • Bit de Paridade (opcional): a sua função é detectar possíveis erros de transmissão.

o Paridade Par: a soma dos bits iguais a 1 mais o bit de paridade tem de ser par; o Paridade Ímpar: a soma dos bits iguais a 1 mais o bit de paridade tem de ser ímpar; o Marca: o bit de paridade é sempre 1; o Espaço: o bit de paridade é sempre 0;

• Stop Bit: indica que a transmissão finalizou. Pode ser uma, uma e meia ou duas vezes o período bit. O número bits de dados, a inclusão ou não do bit de paridade e o tamanho do stop bit devem ser configurados antes do início da transmissão e devem ser os mesmos tanto para o transmissor quanto para o receptor.

Página 3 de 18

Microcontrolador PIC16F877A

2. USART A USART pode ser configurada como um sistema assíncrono full‐duplex. A Transmissão assíncrona full‐duplex permite ao Microcontrolador comunicar‐se com PC’s, modems, etc., transmitindo e recebendo dados simultaneamente. O TXSTA é um registo de controlo do módulo transmissor da USART. O RCSTA é um registo de controlo do módulo receptor da USART.

2.1 Registo TXSTA R/W‐0 R/W‐0 R/W‐0 R/W‐0 U‐0 R/W‐0 R‐1 R/W‐0 CSRC TX9 TXEN SYNC BRGH TRMT TX9D Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R = Bit de Leitura W = Bit de Escrita

0 = bit is clear CSRC (bit7): Bit de selecção da origem de clock utilizado na transmissão. Na transmissão assíncrona esse bit não tem função, logo pode ser lido como 0 ou 1. TX9 (bit6): Permite a transmissão do nono bit:

• 1 = Selecciona a transmissão de 9 bits • 0 = Selecciona a transmissão de 8 bits

TXEN (bit5): Permite a Transmissão:

• 1 = Activa a transmissão; • 0 = Desactiva a transmissão.

SYNC (bit4): Selecciona o modo da Transmissão:

• 1 = Transmissão síncrona; • 0 = Transmissão assíncrona.

Bit3: Inutilizável. Lido como 0. BRGH (bit2): Bit de selecção de High Baud Rate (Taxa de Transferência):

• 1 = Alta velocidade; • 0 = Baixa velocidade.

TRMT (bit1): Status do Registo de deslocamento utilizado na transmissão TSR:

• 1 = TSR vazio; • 0 = TSR cheio.

TX9D (bit0): Nono bit de dados:

• Pode ser usado como Bit de paridade.

Página 4 de 18

Microcontrolador PIC16F877A

Página 5 de 18

2.2 Registo RCSTA R/W‐0 R/W‐0 R/W‐0 R/W‐0 R/W‐0 R/W‐0 R‐1 R‐X SPEN RX9 SREN CREN ADDEN FERR OERR RX9D Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R = Bit de Leitura W = Bit de Escrita

0 = bit is clear SPEN (bit7): Bit de activação da porta série:

• 1 = Porta série activa (configura o RC7/RX/DT e RC6/TX/CK como RX e TX como pinos da porta série);

• 0 = Porta série desactivada. RX9 (bit6): Permite a recepção de 9 bits:

• 1 = Selecciona a recepção de 9 bits; • 0 = Selecciona a recepção de 8 bits.

SREN (bit5): Permite a recepção única:

• No modo assíncrono: Don’t care (0 ou 1). CREN (bit4): Permite a recepção contínua:

• No modo assíncrono: o 1 = Activa a recepção contínua; o 0 = Desactiva a recepção contínua.

ADDEN (bit3): Permite a detecção de endereço:

• Na transmissão assíncrona modo 9 bits (RX9=1): o 1 = Permite a detecção de endereço (só carrega o dado recebido no registos RCREG se o

nono bit for igual a 1, ou seja, o byte recebido é um endereço); o 0 = Não permite a detecção de endereço (todos os bytes são recebidos e o nono bit pode ser

utilizado como paridade). • Na transmissão assíncrona modo 8 bits (RX9=0):

o Não é utilizado neste modo; FERR (bit2): Indica o erro de frame:

• 1 = Erro de frame, ou seja, o Stop Bit foi lido como 0; • 0 = Não ocorreu erro de frame;

OERR (bit1): Bit de erro de Overrun:

• 1 = Houve Overrun (pode ser reiniciado apagando o bit CREN); • 0 = Não houve Overrun;

RX9D (bit0): Nono bit de dados: Pode ser bit de paridade, mas tem de ser calculado pelo firmware do utilizador.

Microcontrolador PIC16F877A

3. Gerador de Baud Rate O Baud Rate é a quantidade de bits que pode ser transmitida por segundo. O PIC16F877A possui um circuito Gerador de Baud Rate (BRG), cujo valor para a transmissão assíncrona é calculado a partir das seguintes fórmulas:

SYNC BRGH = 0 (Baixa velocidade) BRGH = 1 (Alta Velocidade)

0 (Assíncrono) Baud rate = Fosc/(64*(x+1)) Baud rate = Fosc/(16*(x+1))

1 (Síncrono) Baud rate = Fosc/(4*(x+1)) N/A

Tabela 1 Em que x é o registo SPBRG

Tabela 2: Registos associados ao Gerador Baud Rate

Para melhor perceber a razão destas fórmulas vamos fazer o seguinte exemplo: Qual o valor que deve ser escrito no registo SPBRG para uma transmissão assíncrona, um baud rate de 19200 bps e uma Fosc de 4MHz?

M=64 para BRH=0;

M=16 para BRH=1;

Página 6 de 18

Observa que o resultado não deu um valor inteiro em ambos os casos. Isso significa que teremos de levar o resultado ao valor inteiro mais próximo. Aproximando os resultados, temos: Se BRGH=0 SPBRG=2 Se BRGH=1 SPBRG=12 A aproximação fará com que o baud rate não seja de 19200 bps. Essa diferença é chamada de Erro de baud rate e será calculada em percentagem.

Se BRGH=0 Se BRGH=1

Microcontrolador PIC16F877A Note que o Erro de Baud Rate é menor quando o BRGH=1, por isso é a melhor opção. O Erro de Baud rate fará com que o período do bit seja ligeiramente diferente daquele para um baud rate de 19200 bps. A diferença não é significativa e não causará problemas na transmissão. As seguintes tabelas mostra os parâmetros de transmissão assíncrona para várias frequências de relógio. Observa que os valores que devem ser armazenados no registo SPBRG para a respectiva taxa de transferência, assim como o Erro de Baud rate associado aos valores.

Tabela 3

Página 7 de 18

Microcontrolador PIC16F877A

Tabela 4

4. USART em Modo Assíncrono

4.1 Transmissor Assíncrono

Figura 2

A transmissão é activa quando o bit TXEN (TXSTA<5>) for igual a 1, e é iniciada quando o dado a ser transmitido é carregado no registo TXREG. Uma vez que no TXREG, o dado é automaticamente transferido para o registo TSR, sendo no mesmo instante o bit TXIF (PIR<4>) igual a 1, indicando que o TXREG está vazio. Depois de transferido para o registo TSR, o dado a ser transmitido vai ser colocado bit a bit, no pino

Página 8 de 18

Microcontrolador PIC16F877A RC6/TX/CK durante o tempo que nós determinamos anteriormente de período bit. O bit TRMT (TXSTA<4>) indica o status do registo TSR, sendo este posto a 1 quando o TSR estiver vazio. Nota que o registo TSR não está mapeado na memória RAM. Sendo assim, o utilizador não tem acesso directo a ele. Quando a transmissão for de 9 bits, devemos colocar o bit TX9 (TXSTA<6>) a 1 e escrever o nono bit no TX9D (TXSTA<0>) antes de carregar os outros 8 bits no registo TSREG. Isso evita que o nono bit seja transmitido numa forma errada, caso o TXREG seja transmitido imediatamente para o TSR. Se o bit TXEN for apagado antes da transmissão ter sido concluída, esta será abortada e o módulo Transmissor irá reiniciar. 4.1.1 Interrupção no Módulo Transmissor Caso a interrupção do módulo transmissor da USART esteja activa, esta ocorrerá no momento em que o dado transmitido para o registo TSR, o que acontece num ciclo de instrução após o dado ter sido carregado no registo TXREG. O bit TXIF indica que a interrupção ocorreu, porém ele não pode ser apagado por software. O bit TXIF só será apagado quando um novo dado for carregado no registo TXREG. A interrupção do módulo transmissor é activado quando colocarmos o bit TXIE (PIE1<4>) a 1, permitindo a interrupção de periféricos, colocando o bit PEIE (INTCON<6>) a 1, e activarmos as interrupções gerais, colocando o bit GIE (INTCON<7>) a 1. Os passos a seguir para a implementação de uma Transmissão série Assíncrona é o seguinte:

• Inicializar o registo SPBRG para o Baud rate desejado; • Configurar os bits RC7 e RC6 como entrada; • Activar a porta de comunicação série colocando o bit SYNC a 0 e o bit SPEN a 1; • Activar a interrupção se assim for desejado; • Colocar o bit RX9 a 1 se a recepção for de 9 bits; • Activar o transmissor colocando o bit TXEN a 1, o qual irá colocar o bit TXIF a 1; • Se a transmissão for de 9 bits, escrever o nono bit no bit TXD9; • Carregar o dado a ser transmitido no registo TXREG (a transmissão terá início); • A Transmissão estará finalizada quando o bit TRMT for colocado a 1 pelo Hardware.

Tabela 5

Página 9 de 18

Microcontrolador PIC16F877A

4.2 Receptor Assíncrono

Figura 3

O módulo receptor da USART recebe os dados por meio do pino RC7/RX/DT. Logo após o receptor ter recebido o stop bit, o dado é transferido para o registo RCREG, sempre no mesmo instante o bit RCIF (PIR1<5>) colocado a 1. A USART pode receber até 2 bytes sem necessidade de leitura do registo RCREG. Cada vez que um novo byte chega pela USART, este é armazenado primeiramente em um registo que não é acessível pelo software chamado RSR. Do registo RSR, o dado é fornecido automaticamente para o registo RCREG, que possui dois níveis de pilha do tipo FIFO (primeiro dado a entrar, é o primeiro a sair). Isto significa que nós podemos ter 2 bytes armazenados no RXREG e um terceiro byte pode começar a chegar no RSR. Porém, se o stop bit do terceiro byte chegar antes do RCREG ter sido lido, o byte que acabou de chegar será perdido e o bit OERR vai ser activado a 1, informando que houve um Overrun. O registo RCREG deve ser lido após a chegada de um novo byte para evitar o risco de overrun. Isso pode ser facilmente conseguido, se a interrupção da USART estiver activada. Uma vez ocorrido a interrupção do módulo do receptor da USART, deve‐se efectuar a leitura do registo RCREG dentro da rotina de interrupção. Uma vez que tenha ocorrido um overrun (bit OERR=1), a transferência de dados do RSR para RCREG estará inibida, tendo o utilizador que apagar o bit OERR para que a USART possa voltar a receber dados. Isso não pode ser feito directamente, tendo de o utilizador de apagar o bit CREN (RCSTA<4>). Um outro tipo de erro que pode ser detectado pelo módulo receptor da USART é o Stop Bit recebido como 0. Se isso acontecer, o bit FERR (RCSTA<2>) vai ser colocado a 1, indicando que ocorreu um erro de transmissão. Como uma leitura no registo RCREG actualiza os bits FERR e o RX9D, recomenda‐se efectuar a leitura desses 2 bits antes de ler o RCREG, para que estes não sejam perdidos.

Página 10 de 18

Microcontrolador PIC16F877A

4.2.1 Interrupção no Módulo Receptor A interrupção do módulo do receptor da USART é sinalizada pelo bit RCIF (PIR1<5>), não podendo este ser apagado pelo utilizador. O RCIF é automaticamente apagado pelo hardware quando o registo RCREG estiver vazio. Se a pilha do RCREG estiver cheia, ele terá de ser lido duas vezes para que o bit RCIF seja apagado. A interrupção do módulo receptor da USART é permitida quando activamos a interrupção do módulo receptor, colocando o bit RCIE (PIE1<5>) a 1, activar a interrupção de periférico colocando o bit PEIE (INTCON<6>) a 1 e activar as interrupções globais colocando o bit GIE (INTCON<7>) a 1. Os passos a seguir para a implementação de uma recepção série assíncrona é o seguinte:

• Inicializar o registo SPBRG para o baud rate desejado; • Configurar os bits RC7 e RC6 como entrada; • Activar a porta de comunicação série colocando o bit a 0 e o bit SPEN a 0; • Activar as interrupções se assim for desejado (RCIE=1); • Colocar o bit RX9 a 1 se a recepção for de 9 bits; • Colocar o bit ADDEN a 1 para permitir a detecção de erro. • Permitir a recepção colocando o bit CREN a 1; • A flag de sinalização de interrupção, o bit RCIF irá ser colocado a 1 quando uma recepção estiver

completa e uma interrupção será gerada se esta estiver activa; • Ler o registo RCSTA para obter o nono bit (RX9D) ou para verificar se houve um erro durante a

recepção (FERR e OERR); • Ler os 8 bits de dados que se encontram no registo RCREG para determinar se o dispositivo foi

endereçado; • Se ocorreu algum erro, apagar o bit CREN para que novos dados possam ser recebidos; • Se o dispositivo tiver o endereço, limpar o bit ADDEN para permitir que os bytes de dados e bytes

de endereço sejam lidos no buffer de recepção e a interrupção do CPU.

Tabela 6

Página 11 de 18

Microcontrolador PIC16F877A

5. Padrão RS‐232 O RS‐232 define características mecânicas, eléctricas e funcionais para a comunicação série de dados entre um Equipamento de Dados Terminal (computador, impressora, etc..) e um Equipamento de Comunicação de Dados, como por exemplo um modem.

• Equipamentos de Dados Terminal (Data Terminal Equipment) DTE; • Equipamentos de Comunicação de Dados (Data Communication Equipment DCE.

Diagrama 2

O Comprimento máximo do cabo que interliga o DTE e o DCE não é definido pelo RS‐232, mas a capacidade máxima da linha é limitada em 2500pF, com uma carga que pode variar entre 3KΩ e 7KΩ. Estas duas características limitam o comprimento do cabo a 20 metros. O padrão RS‐232 não define o protocolo de comunicação utilizado, porém tanto a comunicação série síncrona e comunicação assíncrona são suportadas. A comunicação série assíncrona é a mais utilizada pois não necessita do sinal clock para sincronizar a transmissão como acontece com a comunicação síncrona, podendo ainda ser iniciada a qualquer momento.

5.1 Especificação Mecânica

Macho

Fêmea

Figura 4

Página 12 de 18

Microcontrolador PIC16F877A Nº Direcção Nome do Sinal Descrição do Sinal

1 Entrada DCD Indica para o DTE que o DCE está recebendo um sinal de portadora da linha telefónica, ou seja, o link de comunicação está em progresso.

2 Entrada RD Receptor de dados

3 Saída TD Transmissor de dados

4 Saída DTR Indica para o DCE que o DTE está pronto para a transferência de dados

5 Gnd Terra

6 Entrada DSR DCE está pronto para comunicação

7 Saída RTS DTE solicita autorização ao DCE para enviar dados

8 Entrada CTS DCE autoriza DTE enviar dados

9 Entrada RI Indica para o DTE que o DCE está recebendo uma chamada telefónica

Tabela 7 Cabo directo: entre um DTE e um DCE

Figura 5

A conexão é feita pino a pino directamente aos sinais do mesmo nome, mas os pinos têm funções diferentes em ambos os lados. O pino TD, por exemplo, que é a saída de dados no DTE, mas no DCE funciona como entrada.

Página 13 de 18

Microcontrolador PIC16F877A Este cabo é utilizado para conexão de modems, impressoras ou qualquer outro dispositivo DCE que use o conector DB‐9.

5.2 Conexão RS‐232 Null Modem Quando é uma ligação dentre dois DTE’s não necessário a utilização de um modem, mas isso não impede que a conexão dos computadores via RS‐232. O problema é que nós teremos duma comunicação directa entre dois DTE’s, o que fere a norma de utilização do padrão RS‐232, que foi desenvolvido para comunicação entre um DTE e um DCE. Par resolver o problema, foi criado um tipo de conexão chamdo Null Modem (sem modem).

Diagrama 3

Como a conexão foge ao padrão RS‐232, esta pode ser efectuada de várias maneiras diferentes para atender a uma determinada aplicação. A conexão pode depender, por exemplo, do tipo controlo de fluxo que será utilizado pelos DTE’s. Isso significa que nem todos os pinos podem estar conectados, o que pode fazer com que o cabo null modem funcione em determinadas aplicações e não funcione nas outras. É preciso ter cuidado.

Figura 6

Página 14 de 18

Microcontrolador PIC16F877A

5.3 Conexão RS‐232 entre o PIC16F877A e o PC

Figura 7

O PIC16F877A pode trocar informações com um PC utilizando a porta COM: os parâmetros que temos de definir será a seguinte:

• Taxa de Transferência (bps); • Número de bits de dados; • Bit de paridade; • Tamanho do Stop Bit; • Controlo de fluxo.

PIC16F877A Porta COM do PC

Taxa de transferência 110 a 1.250.000 bps 110 a 921.600 bps

Número de bits 8 ou 9 4 a 8

Bit de paridade Tem ser tratado por software Par, Ímpar, Marca ou Espaço

Stop Bit 1 1, 1.5 ou 2

Controlo de fluxo Não suporta Hardware, XON/XOFF ou nenhum

Página 15 de 18

Microcontrolador PIC16F877A Tabela 8

Figura 9

Conexão RS‐232 Null Modem, com controlo de fluxo por parte do PC. Quando a quantidade de dados trocados entre o PC e o PIC16F877A é a taxa de transferência baixa, pode não ser necessário a implementação do controlo de fluxo. Por outro lado, quando a taxa de transferência é elevada e o tráfego de dados é grande, é imprescindível a utilização de algum tipo de controlo de fluxo.

5.4 Especificação Eléctrica

Figura 10

O padrão RS‐232 define uma faixa de tensão que deve ser identificada pelos terminais como níveis lógicos 1 e 0. O nível lógico 1 é representado pela faixa de ‐3V a ‐15V. Da mesma forma, o nível lógico 0 é

Página 16 de 18

Microcontrolador PIC16F877A identificado pela faixa de tensão de 3V a 15V. A faixa de ‐3V a +3V é uma região de transição sendo o do nível lógico indefinido. Embora os níveis de tensão ‐3V e +3V sejam reconhecidos respectivamente como níveis lógicos 1 e 0, é recomendado que o transmissor não aplique em nenhum dos pinos uma tensão menor que +5V para representar o nível lógico 0, assim como ele não deve aplicar uma tensão menor que – 5V para representar o nível lógico 1. Esta diferença de 2V funciona como uma margem de segurança contra o ruído na linha. O RS‐232 impõe um limite máximo para a tensão em cada um dos seus pinos de +25V e ‐25V, sendo a diferença (25V‐15V=10V) utilizada como margem de segurança.

5.5 RS‐232 Driver/Receiver (MAX232) Converte os níveis de tensão correspondentes á lógica TTL no padrão RS‐232 e vice‐versa. Dois canais de para dados: o pino R2 OUT é RX e o pino T2 IN é TX; Dois canais para controle de fluxo: o pino R2 IN é o RTS e o pino T2 OUT é o CTS.

Figura 11

Nível Lógico PIC16F877A Padrão RS‐232

0 <= 0,6V +5V a +15V 1 >= 5V – 0,6V ‐5V a ‐15V

Tabela 9

Página 17 de 18

Microcontrolador PIC16F877A

Página 18 de 18

No esquema acima só estão sendo utilizados dois canais do MAX232N, um para TX e outro para RX. Da mesma forma, foi utilizado um conector fêmea para possibilitar a utilização de um cabo com conexão directa pino a pino. Nenhum controle de fluxo por hardware será utilizado, ficando esta tarefa por conta do programa.

6. Bibliografia [1] Zanco, Wagner da Silva, “Micocontroladores PIC: Técnicas de Software e Hardware para Projectos de Circuitos Electrónicos: Com Base no PIC16F877A”, 2006, Editora Érical Ltda. [2] DATASHEET Microchip PIC16F87XA [3] http://pt.wikipedia.org/wiki/RS‐232