技术文档

atmega8单片机 带你从软硬件两方面来分析Atmega16单片机

小编 2025-07-01 技术文档 23 0

带你从软硬件两方面来分析Atmega16单片机

1. Atmega16单片机简介

今天我们的主题是单片机,说道单片机你可能最先想到的是51单片机,然后通过外接的数字电路和模拟电路来控制外围的硬件,比如PWM,ADC,I2C等等。那么今天我们所说的Atmega16单片机和51单片机的区别是什么那?其实你把Atmega16单片机当成51单片机来使用即可,只不过是Atmega16单片机的外围接口更丰富,那么它都有什么外设资源那?

ATmega16是基于增强的AVR RISC结构的低功耗8 位CMOS微控制器,由于其先进的指令集以及单时钟周期指令执行时间,ATmega16 的数据吞吐率高达1 MIPS/MHz。ATmega16常用片上资源有定时器、PWM、外部中断、SPI总线、两线串行接口TWI、EEPROM、USART、模拟比较器、ADC转换、IEEE(JTAG)边界扫描等。如何去学习Atmega16单片机那?我们从硬件和软件两方面分析。

2. Atmega16单片机硬件原理图(最小系统)

从上述的最小系统板子上们可以看到它分为如下几个部分:

电源电路:5V电源

复位电路:上电复位(电容),手动按键复位。

晶振电路:Atmega16单片机内部自带RC震荡电路,但是自带的震荡电路不够精确,所以这里就外接了一个8MHZ的晶振。

下载程序接口ISP:ISP串行的下载程序的接口

Atmega16单片机:8位avr单片机。

1. Atmega16单片机编程

AVR单片机的编译软件有GCC AVR和ICC AVR等,通常使用较多的是ICC AVR,也比较好用,本书以ICC AVR6.31版本为例介绍编译软件的使用。启动ICC AVR,界面如下图所示。如何使用avr单片机控制最小系统上的led灯那?代码如下:

AVR ATmega16 流水灯C程序

/**************************************************************************/

#include //包含单片机型号头文件

#include //包含"位"操作头文件

void delay(void) //自定义延时函数

{

unsigned char i,j;

for(i=0;i<255;i++)

for(j=0;j<10;j++)

;

}

void cpu_init(void) //单片机初始化函数

{

PORTA = 0x00; //PA口输出值都定义为0

DDRA = 0x00; //PA口输出允许关

PORTB = 0x00; //PB口输出值都定义为0

DDRB = 0x00; //PB口输出允许关

PORTC = 0x00; //PC口输出值都定义为0

DDRC = 0x00; //PC口输出允许关

PORTD = 0x00; //PD口输出值都定义为0

DDRD = 0x00; //PD口输出允许关

}

void main(void)

{

cpu_init(); //初始化单片机

while(1)

{

PORTA=0X00; /*点亮led灯,由最小系统的外部电路决定单片机输出

低电平时流水灯点亮*/

DDRA=0XFF; /*允许输出,此时PORTA的赋值才有效,这事AVR比51高级的地方*/

//由于其他端口没有接外围设备先不用定义

delay();

DDRA=0X00; //关闭led灯

delay();

}

}

教你制作24GHz数字无线话筒

《爱情公寓》里有句台词是:“跟我赌,不是看你要什么,而是看我有什么!”我最近做项目,手头剩下几片ATmega16L单片机和一对NRF24L01+无线模块,闲来无聊,于是做了个数字无线话筒玩玩儿,没想到效果还不错。

如今,越来越多的2.4GHz无线产品进入了我们的生活,如蓝牙、无线上网和无线键鼠等,这些产品极大地方便了我们的生活。接下来我所制作的就是一款简单的2.4GHz数字无线话筒。

2.4GHz无线技术采用的频段处于2.405~2.485GHz (科学、医药、农业),这个频段里是国际规定的免费频段,这为2.4GHz无线技术的可发展性提供了必要的有利条件。2.4GHz无线技术的工作方式是采用全双工模式传输,这个优势决定了它的超强抗干扰性。此外,相比采用蓝牙等其他无线传输技术的产品,采用2.4GHz无线技术的产品,制造成本更低,提供的数据传输速率更高,它的抗干扰性、最大传输距离以及功耗更远远超出采用同样免费的27MHz无线技术。

设计思路

这个设计的思路非常简单,首先将驻极体话筒采集到的声音模拟信号转换成便于存储和处理的数字信号,即AD转换;然后通过2.4GHz的无线模块发送到接收端;接收端收到数据后,再利用PWM将数字信号还原成声音信号。

由于话筒传输的是实时的语音信号,而声音的数字化和还原都会有延迟。因此,这个设计的关键是怎么做才能保证语音信号实时传输。

元器件选择

这款无线话筒结构简单,用到的主要元器件有nRF24L01+无线模块、AVR单片机、晶体振荡器和驻极体话筒,当然,还得有几只电阻、电容。

至于nRF24L01+无线模块,现在很容易买到,也不贵。通常,这类模块官方给出的传输速度有3种,分别是1Mbit/s、2Mbit/s和250kbit/s,可通过软件选择。然而这只是一次传输32字节的速度,应用中由于每次发送需要等待器件进入发送状态,内部PLL电路工作稳定,每发送一次大约需要700μs(自动应答2Mbit/s时),所以实际能达到的最大速度大概是40~60kbit/s。

根据Atmel官方文档,ATmega16L的AD在10位分辨率时能达到的最大采样率大约为15kHz。而我们在这个设计中给它来点“超频”,设置它的AD时钟频率为1MHz,8位分辨率,这样可以稍稍提高AD转换速度,达到8位16kHz采样的目的。32字节可以存储2ms的声音信息:1s/16kHz=62.5μs,62.5μs×32=2ms,不要担心,这只是个不太讨厌的计算题。根据计算可以知道,发送一次数据需要大约700μs,而接收一次数据存储了2ms的声音数据,因此完全可以在播放这2ms声音时进行下次的发送—接收。这就达到了实时传输语音信号的目的。系统流程图见图20.1。

图20.1 系统结构图

当然,并不是一定要用ATmega16L单片机,也可以用ATmega8单片机。其实只要带有AD转换且速度够快的单片机都能使用。

电路原理图简介

1.发送端电路

发送端电路有数据传输、数据处理和声音采集3个部分。数据传输部分用单片机的硬件SPI接口与NRF24L01+无线模块连接,提高传输速率,简化程序设计,如果是没有SPI接口的单片机可以用I/O模拟SPI,这里不再说明。声音采集部分就是用驻极体话筒将声音信号转换成连续变化的电压信号,然后通过单片机自带AD转换部分转换成数字信号。从原理图(见图20.2)可以看出,驻极体话筒的电路之外接了一个电阻,那这个电阻的阻值(R)是怎么确定的呢?这个设计中ATmega16L单片机AD的参考电压选择AVCC引脚电压,而AVCC=VCC,所以AD输入电压(Vin)范围应该在0~VCC。驻极体的工作电流(I)为0.1~1mA;Vin=VCC-I×R,如果取VCC=4.2V,则可以确定R取值应在4.2~42kΩ,这里取R为10kΩ,保证信号不失真。数据处理部分就是单片机了,单片机控制AD的采样率,存储数字信号,并且控制无线模块发送数据。

图20.2 发送端原理图

2.接收端电路

接收端电路用到的数据传输部分与发送端完全相同。只是在单片机PWM输出引脚接了个低通滤波器,滤去高频噪声,还原语音信号。整个设计从简单出发,因此低通滤波器只用一个电阻(10Ω)和一个电容(2.2μF)组成,截止频率大约为7kHz,具体原理图见图20.3。如果想要更好的效果,可以用5532接一个带通滤波器,效果会更好。

3.电源

发送端用一块电压为4.2V的锂电池供电,方便手持使用。接收端由于要和耳机或功放连接,采用稳压电源供电,电压为3.3~5V。需要特别说明的是NRF24L01+对电源特别敏感,电源质量差可能会导致接收变差,甚至收不到数据,因此应注意电源滤波,最好在NRF24L01+电源附近接一个0.1μF电容。

图20.3 接收端原理图

程序编写

电路简单不代表程序就简单,程序是这个数字无线话筒的灵魂。按原理图接好电路(见图20.4),接下来要面对的就是编程问题了。程序同样也分为发送端和接收端。

图20.4 初步完成后的发射电路实物

1.发送端程序

发送端所做的工作是AD转换、数据暂存和数据发送。发送端程序设计的关键是准确地控制AD采样率为16kHz,还能及时将数据发送出去。为此发送端ATmega16L单片机的AD工作在自动触发模式,以定时器0为触发源,并且以中断方式读取转换结果,从而准确地控制采样率。

2.接收端程序

接收端程序完成的工作是接收到数据后将数字信号转换成占空比不同的连续脉冲。程序设计的关键是保证PWM工作频率与发送端采样率相同,这样才能准确地还原声音信号。ATmega16L单片机带有硬件PWM,大大简化了程序设计。需要特别注意的是,如果没有收到数据,要关闭PWM输出,否则会有非常大的噪声。

这是我的qq群657864614,我会不定时的把一些程序源代码发布到qq群里面,有兴趣的可以加下。

实际使用效果

原以为单片机自带AD16kHz采样8位分辨率,PWM变换,还有简陋的滤波器和驻极体话筒,这样的话筒音质一定“惨不忍听”,制作完成后小心试用,没想到得到是惊喜:基本无噪声,清晰地还原了说话的声音,接上功放(见图20.5),音质更好。在使用PCB天线时,室内测试有效距离为6m。2.4GHz数字无线话筒使用的就是最简单的AD转换,没有使用声音的采样量化编码技术,音质勉强,比FM无线话筒音质稍差,比电话语音稍强。如果对音质有很高的要求,可以使用专用的音频ADC芯片和音频DAC芯片,但是成本就高了。

图20.5 接收电路与自制的功放音箱连接

2.4GHz的无线信号非常适合于在小范围内进行数据传输。动手试一试吧,洞洞板也可轻松搞定哦。

也许这个适合你↓↓↓↓↓ 手机无线麦克风家用电视唱歌蓝牙话筒自带音响一体家庭KTV卡拉OK-淘宝网

相关问答

mega8 8 单片机 介绍?

ATmega88单片机是基于增强的AVRRISC结构的低功耗8位CMOS微控制器。由于其先进的指令集以及单时钟周期指令执行时间,ATmega88的数据吞吐率高达1MIPS/MHz,从...

单片机Atmega 48/88/168和 Atmega8 /16区别?

您好:mega168是mega88的升级版本。mega48/mega88/mega168是一个系列的,只是存储空间大小不同,在GCC上统称为megax8。Atmega8/16是同系列的,只是存储空...

如何用 atmega 128实现8M系统时钟50hz电机的pwm控制?

采用atmega128单片机与SA828配合来生成SPWM信号,这样外围的硬件结构比较简洁。采用atmega128单片机与SA828配合来生成SPWM信号,这样外围的硬件结构比较简洁。

ATMega单片机 的复位方式有哪几种?

单片机复位就两种方式,一个是硬件复位,一个是软件复位。硬件复位就是靠外部的硬件强行把复位管教置为低电平,例如上电的时候,还有按键。上电之所以要复...

atmega 16 单片机 在keil C51中怎么找不到?

atmega16单片机不是51系列单片机,在keilC里面是没有的。。。你可以用ICCV7或者其他软件编程用其他软件进行程序的烧写atmega16单片机不是51系列单片机,在ke...

atmega 328这个 单片机 怎么样?

你是要了解这个芯片还是arduinouno?就这个芯片而言,比STC15要差一些。但是包装后的arduino使用方便,更适合初学者你是要了解这个芯片还是arduinouno?就这...

ATmega 16 单片机 和PIC16F877 单片机 哪个更常用?选择哪个入门更好?

但只针对这个问题,初学单片机编程,我推荐ATmega16单片机。其实单纯从变成角度来说,学那种单片机都可以,但是针对这个问题,我简单说一下选择AVR单片机的原因...

开发 atmega 16 单片机 ,用哪种型号的烧录器好点,最好可以仿真的?

不知道你问的是该单片机是不是能用串口,还是是不是可以用串口烧程序。这样说吧,atmega16单片机是有串口的;它是通过单片机的SPI口烧录程序的(电脑这头是接...

如何快速将两个 单片机 的程序合并,我是用 ATmega 16 单片机 ,程序是用c编的?

你是指把两个单片机的程序合起来,最后烧录到一块单片机上么?如果是的话,C语言只要改下程序开始的引脚定义就好了。把重复的I/O口再重新定义一下就好了。你...

uno是什么 单片机 ?

ArduinoUno是ATmega328p的单片机。有14个数字输入/输出引脚(有6个可用作PWM输出)、6个模拟输入引脚、16MHz晶振。ArduinoMega2560是基于ATmega2...

猜你喜欢