Buscar

elt024 09 Serial

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 59 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 59 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 59 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Continue navegando


Prévia do material em texto

Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RW
Prof.MSc.Rodrigo Maximiano Antunes de Almeida
Universidade Federal de Itajuba´
rodrigomax@unifei.edu.br
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 1 / 59
LCD
Revisa˜o
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 2 / 59
Display de LCD
Rotina para envio de dados/comando para o LCD
Para comando RS = 0; Para dados RS = 1;
Habilitar a escrita (RW=1) ou leitura (RW=0)
Acionar terminal EN (enable)
Delay para o LCD entender o comando
Desabilita o terminal EN
Retorna os terminais para n´ıvel baixo 1
1Para melhor uso e´ interessante retornar os terminais para o valor que tinham antes
de chamar a rotina, ja´ que eles esta˜o multiplexados com outros dispositivos
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 3 / 59
Display de LCD
Instruc¸a˜o RS RW
Dados (bit) Tempo
(ma´x.)7 6 5 4 3 2 1 0
Limpa 0 0 0 0 0 0 0 0 0 1 37 us
Reset 0 0 0 0 0 0 0 0 1 - 1.5ms
Config. 0 0 0 0 0 0 0 1 ID S 37 us
Config. 0 0 0 0 0 0 1 D C B 37 us
Movim. 0 0 0 0 0 1 SC RL - - 37 us
Config. 0 0 0 0 1 DL N F - - 37 us
Move(l,c) 0 0 1 X 0 0 Coluna 37 us
Ocup. 0 1 BF - - - - - - - 10 us
http://www.sparkfun.com/datasheets/LCD/HD44780.pdf - Datasheet Hitachi
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 4 / 59
Display de LCD
Definic¸o˜es
ID: 1 – Incrementa, 0 – Decrementa
S: 1 – O display acompanha o deslocamento
SC: 1 – Desloca o display, 0 – Desloca o cursor
RL: 1 – Move para direita, 0 – Move para esquerda
DL: 1 – 8 bits, 0 – 4 bits
N: 1 – 2 linhas, 0 – 1 linha
F: 1 – 5x10 pontos, 0 – 5x8 pontos
BF: 1 – Ocupado, 0 – Dispon´ıvel
X: 1 – 2a linha, 0 – 1a linha
Coluna: nible que indica a coluna
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 5 / 59
Display de LCD
Desenvolvimento da biblioteca
Criac¸a˜o de rotinas de delay (2ms e 40us)
Func¸a˜o para enviar comandos
Func¸a˜o para enviar dados
Func¸a˜o de inicializac¸a˜o
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 6 / 59
Display de LCD
1 #include "basico.h"
2 #include "config.h"
3 #include "lcd.h"
4
5 // i n i c i o do programa
6 v o i d main ( v o i d )
7 {
8 uns igned i n t i , j ;
9 char msg [ ] = "Hello World!" ;
10 InicializaLCD ( ) ;
11 f o r ( i=0;i<11;i++)
12 {
13 EnviaDados ( msg [ i ] ) ;
14 f o r ( j = 0 ; j < 65000 ; j++) ;
15 }
16 f o r ( ; ; ) ;
17 }
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 7 / 59
Serial
Comunicac¸a˜o Serial
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 8 / 59
Comunicac¸a˜o Serial
Vantagens
Simplificac¸a˜o do hardware
Aumento da taxa de transmissa˜o devido a reduc¸a˜o de problemas de
sincronia
Economia de cabos
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 9 / 59
Comunicac¸a˜o Serial
Protocolo Taxa (bits/s) Taxa (bytes/s)
Serial MIDI 31.25 kbit/s 3.9 kB/s
Serial EIA-232 max. 230.4 kbit/s 28.8 kB/s
Serial UART max 2.7648 Mbit/s 345.6 kB/s
I2c 3.4 Mbit/s 425 kB/s
Serial EIA-422 max. 10 Mbit/s 1.25 MB/s
SPI Bus (Up to 100MHz) 100 Mbit/s 12.5 MB/s
USB super speed (USB 3.0) 5 Gbit/s 625 MB/s
HDMI v. 1.3 10.2 Gbit/s 1.275 GB/s
Ultra DMA ATA 133 (16 bits) 1,064 Mbit/s 133 MB/s
Serial ATA 3 (SATA-600) 6,000 Mbit/s 600 MB/s
Ultra-640 SCSI (16 bits) 5,120 Mbit/s 640 MB/s
Serial Attached SCSI (SAS) 3 9,600 Mbit/s 1,200 MB/s
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 10 / 59
Serial
Protocolo I2C
Inter-Integrated Circuit
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 11 / 59
Comunicac¸a˜o Serial
Comunicac¸a˜o serial I2C
1982 - Protocolo I2C criado pela Phillips (100 kHz)
1992 - Versa˜o 1.0: Adicionada a frequencia de 400 kHz (Fast mode) e
enderec¸amento de 10 bit addresses
1998 - 2.0: Frequeˆncia de 3.4 MHz (High-speed mode)
2007 - 3.0: Frequencia de 1.0 MHz (Fast mode plus)
2012 - 4.0: Frequencia de 5.0 MHz (Ultra fast mode plus) e criada
tabela com identificadores de fabricantes
E´ um protocolo serial, sincrono e multi-mestre
Figura : Barramento I2C com va´rios dispositivos
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 12 / 59
Comunicac¸a˜o Serial
A comunicac¸a˜o I2C e´ feita de modo s´ıncrono: os bits sa˜o enviados de
acordo com um sinal de clock.
Para isso sa˜o necessa´rios pelo menos 2 fios:
Transmissa˜o dos dados, SDA ou serial data
Transmissa˜o do clock, SCL ou serial clock
Os terminais sa˜o implementados como coletor aberto, exigindo um
pull-up para funcionamento.
Figura : Conexa˜o com coletor aberto
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 13 / 59
Comunicac¸a˜o Serial
A comunicac¸a˜o e´ feita como nos LCD’s, mas nesse caso apenas um
bit e´ enviado por vez:
1 SDA e SCL comec¸am em n´ıvel alto
2 SDA e´ levado para n´ıvel baixo como sinal de in´ıcio
3 SCL e´ levado para n´ıvel baixo
4 o primeiro bit (menos significativo) e´ colocado em SDA
5 SCL e´ levado para n´ıvel alto, aguarda-se o tempo do sistema e
abaixa-se novamente SCL
6 repete-se o processo do item 3 ate´ o fim da transmissa˜o
7 SDA e´ levado para n´ıvel alto indicando fim de transmissa˜o
SDA e SCL no envio de um dado
http://en.wikipedia.org/w/index.php?title=File:I2C data transfer.svg
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 14 / 59
Serial
Criac¸a˜o da biblioteca para comunicac¸a˜o
I2C
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 15 / 59
Comunicac¸a˜o Serial
E´ poss´ıvel que o microcontrolador ja´ possua um hardware dedicado
para o envio e recepc¸a˜o dos dados
O controle do envio e recepc¸a˜o dos dados e´ feita por hardware
O sistema identifica o enderec¸o e cuida da serializac¸a˜o
Na auseˆncia de um perife´rico dedicado, e´ comum realizar a
implementac¸a˜o deste protocolo utilizando apenas 2 terminais digitais
1 deles deve ser capaz de ser configurado como entrada ou sa´ıda com o
sistema em funcionamento
Todo o gerenciamento dos enderec¸os, leitura/escrita de dados e o clock
fica a cargo do programador.
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 16 / 59
Comunicac¸a˜o Serial
Para a biblioteca sa˜o necessa´rias 3 func¸o˜es ba´sicas
writeByte() : Realiza a escrita de 1 byte no barramento I2C
readByte() : Realiza a leitura de 1 byte no barramento I2C
i2cStart() : Realiza o setup do hardware
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 17 / 59
Serial
1 #include "i2c.h"
2 #include "basico.h"
3
4 char de ;
5 #define DELAY ( ) f o r ( de=0;de<100;de++)
6
7 #define RESET_ON ( ) ( BitSet ( PORTC , 7 ) )
8 #define RESET_OFF ( ) ( BitClr ( PORTC , 7 ) )
9 #define RESET_IN ( ) ( BitSet ( TRISC , 7 ) )
10 #define RESET_OUT ( ) ( BitClr ( TRISC , 7 ) )
11
12 #define SDA_ON ( ) ( BitSet ( PORTB , 0 ) )
13 #define SDA_OFF ( ) ( BitClr ( PORTB , 0 ) )
14 #define SDA ( ) ( BitTst ( PORTB , 0 ) )
15 #define SDA_IN ( ) ( BitSet ( TRISB , 0 ) )
16 #define SDA_OUT ( ) ( BitClr ( TRISB , 0 ) )
17
18 #define SCL_ON ( ) ( BitSet ( PORTB , 1 ) )
19 #define SCL_OFF ( ) ( BitClr ( PORTB , 1 ) )
20 #define SCL_IN ( ) ( BitSet ( TRISB , 1 ) )
21 #define SCL_OUT ( ) ( BitClr ( TRISB , 1 ) )
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br18 / 59
Serial
1 v o i d i2cStart ( ) {
2 RESET_OUT ( ) ;
3 SDA_OUT ( ) ;
4 SCL_OUT ( ) ;
5 BitClr ( INTCON2 , 7) ; // l i g a p u l l up
6 }
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 19 / 59
Serial
1 v o i d writeByte ( uns igned char dados ) {
2 uns igned char i ;
3 f o r ( i = 0 ; i < 8 ; i++) {
4 // A n a l i s a o b i t a s e r t r a n s m i t i d o
5 i f ( dados & 0x01 ) {
6 SDA_ON ( ) ;
7 } e l s e {
8 SDA_OFF ( ) ;
9 }
10 // g e r a c¸ a˜ o do p u l s o de c l o c k
11 SCL_ON ( ) ;
12 DELAY ( ) ; // i n f o r m a c¸ a˜ o v a´ l i d a
13 SCL_OFF ( ) ;
14 DELAY ( ) ;
15 // pega o pr o´x imo b i t
16 dados >>= 1 ;
17 }
18 }
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 20 / 59
Serial
1 uns igned char readByte ( ) {
2 uns igned char i ;
3 uns igned char dados ;
4 dados = 0 ;
5 f o r ( i = 0 ; i < 8 ; i++) {
6 SCL_ON ( ) ;
7 DELAY ( ) ; // i n f o r m a c¸ a˜ o v a´ l i d a
8 i f ( SDA ( ) ) {
9 dados |= 0x80 ;
10 }
11 SCL_OFF ( ) ;
12 DELAY ( ) ;
13 dados >>= 1 ;
14 }
15 r e t u r n dados ;
16 }
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 21 / 59
Serial
1 #ifndef I2C_H
2 #define I2C_H
3 uns igned char readByte ( ) ;
4 v o i d writeByte ( uns igned char dados ) ;
5 v o i d i2cStart ( ) ;
6 #endif
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 22 / 59
Serial
Exemplo de interface com dispositivo
usando I2C
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 23 / 59
Serial
Figura : Ligac¸a˜o do RTC HT1380 no barramento de dados I2C
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 24 / 59
Comunicac¸a˜o Serial
Relo´gio de tempo real ou RTC (real time clock)
E´ um componente que tem como func¸a˜o espec´ıfica efetuar a contagem
de tempo de maneira precisa
Geralmente requer seu pro´prio cristal para ficar independente do
sistema principal
Possue baixo coeficiente de atraso/adiantamento
Pode conter, ale´m do relo´gio, um calenda´rio
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 25 / 59
Comunicac¸a˜o Serial
HT1380
O HT1380 e´ um relo´gio de tempo real com interface de comunicac¸a˜o
serial ”tipo”I2C
No datasheet do dispositivo na˜o e´ citada a nomenclatura I2C,
provavelmente por motivos de royalties, mas a ana´lise das linhas
temporais indicam a compatibilidade
Ale´m das duas linhas padronizadas: SCL (chamada SCKL) e SDA
(chamada I/O) existe uma terceira linha para habilitac¸a˜o do chip
(reset)
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 26 / 59
Comunicac¸a˜o Serial
A leitura/escrita de informac¸o˜es no HT1380 e´ feita em dois
momentos
Primeiro envia-se um comando de 8 bits indicando o enderec¸o e o
sentido (leitura/escrita)
Depois envia-se o valor em caso de escrita ou aguarda o recebimento
do valor em caso de leitura
Figura : Envio de dados para o HT1380
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 27 / 59
Comunicac¸a˜o Serial
1 bit indica leitura/escrita
3 bits indicam o campo de interesse
1 bit controla o clock do chip
Figura : Byte de comando do HT1380
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 28 / 59
Comunicac¸a˜o Serial
Existem ao todo 8 enderec¸os no HT1380
segundo, minuto, hora, dia (do meˆs), meˆs, dia (da semana), ano e
protec¸a˜o contra escrita
Estes valores esta˜o codificados em BCD compactado
Figura : Registros internos do HT1380
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 29 / 59
Comunicac¸a˜o Serial
Para facilitar o uso do RTC foram criadas duas rotinas principais:
uma para leitura e outra para escrita
HT1380write() : Realiza a escrita em um registro do HT1380 via
barramento I2C
HT1380read() : Realiza a leitura de um registro do HT1380 via
barramento I2C
Com base nestas duas func¸o˜es foram criadas rotinas para acessar cada
uma das varia´veis internas do RTC
rtcGetSeconds() : Le o valor de segundos do RTC
rtcPutSeconds() : Grava o valor de segundos no RTC
rtcGet...
rtcPut...
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 30 / 59
Serial
1 v o i d ht1380write ( uns igned char addr , uns igned char dados ) {
2 RESET_OFF ( ) ;
3 SCL_OFF ( ) ;
4 SDA_OFF ( ) ;
5
6 // l i g a o RTC
7 RESET_ON ( ) ;
8
9 addr <<= 1 ; // c o r r i g e e n d e r e c¸ o
10 addr |= 0x80 ; // h a b i l i t a c l o c k
11 writeByte ( addr ) ;
12 writeByte ( dados ) ;
13
14 RESET_OFF ( ) ;
15 SCL_OFF ( ) ;
16 SDA_OFF ( ) ;
17 }
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 31 / 59
Serial
1 uns igned char ht1380read ( uns igned char addr ) {
2 uns igned char dados ;
3 RESET_OFF ( ) ;
4 SCL_OFF ( ) ;
5 SDA_OFF ( ) ;
6
7 RESET_ON ( ) ;
8
9 addr <<= 1 ; // c o r r i g e e n d e r e c¸ o
10 addr |= 0x81 ; // l i g a b i t de l e i t u r a e hab . c l k
11 writeByte ( addr ) ;
12 SDA_IN ( ) ; //muda para e n t r a d a
13 DELAY ( ) ; DELAY ( ) ; DELAY ( ) ; DELAY ( ) ; // aguarda mudanc¸a
14 dados = readByte ( ) ;
15
16 RESET_OFF ( ) ;
17 SCL_OFF ( ) ;
18 SDA_OFF ( ) ;
19 SDA_OUT ( ) ;
20 r e t u r n dados ;
21 }
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 32 / 59
Serial
1 uns igned char rtcGetSeconds ( v o i d ) {
2 uns igned char value ;
3 value = ht1380read ( 0 ) ; // r e a d s e c o n d s
4 // c o n v e r t e de BCD para d e c i m a l
5 r e t u r n ( ( ( value >> 4)&0x07 ) *10 + ( value & 0x0f ) ) ;
6 }
7
8 v o i d rtcPutSeconds ( char seconds ) {
9// c o n v e r t e de d e c i m a l para BCD
10 ht1380write ( 0 , ( seconds % 10) | ( ( seconds / 10) << 4) ) ;
11 }
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 33 / 59
Serial
1 #ifndef RTC_H
2 #define RTC_H
3 v o i d ht1381write ( uns igned char addr , uns igned char data ) ;
4 uns igned char ht1381read ( uns igned char addr ) ;
5
6 uns igned char rtcGetSeconds ( v o i d ) ;
7 v o i d rtcPutSeconds ( uns igned char seconds ) ;
8
9 uns igned char rtcGetMinutes ( v o i d ) ;
10 v o i d rtcPutMinutes ( uns igned char minutes ) ;
11 //o mesmo para horas , d i a ( meˆs ) , meˆs , ano , d i a ( semana )
12
13 #endif
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 34 / 59
Serial
Protocolo TIA RS232
Interface Between Data Terminal Equipment and Data Circuit-Terminating
Equipment Employing Serial Binary Data Interchange
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 35 / 59
Comunicac¸a˜o Serial
RS232 versus UART
Similaridades e diferenc¸as e observac¸o˜es:
UART e´ uma versa˜o generalizada dos protocolos 232, 485, 422, EIA.
Visa fornecer uma base padra˜o para todos estes protocolos
As tenso˜es sa˜o em geral no mesmo n´ıvel do processador
As converso˜es para os protocolos ficam a cargo de chips externos
MAX232 (ICL232, ST232, ADM232, HIN232)
FT232
SP3485
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 36 / 59
Comunicac¸a˜o Serial
Exemplo de circuitos para interface com UART
Comunicac¸a˜o UART
Comunicac¸a˜o USB
Comunicac¸a˜o RS232
Comunicac¸a˜o RS485
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 37 / 59
Comunicac¸a˜o Serial
Comunicac¸a˜o serial 232
1962 - Recommended Standard232
1969 - Recommended Standard 232 rev. C
1986 - EIA 232 rev C
1997 - TIA 232 rev F
Procedimento de envio
Um bit de marcac¸a˜o de inicio de mensagem
Os 8 bits de dados2
Um bit de paridade (opcional)
Um bit de marcac¸a˜o de fim de mensagem
2Primeiro o menos significativo. Alguns sistemas mais antigos operam com 5 ou 7
bits por vez
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 38 / 59
Comunicac¸a˜o Serial
Sinal serializado para transmissa˜o em RS232
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 39 / 59
Comunicac¸a˜o Serial
Para dois dispositivos se comunicarem e´ necessa´rio compatibilizar o
sistema f´ısico e o sistema lo´gico.
F´ısico (Hardware)
Tipo de conector
Pinagem do conector
N´ıveis de tensa˜o
Lo´gico (Software)
Codificac¸a˜o utilizada
Tamanho da palavra
Tamanho do stop/start bits
Bit de paridade
Taxa de transmissa˜o
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 40 / 59
Comunicac¸a˜o Serial
A configurac¸a˜o da comunicac¸a˜o serial e´ feita 3 atrave´s de 5 registros.
TXSTA e RCSTA : configura o meio de transmissa˜o
BAUDCON : controle de velocidade
SPBRGH e SPBRG : configurac¸a˜o da velocidade
3Para o microcontrolador PIC18F4550. Outros microcontroladores possuem formato
de configurac¸a˜o parecido.
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 41 / 59
Comunicac¸a˜o Serial
Bits de Configurac¸a˜o Precisa˜o Taxa de transmissa˜o
Txsta:4 Baudcon:3 Txsta:2
0 0 0 8bits F232 =
FOSC
[64 ∗ (n + 1)]
0 0 1 8bits
F232 =
FOSC
[16 ∗ (n + 1)]0 1 0 16bits
0 1 1 16bits
F232 =
FOSC
[4 ∗ (n + 1)]1 0 x 8bits
1 1 x 16bits
x – na˜o importa, n – valor do par SPBRGH:SPBRG
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 42 / 59
Comunicac¸a˜o Serial
Exemplo: Configurar para uma taxa de transmissa˜o de 57,6 kbps. A
frequeˆncia de oscilac¸a˜o e´ um cristal de 8MHz. Usando as treˆs fo´rmulas:
n1 = 1; F232 = 62.500, err = -7,64%
n2 = 8, F232 = 55.555, err = 3,63%
n3 = 32, F232 = 57.142, err = 0,79%
A fo´rmula que gera menos erro e´ a de nu´mero 3, por isso ela sera´ a
escolhida.
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 43 / 59
Serial
1 BitClr ( BAUDCON , 0 ) ; // D e s a b i l i t a auto d e t e c c¸ a˜ o de v e l o c i d a d e
2 BitSet ( BAUDCON , 3 ) ; // R e g i s t r o de g e r a c¸ a˜ o de s i n a l com 16 b i t s
3 BitClr ( BAUDCON , 6 ) ; // Operac¸ a˜o de r e c e p c¸ a˜ o e s t a a t i v a
4 BitClr ( RCSTA , 1 ) ; // D e s a b i l i t a b i t de e r r o de o v e r r u n
5 BitClr ( RCSTA , 2 ) ; // D e s a b i l i t a b i t e r r o na comunica c¸ a˜o
6 BitClr ( RCSTA , 4 ) ; // H a b i l i t a b i t de r e c e p c¸ a˜ o
7 BitClr ( RCSTA , 6 ) ; // S e l e c i o n a 8 b i t s
8 BitSet ( RCSTA , 7 ) ; // C o n f i g u r a RX/TX como p i n o s de comunica c¸ a˜o
9 BitSet ( TXSTA , 2 ) ; //Modo de a l t a v e l o c i d a d e h a b i l i t a d o
10 BitSet ( TXSTA , 3 ) ; // Env ia b i t de parada ( b r e a k c h a r a c t e r b i t )
11 BitClr ( TXSTA , 4 ) ; //Modo a s s ı´ n c r o n o
12 BitSet ( TXSTA , 5 ) ; // H a b i l i t a t r a n s m i s s a˜ o
13 BitClr ( TXSTA , 6 ) ; // S e l e c i o n a 8 b i t s
14 SPBRGH = 0x00 ; // C o n f i g u r a para 56 k (SPBRGH |SPBRG = 32)
15 SPBRG = 0x22 ; // C o n f i g u r a para 56 k (SPBRGH |SPBRG = 32)
16 BitSet ( TRISC , 6 ) ; // C o n f i g u r a p i n o de r e c e p c¸ a˜ o como e n t r a d a
17 BitClr ( TRISC , 7 ) ; // C o n f i g u r a p i n o de e n v i o como s a ı´ d a
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 44 / 59
Serial
Criac¸a˜o da biblioteca para comunicac¸a˜o
serial
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 45 / 59
Serial
1 #include "serial.h"
2 #include "basico.h"
3 v o i d EnviaSerial ( uns igned char c ) {
4 w h i l e ( ! BitTst ( PIR1 , 4 ) ) ; // aguarda o r e g i s t r o f i c a r d i s p o n ı´ v e l
5 TXREG=c ; // c o l o c a o v a l o r para s e r e n v i a d o
6 }
7 uns igned char RecebeSerial ( v o i d ) {
8 i f ( BitTst ( PIR1 , 5 ) ) { // V e r i f i c a s e e x i s t e v a l o r d i s p o n i v e l
9 r e t u r n RCREG ; // r e t o r n a o v a l o r
10 }
11 r e t u r n 0 ; // c o n d i c¸ a˜ o de e r r o
12}
13 v o i d InicializaSerial ( v o i d ) {
14 TXSTA = 0b00101100 ; // c o n f i g u r a a t r a n s m i s s a˜ o
15 RCSTA = 0b10010000 ; // c o n f i g u r a a r e c e p c¸ a˜ o
16 BAUDCON = 0b00001000 ; // c o n f i g u r a v e l o c i d a d e
17 SPBRGH = 0b00000000 ; // c o n f i g u r a para 56 k
18 SPBRG = 0b00100010 ; // c o n f i g u r a para 56 k
19 BitSet ( TRISC , 6 ) ; // p i n o de r e c e p c¸ a˜ o de dados
20 BitClr ( TRISC , 7 ) ; // p i n o de e n v i o de dados
21 }
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 46 / 59
Serial
1 #ifndef SERIAL_H
2 #define SERIAL_H
3 v o i d EnviaSerial ( uns igned char c ) ;
4 uns igned char RecebeSerial ( v o i d ) ;
5 v o i d InicializaSerial ( v o i d ) ;
6 #endif //SERIAL H
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 47 / 59
Serial
1 #include "basico.h"
2 #include "config.h"
3 #include "serial.h"
4 v o i d main ( v o i d ) {
5 uns igned i n t i , j=0;
6 char msg [ ] = "Hello World!" ;
7 uns igned char resp ;
8 TRISD = 0x00 ; // a c e s s o aos l e d s
9 InicializaSerial ( ) ;
10 f o r ( ; ; ) {
11 f o r ( i = 0 ; i < 65000 ; i++) ; // d e l a y
12 EnviaSerial ( msg [ j ] ) ; // e n v i a dados
13 j++;
14 i f ( j > 11) {
15 j=0;
16 EnviaSerial ( 1 3 ) ; // e n v i a quebra de l i n h a
17 }
18 resp = RecebeSerial ( ) ; // r e c e b e dados
19 i f ( resp !=0){
20 PORTD = resp ;
21 }
22 }
23 }
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 48 / 59
Serial
Exemplo de interface com dispositivos
usando UART/RS232
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 49 / 59
Comunicac¸a˜o Serial
GPS integrado com antena ME-1000RW
Comunica-se usando padra˜o UART 9600 bps
Os dados sa˜o passados atrave´s de uma string
Implementa va´rios padro˜es NEMA
GPGSA - Precisa˜o e qnt de satelites ativos
GPGCA - Dados fixados (lat/long/alt/diferencial)
GPRMC - Dados minimos (lat/long/alt)
GPVTG - Velocidade e deslocamento
GPGSV - Dados dos sate´lites vis´ıveis
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 50 / 59
Comunicac¸a˜o Serial
Mensagem do GPRMC
Formada por 14 campos:
0 - ID da mensagem
1 - Tempo (UTC)
2 - Rastreando (R) ou Aceita´vel (A)
3 - Latitude
4 - Norte/Sul
5 - Longitude
6 - Leste/Oeste (E/W)
7 - Velocidade (magnitude)
8 - Velocidade (aˆngulo)
9 - Data (UTC)
10 - Variaca˜o Magne´tica (aˆngulo em graus)
11 - Varia?a˜o Magnerica (direc¸a`o, E/W)
12 - Modo de operac¸a˜o (N na˜o va´lido, A autoˆnomo, D diferencial, E
estimado, M manual, S simulac¸a˜o)
13 - Checksum
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 51 / 59
Comunicac¸a˜o Serial
Formato:
$ID,000000,X,0000.00,X,00000.00,X,000.0,000.0,000000,000.0,????
Exemplo:
$GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,130694,004.2,W*70
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 52 / 59
Comunicac¸a˜o Serial
Rotina para recepc¸a˜o dos dados
Armazenar cada byte recebido num buffer tempora´rio.
Aguardar dois bytes de fim de linha: <cr> e <lf>, ’\n’ e ’\r’, 13 e 10.
Caso chegar ”fimde linha”, resetar o buffer e processar a linha
No processamento do buffer
Verificar o ID da mensagem ($GPRMC)
Cada campo e´ separado por virgulas
Percorrer o campo atual e realizar conversa˜o dos dados ou enviar p/ o
LCD
Na˜o esquecer de verificar o checksum para seguranc¸a
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 53 / 59
Serial
1 #include "basico.h"
2 #include "config.h"
3 #include "serial.h"
4 #include "lcd.h"
5 v o i d main ( v o i d ) {
6 uns igned char pos=0; // p o s i c¸ a˜ o a t u a l do b u f f e r
7 char buffer [ 1 0 0 ] ; // b u f f e r t e m p o r a´ r i o
8 InicializaSerial ( ) ;
9 InicializaLCD ( ) ;
10 f o r ( ; ; ) {
11 w h i l e ( BitTst ( PIR1 , 5 ) != 0) {
12 buffer [ pos ] = RCREG ;
13 pos++; // c u i d a d o com b u f f e r o v e r f l o w
14 // t e s t e de f im de mensagem
15 // . . .
16 }
17 }
18 }
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 54 / 59
Serial
1 // t e s t e de f im de mensagem
2 i f ( ( pos > 2) &&
3 ( buffer [ pos−2] == 13) && //CR
4 ( buffer [ pos−1] == 10) ) { //LF
5 pos = 0 ;
6 // s e o ID e s t i v e r c o r r e t o p r o c e s s a o b u f f e r
7 i f ( ( buffer [ 0 ] == '$' ) &&
8 ( buffer [ 1 ] == 'G' ) &&
9 ( buffer [ 2 ] == 'P' ) &&
10 ( buffer [ 3 ] == 'R' ) &&
11 ( buffer [ 4 ] == 'M' ) &&
12 ( buffer [ 5 ] == 'C' ) )
13 {
14 // p a r s e r da mensagem $GPRMC
15 // . . .
16 }
17 }
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 55 / 59
Serial
1 // P a r s e r
2
3 // comec¸a d e p o i s do ID
4 pos = 7 ;
5
6 //1 − Hora UTC
7 w h i l e ( buffer [ pos ] != ',' ) {
8 // EnviaDados ( b u f f e r [ pos ] ) ;
9 pos++;
10 }
11 pos++;// p u l a a v i r g u l a
12
13 //2 A(OK)
14 w h i l e ( buffer [ pos ] != ',' ) {
15 // EnviaDados ( b u f f e r [ pos ] ) ;
16 pos++;
17 }
18 pos++;// p u l a a v i r g u l a
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 56 / 59
Serial
19 //3−L a t i t u d e
20
21 EnviaComando (0 x80 ) ;
22 EnviaDados ( 'L' ) ;
23 EnviaDados ( 'A' ) ;
24 EnviaDados ( 'T' ) ;
25
26 w h i l e ( buffer [ pos ] != ',' ) {
27 EnviaDados ( buffer [ pos ] ) ;
28 pos++;
29 }
30 pos++;// p u l a a v i r g u l a
31 //4 N/S
32 w h i l e ( buffer [ pos ] != ',' ) {
33 EnviaDados ( buffer [ pos ] ) ;
34 pos++;
35 }
36 pos++;// p u l a a v i r g u l a
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 57 / 59
Serial
37 //5−L o n g i t u d e
38
39 EnviaComando (0 xC0 ) ;
40 EnviaDados ( 'L' ) ;
41 EnviaDados ( 'O' ) ;
42 EnviaDados ( 'N' ) ;
43
44 w h i l e ( buffer [ pos ] != ',' ) {
45 EnviaDados ( buffer [ pos ] ) ;
46 pos++;
47 }
48 pos++;// p u l a a v i r g u l a
49 //6−L e s t e (E) / Oeste (W)
50 w h i l e ( buffer [ pos ] != ',' ) {
51 EnviaDados ( buffer [ pos ] ) ;
52 pos++;
53 }
54 pos++;// p u l a a v i r g u l a
55 // . . c o n t i n u a para os demais campos
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 58 / 59
Comunicac¸a˜o Serial
Figura : Leitura do GPS e escrita no LCD
ELT024 (IESTI) Comunicac¸a˜o serial: I2C, RS232, HT1380, ME1000RWrodrigomax@unifei.edu.br 59 / 59