TLC5615实现示波器波形显示——方波、三角波、锯齿波

代码:

#include <reg52.h>sbit SCLK = P2^0; // sbit:为寄存器的某位取名
sbit CS = P2^1;
sbit DIN = P2^2;sbit key1 = P1^0;
sbit key2 = P1^1;
sbit key3 = P1^2;
sbit key4 = P1^3;unsigned char rect; void delay(unsigned char i) {while(i--);
}// 发送12位数据的函数
void write_12bits(unsigned char dat) {unsigned char i;CS = 0; // 片选最初置0for (i = 0; i < 8; i++) { // 先发送八位数据dat <<= 1; // dat最高位溢出DIN = CY; // 将溢出的高位给DINSCLK = 1; delay(5); // 产生一次SCLK的正脉冲以发送数据SCLK = 0; delay(5); }for (i = 0; i < 4; i++) { // 再发送四个零DIN = 0;SCLK = 1;delay(5);SCLK = 0;delay(5);}CS = 1; // 发送完全部数据后,必须让CS = 1
}void triangle() { // 产生三角波unsigned char i;for (i = 0; i < 255; i++) {write_12bits(i);}for (i = 255; i > 0; i--) {write_12bits(i);}
}void serration1() { // 产生锯齿波1unsigned char i;for (i = 0; i < 255; i++) {write_12bits(i);}
} void serration2() { // 产生锯齿波2unsigned char i;for (i = 255; i > 0; i--) {write_12bits(i);}
}void tixing() { // 产生梯形unsigned char i;for (i = 255; i > 0; i--) {write_12bits(i);}for (i = 0; i < 255; i++) {write_12bits(0);}for (i = 0; i < 255; i++) {write_12bits(i);}for (i = 0; i < 255; i++) {write_12bits(255);}
}void main() {rect = 0x00;TMOD = 0x01; // 利用定时器 T0 的方式一TH0 = 0x3c; // 定时器延时初值TL0 = 0xb0;EA = 1;  // 总中断ET0 = 1; // 定时器0的溢出中断 TR0 = 1; // 开启定时器0while (1) {while (!key1) {TR0 = 0; // 关闭定时器triangle();}while (!key2) {TR0 = 0;serration1();}while (!key3) {TR0 = 0;serration2();}while (!key4) {TR0 = 0;tixing();}TR0 = 1; // 开启定时器0}
}void timer0() interrupt 1 { // 产生方波TH0 = 0x3c;TL0 = 0xb0;rect = ~rect;write_12bits(rect);
}

仿真:

介绍:

        在单片机测控系统中,非电量如温度、压力、流量、速度等,经传感器先转换成连续变化的模拟电信号(电压或电流),然后再将模拟电信号转换成数字量后才能在单片机中进行处理。实现模拟量转换成数字量的器件称为ADC(A/D转换器)。

        单片机处理完毕的数字量,有时根据控制要求需要转换为模拟信号输出。数字量转换成模拟量的器件称为DAC(D/A转换器)。本章从应用的角度,介绍典型的ADC、DAC芯片与AT89S51单片机的硬件接口设计以及接口驱动程序设计。

单片机扩展AD转换


        单片机只能输出数字量,但是对于某些控制场合,常常需要输出模拟量,例如直流电动机的转速控制。下面介绍单片机如何扩展DAC。

        目前集成化的DAC芯片种类繁多,设计者只需要合理选用芯片,了解它们的性能、引脚外特性以及与单片机的接口设计方法即可。由于现在部分单片机的芯片中集成了DAC,位数一般在10位左右,且转换速度也很快,所以单片的DAC开始向高的位数和高转换速度上转变。而低端的并行8位DAC,开始面临被淘汰的危险,但是在实验室或涉及某些工业控制方面的应用,低端8位DAC以其优异的性价比还是具有较大的应用空间。

1.D/A转换器简介

        购买和使用D/A转换器时,要注意有关D/A转换器选择的几个问题。

(1)D/A转换器的输出形式

        D/A转换器有两种输出形式:电压输出和电流输出。电流输出的D/A转换器在输出端加一个运算放大器构成的I-V转换电路,即可转换为电压输出。

(2)D/A转换器与单片机的接口形式

        单片机与D/A转换器的连接,早期多采用8位的并行传输的接口,现在除了并行接口外,带有串行口的D/A转换器品种也不断增多,目前较为流行多采用SPI串行接口。在选择单片D/A转换器时,要根据系统结构考虑单片机与D/A转换器的接口形式。
2.主要技术指标

        D/A转换器的指标很多,设计者最关心的几个指标如下。

(1)分辨率

        分辨率指单片机输入给D/A转换器的单位数字量的变化,所引起的模拟量输出的变化,通常定义为输出满刻度值与2n之比(n为D/A转换器的二进制位数),习惯上用输入数字量的位数表示。显然,二进制位数越多,分辨率越高,即D/A转换器输出对输入数字量变化的敏感程度越高。例如,8位的D/A转换器,若满量程输出为10V,根据分辨率定义,则分辨率为10V/2n,分辨率为10V/256 = 39.1mV,即输入的二进制数最低位数字量的变化可引起输出的模拟电压变化39.1mV,该值占满量程的0.391%,常用符号1LSB表示。

同理:

10位D/A转换  1 LSB = 9.77mV = 0.1%满量程

12位D/A转换  1 LSB = 2.44mV = 0.024%满量程

16位D/A转换  1 LSB = 0.076mV = 0.00076%满量程

使用时,应根据对D/A转换器分辨率的需要选定D/A转换器的位数。

(2)建立时间

        建立时间是描述D/A转换器转换速度的参数,表明转换时间长短。其值为从输入数字量到输出达到终值误差± (1/2)LSB(最低有效位)时所需的时间。电流输出的转换时间较短,而电压输出的转换器,由于要加上完成I-V转换的时间,因此建立时间要长一些。快速D/A转换器的建立时间可控制在1us以下。
(3)转换精度

        理想情况下,转换精度与分辨率基本一致,位数越多精度越高。但由于电源电压、基准电压、电阻、制造工艺等各种因素存在误差。严格地讲,转换精度与分辨率并不完全一致。两个相同位数的不同的DAC,只要位数相同,分辨率则相同,但转换精度会有所不同。例如,某种型号的8位DAC精度为±0.19%,而另一种型号的8位DAC精度为±0.05%

AT89S51扩展10位串行DAC-TLC5615

  1. 串行DACTLC5615简介

            美国TI公司产品,串行接口DAC,电压输出型,最大输出电压是基准电压值两倍。带上电复位功能,即上电时把 DAC 寄存器复位至全零。单片机只需用3 根串行总线就可完成 10 位数据的串行输入,易于和工业标准的微处理器或单片机接口,非常适于电池供电的测试仪表、移动电话,也适用于数字失调与增益调整以及工业控制场合。

  • DIN:串行数据输入端;
  • SCLK:串行时钟输入端;
  • CS:片选端,低电平有效;
  • DOUT:用于级联时的串行数据输出端;
  • AGND:模拟地;
  • REFIN:基准电压输入端,2V~ (VDD - 2);
  • OUT:DAC 模拟电压输出端;
  • VDD:正电源端,4.5~5.5V ,通常取5V

  1. TLC5615内部功能框图
  • 10 位 DAC 电路;
  • 一个 16 位移位寄存器, 接收串行移入的二进制数,且有一个级联的数据输出端DOUT ;
  • 并行输入输出的 10 bit DAC 寄存器, 为 10 位 DAC 电路提供待转换的二进制数据;
  • 电压跟随器为参考电压端REFIN提供高输入阻抗,大约10MΩ;
  • ×2 电路提供最大值为 2 倍于REFIN输出;
  • 上电复位电路和控制逻辑电路

两种工作方式:

(1)第1种工作方式:12 位数据序列。从图10-8看出,16 位移位寄存器分为高4位的虚拟位、低2位的填充位以及10位有效数据位。在TLC5615 工作时,只需要向 16 位移位寄存器先后输入10位有效位和低2位的任意填充位。

(2)第2种工作方式:级联方式, 即 16 位数据列,可将本片的DOUT接到下一片的 DIN,需向 16 位移位寄存器先后输入高 4 位虚拟位、10 位有效位和低 2 位填充位,由于增加了高 4 位虚拟位, 所以需要 16 个时钟脉冲 。

        当TLC5615片选脚CS为低时, 串行输入数据才能被移入16位移位寄存器。当CS为低时,在每一个 SCLK 时钟的上升沿将 DIN 的一位数据移入 16 位移寄存器。注意, 二进制最高有效位被导前移入。接着, CS的上升沿将16位移位寄存器的10位有效数据锁存于10位 DAC 寄存器,供DAC电路进行转换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/223662.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

03|模型I/O:输入提示、调用模型、解析输出

03&#xff5c;模型I/O&#xff1a;输入提示、调用模型、解析输出 从这节课开始&#xff0c;我们将对 LangChain 中的六大核心组件一一进行详细的剖析。 模型&#xff0c;位于 LangChain 框架的最底层&#xff0c;它是基于语言模型构建的应用的核心元素&#xff0c;因为所谓 …

2016年第五届数学建模国际赛小美赛A题臭氧消耗预测解题全过程文档及程序

2016年第五届数学建模国际赛小美赛 A题 臭氧消耗预测 原题再现&#xff1a; 臭氧消耗包括自1970年代后期以来观察到的若干现象&#xff1a;地球平流层&#xff08;臭氧层&#xff09;臭氧总量稳步下降&#xff0c;以及地球极地附近平流层臭氧&#xff08;称为臭氧空洞&#x…

vscode中vue项目报错

当在vscode中写代码时&#xff0c;报错报错报错......... 已经头大&#xff0c;还没写就报错&#xff0c; 这是因为eslint对语法的要求太过严格导致的编译时&#xff0c;出现各种语法格式错误 我们打开vue.config.js&#xff0c;加上这句代码&#xff0c;就OK啦 lintOnSave:…

c++11--类型自动推导

1.自动类型推断 1.1.auto a.auto声明变量的类型必须由编译器在编译时期推导而得。 int main(){double foo();auto x 1;//x类型为intauto y foo();// y类型为doubleauto z;// errreturn 0; }b.auto声明得变量必须被初始化。 c.针对指针和引用 推导类型是指针类型时&#xff0…

C++内存管理和模板初阶

C/C内存分布 请看代码&#xff1a; int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)mallo…

Unity中Shader缩放矩阵

文章目录 前言一、直接相乘缩放1、在属性面板定义一个四维变量&#xff0c;用xyz分别控制在xyz轴上的缩放2、在常量缓存区申明该变量3、在顶点着色器对其进行相乘&#xff0c;来缩放变换4、我们来看看效果 二、使用矩阵乘法代替直接相乘缩放的原理1、我们按如下格式得到缩放矩阵…

Nessus详细安装-windows (保姆级教程)

Nessus描述 Nessus 是一款广泛使用的网络漏洞扫描工具。它由 Tenable Network Security 公司开发&#xff0c;旨在帮助组织评估其计算机系统和网络的安全性。 Nessus 可以执行自动化的漏洞扫描&#xff0c;通过扫描目标系统、识别和评估可能存在的安全漏洞和弱点。它可以检测…

5. 创建型模式 - 单例模式

亦称&#xff1a; 单件模式、Singleton 意图 单例模式是一种创建型设计模式&#xff0c; 让你能够保证一个类只有一个实例&#xff0c; 并提供一个访问该实例的全局节点。 问题 单例模式同时解决了两个问题&#xff0c; 所以违反了单一职责原则&#xff1a; 保证一个类只有一…

鸿蒙开发者工具安装及入门程序

下载工具DevEco Studio IDE 官网下载&#xff1a;HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 开发工具的安装 解压下载好的压缩包&#xff0c;一路无脑安装即可&#xff0c;安装完的使用方法类似于IDEA、WebStorm的使用&#xff0c;快捷键一致&#xff0c;默认黑…

day09

文章目录 一、jQuery简介1. 介绍2. 使用1&#xff09;引入2&#xff09;工厂函数 - $()3&#xff09;原生JS对象与jQuery对象4&#xff09;jQuery获取元素5&#xff09;操作元素内容6&#xff09;操作标签属性7&#xff09;操作标签样式8&#xff09;根据层级结构获取元素9&…

当下流行的直播技术demo演示

nginx-http-flv-module&#xff08;更新不是很频繁&#xff09; SRS: https://ossrs.net/lts/zh-cn/&#xff08;独立官网&#xff0c;目前最新稳定版version5&#xff09; 基于SRS搭建直播demo演示&#xff1a; 一、搭建流媒体服务器 参见官网&#xff1a;https://ossrs.ne…

2023.12.22 关于 Redis 数据类型 String 常用命令

目录 引言 String 类型基本概念 SET & GET SET 命令 GET 命令 MSET & MGET MSET 命令 MGET 命令 SETNX & SETEX & PSETEX SETNX 命令 SETEX 命令 PSETEX 命令 计数命令 INCR 命令 INCRBY 命令 DECR 命令 DECRBY 命令 INCRBYFLOAT 命令 总结…

docker笔记2-docker 容器

docker 容器的运行 docker run 镜像名&#xff1a;版本标签&#xff1a; 创建 启动容器 docker run 镜像名 &#xff0c;如果镜像不存在&#xff0c;则会在线下载镜像。 注意事项&#xff1a; 容器内的进程必须处于前台运行状态&#xff0c;不能后台&#xff08;守护进程运行…

iOS - 真机调试的新经验

文章目录 获取真机 UDIDPlease reconnect the device.iOS 开发者模式Fetching debug symbols 很久没有在真机运行 iOS 测试了&#xff0c;今天帮忙调试&#xff0c;发现很多东西都变了&#xff0c;有些东西也生疏了&#xff0c;在这里记录下。 获取真机 UDID 创建Profile 需要…

Spark编程实验三:Spark SQL编程

目录 一、目的与要求 二、实验内容 三、实验步骤 1、Spark SQL基本操作 2、编程实现将RDD转换为DataFrame 3、编程实现利用DataFrame读写MySQL的数据 四、结果分析与实验体会 一、目的与要求 1、通过实验掌握Spark SQL的基本编程方法&#xff1b; 2、熟悉RDD到DataFram…

【qt信号槽-5】信号槽相关注意事项记录

背景&#xff1a; 信号槽是qt很重要的概念&#xff0c;遇到问题帮助没少看。其中就有signals and slots这一章节&#xff0c;说得很到位。 概念琐碎&#xff0c;记录备忘。不对之处望指正。 【qt信号槽-1】槽函数重写问题&#xff0c;qt_metacall和qt_static_metacall-CSDN博…

百模大战中的AI行业:新趋势与未来发展

文章目录 每日一句正能量前言技术进步应用拓展行业变革人才竞争后记 每日一句正能量 人生最重要的价值是心灵的幸福&#xff0c;而不是任何身外之物。 前言 随着科技的迅猛发展&#xff0c;人工智能&#xff08;AI&#xff09;已经成为引领技术革命的重要驱动力之一。在当前的…

Jmeter、postman、python 三大主流技术如何操作数据库?

1、前言 只要是做测试工作的&#xff0c;必然会接触到数据库&#xff0c;数据库在工作中的主要应用场景包括但不限于以下&#xff1a; 功能测试中&#xff0c;涉及数据展示功能&#xff0c;需查库校验数据正确及完整性&#xff1b;例如商品搜索功能 自动化测试或性能测试中&a…

UnityHub无法打开项目问题,打开项目闪退回到hub界面

UnityHub无法打开项目问题&#xff0c;打开项目闪退回到hub界面 UnityHub启动项目闪烁unity界面之后立刻闪退到UnityHub界面情况一&#xff1a;这里这个问题我遇到了很多次情况都不太一样&#xff0c;我先说下我遇到的第一种问题也就是最好解决的一种。许可证到期导致闪退 情况…

怎么为pdf文件添加水印?

怎么为pdf文件添加水印&#xff1f;PDF是一种很好用的文件格式&#xff0c;这种格式能够很有效的保护我们的文件&#xff0c;但有时可能还会被破解&#xff0c;这种时候在PDF上添加水印就是比较好的方法。 综上所述&#xff0c;PDF是保密性很强的文件&#xff0c;但添加水印能够…