Comunicação serial: I2C, RS232, HT1380,                 ME1000RW Prof.MSc.Rodrigo Maximiano Antunes de Almeida            ...
LCDRevisãoELT024   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;      ˆ Habi...
Display de LCD                          Dados (bit)                                     TempoInstrução   RS     RW        ...
Display de LCDˆ Denições    ˆ ID: 1  Incrementa, 0  Decrementa    ˆ S: 1  O display acompanha o deslocamento    ˆ SC: 1  D...
Display de LCDˆ Desenvolvimento da biblioteca    ˆ Criação de rotinas de delay (2ms e 40us)    ˆ Função para enviar comand...
Display de LCD 1   #include basico.h 2   #include config.h 3   #include lcd.h 4 5   //inicio do programa 6   void main(voi...
SerialComunicaçã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      pr...
Comunicação Serial         Protocolo                Taxa (bits/s)         Taxa (bytes/s)        Serial MIDI               ...
Serial                           Protocolo I2C                                      .Inter-Integrated Circuit             ...
Comunicação Serialˆ Comunicação serial I2C    ˆ 1982 - Protocolo I2C criado pela Phillips (100 kHz)    ˆ 1992 - Versão 1.0...
Comunicação Serialˆ A comunicação I2C é feita de modo síncrono: os bits são  enviados de acordo com um sinal de clock.ˆ Pa...
Comunicação Serialˆ A comunicação é feita como nos LCDs, mas nesse caso  apenas um bit é enviado por vez:    1   SDA e SCL...
SerialCriaçã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 ...
Serial 1   #include i2c.h 2   #include basico.h 3 4   char de; 5   #define DELAY() for(de=0;de100;de++) 6 7   #define   RE...
Serial1   void i2cStart() {2       RESET_OUT();3       SDA_OUT();4       SCL_OUT();5       BitClr(INTCON2, 7); //liga pull...
Serial 1   void writeByte(unsigned char dados) { 2       unsigned char i; 3       for (i = 0; i  8; i++) { 4           //A...
Serial 1   unsigned char readByte() { 2       unsigned char i; 3       unsigned char dados; 4       dados = 0; 5       for...
Serial1   #ifndef I2C_H2       #define I2C_H3       unsigned char readByte();4       void writeByte(unsigned char dados);5...
SerialExemplo de interface com dispositivo            usando I2C              ELT024   Comunicação serial: I2C, RS232, HT1...
Comunicação Serialˆ Relógio de tempo real ou RTC (real time clock)    ˆ É um componente que tem como função especíca efetu...
Comunicação Serialˆ A leitura/escrita de informações no HT1380 é feita em dois  momentos    ˆ Primeiro envia-se um comando...
Comunicação Serialˆ 1 bit indica leitura/escritaˆ 3 bits indicam o campo de interesseˆ 1 bit controla o clock do chip     ...
Comunicação Serialˆ Existem ao todo 8 endereços no HT1380    ˆ segundo, minuto, hora, dia (do mês), mês, dia (da semana), ...
Comunicação Serialˆ Para o uso do RTC foram criadas algumas rotinas:    ˆ HT1380write() : Realiza a escrita em um registro...
Serial 1   void ht1380write(unsigned char addr, unsigned char dados) { 2       RESET_OFF(); 3       SCL_OFF(); 4       SDA...
Serial 1   unsigned char ht1380read(unsigned char addr) { 2       unsigned char dados; 3       RESET_OFF(); 4       SCL_OF...
Serial 1   unsigned char rtcGetSeconds(void) { 2       unsigned char value; 3       value = ht1380read(0); // read seconds...
Serial 1   #ifndef RTC_H 2       #define RTC_H 3       void ht1381write(unsigned char addr, unsigned char data); 4       u...
Serial               Protocolo TIA RS232                                     .Interface Between Data Terminal Equipment an...
Comunicação Serialˆ RS232 versus UARTˆ Similaridades e diferenças e observações:    ˆ UART é uma versão generalizada dos p...
Comunicação Serialˆ Exemplo de circuitos para interface com UART Comunicação UART                                        C...
Comunicação Serial  ˆ Comunicação serial 232      ˆ 1962 - Recommended Standard 232      ˆ 1969 - Recommended Standard 232...
Comunicação SerialSinal serializado para transmissão em RS232              ELT024   Comunicação serial: I2C, RS232, HT1380...
Comunicação Serialˆ Para dois dispositivos se comunicarem é necessário  compatibilizar o sistema físico e o sistema lógico...
Comunicação Serial  ˆ A conguração da comunicação serial é feita          3                                               ...
Comunicação Serial     Bits de Conguração          Precisão          Taxa de transmissãoTxsta:4 Baudcon:3 Txsta:2         ...
Comunicação SerialExemplo: Congurar para uma taxa de transmissão de 57,6 kbps.A frequência de oscilação é um cristal de 8M...
Serial 1   BitClr(BAUDCON,0);   //Desabilita auto detecção de velocidade 2   BitSet(BAUDCON,3);   //Registro de geração de...
SerialCriaçã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)); /...
Serial1   #ifndef SERIAL_H2     #define SERIAL_H3     void EnviaSerial(unsigned char c);4     unsigned char RecebeSerial(v...
Serial 1   #include basico.h 2   #include config.h 3   #include serial.h 4   void main(void) { 5     unsigned int i,j=0; 6...
SerialExemplo de interface com dispositivos       usando UART/RS232              ELT024   Comunicação serial: I2C, RS232, ...
Comunicação Serialˆ GPS integrado com antena ME-1000RW    ˆ Comunica-se usando padrão UART 9600 bps    ˆ Os dados são pass...
Comunicação Serialˆ Mensagem do GPRMC   ˆ Formada por 14 campos:        ˆ 0 - ID da mensagem        ˆ 1 - Tempo (UTC)     ...
Comunicação Serial  ˆ Formato:$ID,000000,X,0000.00,X,00000.00,X,000.0,000.0,000000,000.0,????  ˆ   Exemplo:$GPRMC,220516,A...
Comunicação Serialˆ Rotina para recepção dos dados    ˆ Armazenar cada byte recebido num buer temporário.    ˆ Aguardar os...
Serial 1   #include basico.h 2   #include config.h 3   #include serial.h 4   #include lcd.h 5   void main(void) { 6     un...
Serial 1   //teste de fim de mensagem 2   if((pos  2)  3      (buffer[pos-2] == 13)    //CR 4      (buffer[pos-1] == 10)) ...
Serial 1   //Parser 2 3   //começa depois do ID 4   pos = 7; 5 6   //1 - Hora UTC 7   while(buffer[pos] != ,){ 8     //Env...
Serial 1   //5-Longitude 2   EnviaComando(0xC0); EnviaDados(L); EnviaDados(O); EnviaDados(N); 3   while(buffer[pos] != ,){...
Serial 1   //3 lat 2   EnviaComando(0x80); EnviaDados(L); EnviaDados(A); EnviaDados(T); 3   while(buffer[pos] != ,){ 4    ...
Próximos SlideShares
Carregando em…5
×

Comunicação serial

3.543 visualizações

Publicada em

Comunicação serial: I2C, RS232 e uso do dispositivos HT1380 (RTC) e ME1000RW (GPS)

0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
3.543
No SlideShare
0
A partir de incorporações
0
Número de incorporações
7
Ações
Compartilhamentos
0
Downloads
84
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Comunicação serial

  1. 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. 2. LCDRevisãoELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  3. 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 quetinham antes de chamar a rotina, já que eles estão multiplexados com outrosdispositivos ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  4. 4. Display de LCD Dados (bit) TempoInstruçã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 usReset 0 0 0 0 0 0 0 0 1 - 1.5msCong. 0 0 0 0 0 0 0 1 ID S 37 usCong. 0 0 0 0 0 0 1 D C B 37 usMovim. 0 0 0 0 0 1 SC RL - - 37 usCong. 0 0 0 0 1 DL N F - - 37 usMove(l,c) 0 0 1 X 0 0 Coluna 37 usOcup. 0 1 BF - - - - - - - 10 us http://www.sparkfun.com/datasheets/LCD/HD44780.pdf - Datasheet Hitachi ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  5. 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. 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. 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. 8. SerialComunicação Serial ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  9. 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. 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/sUSB super speed (USB 3.0) 5 Gbit/s 625 MB/s HDMI v. 1.3 10.2 Gbit/s 1.275 GB/sUltra 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/sSerial Attached SCSI (SAS) 3 9,600 Mbit/s 1,200 MB/s ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  11. 11. Serial Protocolo I2C .Inter-Integrated Circuit ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  12. 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. 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. 14. Comunicação Serialˆ A comunicação é feita como nos LCDs, 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. 15. SerialCriação da biblioteca para comunicação I2C ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  16. 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. 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))1112 #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))1718 #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. 18. Serial1 void i2cStart() {2 RESET_OUT();3 SDA_OUT();4 SCL_OUT();5 BitClr(INTCON2, 7); //liga pull up6 } ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  19. 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 clock11 SCL_ON();12 DELAY();//informação válida13 SCL_OFF();14 DELAY();15 //pega o próximo bit16 dados = 1;17 }18 } ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  20. 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. 21. Serial1 #ifndef I2C_H2 #define I2C_H3 unsigned char readByte();4 void writeByte(unsigned char dados);5 void i2cStart();6 #endif ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  22. 22. SerialExemplo de interface com dispositivo usando I2C ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  23. 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. 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. 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. 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. 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. 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ço10 addr |= 0x80; //habilita clock11 writeByte(addr);12 writeByte(dados);1314 RESET_OFF();15 SCL_OFF();16 SDA_OFF();17 } ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  29. 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ço10 addr |= 0x81; //liga bit de leitura e hab. clk11 writeByte(addr);12 SDA_IN(); //muda para entrada13 DELAY();DELAY();DELAY();DELAY(); //aguarda mudança14 dados = readByte();1516 RESET_OFF();17 SCL_OFF();18 SDA_OFF();19 SDA_OUT();20 return dados;21 } ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  30. 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 BCD10 ht1380write(0, (seconds % 10) | ((seconds / 10) 4));11 } ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  31. 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)1112 #endif ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  32. 32. Serial Protocolo TIA RS232 .Interface Between Data Terminal Equipment and DataCircuit-Terminating Equipment Employing Serial Binary Data Interchange ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  33. 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. 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. 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 5ou 7 bits por vez ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  36. 36. Comunicação SerialSinal serializado para transmissão em RS232 ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  37. 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. 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 possuemformato de conguração parecido. ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  39. 39. Comunicação Serial Bits de Conguração Precisão Taxa de transmissãoTxsta: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. 40. Comunicação SerialExemplo: Congurar para uma taxa de transmissão de 57,6 kbps.A frequência de oscilação é um cristal de 8MHz. Usando as trêsformulas: ˆ 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á aescolhida. ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  41. 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 habilitado10 BitSet(TXSTA,3); //Envia bit de parada (break character bit)11 BitClr(TXSTA,4); //Modo assíncrono12 BitSet(TXSTA,5); //Habilita transmissão13 BitClr(TXSTA,6); //Seleciona 8 bits14 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 entrada17 BitClr(TRISC,7); //Configura pino de envio como saída ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  42. 42. SerialCriação da biblioteca para comunicação serial ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  43. 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 valor11 }12 return 0; //condição de erro13 }14 void InicializaSerial(void){15 TXSTA = 0b00101100; //configura a transmissão de dados da serial16 RCSTA = 0b10010000; //configura a recepção de dados da serial17 BAUDCON = 0b00001000; //configura sistema de velocidade da serial18 SPBRGH = 0b00000000; //configura para 56k19 SPBRG = 0b00100010; //configura para 56k20 BitSet(TRISC,6); //pino de recepção de dados21 BitClr(TRISC,7); //pino de envio de dados22 } ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  44. 44. Serial1 #ifndef SERIAL_H2 #define SERIAL_H3 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. 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++); //delay12 EnviaSerial(msg[j]); //envia dados13 j++;14 if (j 11){15 j=0;16 EnviaSerial(13); //envia quebra de linha17 }18 resp = RecebeSerial(); //recebe dados19 if (resp!=0){20 PORTD = resp;21 }22 }23 } ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  46. 46. SerialExemplo de interface com dispositivos usando UART/RS232 ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  47. 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. 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. 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. 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. 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 overflow14 //teste de fim de mensagem15 // ...16 }17 }18 } ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  52. 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 mensagem14 // ...15 }16 } ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  53. 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 virgula1213 //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. 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 virgula14 //..continua para os demais campos ELT024 Comunicação serial: I2C, RS232, HT1380, ME1000RW
  55. 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

×