首页
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区)运行,而运行着的程序
热门专题
ubuntu 无ip地址
knime和python
js函数参数数量不定
excel生成全球唯一uuid的算法
unity 切换输入框
cordova框架实现原理
vue模块化开发 按需打包
命令启动 virtualbox
php redis实现聊天室
输出文本背景和文字颜色
file类型应该在结构体映射成什么类型的
android mvvm事件绑定
nuget org 包名冲突
lvds 驱动 接收原理
linux查询conda下包的地址
libcef webrtc使用
墨者 apache php
wps office生成pdf目录
文件通过多线程写入数据库
forupdate锁表