首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
AVR单片机如何用端口模拟USART
2024-10-25
AVR单片机教程——UART进阶
本文隶属于AVR单片机教程系列. 在第一期中,我们已经开始使用UART来实现单片机开发板与计算机之间的通信,但只是简单地讲了讲一些概念和库函数的使用.在这一篇教程中,我们将从硬件与软件等各方面更深入地了解UART. USART组件 一直在讲的UART其实是USART组件的一部分,USART比UART多了同步的一部分,但这一部分用得太少(我从来没用过),而且缺乏实例,所以就略过了.然而,单片机的设计者很机智地把这个鸡肋功能升华了一下,USART组件可以支持SPI模式.SPI是一种同步串行总线,
AVR单片机教程——DAC
本文隶属于AVR单片机教程系列. 单片机的应用场景时常涉及到模拟信号.我们已经会使用ADC把模拟信号转换成数字信号,本讲中我们要学习使用DAC把数字信号转换成模拟信号.我们还将搭建一个简单的功率放大器电路,用DAC通过扬声器播放音乐. SPI总线 集成DAC的单片机不多,ATmega系列就不在此列.我们将要使用的10位ADC是通过SPI总线通信的,因此我们先来学习SPI总线. SPI是一种同步串行通信总线,支持全双工通信.所谓同步,就是有时钟信号,类似上一讲中的595和165,并且硬件实现上
AVR单片机教程——开发板介绍
本教程使用EasyElectronics开发板: EasyElectronics是一款基于AVR单片机的开发板.AVR单片机是基于改进的哈佛架构.8~32位的一系列RISC微控制器,最初由Atmel公司于1996年推出,特点在于高性能与低功耗之间的平衡.AVR单片机有众多型号,现在常用的有ATtiny.ATmega与ATxmega系列.AVR单片机上一般都带有定时/计数器.SPI.I²C.USART.模拟比较器.模数转换器等外围设备. EasyElectronics拥有丰富的板载资源: 核心部分
AVR单片机教程——ADC
ADC 计算机的世界是0和1的.单片机可以通过读取0和1来确定按键状态,也可以输出0和1来控制LED.即使是看起来不太0和1的PWM,好像可以输出0到5V之间的电压一样,达到0和1之间的效果,但本质上还是高低电平. 但是,世界上终究还是有0和1无法表示的.如果引脚上被施加0到5V之间的电压,寄存器PINx无法告诉我们具体情况,只能指示这个电压是1.5V以下还是3V以上(参考数据手册"Electrical characteristics").这种可以连续变化的信号称为模拟信号,与离散的.
AVR单片机教程——串口发送
本文隶属于AVR单片机教程系列. 到目前为止,我们的开发板只能处理很小量的数据:读取几个引脚电平,输出几个LED,顶多用数码管显示一个两位数字.至于输入一个指令.输出一条调试信息,甚至用scanf和printf来输入输出,在已经接触过的这些器件上是难以想象的.而本讲"串口发送"与下一讲"串口接收",将打开这一扇大门. 硬件 本讲的主题是UART(Universal Asynchronous Receiver-Transmitter,通用异步收发器),俗称串口.实
AVR单片机教程——走向高层
本文隶属于AVR单片机教程系列. 在系列教程的最后一篇中,我将向你推荐3个可以深造的方向:RTOS.C++.事件驱动.掌握这些技术可以帮助你更快.更好地开发更大的项目. 本文涉及到许多概念性的内容,如果你有不同意见,欢迎讨论. 关于高层 这一篇教程叫作"走向高层".什么是高层? 我认为,如果寥寥几行代码就能实现一个复杂功能,或者一行代码可以对应到几百句汇编,那么你就站在高层.高层与底层是相对的概念,没有绝对的界限. 站得高,看得远,这同样适用于编程,我们要走向高层.高层是对底层的封
linux下avr单片机开发:中断服务程序
不管是什么单片机程序,中断总是非常重要的一部分 ,linux 下的avr开发,主要是依靠avr-gcc,以及avr-libc,它们对中断程序的格式要求,与window下的icc-avr以及win-avr有所差异,这里对linux下中断服务程序编写做个简要介绍. 个人原创,转载请注明出处:http://blog.csdn.net/embbnux/article/details/12448053 首先是要引入的库: #include <avr/io.h> #include <avr/inte
AVR单片机RC触摸
RC电容触摸感应按键1:RC感应原理 RC采样原理就是通过测量感应极电容的微小变化,来感知人体对电容式感应器(按键.轮键或者滑条)的感应.电极电容(C)通过一个固定的电阻(R)周期性地充放电.(原文件名:image001.png) 固定电压施加在VIN,VOUT的电压随着电容值的变化而相应增加或者降低, 如图2所示.(原文件名:image002.png) 通过计算VOUT的电压达到阀值VTH所需要的充电时间(tC),来得到电容值(C). 在触摸感应应用中,电容值(C)由两部分组成:固定电容(电极
AVR单片机8位数码管显示的程序实现
AVR单片机8位数码管显示的程序实现 转载:http://www.sohu.com/a/117255149_119709 2016-10-26 16:30 我们接着来完成 数码管的显示实验.现在我们开始动手编写程序: 根据前面的介绍,我们应该已经能够知道编写一个 的C语言程序的基本步骤和方法了. 下面给出这个程序的主程序文件,在这个程序中我们应该能够知道这个程序都包含了那几块,具体来说我们应该能够在这个程序中把以下几个部分找出来:预编译语句. 的定义.函数的声明.主函数.函数定义.如果你还不
AVR单片机教程——旋转编码器
好久没写这个系列了.今天讲讲旋转编码器. 旋转编码器好像不是单片机玩家很常用的器件,但是我们的开发板上有,原因如下: 旋转编码器挺好用的.电位器能旋转的角度有限,旋转编码器可以无限圈旋转:旋转时不连续,有卡点,适合对应离散数据. 开发板上选用的旋转编码器,使用起来简单.方便. 本来旁边的电位器(旋钮,以后会讲)一枝独秀,挺孤单的,我就配一个高度大致相同的旋转编码器陪伴它. 今天我想写旋转编码器,于是在网络上搜索了一下,相关资料很少.最基本地,旋转编码器的作用是将角位移.角速度等机械量转换为电信号
AVR单片机教程——数码管
先解答之前一个思考题:如果不把引脚配置为输出而写高电平,连接LED会怎样? 实验结果是,LED会亮,但相比于输出高电平的情况,亮度很低.这是为什么呢? 通过上一篇教程我们知道,引脚输入输出模式是由寄存器DDRx中DDxn位控制的,可以推断出 pin_mode 函数会改变一个引脚对应的DDxn值,输入为0,输出为1,而其复位后的值为0,即输入,因此如果不把引脚配置为输出,它的模式就是输入.类似地 pin_write 函数会改变PORTxn,其值为函数的第二个参数. 所以不配置输出而写高电平的结果就
AVR单片机教程——数字输入
我们已经学习了如何使用按键和拨动开关,不知你有没有好奇 button_down 和 switch_status 等函数是如何实现的.本篇教程带你一探究竟,让我们从按键的原理开始. 在原理图中,按键的符号如下图所示: 符号很简单,就是两个触点上方有一个动片,当按下时与两个触点接触.实际上按键内部的机械结构大体上就是这样,实现的功能是,没有按下时两端断路,按下时两端短路. 还有一种画法是这样的,即电键: 就按键内部的机械结构来说,第一种更加真实,但从电路角度来看,两者没什么区别. 但是我们的开发板上
AVR单片机教程——按键状态
好久没更新了,今天开始继续,争取日更. 今天我们来讲按键.开发板的右下角有4个按键,按下会有明显的“咔嗒”声.如何检测按键是否被按下呢?首先要把按键或直接或间接地连接到单片机上.与之前使用的4个LED不同,4个按键没有全部连接到单片机上——左边2个是连接的,右边2个通过按键上方标有B2.B3的接口引出(从左到右分别为B0.B1.B2和B3).如果要使用B2.B3,要用杜邦线连接到16个单片机引出针脚上. 开发板库中与按键相关的函数定义在 <ee1/button.h> ,这里是库函数手册.值得一
AVR单片机教程——PWM调光
本文隶属于AVR单片机教程系列. PWM 两位数码管的驱动方式是动态扫描,每一位都只有50%的时间是亮的,我们称这个数值为其占空比.让引脚输出高电平点亮LED,占空比就是100%. 在驱动数码管时,我们迫不得已使占空比为50%,因为不能让两位真正同时地显示不同的数字.但是,我们也可以有意地让LED的占空比不到100%,以降低其亮度. 占空比是可以用程序来调节的.下面的程序允许用户用按键调整蓝色LED的占空比,并通过数码管来显示. #include <ee1/ee.h> #define DU
AVR单片机教程——LCD1602
本文隶属于AVR单片机教程系列. 显示屏 开发板套件里有两块屏幕,大的是LCD(液晶显示),小的是OLED(有机发光二极管).正与你所想的相反,短小精悍的比较贵,而本讲的主题--LCD1602--功能较少,使用起来也简单很多. 这块屏幕的显示是以字符为单位的.每个字符都是8像素高,5像素宽.1602这个名字,来源于显示字符的数量,共2行,每行16个字符.出售1602的商家提供了一份文档:提取码8c1u. 硬件 一个典型的1602显示屏有16个引脚(还有些模块是用串行总线驱动的): 名称 功能
AVR单片机教程——小结
本文隶属于AVR单片机教程系列. 第一期挺让我失望的,是我太菜,没有把想讲的都讲出来.经常写了很多,然后一点一点删掉,最后就没多少了. 而且感觉难度不合适,处于很尴尬的位置.讲得简单,难的丢给库,库源码也不公开.作业题倒是难得一批,我自己都差点不会做. 以前看不起那些死讲知识点的书,现在明白,把知识点写活太难了.尤其是单片机这边,知识点本来就杂,难以组织. 本来想后面慢慢讲电路.总线.中断等的,但一觉得太累,二觉得讲不好,于是就改了计划. 目前暂定第二期有6讲: 定时器中断:中断基础.定时器
AVR单片机教程——矩阵键盘
本文隶属于AVR单片机教程系列. 开发板上有4个按键,我们可以把每一个按键连接到一个单片机引脚上,来实现按键状态的检测.但是常见的键盘有104键,是每一个键分别连接到一个引脚上的吗?我没有考证过,但我们确实有节省引脚的方法. 矩阵键盘 这是一个4*4的矩阵键盘,共有16个按键只需要8个引脚就可以驱动.我们先来看看它的原理. 每个按键有两个引脚,当按键按下时接通.每一行的一个引脚接在一起,分别连接到左边4个端口,称为"行引脚":每一列的另一个引脚接在一起,分别连接到右边的4个端口,称
AVR单片机教程——示波器
本文隶属于AVR单片机教程系列. 在用DAC做了一个稍大的项目之后,我们来拿ADC开开刀.在本讲中,我们将了解0.96寸OLED屏,移植著名的U8g2库到我们的开发板上,学习在屏幕上画直线的算法,编写一个示波器程序,使用EEPROM加入人性化功能,最后利用示波器观察555定时器.放大电路.波形变换电路的各种波形. OLED屏 我们使用的是0.96寸OLED屏,它由128*64个像素点构成,上16行为蓝色,下48行为黄色,两部分之间有大约两像素的空隙.虽然有两种颜色,但每个像素点都只能发出一种
51,PIC,AVR单片机它们的优点缺点都有哪些?
我有幸接触了几款单片机,并用它们做了一些项目.现在想做个小总结,谈一下自己用各种单片机的感受.仅是个人意见,仁者见仁智者见智. 传统51,我想我就不多说了,适合菜鸟入门,容易上手,价格一般(从性价比方面说). 缺点:解密容易(传统51说:谁让咱出道早呢,大家都研究我,哎!哭......)一般功能也有,, 但AD.eeprom等功能要靠扩展,增加硬件和软件负担. IDE环境推荐 keil.编程器自己自制ISP下载线就行,好做,成本5元左右. PIC:我就是学这款单片机入门的,pic的好处就是各个型
AVR单片机的BOOT区
BOOT区的由来基于一个简单的道理,即单片机的程序是保存在FLASH中的,要运行程序就必须不停的访问FLASH存储器.对于一般的FLASH存储器,数据的写入需要一定的时间来完成,在数据写入完成之前,存储器中所有的数据都是不可读的,这就在运行旧程序和写入新程序之间造成了一个矛盾. 使用BOOT区是解决这个矛盾的方法之一,它将FLASH存储器从物理上分为两个独立的区域,对其中的一个区的数据写入不会影响到另一个区的数据读取操作.我们可以让单片机的程序在其中一个区(通常是BOOT区)运行,而运行着的程序
热门专题
在jQuery中,关于绑定事件和移除事件说法错误的是()o
数据结构队列链式的初始化进队出队
四元式局部优化csdn代码
Python自环接口客户端连接失败
verilog的if语句的执行
设置git用户名和邮箱 ubuntu
vba如何屏蔽您的文档的部分内容可能包含文档
动软代码生成器无法连接mysql
linux磁盘io吃满
将 Travis CI 添加到你的 GitHub 账户中
va01 修改指定的子屏幕号
HTML中如何创建tab
javascript手机上获取位置信息
mysql varchar text 性能
vs2019 内联汇编文件
blego是窃听设备吗
css 怎么让div 纵横排列
jquery UI 下拉框
sql2008服务电脑关机之后不能自动启动
laravel 获取指定字段