1 / 18

Comunicação Serial com o Arduino

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

kamin
Download Presentation

Comunicação Serial com o Arduino

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. 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 de iluminamento de um LED conectado a uma porta analógica do Arduino Prof. Cláudio A. Fleury - Nov-2011

  5. Exemplo • Comandar remotamente o acendimento proporcional de um LED ligado a uma porta de saída analógica #include <LiquidCrystal.h> // inicia LCD com os números dos pinos da interface LiquidCrystallcd(12, 11, 5, 4, 3, 2); constintpinoLed = 9; // o pino no qual o LED está ligado intpos = 0; // posição de armazenamento do caracterrxdo void setup() { Serial.begin(9600); // inicia a comunicação serial pinMode(pinoLed, OUTPUT); // inicia o ledPincomo saída pinMode(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; } Prof. Cláudio A. Fleury - Nov-2011

  6. Exemplo • Comandar remotamente o acendimento proporcional de um LED ligado a uma porta de saída analógica 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 (0x0D): break; seq[pos++] = carac; } if((carac == 13) || (pos > 2)) { seq[pos] = '\0'; Serial.print(" - "); Serial.println(seq); brilho = decodifica(seq); if(brilho > 255) brilho = 255; if(brilho < 0) brilho = 0; pos = 0; lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(brilho); analogWrite(pinoLed, (byte)brilho); // ajusta o brilho do LED } } Prof. Cláudio A. Fleury - Nov-2011

  7. Comunicação Serial em Rede • Inter-IntegratedCircuit Bus (I2C – 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

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

  9. Comunicação Serial em Rede • Bus Inter IntegratedCircuits (I2C) • 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 Prof. Cláudio A. Fleury - Nov-2011

  10. Comunicação Serial em Rede • Bus Inter IntegratedCircuits (I2C) • Protocolo e Formato dos Comandos • 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 pulldown do SDA para que o Master saiba que o byte foi recebido Prof. Cláudio A. Fleury - Nov-2011

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

  12. Comunicação Serial em Rede • Bus Inter IntegratedCircuits (I2C) • Exemplo DS1307 • Lendo dados em um DS1307: • Reset o registrador para a primeira posição, • 2. Requisite sete bytes de dados, • Receba-os em sete variáveis. • O endereço do dispositivo DS1307 é 0×68. • Exemplo de código C: • #define DS1307_I2C_ADDRESS 0x68 // each I2C object has a unique bus address • // the DS1307 address is 0x68 • Wire.beginTransmission(0x68); • Wire.send(0); • Wire.endTransmission(); • Wire.requestFrom(DS1307_I2C_ADDRESS, 7); • *second = bcdToDec(Wire.receive(); • *minute = bcdToDec(Wire.receive(); • *hour = bcdToDec(Wire.receive(); • *dayOfWeek = bcdToDec(Wire.receive()); • *dayOfMonth = bcdToDec(Wire.receive()); • *month = bcdToDec(Wire.receive()); • *year = bcdToDec(Wire.receive()); // Convert normal decimal numbers to binarycoded decimal byte decToBcd(byte val) { return ( (val/10*16) + (val%10) ); } // Convertbinarycoded decimal to normal decimal numbers byte bcdToDec(byte val) { return ( (val/16*10) + (val%16) ); } Prof. Cláudio A. Fleury - Nov-2011

  13. Comunicação Serial em Rede • Bus Inter IntegratedCircuits (I2C) • Exemplo • SRF02 - Ultrasonic Range Finder • Range – 16 cm to 6 m • Power - 5v, 4 mA Typ. • Frequency – 40 kHz • Size - 24mm x 20mm x 17mm height • Analogue Gain - Automatic 64 step gain control • Connection Modes • Standard I2C Bus. • Serial Bus - connects up to 16 devices to any uP or UART serial port • 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 Prof. Cláudio A. Fleury - Nov-2011

  14. Comunicação Serial em Rede • Bus Inter IntegratedCircuits (I2C) • Exemplo • SRF08 - Ultrasonic Range Finder • Voltage - 5v • Current - 15mA Typ. 3mA Standby • Frequency - 40KHz • Range - 3 cm to 6 m. • Max Analogue Gain - Variable 94 to 1025 in 32 steps • Connection - Standard I2C 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 - 43mm x 20mm x 17mm height Prof. Cláudio A. Fleury - Nov-2011

  15. Comunicação Serial em Rede • Bus Inter IntegratedCircuits (I2C) • Exemplo • Seja um SRF08 com endereço padrão de fábrica em 0xE0. • Para iniciar o SRF08 escreva 0x51 no registrador de comandos na posição 0x00 dele: • Envie uma sequência de início (start bit) • Envie o byte 0xE0 (endereço I2C do SRF08 com o bit R/W low (gravação) • Envie 0x00 (endereço interno do registrador de comandos) • Envie 0x51 (comando para iniciar o SRF08) • Envie sequência de parada (stop bit) Prof. Cláudio A. Fleury - Nov-2011

  16. Comunicação Serial em Rede • Bus Inter IntegratedCircuits (I2C) • Exemplo Prof. Cláudio A. Fleury - Nov-2011

  17. Comunicação Serial em Rede • I2C e Arduino • Biblioteca Wire para comunicação com dispositivos I2C / TWI • SDA no Arduino é no pino A4, e SCL no pino A5 • 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), requestFrom(address, count), beginTransmission(address), endTransmission(), write(), byteavailable(), byteread(), onReceive(handler), onRequest(handler) • Versões de I2C 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 Prof. Cláudio A. Fleury - Nov-2011

  18. Fontes • lusorobotica.com/index.php/topic,33.0.html • Using the I2C Bus, www.robot-electronics.co.uk/acatalog/I2C_Tutorial.html • HMC6352 bússola digital + Arduino Diecimila, http://lusorobotica.com/index.php/topic,36.0.html • Como conectar microcontroladores múltiplos de Arduino com o I2C, http://hacknmod.com/hack/how-to-connect-multiple-arduino-microcontrollers-using-i2c/pt/ • DS1307 example, http://tronixstuff.wordpress.com/2010/10/20/tutorial-arduino-and-the-i2c-bus/ Prof. Cláudio A. Fleury - Nov-2011

More Related