LTC1446 是linear出品的双通道12bit轨对轨DAC芯片,采用SPI接口,内部基准电压,满量程输出4.095v,单电源供电(4.5-5v).8Pin封装。

      

    使用时非常简单,CLK,Din分别连接spi接口sck,MOSI. CS连接片选,低电平时从单片机接收数据,变成高电平时更新Vout
Dout可以不用连接
     下面是时序图:
      
     从上图可以看到,要给LTC1446写数据,首先将CS拉低,并将数据送到Din端口,CLK的上升沿LTC1446采样Din数据,下降沿时将数据从Dout送出给主设备
     采用eBox来驱动时,首先确保object.cpp和ebox.h中声明了对应的spi端口。如果没有请自己声明
     object.cpp中声明如下:
     
     ebox.h中如下
     
     
     eBox采用了C++写法,所以首先创建类
  1.  class LTCX
    {
    public:
    LTCX(GPIO* p_cs_pin,SPI* p_SPI) // 构造函数,初始化cs和spi pin(指针形式)
    {
    cs = p_cs_pin;
    spi = p_SPI;
    }
    void begin(uint8_t dev_num); // 初始化相关参数
    void write(uint16_t _DACA,uint16_t _DACB); // 将需要输出的值分别写入_DACA和DACB private:
    SPI_CONFIG_TYPE spi_dev_LTC1446; // 声明结构,配置SPI参数
    GPIO* cs;
    SPI* spi;
    };

    begin函数中,对spi和cs进行初始化。将CS->mode放在spi初始化后面的好处。可以将spi没有用到的pin设置成普通io使用,在本应用中,将PA6(spi miso)作为cs pin 使用

 void LTCX::begin(uint8_t dev_num)
{
spi_dev_LTC1446.dev_num = dev_num; // 用来区分多个spi设备
spi_dev_LTC1446.mode = SPI_MODE0; // spi模式
spi_dev_LTC1446.prescaler = SPI_CLOCK_DIV256; // spi速度
spi_dev_LTC1446.bit_order = SPI_BITODER_MSB; // 发送顺序 spi->begin(&spi_dev_LTC1446); // 初始化spi
cs->mode(OUTPUT_PP); // cs设置为输出模式
cs->set();
}

关于SPI_MODE,从下图可以看到,mode0为上升沿采样送数据到从设备

    将数据写入对应的DAC寄存器中。因为LTC1446的DAC值保存在24bit的寄存器中,所以每次发送数据必须一次性写入24bit,高12位是DACA,低12位是DACB。
 void LTCX::write(uint16_t _DACA,uint16_t _DACB)
{
uint32_t _DAC_volue = _DACA<<|(_DACB &0x0fff); // 合并数据
spi->take_spi_right(&spi_dev_LTC1446); // 获取spi使用权限,并配置spi参数
cs->reset(); // 片选,准备写数据
// 将_DAC_volue的值从24-->0的顺序写入设备,每次8bit
spi->write(((uint8_t*)(&(_DAC_volue)))[]);
spi->write(((uint8_t*)(&(_DAC_volue)))[]);
spi->write(((uint8_t*)(&(_DAC_volue)))[]);
cs->set(); // 写数据结束,更新dac out
spi->release_spi_right(); // 释放spi使用权
}

使用例子

  1.  #include"ebox.h"
    #include"ltc1446.h" #define ADCA PC0
    #define ADCB PC1 LTCX ltc1(&PA6,&spi1); int main(void){
    uint32_t i =,t =;
    ltc1.begin();
    uart1.printf("init ok \r\n");
    uart1.printf("%d \r\n",i);
    while(){
    ltc1.write(-i,i);
    uart1.printf("OUTA = %d; OUTB= %d \r\n",analog_read_voltage(&ADCA),analog_read_voltage(&ADCB));
    }
    }
    }

基于eBox的LTC1446驱动的更多相关文章

  1. 基于MTD的NAND驱动开发、K9F1G08 2K page、Yaffs2 Files System

    转载:http://hi.baidu.com/cui1206/item/1d4119e376132513585dd886 基于MTD的NAND驱动(linux-2.6.22.10内核),目前已可以在该 ...

  2. 基于Mvc3,Ef,领域驱动电子商务系统的EShop开发

    分享自己从代码小工一步步走向搭架子,ING... 简单了解UnitOfWork 摘要: UnitOfWorkUnit Of Work模式,即工作单元,它是一种数据访问模式.它是用来维护一个由已经被业务 ...

  3. 基于MongoDb官方C#驱动封装MongoDbCsharpHelper类(CRUD类)

    近期工作中有使用到 MongoDb作为日志持久化对象,需要实现对MongoDb的增.删.改.查,但由于MongoDb的版本比较新,是2.4以上版本的,网上已有的一些MongoDb Helper类都是基 ...

  4. 详解Linux2.6内核中基于platform机制的驱动模型 (经典)

    [摘要]本文以Linux 2.6.25 内核为例,分析了基于platform总线的驱动模型.首先介绍了Platform总线的基本概念,接着介绍了platform device和platform dri ...

  5. 基于OMAPL138的字符驱动_GPIO驱动AD9833(三)之中断申请IRQ

    基于OMAPL138的字符驱动_GPIO驱动AD9833(三)之中断申请IRQ 0. 导语 学习进入到了下一个阶段,还是以AD9833为例,这次学习是向设备申请中断,实现触发,在未来很多场景,比如做用 ...

  6. 适用于app.config与web.config的ConfigUtil读写工具类 基于MongoDb官方C#驱动封装MongoDbCsharpHelper类(CRUD类) 基于ASP.NET WEB API实现分布式数据访问中间层(提供对数据库的CRUD) C# 实现AOP 的几种常见方式

    适用于app.config与web.config的ConfigUtil读写工具类   之前文章:<两种读写配置文件的方案(app.config与web.config通用)>,现在重新整理一 ...

  7. 基于Linux ALSA音频驱动的wav文件解析及播放程序 2012

    本设计思路:先打开一个普通wav音频文件,从定义的文件头前面的44个字节中,取出文件头的定义消息,置于一个文件头的结构体中.然后打开alsa音频驱动,从文件头结构体取出采样精度,声道数,采样频率三个重 ...

  8. C#基于Mongo的官方驱动手撸一个Super简易版MongoDB-ORM框架

    C#基于Mongo的官方驱动手撸一个简易版MongoDB-ORM框架 如题,在GitHub上找了一圈想找一个MongoDB的的ORM框架,未偿所愿,就去翻了翻官网(https://docs.mongo ...

  9. 基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则

    目录 前言 聚合 聚合和聚合根原则 包含业务原则 单个单元原则 事务边界原则 可序列化原则 聚合和聚合根最佳实践 只通过ID引用其他聚合 用于 EF Core 和 关系型数据库 保持聚合根足够小 聚合 ...

随机推荐

  1. osgearth各个例子功能概述

    osgearth各个例子功能概述 转自:http://blog.csdn.net/wl198302/article/details/21177309 最近在学习osgearth,对其还不是很理解,有些 ...

  2. 关于Repeater嵌套绑定的问题

    前台代码: <div id="firstpane" class="menu_list">                <asp:Repeat ...

  3. javaweb之框架标签(day1 框架标签的使用)

    框架标签 <frameset> --rows:按照行进行划分<frameset rows='80,*'> --rows:按照列进行划分<frameset cols='80 ...

  4. 使用 CSS 去掉 iPhone 网页上按钮的超大圆角以及文本框圆角默认样式

    使用 iPhone 上的浏览器去浏览网页的时候,按钮总是显示超大圆角且颜色由上而下渐变的样式,显得超级恶心,而且文本框也会有一定的圆角,但是我们自己定义 border-radius 也没有效果,经过搜 ...

  5. SQL sp_executesql【转】

    execute相信大家都用的用熟了,简写为exec,除了用来执行存储过程,一般都用来执行动态Sql sp_executesql,sql2005中引入的新的系统存储过程,也是用来处理动态sql的, 如: ...

  6. zju(9)LCD显示实验

    1.实验目的 1.学习和掌握linux下对IIC的操作方法以及驱动和应用程序的编写: 二.实验内容 1.编写EduKit-IV实验箱Linux操作系统下IIC的驱动,并编写应用程序实现将数据写入EEP ...

  7. 面向对象static静态的属性和方法的调用

    <?php header("content-type:text/html;charset=utf-8"); class Human{ static public $name ...

  8. JSP页面转向方式

    1.RequestDispatcher.forward() 是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个S ...

  9. BizTalk动手实验(十一)自定义开发管道组件

    1 课程简介 通过本课程熟悉自定义开始管道组件的流程.各组件接口的功能作用以及自定义管道. 本场景为开发一个消息ZIP压缩的发送管道组件. 2 准备工作 1. 熟悉管道组件各阶段组成 2. 下载Ion ...

  10. BizTalk动手实验(四)Schema开发测试

    1 课程简介 通过本课程熟悉Schema的相关开发技术 2 准备工作 1. 熟悉XML.XML Schema.XSLT等相关XML开发技术 2. 新建BizTalk空项目 3 演示 3.1 格式化XM ...