Android的东西I2C从arduino 3v3读取

问题描述 投票:0回答:2

我尝试使用Android Things从Arduino - slave - 到RPi - master进行通信,读写。

如果i R / W,带有电平转换器,从RPi到Arduino 5v(16Mhz),一切正常。

所以我决定消除电平转换器,并使用3v3 Arduino mini pro(8Mhz)。

写入工作正常,但当我尝试从Arduino读取时,信号停止。

5v_16Mhz 在安装到9,0地址,并读取到9之后,信号仍然低并接收数据。没问题。

3v3_8Mhz 在设置为9,0地址并读取到9之后,信号变为高电平并且数据停止。

我对Slave使用了相同的例子:

#include <Wire.h>

byte RFID[20] = {9,8,7,6,5,4,3,2,1,1,2,3,4,5,6,7,8,9,1,2};


void setup() {
  Wire.begin(8);          // join i2c bus with address #8
  Wire.onRequest(requestEvent); // register event
  Wire.onReceive(receiveEvent); // register event
  Serial.begin(115200);     // start serial for output
  pinMode(13, OUTPUT);
}

void loop() {
  delay(100);
}

// function that executes whenever data is requested by master
// this function is registered as an event, see setup()
void requestEvent() {
  Serial.println("Master ask");
  digitalWrite(13, HIGH);
  delay(250);
  Wire.write(RFID, 20);
  digitalWrite(13, LOW);
}

// function should be executes whenever data is received from master
// this function is registered as an event, but it's called every time the RPi
// call the Device.
void receiveEvent(int howMany) {
  while (0 < Wire.available()) {
    byte RTC_syn = Wire.read(); // receive byte
    Serial.println(RTC_syn);
  }
}

我真的不知道信号的驱动程度如何...... 有人可以帮帮我吗?

arduino i2c android-things
2个回答
0
投票

如果i R / W,带有电平转换器,从RPi到Arduino 5v(16Mhz),一切正常。

所以我决定消除电平转换器,并使用3v3 Arduino mini pro(8Mhz)。

写入工作正常,但当我尝试从Arduino读取时,信号停止。

这是因为您在5V / 3.3V版本中使用的电平转换器不仅可以转换电压。它还可以作为两个器件之间的良好高阻抗缓冲器,有助于保持信号驱动并避免负载效应。

如果没有缓冲区,您的总线可能会遇到一些负载。您可以尝试通过添加更强大的上拉电阻来解决这个问题。 RPi3在I2C线路上具有1.8k上拉电阻,这通常可以工作,但可以是边缘的,具体取决于从器件的输入阻抗。 Arduino Mini具有安装I2C上拉的焊盘,但默认情况下没有。

纯3.3V I2C总线的推荐上拉电阻接近1k,因此您可能只需要在SCL / SDA和+ 3.3V之间添加一些更强的上拉电阻。您添加的任何内容都将与RPi3电阻并联,因此将其计入您的计算中。例如,添加4.7k电阻可将有效电阻降至约1.3k。

如果您无法使用上拉电阻解决问题,则可以使用线路驱动器IC(random example)实现相同的缓冲效果而无需电平转换。


-1
投票

如果电平转换器工作,你应该坚持下去。

I2C等通信协议将数据编码为一系列逻辑高电平和逻辑低电平信号。 HIGH / LOW是什么意思?这取决于设备。对于大多数嵌入式器件,逻辑低电平将为0V接地。

对于Arduinos和Raspberry Pis,源电压不同(3.3V对5V)。这种差异可能导致几个潜在的问题。

  1. 5V信号太高而Arduino无法处理,导致Arduino停止工作或重启
  2. 3.3V信号强度不足以被解释为逻辑高电平。嵌入式设备具有将信号舍入到高/低的电路,并且阈值可能不是完全均匀的。 5V输入可能只接受4.5V或更高,将其他所有内容解释为LOW或处于不确定状态。
© www.soinside.com 2019 - 2024. All rights reserved.