TLC5615
#include <reg51.h>
#include "TLC5615.c"
code uchar seven_seg[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; //数码管显示
uchar cp,j; // 、、定义 变量
uint Data, imitate; /*模拟电压V = 5 / 1024 = 0.00488 */ void timer0_init(void); /*声明中断初始化函数*/
void timer0_isr(void); /*声明中断服务函数 */ /*********************************主函数********************************/
void main()
{
timer0_init(); //中断初始化函数
while(); //循环
} /*******************************中断服务函数****************************/
/*当TLC5615接收10位数据全为1时,理论上,OUT端输出电压5V,但实际应用时最高
输出电压4.7V。即TLC5615输入数据超过961时,输出电压将不再增加。**********/
void timer0_isr(void) interrupt
{
TH0 = 0xf8;
TL0 = 0x2f;
cp++;
if(cp >= ) /*半秒时间*/
{
cp = ;
tlc5615(Data);
if(Data >= ) // TLC5615输入数据超过961时,输出电压将不再增加。
Data = ; //归零
imitate = Data * 0.489; //数组数据转换为模拟数据
Data = Data + ; //变换数据
}
P0 = 0xff; //清屏
switch(j)
{ case : P0 = seven_seg[imitate % ]; P2 = ~0x01; break; //模拟电压
case : P0 = seven_seg[imitate % / ]; P2 = ~0x02; break;
case : P0 = seven_seg[imitate / ] & 0x7f; P2 = ~0x04; break;
case : P0 = seven_seg[Data % ]; P2 = ~0x08; break; //数字信号
case : P0 = seven_seg[Data % / ]; P2 = ~0x10; break;
case : P0 = seven_seg[Data / ]; P2 = ~0x20; break;
}
j++;
if(j >= ) //六位显示
j = ; }
/*****************************中断初始化函数****************************/
void timer0_init(void)
{
TMOD = 0x01; //工作方式1
TH0 = 0xf8;
TL0 = 0x2f;
EA = ;
ET0 = ;
TR0 = ;
} /*****************************************************************************************/
/*************************************TLC5615的驱动程序***********************************/
/*TLC5615模数转换将离散的数字信号转换为连续变化的模拟信号V = 5 / 256 = 0.01953v = 19.53mv*/
/*****************************************************************************************/ #define uchar unsigned char //宏定义 用uchar 代替 unsigned char
#define uint unsigned int //宏定义 用uint 代替 unsigned int sbit DIN = P3^;
sbit SCLK = P3^;
sbit CS = P3^;
/************************TLC5615的初始化**************************/
void tlc5615_init(void)
{
CS = ;
SCLK = ;
CS = ;
}
/************************TLC5615的初始化**************************/
/**********由于TLC5615是十位转换位,定义一个16位的变量************/
void tlc5615(uint Data)
{
uchar i;
Data <<= ; //两个字节有16位,去掉高六位剩下十位有效位
tlc5615_init(); //初始化函数
for(i = ; i < ; i++) //根据PDF文档可知,要送的只有十位数但是后面要跟着多加两位零才能将一个数据送出去
{
DIN = (bit)(Data & 0x8000); //当dat与0x8000相与然后强制转换后有一位,这时只就只可以直接送给DA端进行发送
SCLK = ; //前面一句亦可用DA=CY来代替,但后面的顺序要调换才行
Data <<= ;
SCLK = ;
}
CS = ;
SCLK = ;
}
TLC5615应用
() TLC5615的作用
DIN: 串行数据输入端;TLC5615引脚图
SCLK: 串行时钟输入端;
CS: 芯片选用通端,低电平有效;
DOUT: 用于级联时的串行数据输出端;
AGND: 模拟地;
REFIN:基准电压输入端, 2V~ (VDD - );
OUT: DAC 模拟电压输出端;
VDD: 正电源端,4.5~.5V ,通常取 5V。
将数字信号转化为模拟信号
() 对TLC5615的认识
TLC5615 为美国德州仪器公司 年推出的产品,是具有串行接口的数模转换器,其输出为电压型,最大输出电压是基准电压值的两倍。带有上电复位功能,即把 DAC 寄存器复位至全零。性能比早期电流型输出的 DAC 要好。只需要通过 根串行总线就可以完成 位数据的串行输入, 易于和工业标准的微处理器或微控接口, 适用于电池供电的测试仪表、移动电话,也适用于数字失调与增益调整以及工业控制场合。
() 工作原理
只有当片选 CS 为低电平时, 串行输入数据才能被移入 16位移位寄存器。当 CS 为低电平时,在每一个 SCLK 时钟的上升沿将 DIN 的一位数据移入 位移寄存器。注意, 二进制最高有效位被导前移入。接着,CS 的上升沿将 位移位寄存器的 位有效数据锁存于 位 DAC 寄存器, 供 DAC 电路进行转换; 当片选 CS 为高电平时,串行输入数据不能被移入 位移位寄存器。注意, CS 的上升和下降都必须发生在 SCL K 为低电平期间。
() 仿真器件作用
respack_8:驱动,电流不够,加排阻增加电流,排阻一般有九个脚,
个脚接VCC,其他脚接单片机I/o口,比如说P0口,一般需要加排阻。
7404反相器:增大电流
TLC5615:数字信号转化为模拟信号
数码管:实现信号的显示
TLC5615的更多相关文章
- 基于FPGA的通信信号源的设计
通信信号源设计原理 通过设计一个DDS信号源,然后将该信号作为载波信号,再对基带信号进行2ASK.2FSK.2PSK.2DPSK调制,进而产生多种通信信号. 设计框图如下: 将PN序列进行2ASK.2 ...
- 基于DDS的任意波形发生器
实验原理 DDS的原理 DDS(Direct Digital Frequency Synthesizer)直接数字频率合成器,也可叫DDFS. DDS是从相位的概念直接合成所需波形的一种频率合成技术. ...
- 学习AD、DA的体会
AD转换器的转换是指模拟信号输入转化为数字信号输出,而DA转换器是把数字信号转换为模拟信号,在ADC0832.TLC549和TLC5615程序设计中,通过使用中断服务函数每0.5s对ADC0832进行 ...
- Programmed Adjustable Power
Programmed Adjustable Power I just explored an easy scheme to design a high precision programmed adj ...
- AVR单片机教程——DAC
本文隶属于AVR单片机教程系列. 单片机的应用场景时常涉及到模拟信号.我们已经会使用ADC把模拟信号转换成数字信号,本讲中我们要学习使用DAC把数字信号转换成模拟信号.我们还将搭建一个简单的功率放 ...
随机推荐
- 7.19 包 logging模块 hashlib模块 openpyxl模块 深浅拷贝
包 包是什么 他是一系列文件的结合体,表现形式就是文件夹 包的本质还是模块 他通常会有__init__.py文件 我们首先回顾一下模块导入的过程 import module首次导入模块(.py文件) ...
- react native 8081 端口号被占
McAfee Agent 占用8081 端口号 公司电脑被标装,McAfee Agent关不掉 sudo lsof -n -i4TCP:8081 sudo launchctl list | grep ...
- Discuz! ML远程代码执行(CVE-2019-13956)
Discuz! ML远程代码执行(CVE-2019-13956) 一.漏洞描述 该漏洞存在discuz ml(多国语言版)中,cookie中的language可控并且没有严格过滤,导致可以远程代码执行 ...
- 只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常
## 统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生. 比较通用的返回值格式如下: ```jav ...
- 900E关于导航站
--------------------------以下更新于20190826------------------------- 作用: 导航站为方便网址收藏之用,收录一些常用的网站,目前主要以本科常 ...
- 通过视图实现自定义查询<持续完善中。。。>
目前实现: ----普通查询路径 /viewShow/viewShow/list.htm ----Echarts查询路劲 /viewShow/viewShow/echarts.htm 1.自定义查询条 ...
- 解决ionic 中 $ionicHistory.goBack()无法返回
这种解决方法目前只适合用了 <ion-side-menus>这一组件的<ion-view> 解决方法: 在<ion-view>下一级中包一个div,如下图: 搞了几 ...
- .gitignore不起作用,过滤规则
git 通过配置.gitignore文件忽略掉的文件或目录,在.gitignore文件中的每一行保存一个匹配的规则 # 此为注释 – 将被 Git 忽略 *.a :忽略所有 .a 结尾的文件 !lib ...
- vue-cli3.x创建及运行项目
Node 版本要求 Vue CLI 需要 Node.js 8.9 或更高版本 (推荐 8.11.0+).如果你已经全局安装了旧版本的 vue-cli (1.x 或 2.x),你需要先通过 npm un ...
- 【阿里云IoT+YF3300】5. Alink物模型之服务下发
名词解释: 服务:设备的功能模型之一,设备可被外部调用的能力或方法,可设置输入参数和输出参数.相比于属性,服务可通过一条指令实现更复杂的业务逻辑,如执行某项特定的任务. -摘自阿里云物联网产品文 ...