新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 用msp430與TLC5620實現(xiàn)AD_DA

        用msp430與TLC5620實現(xiàn)AD_DA

        作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
          剛剛弄了一個AD_DA的轉(zhuǎn)換。拿來和大家分享一下。這個東西沒有太多的使用價值,只是初學(xué)者的練手而已。

          先說一下器件吧,話筒一個,LM324N放大器將一個,TDA2822音頻放大器一個,揚(yáng)聲器一個(不要太大,耳麥上就可以),TLC5620msp430學(xué)習(xí)板,電容、電阻自不用說。

        本文引用地址:http://www.104case.com/article/201611/316448.htm

        框架圖如下:

        話筒——》LM324N——》msp430(ADC12)——》tlc5620——》TDA2822——》揚(yáng)聲器(輸出)

        lM324N的電路圖如下(由于沒用PCB繪圖,畫的很難看,還請見諒)

        關(guān)于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進(jìn)行通信)
        //代碼:
        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;//data 8 bit,SPI,master
        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腳設(shè)置
        {
        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();}
        }
        //=====================================================


        //===================================================
        //功能:data輸出函數(shù)
        //代碼:
        void Init_tx(unsigned long data,unsigned int xuan)
        { while((IFG1 & UTXIFG0)!=UTXIFG0);
        TXBUF0=xuan;
        while((IFG1 & UTXIFG0)!=UTXIFG0);
        TXBUF0=data;
        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_data;
        //=============================================

        //================================================
        //功能:主函數(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轉(zhuǎn)換,必須在轉(zhuǎn)換之前,先復(fù)位Enc,然后再使能ENC
        ADC12CTL0&=~ENC; // Enable conversions
        ADC12CTL0|=(ENC|ADC12SC);
        while(ADC12CTL1&ADC12BUSY)
        {}
        Gv_data=ADC12MEM0;
        Gv_data=Gv_data>>4;
        Init_tx(Gv_data,0);



        }
        //return 0;
        }

        關(guān)于程序的一點(diǎn)說明:由于msp430f135的AD是12位的而TLC5620是8位所以對于AD采到的數(shù)據(jù)要取高8位,固出現(xiàn)了Gv_data>>4的情況,還有一點(diǎn)是二者的采樣速率要一者,體現(xiàn)在時鐘上。

        還有一點(diǎn)是關(guān)于硬件的由于TLC5620只有8位,固只能體現(xiàn)一個聲道,只用到TAD2822的一個輸出。



        關(guān)鍵詞: msp430TLC5620ADD

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 东丰县| 广水市| 辉南县| 资阳市| 饶河县| 滦南县| 香港| 普格县| 东方市| 九江市| 灵武市| 连山| 佛山市| 卢龙县| 柳州市| 左云县| 沾化县| 延安市| 永清县| 安阳县| 礼泉县| 台东县| 信丰县| 大渡口区| 深泽县| 仙居县| 鹤山市| 文成县| 克什克腾旗| 岳阳县| 台前县| 即墨市| 汕头市| 黄浦区| 普兰店市| 林芝县| 连城县| 新和县| 兴山县| 鹿泉市| 翁源县|