利用玩具遥控车的高频发射电路和高频接收电路,结合单片机
进行数据传输,模拟两通道比例控制遥控器。
发射端用ATTINY24从TX的8号脚控制玩具遥控器的高频发射部分
接收端用ATTINY24从RX2的3号脚接收信号。然后PWM控制
遥控车的两个电机,一个由电位器反馈。另一个由测速
盘反馈。
数据结构
0 高电平100us,低电平300us
1 高电平200us,低电平200us
数据帧结构
16位为一个包起始2位(10),地址2位,数据10位,结束2位(01)
每5个包为一个循环
1号包 全0包,不含起始结束,用于接收端复位。
2,3号包 地址01号数据。
4,5号包 地址02号数据。
纠错采用重复校验,当收到两组数据相同时确认数据有效
发送侧任务 读A通道模拟量,读B通道模拟量,数据格式转换,
信道格式转换,发送缓存更新,定时器中断发送。
接收侧任务 读电位器模拟量,测量速度值,方向位置伺服控制
速度控制。接收缓存检测,校验数据。软件看门狗。
关键字:AVR单片机 遥控车 高频发射
引用地址:
AVR单片机改造遥控车
推荐阅读最新更新时间:2024-11-13 21:51
AVR单片机判断脉冲宽度的方法
定时/计数器(Timer/counter)是单片机芯片中最基本的外围接口,它的用途非常广泛,常用于测量时间、速度、频率、脉宽、提供定时脉冲信号等。相对于一般8位单片机而言,AVR不仅配备了更多的定时/计数器接口,而且还是增强型的,功能非常强大。ATmega128一共配置了2个8位和2个16位,共4个定时/计数器,本小节重点对它的一些增强功能的应用做基本的介绍。 5.9.1 预分频器 定时/计数器最基本的功能就是对脉冲信号计数,当计数器计满后(8位为255,16位为65535),再来一个脉冲它就翻转到0,并产生中断信号。同其他单片机类似,AVR的定时/计数器的计数脉冲可以来自外部的引脚,也可以由从内部系统时钟获得;但AVR的定时/
[单片机]
AVR单片机系列之-Atmega8A编程入门
前言: 最近由于开始设计无刷直流电机电子调速器,参考网上的一些资料,选用了Atmega8A-AU单片机作为主控芯片。 该芯片采用8位结构,最高主频16MHz(内部振荡器则8MHz),可实现2.7V-5.5V供电,单个IO口最大可支持40mA的拉/灌电流,更难能可贵的是,价格十分便宜,我在淘宝上面购买才3块多一片。 之前从未使用过AVR系列的单片机,于是一开始编程也遇到了一些障碍,直至最终编写好第一个程序,整个过程在此记录下来,供以后参考。 一、下载器 首先我在百度上和阿莫论坛里面查询了一下AVR单片机的下载器,然后又在淘宝上面搜索对应的型号,发现目前国内主流的是ISP串口下载器,也就是和51单片机的下载器原理一样。于是乎在淘宝上面
[单片机]
串行1602的四位数据线程序-avr单片机
1602的四位数据线程序,节省了IO。单片机用的是Atmega16,编译环境ICC6.31A,1602驱动头文件。 1602Driver.h /*********************LCD模块1602底层驱动库*********************** * LCD模块与单片机的硬件连接: * /端口名称 /端口符号 /MCU端口 / LCD引脚号/ * * RS数据/指令选择线 * RS PD3 4 * R/W读写选择线 * R/W GND 5 * EN写使能线 * EN PD2 6 * 三态双向数据总线 * D0-D3 N
[单片机]
AVR单片机对数码管数据P0口与P2口的控制设计
//数码管数据P0口,数码管控制P2口 #include #include #include #include #include #define code PROGMEM #define uchar unsigned char #define uint unsigned int code const ucharLED_7[16] = {0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60,0xff};//common of + code const uchar posi ti on[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0x
[单片机]
关于AVR单片机I/O口使用注意事项
1. 先正确设置DDRx方向寄存器,再进行I/O口的读写操作。 2. I/O口复位后的初始状态全部为输入工作方式,内部上拉电阻无效,外部引脚呈现三态高阻输入状态。 3. 当I/O口工作在输入方式时,且要读取外部引脚上的电平时,应读取PINxn的值,而不是PORTxn的值。 4. 当I/O工作在输入方式时,要根据实际情况使用或不使用内部的上拉电阻。 5. 一旦将I/O口的工作方式由输出设置成输入方式后,必须等待1个时钟周期后才能正确读到外部引脚PINxn的值。
[单片机]
AVR单片机定时计数器学习笔记分享
定时计数器的结构与应用定时计数器(Timer/Counter)常用于计数、延时、测量 周期、频率、脉宽、提供定时脉冲信号等。在实际应用中,对于转速,位移、速度、流量等物理量的 测量,通常也是由传感器转换成脉冲电信号,通过使用定时计 数器来测量其周期或频率,再经过计算处理获得。 AVR的定时计数器接口功能: 通过定时计数器与比较匹配寄存器相互配合,生成占空比 可变的方波信号,即脉冲宽度调制输出PWM信号,可用于 D/A、马达无级调速控制、变频控制等。本文主要介绍的是AVR单片机定时/计数器学习笔记,具体的跟随小编来了解下。 AVR单片机定时/计数器学习笔记 定时/计数器1(16位)有普通模式、CTC模式、
[单片机]
AVR单片机片内AD数字模拟转换器程序
/*AVR片内的AD转换器程序,本测试程序是把内部的AD转换器设置为连续转换模式,更多模式相见手册的191-207页*/ #include iom16v.h #define uchar unsigned char #define uint unsigned int #define set_bit(a,b) a|=(1 b) #define clr_bit(a,b) a&=~(1 b) #define get_bit(a,b) a&(1 b) uchar ADC_8bit()//AD转换函数 { ADMUX=0xe0;//*REFS1:0=11H表示参考电压由内部2。56V供电AREF引脚加电容? // ADL
[单片机]
avr单片机驱动max7219的程序
#include iom16v.h #include macros.h #define uchar unsigned char #define uint unsigned int //定义输出io口 #define Y1_OUT DDRC|=BIT(5); #define Y1_H PORTC|=BIT(5); #define Y1_L PORTC&=~BIT(5); #define Y2_OUT DDRD|=BIT(6); #define Y2_H PORTD|=BIT(6); #define Y2_L PORTD&=~BIT(6); #define Y3_OUT DDRD|=BIT(7); #define Y3_H
[单片机]