msp430f149+外设tlv61612位DA转换模块
来源:互联网 发布:韩服lol账号购买淘宝 编辑:程序博客网 时间:2024/04/30 05:18
这几天调这个DA调得很恼火啊,之前打算用DAC8571来做,是一个16位的DA转换芯片。但是调了3天都没有输出!!IIC总线写不进去数据啊,急死我了啊 明明芯片IIC输入数据后总线上检测到有应答的,但是就是输出一直为0
想想就觉得这个世界充满了恶意。
下面是换了5616这个12位的dc芯片做的,调了2个小时就通了啊有木有,简直不能忍。
上代码
〈还是先解释一下啊喂:p2.0口——DIN P2.1口——SCLK P2.2口——CS/ P2.3口——FS〉
时钟还是自己写比较靠谱
用了按键外部中断来改变写入5616的数字量,按键+-50
#include<msp430x14x.h>#define uchar unsigned char#define uint unsigned int#define DA5616_clk_H P2OUT|=BIT1//P2.1#define DA5616_clk_L P2OUT&=~BIT1//P2.1#define DA5616_cs_H P2OUT|=BIT2//P2.2#define DA5616_cs_L P2OUT&=~BIT2//P2.2#define DA5616_fs_H P2OUT|=BIT3//P2.3#define DA5616_fs_L P2OUT&=~BIT3//P2.3uint data;void int_clock(){ uchar i; BCSCTL1&=~XT2OFF; //外部高速时钟晶振 BCSCTL2|=SELM1 + SELS; //MCLK,SMLCK均用外部高速时钟 do { IFG1&=~OFIFG; for(i=0;i<100;i++) _NOP(); }while((IFG1&OFIFG)); IFG1 &=~OFIFG;}void io_init(){ P2DIR=BIT3+BIT1+BIT2+BIT0;//P2.0 P2.1 P2.2 P2.3设置输出}/**** DA转换 ****/void DA5616(uint da){ uchar i; DA5616_cs_L; DA5616_fs_L; DA5616_clk_L; for(i=0;i<16;i++) { P2OUT |=(da&0x8000)>>15; DA5616_clk_H; da<<=1; //da二进制数据左移一位 *2 DA5616_clk_L; } P2OUT&=0xfe; DA5616_fs_H; DA5616_cs_H;}void DA5616_out(float data1){ uint temp; temp = data1*2048/2.5; DA5616(temp); }void main(){ // Stop watchdog timer to prevent time out reset //关闭所有的IO口 P1DIR = 0XFF;P1OUT = 0XFF; P2DIR = 0XFF;P2OUT = 0XFF; P3DIR = 0XFF;P3OUT = 0XFF; P4DIR = 0XFF;P4OUT = 0XFF; P5DIR = 0XFF;P5OUT = 0XFF; P6DIR = 0XFF;P6OUT = 0XFF; P1IES = 0x30; // P1.0~P1.3选择下降沿中断 P1IE = 0x30; // 打开中断使能 P1DIR = BIT1; //设置P1.0~P.3为输入状态,P.7为输出 P1OUT = 0; WDTCTL = WDTPW + WDTHOLD; //关狗 data = 1400; int_clock(); io_init(); DA5616(data); _EINT(); while(1) { }}/*******************************************函数名称:Port1_ISR功 能:端口P1的中断服务函数参 数:无返回值 :无********************************************/#pragma vector=PORT1_VECTOR__interrupt void Port1_ISR(void){ _DINT(); if(P1IFG & BIT4) { P1IFG = 0x00; //清中断标志 data -= 20; //DAC的输出减少100个偏置量 int_clock(); io_init(); DA5616(data); } else if(P1IFG & BIT5) { P1IFG = 0x00; //清中断标志 data += 20; //DAC的输出增加100个偏置量 int_clock(); io_init(); DA5616(data); } else _NOP(); P1IFG = 0x00; //清中断标志 _EINT();}
ok ~
0 0
- msp430f149+外设tlv61612位DA转换模块
- MSP430F149的ADC12模块
- 单片机AD-DA转换
- AD/DA转换
- AD/DA的转换
- PCF8591 AD/DA转换
- 单片机ad/da转换
- pcf8951 ad/da(iic)转换模块 在 esp8266下的实现
- pcf8951 ad/da(iic)转换模块 在 esp8266下的实现
- DSP F28335 DA模块程序
- 关于MSP430F149的ADC转换过程详解
- LPC1768 SPI 外设控制DA(PCM1796)调试记录
- AD/DA转换(程序)
- AD转换和DA转换的应用
- AD转换与DA转换的应用
- da
- da
- DA
- hdu 3549 Flow Problem(最大流模板题)
- Cocos2d-x 3.2编译生成Android程序出错的解决方案
- Sprite Kit游戏:砸死臭虫 Smash Bug!
- exit、_exit,return的区别
- 每日一dp(1)——Largest Rectangle in a Histogram(poj 2559)使用单调队列优化
- msp430f149+外设tlv61612位DA转换模块
- 【140810】VC2008实现VC.NET麻将游戏
- hdu 1421 搬寝室 (dp)
- [ZOJ 3315] Runaway Robot [枚举]
- AJAX基础知识
- Rails4.1:Active Record Basics
- awk技巧
- PKU 3468 线段树,线段树 第 3 天
- 开博纪念:雁过留声