MyCollege1999 2023-08-15 18:11 采纳率: 73.3%
浏览 3
已结题

attiny84A从机将寄存器值放到SDA后,采样的值不对

现象:attiny84A从机将寄存器值放到SDA(USIDR=0x41)后,采样的值不对(通过示波器量的值是0x1f)
不知道错在哪里?谢谢

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-15 20:19
    关注

    【以下回答由 GPT 生成】

    对于这个问题,可能有几个原因导致采样值不正确。以下是一些建议和可能的解决方案:

    1. 检查硬件连接:确保SDA线正确连接到attiny84A的引脚,并且没有松动或接触不良的情况。还要确保其他相关线路(如时钟线)正确连接。

    2. 考虑使用内部上拉电阻:如果SDA线没有外部上拉电阻,可以尝试使用attiny84A的内部上拉电阻来提供pull-up功能。在设置USI之前,可以将SDA引脚配置为输入模式,并启用内部上拉电阻。

    ```c // 配置SDA为输入模式 DDRB &= ~(1 << PB0);

    // 启用内部上拉电阻 PORTB |= (1 << PB0); ```

    1. 调整时钟速度:尝试调整USI的时钟速度,有时候时钟速度可能会影响数据传输的稳定性。通过修改USISR寄存器的USIS0至USIS2位来设置USI的时钟分频系数。可以尝试不同的分频系数,并观察采样值是否改变。

    c // 设置USI的时钟分频系数为4(适用于8MHz的时钟频率) USISR = (1 << USIS0);

    1. 检查代码逻辑和时序:确保代码中的各个步骤按正确的顺序执行,并且时序满足通信协议的要求。特别注意确保在发送起始条件和数据之间的时间间隔足够,以确保主设备能够正确识别起始条件。

    2. 考虑其他影响因素:更多因素可能导致数据传输错误,例如电源供应的稳定性、线路干扰等。可以尝试在实际硬件环境中进行调试,例如使用示波器观察信号波形或在不同的实际硬件上测试。

    如果您尝试了上述建议但问题仍然存在,可能需要进一步检查硬件设计和详细调试以找出根本原因。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月21日
  • 创建了问题 8月15日

悬赏问题

  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 VB.NET如何绘制倾斜的椭圆
  • ¥15 arbotix没有/cmd_vel话题
  • ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据
  • ¥15 用C语言怎么判断字符串的输入是否符合设定?
  • ¥15 通信专业本科生论文选这两个哪个方向好研究呀
  • ¥50 我在一个购物网站的排队系统排队,这个排队到号后重新定向到目标网站进行购物,但是有技术牛通过技术方法直接跳过排队系统进入目标网址购物,有没有什么软件或者脚本可以用
  • ¥15 ios可以实现ymodem-1k协议 1024字节传输吗?