3. 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
1
Para melhor uso é interessante retornar os terminais para o valor que
tinham antes de chamar a rotina, já que eles estão multiplexados com outros
dispositivos
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
4. Display de LCD
Dados (bit) Tempo
Instrução RS RW
7 6 5 4 3 2 1 0 (máx.)
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
Cong. 0 0 0 0 0 0 0 1 ID S 37 us
Cong. 0 0 0 0 0 0 1 D C B 37 us
Movim. 0 0 0 0 0 1 SC RL - - 37 us
Cong. 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 Comunicação serial: I2C, RS232, HT1380, ME1000RW
5. Display de LCD
ˆ Deniçõ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 Comunicação serial: I2C, RS232, HT1380, ME1000RW
6. Display de LCD
ˆ Desenvolvimento da biblioteca
ˆ Criação de rotinas de delay (2ms e 40us)
ˆ Função para enviar comandos
ˆ Função para enviar dados
ˆ Função de inicialização
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
9. Comunicação Serial
ˆ Vantagens
ˆ Simplicação do hardware
ˆ Aumento da taxa de transmissão devido a redução de
problemas de sincronia
ˆ Economia de cabos
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
10. Comunicaçã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 Comunicação serial: I2C, RS232, HT1380, ME1000RW
12. Comunicação Serial
ˆ Comunicação serial I2C
ˆ 1982 - Protocolo I2C criado pela Phillips (100 kHz)
ˆ 1992 - Versão 1.0: Adicionada a frequencia de 400 kHz (Fast
mode) e endereçamento de 10 bit addresses
ˆ 1998 - 2.0: Frequê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 identicadores de fabricantes
ˆ É um protocolo serial, sincrono e multi-mestre
Figura: Barramento I2C com vários dispositivos
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
13. Comunicação Serial
ˆ A comunicação I2C é feita de modo síncrono: os bits são
enviados de acordo com um sinal de clock.
ˆ Para isso são necessários pelo menos 2 os:
ˆ Transmissão dos dados, SDA ou serial data
ˆ Transmissão do clock, SCL ou serial clock
ˆ Os terminais são implementados como coletor aberto, exigindo
um pull-up para funcionamento.
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
14. Comunicação Serial
ˆ A comunicação é feita como nos LCD's, mas nesse caso
apenas um bit é enviado por vez:
1 SDA e SCL começam em nível alto
2 SDA é levado para nível baixo como sinal de início
3 SCL é levado para nível baixo
4 o primeiro bit (menos signicativo) é colocado em SDA
5 SCL é levado para nível alto, aguarda-se o tempo do sistema e
abaixa-se novamente SCL
6 repete-se o processo do item 3 até o m da transmissão
7 SDA é levado para nível alto indicando m de transmissão
SDA e SCL no envio de um dado
http://en.wikipedia.org/w/index.php?title=File:I2C_data_transfer.svg
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
16. Comunicação Serial
ˆ Para a biblioteca são necessárias 3 funções bá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 do RTC
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
22. Serial
Exemplo de interface com dispositivo
usando I2C
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
23. Comunicação Serial
ˆ Relógio de tempo real ou RTC (real time clock)
ˆ É um componente que tem como função especíca efetuar a
contagem de tempo de maneira precisa
ˆ Geralmente requer seu próprio cristal para car independente
do sistema principal
ˆ Possue baixo coeciente de atraso/adiantamento
ˆ Pode conter, além do relógio, um calendário
ˆ HT1380
ˆ O HT1380 é um relógio de tempo real com interface de
comunicação serial tipoI2C
ˆ No datasheet do dispositivo não é citada a nomenclatura I2C,
mas o dispositivo é compatível
ˆ Além das linhas de SCL e SDA existe uma linha de habilitação
do chip (Enable)
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
24. Comunicação Serial
ˆ A leitura/escrita de informações no HT1380 é feita em dois
momentos
ˆ Primeiro envia-se um comando de 8 bits indicando o endereç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 Comunicação serial: I2C, RS232, HT1380, ME1000RW
25. Comunicaçã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 Comunicação serial: I2C, RS232, HT1380, ME1000RW
26. Comunicação Serial
ˆ Existem ao todo 8 endereços no HT1380
ˆ segundo, minuto, hora, dia (do mês), mês, dia (da semana),
ano e proteção contra escrita
ˆ Estes valores estão codicados em BCD compactado
Figura: Registros internos do HT1380
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
27. Comunicação Serial
ˆ Para o uso do RTC foram criadas algumas rotinas:
ˆ HT1380write() : Realiza a escrita em um registro do HT1380
via barramento I2C
ˆ HT1380read() : Realiza a leitura de um registro do HT1380
via barramento I2C
ˆ rtcGetSeconds() : Le o valor de segundos do RTC
ˆ rtcPutSeconds() : Grava o valor de segundos no RTC
ˆ rtcGet...
ˆ rtcPut...
ˆ Por efeito de simplicidade no uso, foram criadas funções para
cada campo do RTC
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
32. Serial
Protocolo TIA RS232
.
Interface Between Data Terminal Equipment and Data
Circuit-Terminating Equipment Employing Serial Binary Data Interchange
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
33. Comunicação Serial
ˆ RS232 versus UART
ˆ Similaridades e diferenças e observações:
ˆ UART é uma versão generalizada dos protocolos 232, 485,
422, EIA.
ˆ Visa fornecer uma base padrão para todos estes protocolos
ˆ As tensões são em geral no mesmo nível do processador
ˆ As conversões para os protocolos cam a cargo de chips
externos
ˆ MAX232 (ICL232, ST232, ADM232, HIN232)
ˆ FT232
ˆ SP3485
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
34. Comunicação Serial
ˆ Exemplo de circuitos para interface com UART
Comunicação UART
Comunicação RS232
Comunicação USB
Comunicação RS485
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
35. Comunicação Serial
ˆ Comunicação serial 232
ˆ 1962 - Recommended Standard 232
ˆ 1969 - Recommended Standard 232 rev. C
ˆ 1986 - EIA 232 rev C
ˆ 1997 - TIA 232 rev F
ˆ Procedimento de envio
ˆ Um bit de marcação de inicio de mensagem
ˆ Os 8 bits de dados2
ˆ Um bit de paridade (opcional)
ˆ Um bit de marcação de m de mensagem
2
Primeiro o menos signicativo. Alguns sistemas mais antigos operam com 5
ou 7 bits por vez
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
37. Comunicação Serial
ˆ Para dois dispositivos se comunicarem é necessário
compatibilizar o sistema físico e o sistema lógico.
ˆ Físico (Hardware)
ˆ Tipo de conector
ˆ Pinagem do conector
ˆ Níveis de tensão
ˆ Lógico (Software)
ˆ Codicação utilizada
ˆ Tamanho da palavra
ˆ Tamanho do stop/start bits
ˆ Bit de paridade
ˆ Taxa de transmissão
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
38. Comunicação Serial
ˆ A conguração da comunicação serial é feita 3
através de 5
registros.
ˆ TXSTA e RCSTA : congura o meio de transmissão
ˆ BAUDCON : controle de velocidade
ˆ SPBRGH e SPBRG : conguração da velocidade
3
Para o microcontrolador PIC18F4550. Outros microcontroladores possuem
formato de conguração parecido.
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
39. Comunicação Serial
Bits de Conguração Precisão Taxa de transmissão
Txsta:4 Baudcon:3 Txsta:2
FOSC
0 0 0 8bits F232 =
[64 ∗ (n + 1)]
0 0 1 8bits FOSC
F232 =
0 1 0 16bits [16 ∗ (n + 1)]
0 1 1 16bits
FOSC
1 0 x 8bits F232 =
[4 ∗ (n + 1)]
1 1 x 16bits
x não importa, n valor do par SPBRGH:SPBRG
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
40. Comunicação Serial
Exemplo: Congurar para uma taxa de transmissão de 57,6 kbps.
A frequência de oscilação é um cristal de 8MHz. Usando as três
formulas:
ˆ 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 fórmula que gera menos erro é a de número 3, por isso ela será a
escolhida.
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
41. Serial
1 BitClr(BAUDCON,0); //Desabilita auto detecção de velocidade
2 BitSet(BAUDCON,3); //Registro de geração de sinal com 16 bits
3 BitClr(BAUDCON,6); //Operação de recepção esta ativa
4 BitClr(RCSTA,1); //Desabilita bit de erro de overrun
5 BitClr(RCSTA,2); //Desabilita bit erro na comunicação
6 BitClr(RCSTA,4); //Habilita bit de recepção
7 BitClr(RCSTA,6); //Seleciona 8 bits
8 BitSet(RCSTA,7); //Configura RX/TX como pinos de comunicação
9 BitSet(TXSTA,2); //Modo de alta velocidade habilitado
10 BitSet(TXSTA,3); //Envia bit de parada (break character bit)
11 BitClr(TXSTA,4); //Modo assíncrono
12 BitSet(TXSTA,5); //Habilita transmissão
13 BitClr(TXSTA,6); //Seleciona 8 bits
14 SPBRGH = 0x00; //Configura para 56k (SPBRGH|SPBRG = 32)
15 SPBRG = 0x22; //Configura para 56k (SPBRGH|SPBRG = 32)
16 BitSet(TRISC,6); //Configura pino de recepção como entrada
17 BitClr(TRISC,7); //Configura pino de envio como saída
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
43. Serial
1 #include serial.h
2 #include basico.h
3 void EnviaSerial(unsigned char c) {
4 while(!BitTst(PIR1,4)); //aguarda o registro ficar disponível
5 TXREG=c; //coloca o valor para ser enviado
6 }
7 unsigned char RecebeSerial(void) {
8 if (BitTst(PIR1,5)) //Verifica se existe algum valor disponivel
9 {
10 return RCREG; //retorna o valor
11 }
12 return 0; //condição de erro
13 }
14 void InicializaSerial(void){
15 TXSTA = 0b00101100; //configura a transmissão de dados da serial
16 RCSTA = 0b10010000; //configura a recepção de dados da serial
17 BAUDCON = 0b00001000; //configura sistema de velocidade da serial
18 SPBRGH = 0b00000000; //configura para 56k
19 SPBRG = 0b00100010; //configura para 56k
20 BitSet(TRISC,6); //pino de recepção de dados
21 BitClr(TRISC,7); //pino de envio de dados
22 }
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
45. Serial
1 #include basico.h
2 #include config.h
3 #include serial.h
4 void main(void) {
5 unsigned int i,j=0;
6 char msg[] = Hello World!;
7 unsigned char resp;
8 TRISD = 0x00; //acesso aos leds
9 InicializaSerial();
10 for(;;){
11 for(i = 0; i 65000; i++); //delay
12 EnviaSerial(msg[j]); //envia dados
13 j++;
14 if (j 11){
15 j=0;
16 EnviaSerial(13); //envia quebra de linha
17 }
18 resp = RecebeSerial(); //recebe dados
19 if (resp!=0){
20 PORTD = resp;
21 }
22 }
23 }
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
46. Serial
Exemplo de interface com dispositivos
usando UART/RS232
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
47. Comunicação Serial
ˆ GPS integrado com antena ME-1000RW
ˆ Comunica-se usando padrão UART 9600 bps
ˆ Os dados são passados através de uma string
ˆ Implementa vários padrões NEMA
ˆ GPGSA - Precisão e qnt de satelites ativos
ˆ GPGCA - Dados xados (lat/long/alt/diferencial)
ˆ GPRMC - Dados minimos (lat/long/alt)
ˆ GPVTG - Velocidade e deslocamento
ˆ GPGSV - Dados dos satélites visíveis
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
48. Comunicação Serial
ˆ Mensagem do GPRMC
ˆ Formada por 14 campos:
ˆ 0 - ID da mensagem
ˆ 1 - Tempo (UTC)
ˆ 2 - Rastreando (R) ou Aceitável (A)
ˆ 3 - Latitude
ˆ 4 - Norte/Sul
ˆ 5 - Longitude
ˆ 6 - Leste/Oeste (E/W)
ˆ 7 - Velocidade (magnitude)
ˆ 8 - Velocidade (ângulo)
ˆ 9 - Data (UTC)
ˆ 10 - Variacão Magnética (ângulo em graus)
ˆ 11 - Varia?ão Magnerica (direçào, E/W)
ˆ 12 - Modo de operação (N não válido, A autônomo, D
diferencial, E estimado, M manual, S simulação)
ˆ 13 - Checksum
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
50. Comunicação Serial
ˆ Rotina para recepção dos dados
ˆ Armazenar cada byte recebido num buer temporário.
ˆ Aguardar os dois bytes de m de linha: cr e lf, 'n' e
'r', 13 e 10.
ˆ Caso chegar m de linha, resetar o buer e processar a linha
ˆ No processamento do buer
ˆ Vericar o ID da mensagem($GPRMC)
ˆ Cada campo é separado por virgulas
ˆ Percorrer o campo atual e realizar conversão dos dados ou
enviar p/ o LCD
ˆ Não esquecer de vericar o checksum para segurança
ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW