Arduino UNO 硬件SPI驱动TLC5615-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3046|回复: 0

Arduino UNO 硬件SPI驱动TLC5615

[复制链接]
发表于 2018-12-2 17:56 | 显示全部楼层 |阅读模式


有一个10位的dac芯片,TLC5615,SPI驱动,挺好用的。查网上资料arduino 驱动TLC615的都是用普通IO的,不好用,复杂。本文将采用SPI接口实现TLC5615的驱动,实现三角波输出。
看图,看程序即可。
[mw_shl_code=arduino,true]/*********************************
* COPYRIGHT NOTICE
* Copyright (c) 2018
功    能:SPI硬件驱动TLC5615,简单实现三角波
设    计:凌晨七點半
QQ群交流:871103113
日    期:2018.12.2
引脚定义:TLC5615->Arduino UNO
DIN(1)->11
SCLK(2)->13
CS(3)->10
DOUT(4)->NC
AGND(5)->GND
REFIN(6)->2.5V(通过两个电阻分压VCC)
OUT(7)->输出
VDD(8)->5V
*********************************/
#include <SPI.h>

#define PIN_CS 10
#define TLC5615_CS_0      digitalWrite(PIN_CS, LOW)
#define TLC5615_CS_1      digitalWrite(PIN_CS, HIGH)

//----------------------------------------------------------------
//16位数据格式
void WriteTLC5615(unsigned int data)     //TLC5615 DAC函数
{
  TLC5615_CS_0;
  _NOP();
    SPI.transfer(data>>6);          //高8位
    SPI.transfer((data<<2)&0xFF);   //低2位
  TLC5615_CS_1;
}
//----------------------------------------------------------------
void setup()
{
  //set SPI
  pinMode(PIN_CS,OUTPUT);    //片选
  SPI.setDataMode(SPI_MODE0);    //CPOL=0;CPHA=0
  SPI.setClockDivider(SPI_CLOCK_DIV16); //1MHz <1.21MHz
  SPI.begin();
}

int num;          //循环变量
void loop()
{

  for(num=0;num<1024;num++)
  {
   WriteTLC5615(num); //三角波
  //delay(20);  //取消注释,加上延时
  }
  for(num=1023;num>=0;num--)
  {
   WriteTLC5615(num); //三角波
  //delay(20);  //取消注释,加上延时
  }
}[/mw_shl_code]

电路图

电路图

示波器图

示波器图
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 09:41 , Processed in 0.074400 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表