您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>电子百科>无线通信>

硬件电路设计 - 基于nRF24L01的2.4GHz无线通信系统设计

2017年12月15日 15:00 网络整理 作者: 用户评论(0

  硬件电路设计

  电源、复位和晶振电路设计

  为了缩短开发周期 ,设计中由交流 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 位显示码送出。

非常好我支持^.^

(2) 66.7%

不好我反对

(1) 33.3%

( 发表人:李倩 )

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!