为什么我只收到第一个地址字节? (I2C协议)

2023-12-07

期望从机确认并返回数据,但它没有。这是我的协议. 这是我的数据表

数据表提到“从机将通过首先发送 MSB 字节来应答。Byte0 和 byte1 包含 预测值。所有字节均由主机确认。”

Edit: 源库

另外仅供参考,我使用的是 Arduino Fio,但我没有继承 Arduino 库。

    #include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include <uart.h>
#include <i2c_master.h>

#define LED PB5

#define I2C_READ 0x5A

char buffer[1];

//char data[9];
uint16_t val = 0;
uint8_t status = 0;


void getVal()
{
  if(i2c_start(I2C_READ))
    {
        uart_puts("Start ");

        val = ((uint8_t)i2c_read_ack())<<8; 
        val |= i2c_read_ack();

    status = ((uint8_t)i2c_read_nack());

      i2c_stop();

    } else
  {
        uart_puts("Error");

        i2c_stop();
    }
}

int main(void)
{
  init_uart(57600);
  i2c_init();

  DDRB = _BV(5);

    for(;;)
    {



        getVal();

        itoa(status, buffer, 10); //convert decimal to string base 10
        uart_puts(buffer);

  PORTB = 0xFF;
  _delay_ms(500);
  PORTB = 0x00;
  _delay_ms(500);
}
return 0;   /* never reached */

}


编辑修改:

#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include <uart.h>
#include <i2c_master.h>

#define LED PB5

#define I2C_READ 0x5A

char buffer[10];

//char data[9];
uint16_t val = 0;
uint8_t status = 0;


{
  if(!i2c_start(I2C_READ))
    {
        uart_puts("Error");

        i2c_stop();

    } else
    {
        uart_puts("Start ");
        i2c_start((IAQ_ADDR << 1) + 1); //i2c_start(0xB5);

        val = ((uint8_t)i2c_read_ack())<<8; 
        val |= i2c_read_ack();

        status = ((uint8_t)i2c_read_nack());

        i2c_stop();
    }
}

int main(void)
{
  init_uart(57600);
  i2c_init();

  DDRB = _BV(5);

    for(;;)
    {

      getVal();

            itoa(status, buffer, 10); //convert decimal to string base 10
            uart_puts(buffer);

      PORTB = 0xFF;
      _delay_ms(500);
      PORTB = 0x00;
      _delay_ms(500);
    }
    return 0;   /* never reached */
    }

如果没有正在使用的 i2c 库的详细信息,很难判断,但我首先要检查的一件事是i2c_start(I2C_READ).

数据表中提供的i2c地址是0x5a正如您在宏中所输入的那样。但第一个字节还包含读/写标志作为最低有效位。这i2c_start()函数必须放在0xb5上巴士(即(0x5a << 1) + 1供阅读)

If i2c_start()不是,那么您的从设备实际上没有被寻址,因此不会确认。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我只收到第一个地址字节? (I2C协议) 的相关文章

  • 无法使用c#更改视频捕获分辨率

    我正在尝试使用 C 中的 DirectShowNet 更改默认网络摄像头分辨率 据我所知 我需要通过调用 windows win32 api dll 中内置的 VideoInfoHeader 类来更改它以进行 avi 捕获 我有来自 Dir
  • getline 之后返回到文件开头

    所以我已经从文件中读取了所有行 while getline ifile line logic 其中 ifile 是 ifstream line 是字符串 我的问题是我现在想再次使用 getline 并且似乎无法返回到文件的开头 因为运行 c
  • 如何使用c#从数据桶中获取所有文档?

    如何获取数据桶中的所有文档 我尝试过一个示例 但我只能获得一个特定的文档 这是我的代码 CouchbaseClient oclient oclient new CouchbaseClient vwspace data bucket name
  • 从内存流播放视频文件

    只是好奇看看这是否可能 我有一个 Windows 应用程序 它从我的电脑上的 avi 文件读取所有字节 然后将其存储在 byte 中 现在我的内存中有 avi 文件 我想直接从内存将其加载到某种视频播放器控件中 我尝试过使用 wmplaye
  • 如何在 Visual Basic DLL 和 C++ DLL 之间创建隔离/免注册 COM?

    我必须在 C DLL 中使用 VB COM DLL 我弄清楚了如何从 C DLL 访问 VB COM DLL 并且它可以工作 现在我遇到了一个问题 我必须使用隔离的 COM 免注册 COM 因为我无法在必须使用它的每台 PC 上注册 DLL
  • FluentAssertions ShouldNotThrow 无法识别异步方法/Func

    我正在尝试检查异步方法是否抛出具体异常 为此 我使用 MSTEST 和 FluentAssertions 2 0 1 我已经检查过这个关于 Codeplex 的讨论 http fluentassertions codeplex com wo
  • 如何调试.NET Windows Service OnStart方法?

    我用 NET 编写的代码仅在作为 Windows 服务安装时才会失败 该故障甚至不允许服务启动 我不知道如何进入 OnStart 方法 如何 调试 Windows 服务应用程序 http msdn microsoft com en us l
  • 原子存储抛出错误

    我最近升级到了 C 11 兼容编译器 并且尝试将一些代码从 boost 更新到 c 11 标准 我在使用atomic store转换一些代码时遇到了问题 这是一些简单的测试代码 似乎会引发编译器错误 int main std shared
  • 如何在 C++ 运行时更改 QML 对象的属性?

    我想在运行时更改 QML 对象的文本 我尝试如下 但文本仍然为空 这是后端类 class BackEnd public QObject Q OBJECT Q PROPERTY QString userFieldText READ userF
  • 使用 dateTimePicker 在 DataGridView 中编辑日期

    我有一个DateTime我的 WinForms 中的专栏DataGridView 目前只能通过手动输入日期来编辑该字段 例如 2010 09 02 需要什么才能拥有一个DateTimePicker 或同等 用作编辑器 DataGridVie
  • 从 C# 调用时无法识别 Powershell 命令

    这是这个的延续Question https stackoverflow com questions 66280000 powershell object returns null 66280138 noredirect 1 comment1
  • 使用 cmake 将两种解决方案合二为一

    我有两个单独的 Visual Studio 2013 解决方案 我想将它们迁移到一个解决方案中 因为第一个解决方案 使用 Qt 充当第二个解决方案的 GUI 最后 我希望有一个结构如下的单一解决方案 Solution All Build P
  • 从具有相同属性的另一个对象创建对象

    我有一个 C 对象 可以说有 20 个属性 它是数据契约的一部分 我还有另一个具有类似属性的业务实体 我想从响应对象中填充该实体 除了将一个对象的每个属性分配给另一个对象的相应属性之外 还有其他方法可以做到这一点吗 是的 看看自动映射器 h
  • 在特定线程上运行工作

    我想要一个特定的线程 任务队列并在该单独的线程中处理任务 应用程序将根据用户的使用情况创建任务并将其排队到任务队列中 然后单独的线程处理任务 即使队列为空 保持线程活动并使用它来处理排队任务也至关重要 我尝试过几种实现TaskSchedul
  • 实体框架读取列但阻止其更新

    给定一个数据库表 其中有一列包含历史数据但不再填充 实体框架中是否有一种方法可以读取该列 但在使用相同的模型对象时防止它被更新 例如我有一个对象 public class MyObject public string CurrentData
  • 如何释放字符串未使用的容量

    我正在程序中处理很多字符串 这些字符串数据在读入我的程序后的整个生命周期内都不会改变 但由于 C 字符串保留了容量 因此浪费了大量肯定不会被使用的空间 我尝试释放这些空间 但没有成功 以下是我尝试过的简单代码 string temp 123
  • 如果仅使用第一个元素,是否必须为整个结构分配内存?

    我有一个结构 其中第一个元素被测试 并且根据其值 结构的其余部分将被读取或不会被读取 在第一个元素的值指示结构的其余部分不会被读取的情况下 我是否必须为整个结构或仅第一个元素分配足够的内存 struct element int x int
  • C - 获取外部IP地址

    我需要通过 C C 调用获取我的公共 IP 地址 我知道作为替代方案 我可以从 http whatismyip akamai com 等外部链接获取 我写了一个示例来获取外部IP地址 但我的程序没有返回外部 IP 地址 我正在获取内部 IP
  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d
  • 在 LP2844Z(Zebra 打印机)上的收据中包含 PNG [重复]

    这个问题在这里已经有答案了 我正在致力于创建一个基于 HTML5 画布的签名 绘图框 目前我们在服务器上将画布保存为PNG 但可以轻松地将base64字符串保存在数据库中 现在的问题是我们如何在打印的收据上添加签名 目前我们使用 GF 字段

随机推荐

  • Google 地图 API 地理编码返回两个不同地点的相同坐标

    我正在尝试获取这些 POI 的坐标 但 Google 地理编码返回错误的坐标 两个地址的坐标相同 在谷歌地图中它们工作得很好 我应该如何为他们构建正确的 URL https maps googleapis com maps api geoc
  • 从 Swift 中的另一个类访问 IBOutlet

    我是 Swift 和 Mac 应用程序的新手 因此 我今天正在编写一个 Mac 应用程序 但经过大量搜索后 我仍然困惑如何从另一个类访问 IBOutlet 我正在使用 StoryBoard 并且有两个 NSTextFieldpath mir
  • ValueError: 形状必须至少为 3 级,但对于 '{{node BiasAdd}} = BiasAdd[T=DT_FLOAT, data_format="NCHW"](add,bias)' 为 2 级,输入形状为:

    Done 我只是想运行并复制以下项目 https machinelearningmastery com time series prediction lstm recurrent neural networks python keras 基
  • 我的虚拟环境可以访问全局包

    I have virtualenv 15 1 0安装 问题是当我创建虚拟环境时 virtualenv venv 然后激活它 它将可以访问全局安装的软件包 django admin例如 尽管在中提到了这种情况 但还是发生了virtualenv
  • avro union的json编码

    我的 avro 模式中有一个 favorite number 的联合 它可以是 null 或 int 当我对对象进行 json 编码时 我得到 name Alyssa favorite number int 7 favorite color
  • 如何在 Access 2010 中将文本字段转换为日期/时间字段?

    我正在将 Excel 文件导入 Access 2010 日期字段 CALLDATE 以文本 YYYYMMDD 形式出现 我想使用更新查询来更新新字段 dateofcall 但使用日期 时间格式 我尝试使用 UPDATE tbl Import
  • 在分配之前如何将变量评估为另一个变量? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 这个问题分为子问题 一个回复建议查看Python中的指针 更多here 为什么不修改当地人呢 问题here 原始问题 usr bin python Description try
  • 无法追加到返回的列表中?

    def f lst a b c return lst 1 why is f append a is None True虽然f class is
  • 主线程 Runloop 在打开 nsmenu 时被阻止

    我有一个应用程序 其 UI 元素包括NSStatusItem和菜单 在我的应用程序中 我正在使用NSTask异步执行一些操作 我正在使用使用获得的输出NSFileHandleReadCompletionNotification更新菜单 但现
  • 将单元格复制到新工作表列时出现错误 429“Activex 组件无法创建对象”

    此代码复制每个工作表中的 P 和 Q 列 并将它们发布到合并的新工作表中 它还删除所有空白单元格 该代码适用于非常小的文件 但不会在新工作簿上产生相同的结果 从以前的 小工作簿 到新工作簿的所有列都是相同的 唯一改变的是工作表的数量 为 6
  • 如何在不使用 TYPE_KEYGUARD 的情况下禁用主页按钮?

    我创建一个锁屏应用程序 我需要禁用主页按钮 因此如果该手机被盗 则无法访问该手机 我的锁屏是全屏活动 我使用此代码禁用主页按钮 但它给了我一些错误 这是代码 Override public void onCreate Bundle save
  • 如何在窗体上绘制透明文本?

    有没有办法在具有某些控件的表单上绘制透明文本 如果我使用TLabel控件 它总是显示在窗体上的控件后面 您不能使用TLabel控件 因为它不是窗口控件 因此它将被窗体的每个窗口子控件隐藏 你可以使用TStaticText 这确实是一个窗口控
  • 如何捕获多个重复组?

    我需要捕获相同模式的多个组 假设 我有以下字符串 HELLO THERE WORLD 我写了以下模式 A Z 我想要它做的是捕获每一个单词 因此第 1 组是 HELLO 第 2 组是 那里 第 3 组是 世界 我的正则表达式实际上捕获的只是
  • 调用控制器中的视图方法

    我想在控制器中调用视图方法 但我不知道如何 我寻找类似的示例 但我没有找到它 我可以在这段代码中做到这一点吗 我是否必须重新构建它 我使用javafx和fxml技术 来构建用户界面 我的视图文件 它有 gotoRegister 和 goto
  • 如何将数据插入 iPhone 中的 SQLite 数据库

    我是 iPhone 开发新手 我想将某些数据插入数据库并检索它 并将其显示在表格中 我创造了Database data sqlite与表 用户 该表有两个值 id varchar 和 name varchar 我通过 insert into
  • 一旦时间戳上指示的时间过去,如何使数据不可读?

    假设用户将一个事件写入 Firebase 数据库 用户写入的内容附加了时间戳 其他用户可以使用 FirebaseListAdapter 读取列表视图中写入的内容 有没有办法在时间戳上的时间过去后使用户写入的数据不可读 无论您拥有单个项目还是
  • 如何将 cogs 与 Discord.py 一起使用?

    我写了一个相当大的 Discord 机器人 它有超过 1000 行代码 当我在 Youtube 和这里 研究如何做到这一点时 似乎没有任何效果 我想知道是否有人可以解释如何正确使用齿轮 可能用照片示例 我可以展示我需要哪些代码来帮助您理解我
  • ~ 究竟做什么? [复制]

    这个问题在这里已经有答案了 我有时会看到这个符号 在代码中 我尝试过 1 它表明0 因此 我可以看到一些使用这个技巧的代码 if text indexOf a 检查真值 这是一种位移吗 这是按位非运算符 它将操作数转换为 32 位整数 然后
  • 如何关闭Objectbox Store并删除数据文件

    我打电话后遇到异常put 与我的数据列表 我知道我之前关闭该框是有原因的 必须关闭deleteAllFiles 我该如何再次打开它 正如我所见 dataBoxStore 在我关闭后不为空 My code dataBoxStore MyObj
  • 为什么我只收到第一个地址字节? (I2C协议)

    期望从机确认并返回数据 但它没有 这是我的协议 这是我的数据表 数据表提到 从机将通过首先发送 MSB 字节来应答 Byte0 和 byte1 包含 预测值 所有字节均由主机确认 Edit 源库 另外仅供参考 我使用的是 Arduino F