SlideShare ist ein Scribd-Unternehmen logo
1 von 55
Downloaden Sie, um offline zu lesen
Comunicação serial: I2C, RS232, HT1380,

                 ME1000RW



 Prof.MSc.Rodrigo Maximiano Antunes de Almeida

            Universidade Federal de Itajubá



          rodrigomax@unifei.edu.br




                   ELT024    Comunicação serial: I2C, RS232, HT1380, ME1000RW
LCD




Revisão




ELT024   Comunicação serial: I2C, RS232, HT1380, ME1000RW
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
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
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
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
Display de LCD




 1   #include basico.h
 2   #include config.h
 3   #include lcd.h
 4
 5   //inicio do programa
 6   void main(void)
 7   {
 8       unsigned int i,j;
 9       char msg[] = Hello World!;
10       InicializaLCD();
11       for(i=0;i11;i++)
12       {
13           EnviaDados(msg[i]);
14           for(j = 0; j  65000; j++);
15       }
16       for(;;);
17   }




                                 ELT024    Comunicação serial: I2C, RS232, HT1380, ME1000RW
Serial




Comunicação Serial




     ELT024   Comunicação serial: I2C, RS232, HT1380, ME1000RW
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
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
Serial




                           Protocolo I2C

                                      .
Inter-Integrated Circuit




                             ELT024       Comunicação serial: I2C, RS232, HT1380, ME1000RW
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
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
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
Serial




Criação da biblioteca para

    comunicação I2C




         ELT024   Comunicação serial: I2C, RS232, HT1380, ME1000RW
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
Serial


 1   #include i2c.h
 2   #include basico.h
 3
 4   char de;
 5   #define DELAY() for(de=0;de100;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      Comunicação serial: I2C, RS232, HT1380, ME1000RW
Serial




1   void i2cStart() {
2       RESET_OUT();
3       SDA_OUT();
4       SCL_OUT();
5       BitClr(INTCON2, 7); //liga pull up
6   }




                                ELT024       Comunicação serial: I2C, RS232, HT1380, ME1000RW
Serial



 1   void writeByte(unsigned char dados) {
 2       unsigned char i;
 3       for (i = 0; i  8; i++) {
 4           //Analisa o bit a ser transmitido
 5           if (dados  0x01) {
 6               SDA_ON();
 7           } else {
 8               SDA_OFF();
 9           }
10           //geração do pulso de clock
11           SCL_ON();
12           DELAY();//informação válida
13           SCL_OFF();
14           DELAY();
15           //pega o próximo bit
16           dados = 1;
17       }
18   }



                                 ELT024    Comunicação serial: I2C, RS232, HT1380, ME1000RW
Serial




 1   unsigned char readByte() {
 2       unsigned char i;
 3       unsigned char dados;
 4       dados = 0;
 5       for (i = 0; i  8; i++) {
 6           SCL_ON();
 7           DELAY();// informação válida
 8           if (SDA()) {
 9               dados |= 0x80;
10           }
11           SCL_OFF();
12           DELAY();
13           dados = 1;
14       }
15       return dados;
16   }




                                 ELT024     Comunicação serial: I2C, RS232, HT1380, ME1000RW
Serial




1   #ifndef I2C_H
2       #define I2C_H
3       unsigned char readByte();
4       void writeByte(unsigned char dados);
5       void i2cStart();
6   #endif




                                ELT024    Comunicação serial: I2C, RS232, HT1380, ME1000RW
Serial




Exemplo de interface com dispositivo

            usando I2C




              ELT024   Comunicação serial: I2C, RS232, HT1380, ME1000RW
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
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
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
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
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
Serial




 1   void ht1380write(unsigned char addr, unsigned char dados) {
 2       RESET_OFF();
 3       SCL_OFF();
 4       SDA_OFF();
 5
 6       //liga o RTC
 7       RESET_ON();
 8
 9       addr = 1; //corrige endereço
10       addr |= 0x80; //habilita clock
11       writeByte(addr);
12       writeByte(dados);
13
14       RESET_OFF();
15       SCL_OFF();
16       SDA_OFF();
17   }




                                 ELT024    Comunicação serial: I2C, RS232, HT1380, ME1000RW
Serial


 1   unsigned char ht1380read(unsigned char addr) {
 2       unsigned char dados;
 3       RESET_OFF();
 4       SCL_OFF();
 5       SDA_OFF();
 6
 7       RESET_ON();
 8
 9       addr = 1; //corrige endereço
10       addr |= 0x81; //liga bit de leitura e hab. clk
11       writeByte(addr);
12       SDA_IN();     //muda para entrada
13       DELAY();DELAY();DELAY();DELAY(); //aguarda mudança
14       dados = readByte();
15
16       RESET_OFF();
17       SCL_OFF();
18       SDA_OFF();
19       SDA_OUT();
20       return dados;
21   }

                                 ELT024    Comunicação serial: I2C, RS232, HT1380, ME1000RW
Serial




 1   unsigned char rtcGetSeconds(void) {
 2       unsigned char value;
 3       value = ht1380read(0); // read seconds
 4       //converte de BCD para decimal
 5       return (((value  4)0x07)*10 + (value  0x0f));
 6   }
 7
 8   void rtcPutSeconds(char seconds) {
 9   //converte de decimal para BCD
10       ht1380write(0, (seconds % 10) | ((seconds / 10)  4));
11   }




                                 ELT024    Comunicação serial: I2C, RS232, HT1380, ME1000RW
Serial




 1   #ifndef RTC_H
 2       #define RTC_H
 3       void ht1381write(unsigned char addr, unsigned char data);
 4       unsigned char ht1381read(unsigned char addr);
 5
 6       unsigned char rtcGetSeconds(void);
 7       void rtcPutSeconds(unsigned char seconds);
 8       unsigned char rtcGetMinutes(void);
 9       void rtcPutMinutes(unsigned char minutes);
10       //o mesmo para horas, dia (mês), mês, ano, dia (semana)
11
12   #endif




                                 ELT024    Comunicação serial: I2C, RS232, HT1380, ME1000RW
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
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
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
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
Comunicação Serial




Sinal serializado para transmissão em RS232

              ELT024   Comunicação serial: I2C, RS232, HT1380, ME1000RW
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
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
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
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
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
Serial




Criação da biblioteca para

   comunicação serial




         ELT024   Comunicação serial: I2C, RS232, HT1380, ME1000RW
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
Serial




1   #ifndef SERIAL_H
2     #define SERIAL_H
3     void EnviaSerial(unsigned char c);
4     unsigned char RecebeSerial(void);
5     void InicializaSerial(void);
6   #endif //SERIAL_H




                                ELT024     Comunicação serial: I2C, RS232, HT1380, ME1000RW
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
Serial




Exemplo de interface com dispositivos

       usando UART/RS232




              ELT024   Comunicação serial: I2C, RS232, HT1380, ME1000RW
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
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
Comunicaçã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    Comunicação serial: I2C, RS232, HT1380, ME1000RW
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
Serial



 1   #include basico.h
 2   #include config.h
 3   #include serial.h
 4   #include lcd.h
 5   void main(void) {
 6     unsigned char pos=0; //posição atual do buffer
 7     char buffer[100];    //buffer temporário
 8     InicializaSerial();
 9     InicializaLCD();
10     for(;;) {
11       while(BitTst(PIR1,5) != 0){
12           buffer[pos] = RCREG;
13           pos++; //cuidado com buffer overflow
14           //teste de fim de mensagem
15           // ...
16       }
17     }
18   }



                                 ELT024    Comunicação serial: I2C, RS232, HT1380, ME1000RW
Serial




 1   //teste de fim de mensagem
 2   if((pos  2) 
 3      (buffer[pos-2] == 13)    //CR
 4      (buffer[pos-1] == 10)) {   //LF
 5     pos = 0;
 6     //se o ID estiver correto   processa o buffer
 7     if( (buffer[0] == '$')    (buffer[1] == 'G') 
 8         (buffer[2] == 'P') 
 9         (buffer[3] == 'R') 
10         (buffer[4] == 'M') 
11         (buffer[5] == 'C'))
12     {
13        //parser da mensagem
14        // ...
15     }
16   }




                              ELT024      Comunicação serial: I2C, RS232, HT1380, ME1000RW
Serial



 1   //Parser
 2
 3   //começa depois do ID
 4   pos = 7;
 5
 6   //1 - Hora UTC
 7   while(buffer[pos] != ','){
 8     //EnviaDados(buffer[pos]);
 9     pos++;
10   }
11   pos++;//pula a virgula
12
13   //2 A(OK)
14   while(buffer[pos] != ','){
15     //EnviaDados(buffer[pos]);
16     pos++;
17   }
18   pos++;//pula a virgula



                                    ELT024   Comunicação serial: I2C, RS232, HT1380, ME1000RW
Serial




 1   //5-Longitude
 2   EnviaComando(0xC0); EnviaDados('L'); EnviaDados('O'); EnviaDados('N');
 3   while(buffer[pos] != ','){
 4     EnviaDados(buffer[pos]);
 5     pos++;
 6   }
 7   pos++;//pula a virgula
 8   //6-Leste(E)/Oeste(W)
 9   while(buffer[pos] != ','){
10     EnviaDados(buffer[pos]);
11     pos++;
12   }
13   pos++;//pula a virgula
14   //..continua para os demais campos




                                 ELT024    Comunicação serial: I2C, RS232, HT1380, ME1000RW
Serial




 1   //3 lat
 2   EnviaComando(0x80); EnviaDados('L'); EnviaDados('A'); EnviaDados('T');
 3   while(buffer[pos] != ','){
 4     EnviaDados(buffer[pos]);
 5     pos++;
 6   }
 7   pos++;//pula a virgula
 8   //4 N/S
 9   while(buffer[pos] != ','){
10     EnviaDados(buffer[pos]);
11     pos++;
12   }
13   pos++;//pula a virgula




                                 ELT024    Comunicação serial: I2C, RS232, HT1380, ME1000RW

Weitere ähnliche Inhalte

Was ist angesagt?

Embedded Systems Overview
Embedded Systems OverviewEmbedded Systems Overview
Embedded Systems OverviewSameer Rapate
 
Interfacing rs232
Interfacing rs232Interfacing rs232
Interfacing rs232PRADEEP
 
Wishbone interface and bus cycles
Wishbone interface and bus cyclesWishbone interface and bus cycles
Wishbone interface and bus cyclesdennis gookyi
 
Introdução à Computação Aula 07 - Algoritmos (Sistemas de Numeração)
Introdução à Computação Aula 07 - Algoritmos (Sistemas de Numeração)Introdução à Computação Aula 07 - Algoritmos (Sistemas de Numeração)
Introdução à Computação Aula 07 - Algoritmos (Sistemas de Numeração)Leinylson Fontinele
 
Exercicio - Introdução a Hardware Revisão
Exercicio - Introdução a Hardware RevisãoExercicio - Introdução a Hardware Revisão
Exercicio - Introdução a Hardware RevisãoSuzana Viana Mota
 
communication interfaces-Embedded real time systems
communication interfaces-Embedded real time systemscommunication interfaces-Embedded real time systems
communication interfaces-Embedded real time systemsRaghunath reddy
 
Verilog coding of mux 8 x1
Verilog coding of mux  8 x1Verilog coding of mux  8 x1
Verilog coding of mux 8 x1Rakesh kumar jha
 
Online test program generator for RISC-V processors
Online test program generator for RISC-V processorsOnline test program generator for RISC-V processors
Online test program generator for RISC-V processorsRISC-V International
 
Logic families
Logic familiesLogic families
Logic familiesPatel Jay
 
Normas da ABNT NBR 14565 - Procedimento Básico Para Elaboração de projetos de...
Normas da ABNT NBR 14565 - Procedimento Básico Para Elaboração de projetos de...Normas da ABNT NBR 14565 - Procedimento Básico Para Elaboração de projetos de...
Normas da ABNT NBR 14565 - Procedimento Básico Para Elaboração de projetos de...Eduardo Santana
 
I2c protocol - Inter–Integrated Circuit Communication Protocol
I2c protocol - Inter–Integrated Circuit Communication ProtocolI2c protocol - Inter–Integrated Circuit Communication Protocol
I2c protocol - Inter–Integrated Circuit Communication ProtocolAnkur Soni
 
Rct 1 - histórico e evolução das redes de telecomunicações e de computadores
Rct   1 - histórico e evolução das redes de telecomunicações e de computadoresRct   1 - histórico e evolução das redes de telecomunicações e de computadores
Rct 1 - histórico e evolução das redes de telecomunicações e de computadoresUniversal.org.mx
 

Was ist angesagt? (20)

Ppt career
Ppt careerPpt career
Ppt career
 
8051 ch9-950217
8051 ch9-9502178051 ch9-950217
8051 ch9-950217
 
Embedded Systems Overview
Embedded Systems OverviewEmbedded Systems Overview
Embedded Systems Overview
 
Interfacing rs232
Interfacing rs232Interfacing rs232
Interfacing rs232
 
Uart
UartUart
Uart
 
Wishbone interface and bus cycles
Wishbone interface and bus cyclesWishbone interface and bus cycles
Wishbone interface and bus cycles
 
Introdução à Computação Aula 07 - Algoritmos (Sistemas de Numeração)
Introdução à Computação Aula 07 - Algoritmos (Sistemas de Numeração)Introdução à Computação Aula 07 - Algoritmos (Sistemas de Numeração)
Introdução à Computação Aula 07 - Algoritmos (Sistemas de Numeração)
 
Exercicio - Introdução a Hardware Revisão
Exercicio - Introdução a Hardware RevisãoExercicio - Introdução a Hardware Revisão
Exercicio - Introdução a Hardware Revisão
 
communication interfaces-Embedded real time systems
communication interfaces-Embedded real time systemscommunication interfaces-Embedded real time systems
communication interfaces-Embedded real time systems
 
PCIe
PCIePCIe
PCIe
 
Verilog coding of mux 8 x1
Verilog coding of mux  8 x1Verilog coding of mux  8 x1
Verilog coding of mux 8 x1
 
Online test program generator for RISC-V processors
Online test program generator for RISC-V processorsOnline test program generator for RISC-V processors
Online test program generator for RISC-V processors
 
Logic families
Logic familiesLogic families
Logic families
 
Normas da ABNT NBR 14565 - Procedimento Básico Para Elaboração de projetos de...
Normas da ABNT NBR 14565 - Procedimento Básico Para Elaboração de projetos de...Normas da ABNT NBR 14565 - Procedimento Básico Para Elaboração de projetos de...
Normas da ABNT NBR 14565 - Procedimento Básico Para Elaboração de projetos de...
 
I2C
I2CI2C
I2C
 
Sistemas Supervisórios
Sistemas SupervisóriosSistemas Supervisórios
Sistemas Supervisórios
 
BIT Error Rate
BIT Error RateBIT Error Rate
BIT Error Rate
 
axi protocol
axi protocolaxi protocol
axi protocol
 
I2c protocol - Inter–Integrated Circuit Communication Protocol
I2c protocol - Inter–Integrated Circuit Communication ProtocolI2c protocol - Inter–Integrated Circuit Communication Protocol
I2c protocol - Inter–Integrated Circuit Communication Protocol
 
Rct 1 - histórico e evolução das redes de telecomunicações e de computadores
Rct   1 - histórico e evolução das redes de telecomunicações e de computadoresRct   1 - histórico e evolução das redes de telecomunicações e de computadores
Rct 1 - histórico e evolução das redes de telecomunicações e de computadores
 

Ähnlich wie Comunicação serial

Utilizando um Display de LCD
Utilizando um Display de LCDUtilizando um Display de LCD
Utilizando um Display de LCDRodrigo Almeida
 
gk_2021_01_Aula07-twi.pdf
gk_2021_01_Aula07-twi.pdfgk_2021_01_Aula07-twi.pdf
gk_2021_01_Aula07-twi.pdfMicaelMarques13
 
Microcontroladores PIC.pptx
Microcontroladores PIC.pptxMicrocontroladores PIC.pptx
Microcontroladores PIC.pptxfmtpereira
 
Clp varios modelos
Clp varios modelosClp varios modelos
Clp varios modelosdetectfelix
 
Clp varios modelos
Clp varios modelosClp varios modelos
Clp varios modelosdetectfelix
 
[3/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[3/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[3/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[3/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...Marcelo Barros de Almeida
 
Oficina Arduino - Jornada de Tecnologia 2014 (E-poti) - Part II
Oficina Arduino - Jornada de Tecnologia 2014 (E-poti) - Part IIOficina Arduino - Jornada de Tecnologia 2014 (E-poti) - Part II
Oficina Arduino - Jornada de Tecnologia 2014 (E-poti) - Part IICarlos Carvalho
 
Arduino Hack Day por Vinicius Senger
Arduino Hack Day por Vinicius SengerArduino Hack Day por Vinicius Senger
Arduino Hack Day por Vinicius SengerGlobalcode
 
Webinar Gravado: Um Estudo sobre a I2C e o Futuro com a I3C
Webinar Gravado: Um Estudo sobre a I2C e o Futuro com a I3CWebinar Gravado: Um Estudo sobre a I2C e o Futuro com a I3C
Webinar Gravado: Um Estudo sobre a I2C e o Futuro com a I3CEmbarcados
 
Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PC
Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PCFrequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PC
Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PCPaulo Duarte
 

Ähnlich wie Comunicação serial (20)

Utilizando um Display de LCD
Utilizando um Display de LCDUtilizando um Display de LCD
Utilizando um Display de LCD
 
gk_2021_01_Aula07-twi.pdf
gk_2021_01_Aula07-twi.pdfgk_2021_01_Aula07-twi.pdf
gk_2021_01_Aula07-twi.pdf
 
Basico de protocolos
Basico de protocolosBasico de protocolos
Basico de protocolos
 
Pic aula1
Pic   aula1Pic   aula1
Pic aula1
 
Microcontroladores PIC.pptx
Microcontroladores PIC.pptxMicrocontroladores PIC.pptx
Microcontroladores PIC.pptx
 
Clp varios modelos
Clp varios modelosClp varios modelos
Clp varios modelos
 
Clp varios modelos
Clp varios modelosClp varios modelos
Clp varios modelos
 
Lab2 vhdl fluxo_quartus
Lab2 vhdl fluxo_quartusLab2 vhdl fluxo_quartus
Lab2 vhdl fluxo_quartus
 
2 manual - clp pic40-v3
2 manual - clp pic40-v32 manual - clp pic40-v3
2 manual - clp pic40-v3
 
Pic slides
Pic slidesPic slides
Pic slides
 
Comunicação i2 c
Comunicação i2 cComunicação i2 c
Comunicação i2 c
 
[3/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[3/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[3/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[3/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
 
ARM
ARMARM
ARM
 
Roteiro exp9
Roteiro exp9Roteiro exp9
Roteiro exp9
 
Pic18xx
Pic18xxPic18xx
Pic18xx
 
Circuitos combinatorios
Circuitos combinatoriosCircuitos combinatorios
Circuitos combinatorios
 
Oficina Arduino - Jornada de Tecnologia 2014 (E-poti) - Part II
Oficina Arduino - Jornada de Tecnologia 2014 (E-poti) - Part IIOficina Arduino - Jornada de Tecnologia 2014 (E-poti) - Part II
Oficina Arduino - Jornada de Tecnologia 2014 (E-poti) - Part II
 
Arduino Hack Day por Vinicius Senger
Arduino Hack Day por Vinicius SengerArduino Hack Day por Vinicius Senger
Arduino Hack Day por Vinicius Senger
 
Webinar Gravado: Um Estudo sobre a I2C e o Futuro com a I3C
Webinar Gravado: Um Estudo sobre a I2C e o Futuro com a I3CWebinar Gravado: Um Estudo sobre a I2C e o Futuro com a I3C
Webinar Gravado: Um Estudo sobre a I2C e o Futuro com a I3C
 
Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PC
Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PCFrequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PC
Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PC
 

Mehr von Rodrigo Almeida

Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Rodrigo Almeida
 
Embedded systems development Defcon 19
Embedded systems development Defcon 19Embedded systems development Defcon 19
Embedded systems development Defcon 19Rodrigo Almeida
 
As diferentes engenharias
As diferentes engenhariasAs diferentes engenharias
As diferentes engenhariasRodrigo Almeida
 
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Rodrigo Almeida
 
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Rodrigo Almeida
 
Cryptology - Antônio Lacerda
Cryptology - Antônio LacerdaCryptology - Antônio Lacerda
Cryptology - Antônio LacerdaRodrigo Almeida
 
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Rodrigo Almeida
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Rodrigo Almeida
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Rodrigo Almeida
 
Projeto de uma controladora de drivers
Projeto de uma controladora de driversProjeto de uma controladora de drivers
Projeto de uma controladora de driversRodrigo Almeida
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosRodrigo Almeida
 
Kernel com requisitos temporais
Kernel com requisitos temporaisKernel com requisitos temporais
Kernel com requisitos temporaisRodrigo Almeida
 
Definição de processos
Definição de processosDefinição de processos
Definição de processosRodrigo Almeida
 
Conceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersConceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersRodrigo Almeida
 
Introdução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosIntrodução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosRodrigo Almeida
 
Segurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusSegurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusRodrigo Almeida
 
Leitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialLeitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialRodrigo Almeida
 
Display de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosDisplay de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosRodrigo Almeida
 

Mehr von Rodrigo Almeida (20)

Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015
 
Embedded systems development Defcon 19
Embedded systems development Defcon 19Embedded systems development Defcon 19
Embedded systems development Defcon 19
 
As diferentes engenharias
As diferentes engenhariasAs diferentes engenharias
As diferentes engenharias
 
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
 
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
 
Cryptology - Antônio Lacerda
Cryptology - Antônio LacerdaCryptology - Antônio Lacerda
Cryptology - Antônio Lacerda
 
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
 
Projeto de uma controladora de drivers
Projeto de uma controladora de driversProjeto de uma controladora de drivers
Projeto de uma controladora de drivers
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcados
 
Kernel com requisitos temporais
Kernel com requisitos temporaisKernel com requisitos temporais
Kernel com requisitos temporais
 
Kernel cooperativo
Kernel cooperativoKernel cooperativo
Kernel cooperativo
 
Definição de processos
Definição de processosDefinição de processos
Definição de processos
 
Ponteiros de Função
Ponteiros de FunçãoPonteiros de Função
Ponteiros de Função
 
Conceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersConceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffers
 
Introdução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosIntrodução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcados
 
Segurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusSegurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virus
 
Leitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialLeitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricial
 
Display de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosDisplay de 7 segmentos multiplexados
Display de 7 segmentos multiplexados
 

Comunicação serial

  • 1. Comunicação serial: I2C, RS232, HT1380, ME1000RW Prof.MSc.Rodrigo Maximiano Antunes de Almeida Universidade Federal de Itajubá rodrigomax@unifei.edu.br ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  • 2. LCD Revisão ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  • 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
  • 7. Display de LCD 1 #include basico.h 2 #include config.h 3 #include lcd.h 4 5 //inicio do programa 6 void main(void) 7 { 8 unsigned int i,j; 9 char msg[] = Hello World!; 10 InicializaLCD(); 11 for(i=0;i11;i++) 12 { 13 EnviaDados(msg[i]); 14 for(j = 0; j 65000; j++); 15 } 16 for(;;); 17 } ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  • 8. Serial Comunicação Serial 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
  • 11. Serial Protocolo I2C . Inter-Integrated Circuit 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
  • 15. Serial Criação da biblioteca para comunicação I2C 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
  • 17. Serial 1 #include i2c.h 2 #include basico.h 3 4 char de; 5 #define DELAY() for(de=0;de100;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 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  • 18. Serial 1 void i2cStart() { 2 RESET_OUT(); 3 SDA_OUT(); 4 SCL_OUT(); 5 BitClr(INTCON2, 7); //liga pull up 6 } ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  • 19. Serial 1 void writeByte(unsigned char dados) { 2 unsigned char i; 3 for (i = 0; i 8; i++) { 4 //Analisa o bit a ser transmitido 5 if (dados 0x01) { 6 SDA_ON(); 7 } else { 8 SDA_OFF(); 9 } 10 //geração do pulso de clock 11 SCL_ON(); 12 DELAY();//informação válida 13 SCL_OFF(); 14 DELAY(); 15 //pega o próximo bit 16 dados = 1; 17 } 18 } ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  • 20. Serial 1 unsigned char readByte() { 2 unsigned char i; 3 unsigned char dados; 4 dados = 0; 5 for (i = 0; i 8; i++) { 6 SCL_ON(); 7 DELAY();// informação válida 8 if (SDA()) { 9 dados |= 0x80; 10 } 11 SCL_OFF(); 12 DELAY(); 13 dados = 1; 14 } 15 return dados; 16 } ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  • 21. Serial 1 #ifndef I2C_H 2 #define I2C_H 3 unsigned char readByte(); 4 void writeByte(unsigned char dados); 5 void i2cStart(); 6 #endif 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
  • 28. Serial 1 void ht1380write(unsigned char addr, unsigned char dados) { 2 RESET_OFF(); 3 SCL_OFF(); 4 SDA_OFF(); 5 6 //liga o RTC 7 RESET_ON(); 8 9 addr = 1; //corrige endereço 10 addr |= 0x80; //habilita clock 11 writeByte(addr); 12 writeByte(dados); 13 14 RESET_OFF(); 15 SCL_OFF(); 16 SDA_OFF(); 17 } ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  • 29. Serial 1 unsigned char ht1380read(unsigned char addr) { 2 unsigned char dados; 3 RESET_OFF(); 4 SCL_OFF(); 5 SDA_OFF(); 6 7 RESET_ON(); 8 9 addr = 1; //corrige endereço 10 addr |= 0x81; //liga bit de leitura e hab. clk 11 writeByte(addr); 12 SDA_IN(); //muda para entrada 13 DELAY();DELAY();DELAY();DELAY(); //aguarda mudança 14 dados = readByte(); 15 16 RESET_OFF(); 17 SCL_OFF(); 18 SDA_OFF(); 19 SDA_OUT(); 20 return dados; 21 } ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  • 30. Serial 1 unsigned char rtcGetSeconds(void) { 2 unsigned char value; 3 value = ht1380read(0); // read seconds 4 //converte de BCD para decimal 5 return (((value 4)0x07)*10 + (value 0x0f)); 6 } 7 8 void rtcPutSeconds(char seconds) { 9 //converte de decimal para BCD 10 ht1380write(0, (seconds % 10) | ((seconds / 10) 4)); 11 } ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  • 31. Serial 1 #ifndef RTC_H 2 #define RTC_H 3 void ht1381write(unsigned char addr, unsigned char data); 4 unsigned char ht1381read(unsigned char addr); 5 6 unsigned char rtcGetSeconds(void); 7 void rtcPutSeconds(unsigned char seconds); 8 unsigned char rtcGetMinutes(void); 9 void rtcPutMinutes(unsigned char minutes); 10 //o mesmo para horas, dia (mês), mês, ano, dia (semana) 11 12 #endif 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
  • 36. Comunicação Serial Sinal serializado para transmissão em RS232 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
  • 42. Serial Criação da biblioteca para comunicação serial 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
  • 44. Serial 1 #ifndef SERIAL_H 2 #define SERIAL_H 3 void EnviaSerial(unsigned char c); 4 unsigned char RecebeSerial(void); 5 void InicializaSerial(void); 6 #endif //SERIAL_H 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
  • 49. Comunicaçã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 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
  • 51. Serial 1 #include basico.h 2 #include config.h 3 #include serial.h 4 #include lcd.h 5 void main(void) { 6 unsigned char pos=0; //posição atual do buffer 7 char buffer[100]; //buffer temporário 8 InicializaSerial(); 9 InicializaLCD(); 10 for(;;) { 11 while(BitTst(PIR1,5) != 0){ 12 buffer[pos] = RCREG; 13 pos++; //cuidado com buffer overflow 14 //teste de fim de mensagem 15 // ... 16 } 17 } 18 } ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  • 52. Serial 1 //teste de fim de mensagem 2 if((pos 2) 3 (buffer[pos-2] == 13) //CR 4 (buffer[pos-1] == 10)) { //LF 5 pos = 0; 6 //se o ID estiver correto processa o buffer 7 if( (buffer[0] == '$') (buffer[1] == 'G') 8 (buffer[2] == 'P') 9 (buffer[3] == 'R') 10 (buffer[4] == 'M') 11 (buffer[5] == 'C')) 12 { 13 //parser da mensagem 14 // ... 15 } 16 } ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  • 53. Serial 1 //Parser 2 3 //começa depois do ID 4 pos = 7; 5 6 //1 - Hora UTC 7 while(buffer[pos] != ','){ 8 //EnviaDados(buffer[pos]); 9 pos++; 10 } 11 pos++;//pula a virgula 12 13 //2 A(OK) 14 while(buffer[pos] != ','){ 15 //EnviaDados(buffer[pos]); 16 pos++; 17 } 18 pos++;//pula a virgula ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  • 54. Serial 1 //5-Longitude 2 EnviaComando(0xC0); EnviaDados('L'); EnviaDados('O'); EnviaDados('N'); 3 while(buffer[pos] != ','){ 4 EnviaDados(buffer[pos]); 5 pos++; 6 } 7 pos++;//pula a virgula 8 //6-Leste(E)/Oeste(W) 9 while(buffer[pos] != ','){ 10 EnviaDados(buffer[pos]); 11 pos++; 12 } 13 pos++;//pula a virgula 14 //..continua para os demais campos ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  • 55. Serial 1 //3 lat 2 EnviaComando(0x80); EnviaDados('L'); EnviaDados('A'); EnviaDados('T'); 3 while(buffer[pos] != ','){ 4 EnviaDados(buffer[pos]); 5 pos++; 6 } 7 pos++;//pula a virgula 8 //4 N/S 9 while(buffer[pos] != ','){ 10 EnviaDados(buffer[pos]); 11 pos++; 12 } 13 pos++;//pula a virgula ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW