(Debug记录)PCF8591多通道数据篡位问题
问题描述在使用PCF8591不断轮流读取两个通道时, 发现数据出现了错位的问题 例如: 12ad_p=Get_AD(1) //读取通道1的值ad_u=Get_AD(3) //读取通道3的值 可是使用数码管显示数据会发现一个很神奇的问题 ad_p显示的是通道3的ad值 ad_u显示的是通道1的ad值 两个数据出现了错位, 这不是我们想看到结果 问题定位打开数据手册7.4节关于ad转换的描述可以看到如下一段话: 译文: 读取周期中传输的第一个字节包含前一个读取周期的转换结果代码。 上电复位后,读取的第一个字节是十六进制 80。 原来PCF8591的AD转换需要时间, 所以会将转换结果储存到寄存器中, 下一次读取时直接将寄存器中的值直接发送出去 将开发板接上逻辑分析仪抓取波形验证 可以发现上电后第一次的读取结果确实是0x80, 而第二次读取的才是第一次设定的通道一的值, 从而导致之后的数据全是错位的 问题解决既然读取寄存器值的是上一次的值, 我们可以直接获取两次AD值就可以保证变量值一定是我们要的通道, 但是连续使用两次Get_AD();函数会产生很多性能开销,...
蓝桥杯单片机
74HC573原理由于蓝桥杯板子上的外设很多, 所以开发板上使用了4个74HC573锁存器来复用引脚, 操控573上的外设由3个步骤组成 138译码器 将3位输入地址(A0, A1, A2)译码为8个独立的输出(D0 ~ D7)。这里我们只需要高4位也就是D4~D7的输出, 所以真值表为: 单片机P2 A0 A1 A2 D 0x80 1 0 0 1110 1111 0xA0 1 0 1 1101 1111 0xC0 1 1 0 1011 1111 0xD0 1 1 1 0111 1111 或非门 (NOR) 因为锁存器使能(Load)为高时,Q 输出将随数据(D)输入而变。当使能为低时,将输出锁存在已建立的数据电平上。我们需要锁存器默认为锁存状态, 即被38译码器选中时才进入透明状态, 所以开发板上使用一端接地的或非门来实现对38译码器选中信号取反 NOR真值表: A0 A1 Y 0 0 1 0 1 0 1 0 0 1 1 0 74HC573锁存器 锁存器使能(Load)为高时,Q...
Ros学习笔记
ROS简介官网 Wiki The Robot Operating System (ROS) is a flexible framework for writing robot software. It is a collection of tools, libraries, and conventions that aim to simplify the task of creating complex and robust robot behavior across a wide variety of robotic platforms. 机器人操作系统(ROS)是一种用于编写机器人软件的灵活框架。 它是工具,库和协议的集合,旨在简化各种机器人平台上,去构建复杂而强大的机器人。 ROS 是 Robot Operating System的简写,翻译过来就是机器人操作系统。它是一个软件框架,目的是提供开发平台,工具及生态给开发人员,让开发人员快速的去开发强大的机器人系统。 ROS...
使用VSCode开发STM32(EIDE插件)
前言在使用了几个月的Keil对51和32的学习之后, 实在受不了Keil古老的界面. 在做项目时就开始思考能不能使用VSCode替代Keil对51 32等嵌入式ARM架构的芯片进行编程和调试. 经过一番查找便发现有个插件可以完美符合我的要求 使用该插件前请至少要熟悉Keil的各种操作与配置, 因为开发团队项目时, 不是所有人都使用VSCode进行开发, 大部分人仍然使用的是Keil. 为了避免陷入无法和团队成员共同开发的尴尬场面, 所以请一定要熟悉好Keil再来使用本插件 插件介绍Embedded IDE 一款适用于 8051/STM8/Cortex-M/MIPS/RISC-V 的单片机开发环境。 在 VSCode 上提供 8051, AVR, STM8, Cortex-M, MIPS MTI, RISC-V … 项目的 开发, 编译, 烧录 等功能。 支持的平台: Windows x64 (>= Windows 10) Linux x64 macOS(仅在 ‘macOS 10.15 x64’ 中测试过) 功能特性...
C++算法竞赛常用STL库用法
C++ 标准模板库 (STL, Standard Template Library) :包含一些常用数据结构与算法的模板的 C++ 软件库。其包含四个组件——算法 (Algorithms)、容器 (Containers)、仿函数 (Functors)、迭代器 (Iterators). 示例: 算法:sort(a.begin(), a.end()) 容器:priority_queue<int> pque 仿函数:greater<int>() 迭代器:vector<int>::iterator it = a.begin() 1 前言STL 作为一个封装良好,性能合格的 C++ 标准库,在算法竞赛中运用极其常见。灵活且正确使用 STL 可以节省非常多解题时间,这一点不仅是由于可以直接调用,还是因为它封装良好,可以让代码的可读性变高,解题思路更清晰,调试过程 往往 更顺利。 不过 STL 毕竟使用了很多复杂的结构来实现丰富的功能,它的效率往往是比不上自己手搓针对特定题目的数据结构与算法的。因此,STL...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick StartCreate a new post1$ hexo new "My New Post" More info: Writing Run server1$ hexo server More info: Server Generate static files1$ hexo generate More info: Generating Deploy to remote sites1$ hexo deploy More info: Deployment