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

2023-12-25 03:36

本文主要是介绍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电路进行转换。

这篇关于TLC5615实现示波器波形显示——方波、三角波、锯齿波的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/534139

相关文章

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、