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

Comunicação Serial com o Arduino

  • Upload
    kamin

  • View
    40

  • Download
    4

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: Comunicação Serial com o Arduino

Comunicação Serial com o ArduinoProf. Cláudio

Nov-2011

Page 2: Comunicação Serial com o Arduino

Pro

f. C

láu

dio

A.

Fle

ury

-

N

ov

-20

11

2

ComandosComunicaçã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íveisn = Serial.available();

Page 3: Comunicação Serial com o Arduino

Pro

f. C

láu

dio

A.

Fle

ury

-

N

ov

-20

11

3

ComandosLeitura da Porta Serial

Grava (escreve) na Porta Serial

// lê byte da porta serialcarac = Serial.read();

// grava byte(s) na porta serialSerial.print(carac);// idem, porém com CR ao final da gravaçãoSerial.println(seq);

Page 4: Comunicação Serial com o Arduino

Pro

f. C

láu

dio

A.

Fle

ury

-

N

ov

-20

11

4

ExemploComandar 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

Page 5: Comunicação Serial com o Arduino

Pro

f. C

láu

dio

A.

Fle

ury

-

N

ov

-20

11

5

ExemploComandar 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 interfaceLiquidCrystal lcd(12, 11, 5, 4, 3, 2);const int pinoLed = 9; // o pino no qual o LED está ligadoint pos = 0; // posição de armazenamento do caracter rxdo

void setup() { Serial.begin(9600); // inicia a comunicação serial pinMode(pinoLed, OUTPUT); // inicia o ledPin como 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;}

Page 6: Comunicação Serial com o Arduino

Pro

f. C

láu

dio

A.

Fle

ury

-

N

ov

-20

11

6

ExemploComandar remotamente o acendimento proporcional de um

LED ligado a uma porta de saída analógicavoid 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 }}

Page 7: Comunicação Serial com o Arduino

Pro

f. C

láu

dio

A.

Fle

ury

-

N

ov

-20

11

7

Comunicação Serial em RedeInter-Integrated Circuit 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

Video

Page 8: Comunicação Serial com o Arduino

Pro

f. C

láu

dio

A.

Fle

ury

-

N

ov

-20

11

8

Comunicação Serial em RedeInter-Integrated Circuit Bus (I2C – pronounced as ‘aɪ-

skwered-sɪ’) fSCL: Standard até 100kHz, Fast até 400 kHz e High Speed 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, 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 kOhm

Page 9: Comunicação Serial com o Arduino

Pro

f. C

láu

dio

A.

Fle

ury

-

N

ov

-20

11

9

Comunicação Serial em RedeBus Inter Integrated Circuits (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

Page 10: Comunicação Serial com o Arduino

Pro

f. C

láu

dio

A.

Fle

ury

-

N

ov

-20

11

10

Comunicação Serial em RedeBus Inter Integrated Circuits (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 pull down do SDA para que o Master saiba que o byte foi recebido

Page 11: Comunicação Serial com o Arduino

Pro

f. C

láu

dio

A.

Fle

ury

-

N

ov

-20

11

11

Comunicação Serial em RedeBus Inter Integrated Circuits (I2C)

Exemplo Seja um relógio de tempo real (RTC) DS1307 que

possui 8 registradores para armazenar dados temporais

Para alterar um registrador todos os 8 registradores devem ser reescritos.

Page 12: Comunicação Serial com o Arduino

Pro

f. C

láu

dio

A.

Fle

ury

-

N

ov

-20

11

12

Comunicação Serial em RedeBus Inter Integrated Circuits (I2C)

Exemplo DS1307

Lendo dados em um DS1307: 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 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 binary coded decimalbyte decToBcd(byte val) { return ( (val/10*16) + (val%10) );}

// Convert binary coded decimal to normal decimal numbersbyte bcdToDec(byte val) { return ( (val/16*10) + (val%16) );}

Page 13: Comunicação Serial com o Arduino

Pro

f. C

láu

dio

A.

Fle

ury

-

N

ov

-20

11

13

Comunicação Serial em RedeBus Inter Integrated Circuits (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

Page 14: Comunicação Serial com o Arduino

Pro

f. C

láu

dio

A.

Fle

ury

-

N

ov

-20

11

14

Comunicação Serial em RedeBus Inter Integrated Circuits (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

Page 15: Comunicação Serial com o Arduino

Pro

f. C

láu

dio

A.

Fle

ury

-

N

ov

-20

11

15

Comunicação Serial em RedeBus Inter Integrated Circuits (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)

Page 16: Comunicação Serial com o Arduino

Pro

f. C

láu

dio

A.

Fle

ury

-

N

ov

-20

11

16

Comunicação Serial em RedeBus Inter Integrated Circuits (I2C)

Exemplo

Page 17: Comunicação Serial com o Arduino

Pro

f. C

láu

dio

A.

Fle

ury

-

N

ov

-20

11

17

Comunicação Serial em RedeI2C e Arduino

Biblioteca Wire para comunicação com dispositivos I2C / TWI SDA no Arduino é no pino A4, e SCL no pino A5Biblioteca 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(), byte available(), byte read(), 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

Page 18: Comunicação Serial com o Arduino

Pro

f. C

láu

dio

A.

Fle

ury

-

N

ov

-20

11

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/