用msp430與TLC5620實現(xiàn)AD_DA
先說一下器件吧,話筒一個,LM324N放大器將一個,TDA2822音頻放大器一個,揚聲器一個(不要太大,耳麥上就可以),TLC5620與msp430學習板,電容、電阻自不用說。
本文引用地址:http://m.butianyuan.cn/article/201611/316448.htm框架圖如下:
話筒——》LM324N——》msp430(ADC12)——》tlc5620——》TDA2822——》揚聲器(輸出)
lM324N的電路圖如下(由于沒用PCB繪圖,畫的很難看,還請見諒)
關于TDA2822呢參照手冊上的帶你路途即可,這里不再畫出。
下面是程序代碼部分:
//================================================
//define.h文件
#define SIMO BIT1
#define SOMI BIT2
#define SCLK BIT3
#define LDAC BIT7
#define LOAD BIT6
//==============================================
//================================================
//Init_ADDA.c文件
//==========================================================
//功能:AD模塊初始化
//描述://
//代碼:
void Init_AD()
{
//初始化AD
P6SEL=0xC0;
ADC12CTL0=ADC12ON+REFON+REF2_5V+SHT0_8; // Turn on ADC12, extend sampling time
ADC12CTL1=SHP+ADC12SSEL_2+CONSEQ_0; // Use sampling timer, repeated sequence
ADC12MCTL0=SREF_1+INCH_6;
ADC12CTL0|=ENC;
}
//================================================================
//================================================================
//功能:DA模塊初始化
//描述:本DA模塊是外接的(利用SPI進行通信)
//代碼:
void Init_Spi()
{ //初始化SPI
U0CTL |=SWRST;
P3SEL=0;
P3SEL |= SIMO |SCLK | SOMI;
ME1 |=USPIE0;//SPIO allow
U0CTL=0X00;//reset register is 0
U0CTL |=CHAR + SYNC + MM+SWRST;//da
U0TCTL=0X00;//reset register is 0
U0TCTL=SSEL1+SSEL0+STC;//timer is smclk,3 line
//bit offset
UBR00=0X20;
UBR10=0x00;
UMCTL0=0X00;
U0CTL &=~SWRST;
IE1 &=~UTXIE0;//發(fā)送中斷允許
IE1 &=~URXIE0;
}
//=============================================================
//=============================================================
//功能:時鐘模塊初始化
//描述://
//代碼:
voidInit_Clk()
{
inti;
do
{
BCSCTL1&=~XT2OFF;//turn on XT2
IFG1&=~OFIFG;//high frequency crystal is stable
for(i=0; i < 2000; i++)
{}
}while((IFG1 & OFIFG) !=0);
//MClk=6M / 1=6M ;
//SMClk=6M / 1=6M
BCSCTL2|=SELM_2 + DIVM_0 + SELS;
}
//====================================================================
//===================================================================
//功能:I/O口初始化
//描述://
//代碼:
void Init_Port()//P3腳設置
{
P3DIR=0;
P3DIR |=LOAD + LDAC;
P3OUT |=LOAD + LDAC;
}
//================================================================
//=================================================
//功能:I/O口高電平輸出函數(shù)
//描述://
//代碼:
void Init_high(int a)
{
P3OUT |=a;
}
//======================================================
//=====================================================
//功能:I/O口低電平輸出函數(shù)
//描述://
//代碼:
void Init_low(int b)
{
P3OUT &=~b;
// _NOP();
}
//===========================================
//=================================================
//功能:延時函數(shù)
//描述://
//代碼:
void delays()
{
unsigned short i;
for(i=0;i<5;i++) {_NOP();}
}
//=====================================================
//===================================================
//功能:da
//代碼:
void Init_tx(unsigned long da
{ while((IFG1 & UTXIFG0)!=UTXIFG0);
TXBUF0=xuan;
while((IFG1 & UTXIFG0)!=UTXIFG0);
TXBUF0=da
Init_low(LOAD);
_NOP();
Init_high(LOAD);
_NOP();
Init_low(LDAC);
_NOP();
Init_high(LDAC);
}
//====================================================
//====================================================
//main.c文件
#include "io430.h"
#include "in430.h"
#include "define.h"
#include "Init_ADDA.c"
//======================================
//功能:中間數(shù)據(jù),用于將AD存儲器中數(shù)據(jù)賦給SPI
unsigned long Gv_da
//=============================================
//================================================
//功能:主函數(shù)
//描述://
//代碼:
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
Init_Clk();
Init_Port();
Init_Spi();
Init_AD();
while(1)
{
//使用軟件啟動AD轉換,必須在轉換之前,先復位Enc,然后再使能ENC
ADC12CTL0&=~ENC; // Enable conversions
ADC12CTL0|=(ENC|ADC12SC);
while(ADC12CTL1&ADC12BUSY)
{}
Gv_da
Gv_da
Init_tx(Gv_da
}
//return 0;
}
關于程序的一點說明:由于msp430f135的AD是12位的而TLC5620是8位所以對于AD采到的數(shù)據(jù)要取高8位,固出現(xiàn)了Gv_da
還有一點是關于硬件的由于TLC5620只有8位,固只能體現(xiàn)一個聲道,只用到TAD2822的一個輸出。
評論