新唐单片机模拟IIC读写INA220

*TPA626可做INA220的国产替代,一样可以用

#define SCL PA0
#define SDA PA1
#define NACK 1
#define ACK 0#define INA220_CONFIG_REGISTER         0x00
#define INA220_SHUNT_VOLTAGE_REGISTER   0x01
#define INA220_BUS_VOLTAGE_REGISTER     0x02
#define INA220_POWER_REGISTER           0x03
#define INA220_CURRENT_REGISTER         0x04
#define INA220_CALIBRATION_REGISTER     0X05
//配置引脚
void anolog_iic_init(void)
{GPIO_SetMode(PA, BIT0, GPIO_PMD_OUTPUT);GPIO_SetMode(PA, BIT1, GPIO_PMD_QUASI);
}
//iic起始信号
void anolog_iic_start(void)
{SCL = 1;SDA = 1;TIMER_Delay(TIMER3,4);SDA = 0;TIMER_Delay(TIMER3,4);SCL = 0;
}
//iic停止信号
void anolog_iic_stop(void)
{SCL = 0;SDA = 0;TIMER_Delay(TIMER3,4);SCL = 1;TIMER_Delay(TIMER3,4);SDA = 1;
}
//等待应答
uint8_t anolog_iic_wait_ack(void)
{uint8_t i = 0;SDA = 1;TIMER_Delay(TIMER3,4);SCL = 1;TIMER_Delay(TIMER3,4);while(SDA){i++;DEBUG("wait %d ...\n",i);if(i > 250){anolog_iic_stop();return NACK;}}SCL = 0;TIMER_Delay(TIMER3,4);return ACK;
}
//主机发送NACK应答
void anolog_iic_send_nack(void)
{SCL = 1;SDA = 1;TIMER_Delay(TIMER3,4);SCL = 0;SDA = 1; //更新:释放SDA,不然连续读可能出错
}
//主机发送ACK应答
void anolog_iic_send_ack(void)
{SCL = 1;SDA = 0;TIMER_Delay(TIMER3,4);SCL = 0;SDA = 1; //更新:释放SDA,不然连续读可能出错
}
//iic往从机写一个字节
void anolog_iic_send_byte(uint8_t byte)
{uint8_t i = 0;DEBUG("iic send 0x%02x\n",byte);for(i = 0; i<8; i++){SCL = 0;TIMER_Delay(TIMER3,4);if(byte&(1<<(7-i)))SDA = 1;elseSDA = 0;TIMER_Delay(TIMER3,4);SCL = 1;TIMER_Delay(TIMER3,4);}SCL = 0;SDA = 1;
}
//iic从从机读一个字节
uint8_t anolog_iic_read_byte(uint8_t ack_flag)
{uint8_t i = 0, data = 0;SDA = 1;SCL = 0;TIMER_Delay(TIMER3,4);for(i = 0; i<8; i++){SCL = 1;TIMER_Delay(TIMER3,4);data <<=1;data |= SDA;TIMER_Delay(TIMER3,4);SCL = 0;TIMER_Delay(TIMER3,4);}if(ack_flag == ACK)anolog_iic_send_ack();elseanolog_iic_send_nack();DEBUG("iic read 0x%02x\n",data);return data;
}
//写anolog_iic_start();anolog_iic_send_byte(slave_addr<<1);if(ACK != anolog_iic_wait_ack())return;anolog_iic_send_byte(INA220_CONFIG_REGISTER);if(ACK != anolog_iic_wait_ack())return;anolog_iic_send_byte(ina220_config_data[0]);if(ACK != anolog_iic_wait_ack())return;anolog_iic_send_byte(ina220_config_data[1]);if(ACK != anolog_iic_wait_ack())return;anolog_iic_stop();anolog_iic_start();anolog_iic_send_byte(slave_addr<<1);if(ACK != anolog_iic_wait_ack())return;anolog_iic_send_byte(INA220_CALIBRATION_REGISTER);if(ACK != anolog_iic_wait_ack())return;anolog_iic_send_byte(ina220_calibration_data[0]);if(ACK != anolog_iic_wait_ack())return;anolog_iic_send_byte(ina220_calibration_data[1]);if(ACK != anolog_iic_wait_ack())return;anolog_iic_stop();
//读anolog_iic_start();anolog_iic_send_byte(slave_addr<<1);if(ACK != anolog_iic_wait_ack())return -1;anolog_iic_send_byte(reg_addr);if(ACK != anolog_iic_wait_ack())return -1;anolog_iic_start();anolog_iic_send_byte((slave_addr<<1)|0x01);if(ACK != anolog_iic_wait_ack())return -1;val = anolog_iic_read_byte(ACK);//if(ACK != anolog_iic_wait_ack())//   return -1;val = (val<<8) + anolog_iic_read_byte(NACK);

更新1:
主机应答最后添加:SDA = 1; //释放SDA,不然连续读可能出错

新唐单片机模拟IIC相关推荐

  1. m031开发 新唐_【M031LC2AE价格_新唐单片机M031LC2AE,M031LD2AE,32/64/128kFLASH,48pin_全速装置图片】-TG工业网...

    新唐单片机M031LC2AE,M031LD2AE,32/64/128k FLASH,48pin 主要特色: • 运作特性 - 工作电压: 1.8V ~ 3.6V - 工作温度: -40°C ~ +10 ...

  2. 单片机单口不可用或被占用_新唐单片机代码评审总结

    昨晚上,我们一个同事组织了一个小会议,大家一起讨论了一个项目的单片机代码,这个单片机用的是新唐单片机,期间大家也讨论了一些问题,总结一下,希望对写单片机的同学们有帮助. 我这个同事写的代码非常优秀,具 ...

  3. 新唐单片机 ICP 史上最全教程

    新唐单片机 ICP 史上最全教程 新唐单片机 ICP烧录教程 目录 新唐单片机 ICP 史上最全教程 1.ICP软件安装 2.连接设备 3.设备供电 4.开启软件 5.欢迎界面 6.补充事项 7.建立 ...

  4. idata 单片机 新唐_新唐单片机代码评审总结

    昨晚上,我们一个同事组织了一个小会议,大家一起讨论了一个项目的单片机代码,这个单片机用的是新唐单片机,期间大家也讨论了一些问题,总结一下,希望对写单片机的同学们有帮助. 我这个同事写的代码非常优秀,具 ...

  5. 新唐单片机选型手册_新唐单片机选型手册_新唐8051标准系列单片机选型指南

    新唐8051标准系列单片机选型指南 新唐单片机 8位单片机 作者: 来源: 发布时间:2019-06-18 22:15:07   浏览:351 新唐科技标准8051产品系列,其管脚兼容于传统12T 8 ...

  6. 新唐单片机选型手册_新唐8051标准系列单片机选型指南

    新唐8051标准系列单片机选型指南 新唐单片机 8位单片机 作者: 来源: 发布时间:2019-06-18 22:15:07   浏览:351 新唐科技标准8051产品系列,其管脚兼容于传统12T 8 ...

  7. 新塘单片机烧写器_新唐单片机软件加密|新唐单片机软件(NuConsole) v2.04.6725官方版 附安装教程_星星软件园...

    NuConsole是一款实用的新唐单片机软件,该软件可以通过SWD接口操作,为用户提供不中断目标芯片和主机的信息传输机制,是机械和电气领域不可或缺的软件.软件简洁实用.操作简单.极易使用,需要的朋友赶 ...

  8. 新唐单片机如何生成精确延迟

    最近在搞新唐单片机,所以记录下这部分内容. 之前的相关文章 呵,你会51单片机的精确延时吗? 假如使用者想要产生精确的延迟时间,建议使用 __nop() 函数来组合达成.__nop() 函数能够产生 ...

  9. 单片机入门学习笔记6:新唐单片机N76E003

    学习新唐单片机是从2018年3月开始的,之前一点也不懂这一块单片机,之后脉络变的越来越清晰. 由于N76E003档次太低,新塘科技官方的管脚配置,芯片选型--都没有这一块芯片,资料唯独只有:芯片的数据 ...

最新文章

  1. 《暗时间》前两篇的笔记和总结
  2. ARC 100 C - Linear Approximation题解---三分法
  3. 如何在pycharm添加扩张工具
  4. 分布式认证方案-基于session的认证方式
  5. Kubernetes 无法删除pod实例的排查过程
  6. java中 immutable,future,nio
  7. ssh 与 locale
  8. element-ui cascader 级联选择器 存最后一级id及回显
  9. php之防注入程序绕过浅谈
  10. oracle删除数据库中的所有数据的拼接语句
  11. 后现代婚礼机器人显神通_机器人+无人机 江西新余智能消防显“神通”
  12. Android请求麦克风权限+系统权限页面回调
  13. 快速了解Redis、Cachecloud集群的搭建及管理
  14. 引用腾讯地图时出现”鉴权失败,请传入正确的key“
  15. C#笔试面试宝典值得收藏1
  16. 新手入门,想用VB给班上写一个自动播放上下课铃声的程序,求教
  17. 回归预测 | MATLAB实现GWO-LSTM灰狼算法优化长短期记忆神经网络多输入单输出回归预测
  18. 笔记:新手SEOer必备的WordPress优化插件
  19. html5绘制图形渐变-径向渐变
  20. 为什么点开桌面计算机那这么慢,电脑桌面刷新反应很慢怎么办?电脑桌面刷新很慢解决方法...

热门文章

  1. OpenStack 应答文件简单翻译
  2. 氚云CRM管理员手册
  3. 自动化测试之 web - 基础篇
  4. 惠普LaserJet M1216nfh MFP激光打印机开机提示“安装黑色碳粉盒”亮黄灯
  5. 计算机绘图要学吗,如何学好计算机绘图 AUTOCAD 软件
  6. 计算机组成原理学习之路(一)——数据表示
  7. 360 || 2021校园招聘的一道笔试题思路分享
  8. Unity-ShaderGraph学习笔记第一步: 如何打开ShaderGraph 制作全息效果Shader
  9. Toad 所有 菜单说明(太多)
  10. 牛客华为机试题刷题笔记总结[103题更新完毕才收尾,建议关注收藏]