Comunicao Serial com o Arduino Prof Cludio Nov2011

  • Slides: 18
Download presentation
Comunicação Serial com o Arduino Prof. Cláudio Nov-2011

Comunicação Serial com o Arduino Prof. Cláudio Nov-2011

Comandos �Comunicação Ponto a Ponto (Peer-to-Peer = P 2 P) �Configuração da Porta Serial

Comandos �Comunicação Ponto a Ponto (Peer-to-Peer = P 2 P) �Configuração da Porta Serial // inicia a comunicação serial: Serial. begin(9600); Prof. Cláudio A. Fleury - Nov-2011 �Informação (bytes) disponível para leitura // bytes disponíveis n = Serial. available(); 2

Comandos �Leitura da Porta Serial // lê byte da porta serial carac = Serial.

Comandos �Leitura da Porta Serial // lê byte da porta serial carac = Serial. read(); Prof. Cláudio A. Fleury - Nov-2011 �Grava (escreve) na Porta Serial // grava byte(s) na porta serial Serial. print(carac); // idem, porém com CR ao final da gravação Serial. println(seq); 3

Exemplo � Comandar remotamente o acendimento proporcional de um LED ligado a uma porta

Exemplo � Comandar remotamente o acendimento proporcional de um LED ligado a uma porta de saída analógica � Usuário remoto envia comando numérico (0 a 255) para controlar o nível Prof. Cláudio A. Fleury - Nov-2011 de iluminamento de um LED conectado a uma porta analógica do Arduino 4

Exemplo � Comandar remotamente o acendimento proporcional de um LED ligado a uma porta

Exemplo � Comandar remotamente o acendimento proporcional de um LED ligado a uma porta de saída analógica Prof. Cláudio A. Fleury - Nov-2011 #include <Liquid. Crystal. h> // inicia LCD com os números Liquid. Crystal lcd(12, 11, 5, const int pino. Led = 9; int pos = 0; dos pinos da interface 4, 3, 2); // o pino no qual o LED está ligado // posição de armazenamento do caracter rxdo void setup() { Serial. begin(9600); // inicia a comunicação serial pin. Mode(pino. Led, OUTPUT); // inicia o led. Pin como saída pin. Mode(10, OUTPUT); lcd. begin(16, 2); // número de linhas e colunas do LCD: 16 x 2 lcd. println("Aguardando CMD: "); lcd. print("999<ENTER>"); Serial. println("Aguardando Comando Remoto (999<ENTER>): "); } int decodifica(char *s) { int soma, i; for(soma=i=0; (s[i]!=0) && (i<pos); i++) soma = soma*10 + (s[i]-48); return soma; } 5

Exemplo � Comandar remotamente o acendimento proporcional de um LED ligado a uma porta

Exemplo � Comandar remotamente o acendimento proporcional de um LED ligado a uma porta de saída analógica Prof. Cláudio A. Fleury - Nov-2011 void loop() { char j, n, carac, seq[20]; int brilho; n = Serial. available(); // qtde de dados enviados pelo remoto for(j=0; j<n; j++) { carac = Serial. read(); if(carac == 13 || pos > 2) // lê bytes até encontrar CR (0 x 0 D): break; seq[pos++] = carac; } if((carac == 13) || (pos > 2)) { seq[pos] = ''; Serial. print(" - "); Serial. println(seq); brilho = decodifica(seq); if(brilho > 255) brilho = 255; if(brilho < 0) brilho = 0; pos = 0; lcd. set. Cursor(0, 1); lcd. print(" "); lcd. set. Cursor(0, 1); lcd. print(brilho); analog. Write(pino. Led, (byte)brilho); // ajusta o brilho do LED } } 6

Comunicação Serial em Rede � Inter-Integrated Circuit Bus (I 2 C – pronounced as

Comunicação Serial em Rede � Inter-Integrated Circuit Bus (I 2 C – pronounced as ‘aɪ-skwered-sɪ’) � Barramento com dois fios para conexão de CI’s (dispositivos) Linha Serial DAta (SDA) - para dados � Linha Serial CLock (SCL) - para clock � Desenvolvido pela Philips Semiconductor (hoje, NXP) em 1996 Prof. Cláudio A. Fleury - Nov-2011 � Video 7

Comunicação Serial em Rede � Inter-Integrated Circuit Bus (I 2 C – pronounced as

Comunicação Serial em Rede � Inter-Integrated Circuit Bus (I 2 C – pronounced as ‘aɪ-skwered-sɪ’) � f. SCL: Standard até 100 k. Hz, Fast até 400 k. Hz e High Speed até 3, 4 MHz � Protocolo Master(s)-Slave(s) com até 112 dispositivos em cada barramento � Comprimento máximo do barramento = 100 m � Dispositivos (podem ser Master ou Slave a qualquer momento) Prof. Cláudio A. Fleury - Nov-2011 � real-time clocks, digital potentiometers, temperature sensors, digital compasses, memory chips, FM radio circuits, I/O expanders, LCD controllers, amplifiers, . . . R --> resistor de pull-up, opcional, com valores entre 2 e 10 k. Ohm 8

Comunicação Serial em Rede Prof. Cláudio A. Fleury - Nov-2011 �Bus Inter Integrated Circuits

Comunicação Serial em Rede Prof. Cláudio A. Fleury - Nov-2011 �Bus Inter Integrated Circuits (I 2 C) �Protocolo e Formato dos Comandos § § § Start bit é gerado pelo Master 7 bits de endereço são dados pelo Master para dizer com que Slave pretende comunicar 1 bit indica se existe intenção de escrita ou de leitura no dispositivo endereçado Slave identificado com o endereço diz que tomou conhecimento via bit ACK 1 byte de dados é mandado para o Slave ou pelo Slave, dependendo do bit R/W anterior (0 para Write e 1 para Read) § após cada byte de dados um bit ACK é enviado pelo dispositivo endereçado para dizer que recebeu o byte § a tarefa se repete até que um STOP bit seja enviado pelo Mestre, encerrando a comunicação 9

Comunicação Serial em Rede �Bus Inter Integrated Circuits (I 2 C) �Protocolo e Formato

Comunicação Serial em Rede �Bus Inter Integrated Circuits (I 2 C) �Protocolo e Formato dos Comandos Prof. Cláudio A. Fleury - Nov-2011 � Linha de dados inativa = nível alto (HIGH) § SDA só pode variar com SCL em LOW, e quando SCL subir SDA tem que se manter estável até que SCL desça novamente § Violações da regra anterior: qualquer variação de SDA enquanto SCL esta a HIGH será interpretado como um START ou STOP bit § O dispositivo endereçado deve responder com um bit ACK após cada byte transmitido (9 pulsos de clock para cada byte transmitido). O Master gerará um ciclo extra na linha SCL após cada byte, ao qual o Slave deverá fazer pull down do SDA para que o Master saiba que o byte foi recebido 10

Comunicação Serial em Rede �Bus Inter Integrated Circuits (I 2 C) �Exemplo um relógio

Comunicação Serial em Rede �Bus Inter Integrated Circuits (I 2 C) �Exemplo um relógio de tempo real (RTC) DS 1307 que possui 8 registradores para armazenar dados temporais Prof. Cláudio A. Fleury - Nov-2011 � Seja Para alterar um registrador todos os 8 registradores devem ser reescritos. 11

Comunicação Serial em Rede �Bus Inter Integrated Circuits (I 2 C) �Exemplo DS 1307

Comunicação Serial em Rede �Bus Inter Integrated Circuits (I 2 C) �Exemplo DS 1307 Lendo dados em um DS 1307: 1. Reset o registrador para a primeira posição, 2. Requisite sete bytes de dados, 3. Receba-os em sete variáveis. O endereço do dispositivo DS 1307 é 0× 68. Prof. Cláudio A. Fleury - Nov-2011 Exemplo de código C: // Convert normal decimal numbers to binary coded decimal byte dec. To. Bcd(byte val) { return ( (val/10*16) + (val%10) ); } // Convert binary coded decimal to normal decimal numbers byte bcd. To. Dec(byte val) { return ( (val/16*10) + (val%16) ); } #define DS 1307_I 2 C_ADDRESS 0 x 68 // each I 2 C object has a unique bus address // the DS 1307 address is 0 x 68 Wire. begin. Transmission(0 x 68); Wire. send(0); Wire. end. Transmission(); Wire. request. From(DS 1307_I 2 C_ADDRESS, 7); *second = bcd. To. Dec(Wire. receive(); *minute = bcd. To. Dec(Wire. receive(); *hour = bcd. To. Dec(Wire. receive(); *day. Of. Week = bcd. To. Dec(Wire. receive()); *day. Of. Month = bcd. To. Dec(Wire. receive()); *month = bcd. To. Dec(Wire. receive()); *year = bcd. To. Dec(Wire. receive()); 12

Comunicação Serial em Rede �Bus Inter Integrated Circuits (I 2 C) �Exemplo � SRF

Comunicação Serial em Rede �Bus Inter Integrated Circuits (I 2 C) �Exemplo � SRF 02 - Ultrasonic Range Finder � Range – 16 cm to 6 m � Power - 5 v, 4 m. A Typ. � Frequency – 40 k. Hz � Size - 24 mm x 20 mm x 17 mm height � Analogue Gain - Automatic 64 step gain control � Connection Modes Standard I 2 C Bus. � Serial Bus - connects up to 16 devices to any u. P or UART serial port Prof. Cláudio A. Fleury - Nov-2011 � � Full Automatic Tuning - No calibration, just power up and go � Timing - Fully timed echo, freeing host controller of task � Units - Range reported in μs, cm or inches � Light Weight - 4. 6 g 13

Comunicação Serial em Rede Prof. Cláudio A. Fleury - Nov-2011 �Bus Inter Integrated Circuits

Comunicação Serial em Rede Prof. Cláudio A. Fleury - Nov-2011 �Bus Inter Integrated Circuits (I 2 C) �Exemplo � SRF 08 - Ultrasonic Range Finder � Voltage - 5 v � Current - 15 m. A Typ. 3 m. A Standby � Frequency - 40 KHz � Range - 3 cm to 6 m. � Max Analogue Gain - Variable 94 to 1025 in 32 steps � Connection - Standard I 2 C Bus � Light Sensor - Front Facing light sensor � Timing - Fully timed echo, freeing host controller of task � Echo - Multiple echo - keeps looking after first echo � Units - Range reported in μs, cm or inches � Small Size - 43 mm x 20 mm x 17 mm height 14

Comunicação Serial em Rede �Bus Inter Integrated Circuits (I 2 C) �Exemplo Prof. Cláudio

Comunicação Serial em Rede �Bus Inter Integrated Circuits (I 2 C) �Exemplo Prof. Cláudio A. Fleury - Nov-2011 � Seja um SRF 08 com endereço padrão de fábrica em 0 x. E 0. � Para iniciar o SRF 08 escreva 0 x 51 no registrador de comandos na posição 0 x 00 dele: � Envie uma sequência de início (start bit) � Envie o byte 0 x. E 0 (endereço I 2 C do SRF 08 com o bit R/W low (gravação) � Envie 0 x 00 (endereço interno do registrador de comandos) � Envie 0 x 51 (comando para iniciar o SRF 08) � Envie sequência de parada (stop bit) 15

Comunicação Serial em Rede Prof. Cláudio A. Fleury - Nov-2011 �Bus Inter Integrated Circuits

Comunicação Serial em Rede Prof. Cláudio A. Fleury - Nov-2011 �Bus Inter Integrated Circuits (I 2 C) �Exemplo 16

Comunicação Serial em Rede �I 2 C e Arduino � Biblioteca Wire para comunicação

Comunicação Serial em Rede �I 2 C e Arduino � Biblioteca Wire para comunicação com dispositivos I 2 C / TWI � SDA no Arduino é no pino A 4, e SCL no pino A 5 Prof. Cláudio A. Fleury - Nov-2011 � Biblioteca Wire herda características das funções de fluxos de bits (Stream), compatível com outras bibliotecas de leitura e escrita. funções send() e receive() foram trocadas por read() e write() � +funções : begin(), begin(address), request. From(address, count), begin. Transmission(address), end. Transmission(), write(), byte available(), byte read(), on. Receive(handler), on. Request(handler) � Versões de I 2 C com endereços de 7 e 8 bits (oitavo bit na versão de 7 bits determina a operação: leitura ou escrita). � A biblioteca Wire usa 7 bits para endereçamento. Se o seu dispositivo utiliza 8 bits então voce deverá desprezar o bit LSB, produzindo um endereço entre 0 e 127 17

Fontes Prof. Cláudio A. Fleury - Nov-2011 � lusorobotica. com/index. php/topic, 33. 0. html

Fontes Prof. Cláudio A. Fleury - Nov-2011 � lusorobotica. com/index. php/topic, 33. 0. html � Using the I 2 C Bus, www. robot-electronics. co. uk/acatalog/I 2 C_Tutorial. html � HMC 6352 bússola digital + Arduino Diecimila, http: //lusorobotica. com/index. php/topic, 36. 0. html � Como conectar microcontroladores múltiplos de Arduino com o I 2 C, http: //hacknmod. com/hack/how-to-connect-multiple-arduino-microcontrollers-usingi 2 c/pt/ � DS 1307 example, http: //tronixstuff. wordpress. com/2010/10/20/tutorial-arduino-and-the -i 2 c-bus/ 18