collapse

* Links de Robótica

* Posts Recentes

Palavras Cruzadas por Hugu
[Hoje às 00:54]


[Projecto] Bomba Airsoft por jm_araujo
[Ontem às 16:54]


Apresentação por Tech_JA
[Ontem às 09:19]


Medir Agua que está no Poço por filjoa
[21 de Setembro de 2017, 20:58]


URGENTE - display de 7 segmentos com backpack por helderjsd
[20 de Setembro de 2017, 12:30]


Preços e fabricantes de pcb por Sérgio_Sena
[19 de Setembro de 2017, 10:20]


Isaac Asimov - I, Robot por senso
[18 de Setembro de 2017, 03:41]


ic SL440 da Plessey? por senso
[16 de Setembro de 2017, 13:11]


Compra Colectiva RS-Amidata por brunus
[15 de Setembro de 2017, 22:31]


Ideias para construir um quadrúpede simples por zordlyon
[15 de Setembro de 2017, 10:18]

Autor Tópico: Enviar bytes por I2C  (Lida 1763 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.223
    • Clube de Robotica
Enviar bytes por I2C
« em: 10 de Maio de 2013, 19:44 »
Preciso de enviar varios bytes para uma ponte H para a controlar.
Mas não tou conseguir. Tenho de enviar algo do genero:
http://botnroll.com/omni3md/downloads/I2C%20Commands%20for%20OMNI-3MD%20and%20OMNI-3MDMAX%20V1.06.pdf

Tentei:
 
Código: [Seleccione]
#include <Wire.h>

void setup()
{
  Wire.begin(); // join i2c bus (address optional for master)
}



void loop()
{
  Wire.beginTransmission(0x18);
  Wire.write(byte(0x7A));     //Endereço para controlar um motor sem PID 
  Wire.write(byte(0x01));     //Escolha de motor
  Wire.write(byte(0x01));     //Escolha da direção do motor
  Wire.write(byte(0x32));     //Escolha da velocidade(100)
  Wire.endTransmission();    // stop transmitting


  delay(500);
}
« Última modificação: 10 de Maio de 2013, 19:51 por LuísR.A. »
Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 1.920
Re: Enviar bytes por I2C
« Responder #1 em: 10 de Maio de 2013, 20:58 »
Assim não vais lá, tens bastantes exemplos em arduino no site além do manual.

#include <Wire.h>                   // required by Omni3MD.cpp
#include <Omni3MD.h>
//constants definitions
#define OMNI3MD_ADDRESS 0x30        // default factory address

Na página 8 do manual tem descrito o modo de comunicação:
http://botnroll.com/omni3md/downloads/Manual%20OMINI3-MD(18-07-2011).pdf

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.223
    • Clube de Robotica
Re: Enviar bytes por I2C
« Responder #2 em: 10 de Maio de 2013, 23:44 »
Eu quero usar apenas envios simples sem usar a biblioteca especifica da placa pois tambem quero implementar isto noutro uControlador (tentei adaptar a biblioteca mas não funcionou).

Já fiz algo do genero nuns basics que encontrei por ai escondidos logo à primeira pois as rotinas são mesmo do tipo: adress, comand, send byte, send byte...etc

Mas fizes-te me lembrar algo. O arduino funciona apenas com endereços de 7bits e não de 8bits por isso fiz estas alterações:

Código: [Seleccione]
byte data[3]={1,1,100};
#include <Wire.h>

void setup()
{
  Wire.begin(); // join i2c bus (address optional for master)
}



void loop()
{
  Wire.beginTransmission(0x18); // transmit to device #4
  Wire.write(0x00);
  Wire.write(0xF4);
  Wire.write(data,3);        // sends five bytes
  Wire.endTransmission();    // stop transmitting

  delay(500);
}

Só poderei confirmar com sorte amanha  :-\
« Última modificação: 11 de Maio de 2013, 00:01 por LuísR.A. »
Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.390
  • Helpdesk do sitio
Re: Enviar bytes por I2C
« Responder #3 em: 11 de Maio de 2013, 00:48 »
i2c é 7 bits, ou 10bits, no caso dos 7 bits, se te derem um endereço de 8 bits, tens de fazer um shift á direita, porque o bit menos significativo do endereço é normalmente definido pelo que queres fazer, porque ele é quem diz ao slave se vais fazer uma leitura ou uma escrita.
Avr fanboy

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.390
  • Helpdesk do sitio
Re: Enviar bytes por I2C
« Responder #4 em: 11 de Maio de 2013, 00:50 »
Presumo que não tenhas lido o pdf que o dropes deixou, porque isto está lá:

ADDRESS:
É o campo do endereço I2C. Este primeiro byte contém os 7bits do endereço I2C e o oitavo bit, o menos significativo, define se a trama é de escrita ou de leitura. Se o bit menos significativo do campo endereço for 0 (zero), a trama é de escrita e o valor do byte é 0x30. Se o bit for 1 a trama é de leitura e o valor do byte é 0x31.
Avr fanboy

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.223
    • Clube de Robotica
Re: Enviar bytes por I2C
« Responder #5 em: 11 de Maio de 2013, 12:15 »
Presumo que não tenhas lido o pdf que o dropes deixou, porque isto está lá:

ADDRESS:
É o campo do endereço I2C. Este primeiro byte contém os 7bits do endereço I2C e o oitavo bit, o menos significativo, define se a trama é de escrita ou de leitura. Se o bit menos significativo do campo endereço for 0 (zero), a trama é de escrita e o valor do byte é 0x30. Se o bit for 1 a trama é de leitura e o valor do byte é 0x31.

Li isso sim por isso é que meti a seguir a mandar um byte. O problema é que na biblioteca wire diz que se escrever um endereço de 8bits que é cortado o ultimo bit e assim torna-se 7bits
http://arduino.cc/de/Reference/Wire



Citar
The Wire library requires addresses which do not include the R/W bit. Based only on the datasheet, you might conclude the address is 160 when writing and 161 when reading. The Wire library needs address 80 to communicate with this chip. The R/W bit is automatically created based on your use of the send or receive functions
http://www.pjrc.com/teensy/td_libs_Wire.html
« Última modificação: 11 de Maio de 2013, 12:23 por LuísR.A. »
Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.088
    • Tróniquices
Re: Enviar bytes por I2C
« Responder #6 em: 11 de Maio de 2013, 13:00 »
Essa sena dos 7/8 bits refere-se ao endereço *do dispositivo*, mas tu mantiveste-o igual:

Wire.beginTransmission(0x18); // transmit to device #4

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.223
    • Clube de Robotica
Re: Enviar bytes por I2C
« Responder #7 em: 11 de Maio de 2013, 13:18 »
Essa sena dos 7/8 bits refere-se ao endereço *do dispositivo*, mas tu mantiveste-o igual:

Wire.beginTransmission(0x18); // transmit to device #4

Pois no PDF refere-se a "0x18 0" = 0x30. sendo 0x18 o endereço e 0x30 o endereço + o bit de write.
A biblioteca Wire apenas aceita a parte do endereço sem o bit de write/read. Por isso é que uso so 0x18. Já nos SRF tenho de retirar o ultimo bit
Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/