硬件电路设计 - 基于nRF24L01的2.4GHz无线通信系统设计
硬件电路设计
电源、复位和晶振电路设计
为了缩短开发周期 ,设计中由交流 220 V 转直流 12 V 的部分由市场上的电源模块来代替。虽然ATmega8L 可工作在 2. 7~5. 5 V 宽电压 ,但是由于PTR6000 工作在 1. 9~3. 6 V ,超出这个电压范围就有被烧坏的可能 ,因此在用三端稳压管 7805 将 12 V转换为 5 V 后 ,还要用 1117 将 5 V 的直流电转换到3.3 V ,这样 PTR6000 和 Atmega8L 都能正常工作。此外 ,为了适应移动测试的需要 ,设计的电路上还配备了电池槽 ,以便用 2 节干电池为系统提供 3 V 直流电压。
设计采用简单的阻容复位电路 ,由于 ATmega8L是低电平复位 ,电源经 1 K电阻和 22μF 电解电容接地 , 复 位 线 从 电 阻 和 电 容 之 间 引 出 , 接 到ATmega8L 的复位引脚。
为了获得较高的振荡频率 ,设计采用了外接8 MHz晶体振荡器。由于 AVR 单片机独特的熔丝位设置 ,很容易造成单片机的锁死现象 ,因此在设置有关时钟的相关位时要格外小心。当然 ,即便是锁死了一般情况下还是可以通过外接有源晶振来解锁 ,并重新烧写正确的熔丝位。
键盘和显示电路设计
设计的键盘采用 3 ×3 的矩阵式键盘 ,3 条行线接到 ATmega8L 的 PC3、PC4、PC5 ,3 条列线分别接到PC0、PC1、PC2 ,并且 3 条列线带有上拉电阻。在每个上拉电阻的下面引出一条线 ,接到三输入与门74HC11 的输入口 ,然后输出口接到单片机的外中断1 引脚 ,这样设置的目的是用中断的方法来进行键盘的扫描读取。这一功能的实现主要还依靠软件的设计 ,使得在有按键按下时 ,能够通过 74HC11 产生一个中断信号 ,通知单片机现在有键按下。然后单片机会进入预先编写好的键盘处理程序进行键盘扫描 ,判断键值 ,并执行相应的操作。
显示电路使用 2 个 8 段数码管 ,通过串转并的动态显示来实现 ,并且通过 2 个 I/ O 口控制 2 个三极管来分别进行驱动和控制。用 SPI 口进行显示数据的串行输出是一个比较方便的方法 ,但是考虑到PTR6000 通过单片机 SPI 口接收数据 ,有与显示冲突的可能。因此 ,设计时利用了 PD1、PD4 两个普通的 I/ O 口来分别作为数据线和时钟线 ,模拟时序来实现数据的串转并显示。
软件设计
主程序设计
设计采用的是汇编语言 ,内存不能自动分配 ,在主程序的开始 ,首先对 ATmega8L 的堆栈指针进行设置。在 I/ O 空间 ,地址为 3E ( 005E) 和 3D( 005D)的 2 个 8 位寄存器构成了一个 16 位宽的堆栈指针寄存器 SP ,单片机上电复位后 ,堆栈寄存器的初始值为 SPH = 00、SPL = 00。AVR 的堆栈是向下生长的 ,即新数据推入堆栈时 ,堆栈指针的数值将减小。所以系统程序一开始就对堆栈指针寄存器进行了初始化 , 将 SP 的 值 设 在 数 据 存 储 器(SRAM) 空间的最高处。设置堆栈指针后的程序中 ,对各 I/ O 口的存储器进行配置 ,包括数据寄存器PORTx、数据方向寄存器 DDRx 。
随后的初始化设置中 ,对外中断的触发方式进行相应的设置。最初设计采用的是低电平触发方式 ,但是由于低电平容易造成重复触发 ,造成键值读取错误 ,因此在后续的程序设计中将其改成了下跳沿触发 ,这样只要键盘消抖工作做好 ,就能解决重复触发的问题。
在点对点和点对多点的短距离通信中 ,每一方随时 都 有 发 送 数 据 的 可 能 , 所 以 在 主 程 序 的PTR6000 初始化部分中设置为接收方式 ,并对其相关地址通道进行了开通和自动应答设置 ,并配置了其地址的的长度且按指定长度对地址进行了配置。在主程序中还设置了 PTR6000 的中断允许标志位 ,当有数据接收中断、发送完成中断、最大发送次数中断产生时 ,在 PTR6000 的 IRQ 引脚产生一个低电平 ,触发单片机外中断 0 ,进行相应的处理。
键盘程序设计
由硬件电路设计可知 ,键盘程序是放在中断服务程序中的 ,而且是下降沿触发中断 ,这一点有关的I/ O 口设置和寄存器有关位设置在主程序中完成 ,在此不再作具体说明。在外中断 1 服务程序的开始 ,首先对键盘延时消抖 ,判断是否真的有键按下 ,如果判断确实有键按下则向下执行键值判断程序 ,否则 ,判定为错误中断 ,中断返回。
该部分键盘判断程序是通过线反转法完成的 ,首先 3 行送高电平 ,3 列送低电平 ,延时一个时钟周期后 ,读取管脚电平(PINC) ,并且对读取的数据进行保存 ;然后 3 列送高电平 ,3 行送低电平 ,延时一个时钟周期后 ,读取管脚电平(PINC) ,并且对读取的数据进行保存。然后两次读到的数据只保留低 6 位 ,高位全部清零 ,因为键盘只用到了低 6 位。然后再把 2 个键进行位或 ,得到一个数值 ,通过对这个数值的判断来判定是哪一个键按下了。
显示程序设计
显示程序设计总的思想是首先串行传送转换后的十位显示数码 ,然后选通十位 ,再进行适当延时后关闭。再串行传送转换后的个位显示数码 ,然后选通个位 ,进行适当延时后关闭。
具体串行显示是这样实现的 :首先把要显示码寄存器进行带进位移位 ,然后判断进位标志位 C 来向串行数据输出口送 0 或 1 ,进行适当延时后 ,向串行时钟口送低电平 ,适当延时后送高电平 ,目的是产生一个上跳沿 , 把串行数据口的电平状态移入74HC164。这样连续传送 8 次 ,就将 8 位显示码送出。
- 第 1 页:基于nRF24L01的2.4GHz无线通信系统设计
- 第 2 页:硬件电路设计
- 第 3 页:PTR6000 通信程序设计
本文导航
非常好我支持^.^
(2) 66.7%
不好我反对
(1) 33.3%
相关阅读:
- [移动通信] 5G 3GPP全球频谱介绍 2023-10-24
- [电子说] 功率放大器的基本原理、分类、工作模式和应用 2023-10-23
- [电子说] 华普微推出首款Matter模块,助力智能家居互联互通 2023-10-23
- [电子说] 低功耗蓝牙(BLE)技术简介和工作方式 2023-10-23
- [控制/MCU] 兆易创新推出基于RISC-V内核的GD32VW553系列双模无线mcu 2023-10-23
- [RF/无线] 基站/手机是怎么知道信道情况的? 2023-10-23
- [电子说] 说说RF信号链应用中差分电路的4大优点 2023-10-23
- [电子说] 运放为什么存在偏置电流?运放输入级对偏置电流的影响? 2023-10-23
( 发表人:李倩 )