最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

tlc5620

IT圈 admin 24浏览 0评论

2024年5月16日发(作者:戎依白)

TLC5620C和TLC5620I是带有高阻抗缓冲输入的4通道8位电源输出数模转换器

集合。这些转换器可以产生单调的、1至两倍于基准电压和接地电压差值的输出。

通常情况下TLC5620的供电电压为一个5V电源。器件内集成上电复位功能,确

保启动时的环境是可重复的。

对TLC5620C和TLC5620I的数字控制是通过一根简单的3路串行总线实

现的。该总线兼容CMOS,并易于向所有的微处理器和微控制器设备提供接口。

11位的命令字包括8位数据位,2位DAC选择位和1位范围位,后者用来选择输

出范围是1倍还是2倍。DAC寄存器采用双缓存,允许一整套新值被写入设备中。

通过LDAC实现DAC输出值的同时更新。数字量的输入采用史密斯触发器,从而

避免了高噪声。

引脚 输入/输描述

名序

称 号

CLK 7 I 串行接口时钟。引脚出现下降沿时将输入的数字量转发到串行

接口寄存器里

DACA 12 O DAC A模拟信号输出

DACB 11 O DAC B模拟信号输出

DACC 10 O DAC C模拟信号输出

DACD 9 O DAC D模拟信号输出

DATA 6 I 存放数字量的串行接口

GND 1 I 地回路及参考终端

LDAC 13 I 加载DAC。当引脚出现高电平时,即使有数字量被读入串行口

也不会对DAC

的输出进行更新。只有当引脚从高电平变为低电平时,DAC输

出才更新。

串口加载控制。当LDAC是低电平,并且LOAD引脚出现下降沿

时数字量被保

存到锁存器,随后输出端产生模拟电压。

输入到DAC A的参考电压。这个电压定义了输出模拟量的范围。

输入到DAC B的参考电压。这个电压定义了输出模拟量的范围。

输入到DAC C的参考电压。这个电压定义了输出模拟量的范围。

输入到DAC D的参考电压。这个电压定义了输出模拟量的范围。

正极电源

LOAD 8 I

REFA 2

REFB 3

REFC 4

REFD 5

V

DD

14

例程:

I

I

I

I

I

周立功《ARM嵌入式系统实验教程》(三)中的代码:

/********************************************************************

********

* 文 件 名:main.c

* 功 能:该实验程序使用TLC5620中A、B、C、D四个通道分别输出周期、

幅度相等的

* 锯齿波,频率为6.35Hz。

* 说 明:跳线器JP1、JP2短接。

*********************************************************************

*******/

#include "config.h"

#define DAC_RNG 1 // 幅值选择

/* TLC5620由P0口控制,控制I/O定义如下 */

#define CLK1 (1<<21)

#define DAT1 (1<<22)

#define LOAD (1<<23)

#define LDAC (1<<24)

#define DAC5620CON (CLK1 | DAT1 | LOAD | LDAC)

/* I/O输出操作函数 */

#define CCLK1() IO1SET = CLK1

#define SCLK1() IO1CLR = CLK1

#define CDAT1() IO1SET = DAT1

#define SDAT1() IO1CLR = DAT1

#define CLOAD() IO1SET = LOAD

#define SLOAD() IO1CLR = LOAD

#define CLDAC() IO1SET = LDAC

#define SLDAC() IO1CLR = LDAC

void DAC5620_Data(uint8 no, uint8 dat);

void PIN_Init(void);

void Delay(void);

int main(void)

{ uint8 i;

PIN_Init(); // 初始化CPU的IO

while(1) // 发生锯齿波

{

DAC5620_Data(1, i);

DAC5620_Data(2, i);

DAC5620_Data(3, i);

DAC5620_Data(4, i);

i++;

}

return(0);

}

/********************************************************************

********

* 名 称:IRQ_Eint3()

* 功 能:外部中断EINT3服务函数,取反B1控制口。

* 入口参数:无

* 出口参数:无

*********************************************************************

*******/

void PIN_Init(void) // CPU的IO口初始

化函数

{

PINSEL0 = 0x00000000;

PINSEL1 = 0x00000000;

IO1DIR = DAC5620CON;

CCLK1(); // CLK1 = 0

CDAT1(); // DAT1 = 0

SLOAD(); // LOAD = 1

SLDAC(); // LDAC = 1

}

/********************************************************************

********

* 名 称:DAC5620_Data()

* 功 能:DAC芯片TLC5620的控制函数

* 入口参数:uint8 no 通道选择 uint8 dat 输出数值

* 出口参数:无

*********************************************************************

*******/

void DAC5620_Data(uint8 no, uint8 dat)

{ uint16 bak;

uint8 m;

#if DAC_RNG==0

bak = (dat<<5) | ((no&0x03)<<14);

#else

bak = (dat<<5) | ((no&0x03)<<14) | (1<<13);

#endif

for(m=0; m<11; m++)

{

SCLK1(); // CLK1 = 1

Delay();

if((bak&0x8000) == 0)

{

CDAT1(); // DAT1 = 0

}

else

{

SDAT1(); // DAT1 = 1

}

Delay();

CCLK1(); // CLK1 = 0

Delay();

bak <<= 1;

}

CLOAD(); // LOAD = 0

Delay();

SLOAD(); // LOAD = 1

Delay();

CLDAC(); // LDAC = 0

Delay();

SLDAC(); // LDAC = 1

Delay();

}

void Delay(void)

{ uint32 i;

for(i=0; i<1; i++);

}

2024年5月16日发(作者:戎依白)

TLC5620C和TLC5620I是带有高阻抗缓冲输入的4通道8位电源输出数模转换器

集合。这些转换器可以产生单调的、1至两倍于基准电压和接地电压差值的输出。

通常情况下TLC5620的供电电压为一个5V电源。器件内集成上电复位功能,确

保启动时的环境是可重复的。

对TLC5620C和TLC5620I的数字控制是通过一根简单的3路串行总线实

现的。该总线兼容CMOS,并易于向所有的微处理器和微控制器设备提供接口。

11位的命令字包括8位数据位,2位DAC选择位和1位范围位,后者用来选择输

出范围是1倍还是2倍。DAC寄存器采用双缓存,允许一整套新值被写入设备中。

通过LDAC实现DAC输出值的同时更新。数字量的输入采用史密斯触发器,从而

避免了高噪声。

引脚 输入/输描述

名序

称 号

CLK 7 I 串行接口时钟。引脚出现下降沿时将输入的数字量转发到串行

接口寄存器里

DACA 12 O DAC A模拟信号输出

DACB 11 O DAC B模拟信号输出

DACC 10 O DAC C模拟信号输出

DACD 9 O DAC D模拟信号输出

DATA 6 I 存放数字量的串行接口

GND 1 I 地回路及参考终端

LDAC 13 I 加载DAC。当引脚出现高电平时,即使有数字量被读入串行口

也不会对DAC

的输出进行更新。只有当引脚从高电平变为低电平时,DAC输

出才更新。

串口加载控制。当LDAC是低电平,并且LOAD引脚出现下降沿

时数字量被保

存到锁存器,随后输出端产生模拟电压。

输入到DAC A的参考电压。这个电压定义了输出模拟量的范围。

输入到DAC B的参考电压。这个电压定义了输出模拟量的范围。

输入到DAC C的参考电压。这个电压定义了输出模拟量的范围。

输入到DAC D的参考电压。这个电压定义了输出模拟量的范围。

正极电源

LOAD 8 I

REFA 2

REFB 3

REFC 4

REFD 5

V

DD

14

例程:

I

I

I

I

I

周立功《ARM嵌入式系统实验教程》(三)中的代码:

/********************************************************************

********

* 文 件 名:main.c

* 功 能:该实验程序使用TLC5620中A、B、C、D四个通道分别输出周期、

幅度相等的

* 锯齿波,频率为6.35Hz。

* 说 明:跳线器JP1、JP2短接。

*********************************************************************

*******/

#include "config.h"

#define DAC_RNG 1 // 幅值选择

/* TLC5620由P0口控制,控制I/O定义如下 */

#define CLK1 (1<<21)

#define DAT1 (1<<22)

#define LOAD (1<<23)

#define LDAC (1<<24)

#define DAC5620CON (CLK1 | DAT1 | LOAD | LDAC)

/* I/O输出操作函数 */

#define CCLK1() IO1SET = CLK1

#define SCLK1() IO1CLR = CLK1

#define CDAT1() IO1SET = DAT1

#define SDAT1() IO1CLR = DAT1

#define CLOAD() IO1SET = LOAD

#define SLOAD() IO1CLR = LOAD

#define CLDAC() IO1SET = LDAC

#define SLDAC() IO1CLR = LDAC

void DAC5620_Data(uint8 no, uint8 dat);

void PIN_Init(void);

void Delay(void);

int main(void)

{ uint8 i;

PIN_Init(); // 初始化CPU的IO

while(1) // 发生锯齿波

{

DAC5620_Data(1, i);

DAC5620_Data(2, i);

DAC5620_Data(3, i);

DAC5620_Data(4, i);

i++;

}

return(0);

}

/********************************************************************

********

* 名 称:IRQ_Eint3()

* 功 能:外部中断EINT3服务函数,取反B1控制口。

* 入口参数:无

* 出口参数:无

*********************************************************************

*******/

void PIN_Init(void) // CPU的IO口初始

化函数

{

PINSEL0 = 0x00000000;

PINSEL1 = 0x00000000;

IO1DIR = DAC5620CON;

CCLK1(); // CLK1 = 0

CDAT1(); // DAT1 = 0

SLOAD(); // LOAD = 1

SLDAC(); // LDAC = 1

}

/********************************************************************

********

* 名 称:DAC5620_Data()

* 功 能:DAC芯片TLC5620的控制函数

* 入口参数:uint8 no 通道选择 uint8 dat 输出数值

* 出口参数:无

*********************************************************************

*******/

void DAC5620_Data(uint8 no, uint8 dat)

{ uint16 bak;

uint8 m;

#if DAC_RNG==0

bak = (dat<<5) | ((no&0x03)<<14);

#else

bak = (dat<<5) | ((no&0x03)<<14) | (1<<13);

#endif

for(m=0; m<11; m++)

{

SCLK1(); // CLK1 = 1

Delay();

if((bak&0x8000) == 0)

{

CDAT1(); // DAT1 = 0

}

else

{

SDAT1(); // DAT1 = 1

}

Delay();

CCLK1(); // CLK1 = 0

Delay();

bak <<= 1;

}

CLOAD(); // LOAD = 0

Delay();

SLOAD(); // LOAD = 1

Delay();

CLDAC(); // LDAC = 0

Delay();

SLDAC(); // LDAC = 1

Delay();

}

void Delay(void)

{ uint32 i;

for(i=0; i<1; i++);

}

发布评论

评论列表 (0)

  1. 暂无评论