找回密碼
         注冊會員
        搜索附件  
        MCU資訊論壇 附件中心 單片機論壇 51單片機論壇 SST89x554-564_CN_Rev3.pdf

        SST89x554-564_CN_Rev3.pdf

         

        16位的ADS1110(AD轉(zhuǎn)換),程序編好,出現(xiàn)問題,望高手指:
        先簡單說一下ADS1110,它是基于I2C總線的16位高精度AD轉(zhuǎn)換芯片,我用的是貼片的.詳細(xì)的資料在附件中..可以看看

        我用的SST 89X516RD,也是51的

        我編好了程,硬件也接好,開始調(diào)試,但就是結(jié)果.......

        程序的思路大概是這樣的,我定義P1.4,P1.5分別為SDA,SCL. 定義了一個全局?jǐn)?shù)組rbuf[2]

        因為它是16位輸出,所以rbuf[2]用來裝讀到的2個字節(jié)的轉(zhuǎn)換數(shù)值(2進制)

        這個器件的地址按照手冊是1001 001#,最后一為是讀/寫位.

        按照手冊先發(fā)送address byte 在發(fā)送命令字節(jié),我給的是0X92(向從件寫) ,后面給的是0X93(讀從件)

        之后我直接讀它的OUTREGISTER16位的,我分了2次讀,并放到rubf[2]中.

        之后我調(diào)用顯示程序,我用四個數(shù)碼管分別顯示rbuf[0]中的高4位,低4位和rbuf [1]中的高4位,低4位.....ADS1110的量程是2.048V到--2.048V;

        按照我命令字節(jié)的設(shè)置,如果電壓是0V,它應(yīng)該顯示0000.如果是2.048V,它應(yīng)該顯示7FFF,但顯示顯示很亂

        而且顯示之后就不在變化,(比如現(xiàn)在一運行它就顯示0302,之后就一直不動)我是連續(xù)采樣,連續(xù)讀值..

        我用高精度示波器觀察SDA,SCL,發(fā)現(xiàn)也有波形啊,但不是很理想.我也不能完全判斷是對是錯...顯示是用的周立功的7289.應(yīng)該沒有問題.

        應(yīng)該是時序的問題,但我搞了很久還是不行.



        希望有人告訴我,問題出在哪里,怎么判斷,如何解決..不甚感激



        #define uchar unsigned char
        #define uint unsigned int
        #include "ZLG7289.H"
        #include< reg52.h >

        void ZLG7289_Download(unsigned char mod, char x, bit dp, char dat);
        void ZLG7289_Init(unsigned char t);

        sbit SDA = P1^4; //這邊設(shè)置的2個口合適嗎?
        sbit SCL = P1^5;


        uchar rbuf[ 2 ]; //用于存放2個字節(jié)的轉(zhuǎn)換結(jié)果
        bit bdata NACK;
        bit bdata nackFlag;


        /****************************************

        延時子函數(shù)delay ( );

        ****************************************/
        void delay ( uchar t )
        {
        while( t-- );
        }




        /****************************************

        起始條件子函數(shù)

        ****************************************/
        void start ( void )
        {
        SDA = 1;
        SCL = 1;
        delay ( 8 );
        SDA = 0;
        delay ( 20 );
        SCL = 0;
        }




        /***************************************

        停止條件子函數(shù)

        ***************************************/
        void stop ( void )
        {
        SDA = 0;
        SCL = 1;
        delay ( 8 );
        SDA =1;
        delay ( 20 );
        SCL = 0;
        }



        /***************************************

        發(fā)送應(yīng)答子函數(shù)

        ***************************************/
        void ack ( void )
        {
        SDA = 0;
        delay ( 8 );
        SCL = 1;
        delay ( 20 );
        SCL = 0;
        delay ( 8 );
        }


        /***************************************

        發(fā)送非應(yīng)答子函數(shù)

        ***************************************/
        void n_ack ( void )
        {
        SDA = 1;
        delay ( 8 );
        SCL = 1;
        delay ( 20 );
        SCL = 0;
        delay ( 8 );
        }



        /***************************************

        應(yīng)答位檢查子函數(shù)

        ***************************************/
        void checkack (void )
        {
        SDA = 1;
        delay ( 8 );
        SCL = 1;
        nackFlag = 0;
        if( SDA == 1 )
        {
        nackFlag = 1;
        }
        SCL = 0;
        }



        /***************************************

        函數(shù)名:void sendbyte( uchar *ch )
        參數(shù): ch
        返回值: 無
        功能描述: 發(fā)送一個字節(jié)的數(shù)據(jù)

        ***************************************/
        void sendbyte ( uchar temp )
        {
        uchar n = 8;
        while ( n-- )
        {
        if( ( temp & 0x80 ) == 0x80 )
        {
        SDA = 1;
        delay ( 8 );
        SCL = 1;
        delay ( 20 );
        SCL = 0;
        }
        else
        {
        SDA = 0;
        delay ( 8 );
        SCL = 1;
        delay ( 20 );
        SCL = 0;
        }
        temp = temp << 1;
        }

        }


        /****************************************

        接收一個字節(jié)數(shù)據(jù)子函數(shù)

        ****************************************/
        void recbyte( uchar *ch )
        {
        uchar n = 8;
        uchar temp = 0;

        SDA = 1; //這里的SDA作為輸入口,所以先置1

        while( n-- )
        {

        SCL = 1;
        temp = temp << 1;
        if( SDA == 1 )
        {
        temp = temp | 0x01;
        }
        else
        {
        temp = temp & 0xFE;
        }
        SCL = 0;
        }
        *ch = temp;
        }


        /****************************************

        發(fā)送N字節(jié)數(shù)據(jù)子程序

        ****************************************/
        void sendnbyte ( uchar addr, uchar n )
        {


        start ( );
        sendbyte ( addr ); //addr = 0x92 寫
        checkack ( );

        if ( nackFlag == 1 )
        {
        NACK = 1;
        return; //程序跳到哪里???
        }

        while ( n -- )
        {
        sendbyte ( 0x8C );
        checkack ( );

        if ( nackFlag == 1)
        {
        NACK = 1;
        return;
        }

        }

        stop ( );
        }


        /****************************************

        接收N字節(jié)數(shù)據(jù)子程序

        ****************************************/
        void recnbyte ( uchar addr, uchar n )
        {

        uchar *point;
        start ( );
        sendbyte ( addr ); //addr = 0x93 讀
        checkack ( );

        if ( nackFlag == 1)
        {
        NACK = 1;
        return; //執(zhí)行這句后程序跳到哪里???
        }

        point = rbuf ;

        while ( n -- )
        {
        recbyte ( point );
        ack ( ); //主機應(yīng)答
        point++;
        }

        n_ack ( ); //主機不應(yīng)答
        stop ( );

        }


        /****************************************

        函數(shù)名:void main ( void )
        參數(shù): 無
        返回值: 無
        功能描述:DA轉(zhuǎn)換

        ****************************************/
        void main ( void )
        {

        uchar Value_H;
        uchar Value_L;
        uchar value1;
        uchar value2;
        uchar value3;
        uchar value4;


        ZLG7289_Init(4);
        delay ( 100 );

        while( 1 )
        {

        sendnbyte ( 0x92, 1 );

        delay ( 8 );

        recnbyte ( 0x93, 2 ); //至此轉(zhuǎn)換完的2字節(jié)數(shù)據(jù)已經(jīng)裝如rbuf[0],rbuf[1]中


        Value_H = rbuf[ 0 ]; //存放16位輸出值的高8位
        Value_L = rbuf[ 1 ]; //存放16位輸出值的低8位


        value1 = Value_H >> 4;
        value2 = Value_H & 0x0F ;


        value3 = Value_L >> 4;
        value4 = Value_L & 0x0F ;


        ZLG7289_Download( 1, 3, 0, value1 ); 括號里面分別代表顯示方式1,在第3個數(shù)碼管顯示,不顯示小數(shù)點,顯示的數(shù)(0--F)
        ZLG7289_Download( 1, 2, 0, value2 );
        ZLG7289_Download( 1, 1, 0, value3 );
        ZLG7289_Download( 1, 0, 0, value4 );

        }

        }





        QQ|手機版|MCU資訊論壇 ( 京ICP備18035221號-2 )|網(wǎng)站地圖

        GMT+8, 2025-3-18 13:21 , Processed in 0.038589 second(s), 8 queries , Redis On.

        Powered by Discuz! X3.5

        © 2001-2024 Discuz! Team.

        返回頂部
        亚洲精品无码AV人在线播放| 大桥未久在线精品视频在线| 精品亚洲综合在线第一区| 99国产精品久久| 97精品国产97久久久久久免费| 国产亚洲精品AA片在线观看不加载 | 国产亚洲精品免费视频播放| 欧美精品亚洲精品日韩专区| 亚洲精品~无码抽插| 国产精品视频久久| 精品久久久久久无码中文字幕| 亚洲欧美精品午睡沙发| 久久精品国产亚洲AV大全| 麻豆精品成人免费国产片| 欧美在线精品一区二区三区| 久久免费的精品国产V∧| 在线欧美v日韩v国产精品v| 天天爽夜夜爽8888视频精品| 久久夜色精品国产噜噜亚洲AV| 91精品国产高清久久久久久91| 亚洲午夜福利精品久久| 国产成人精品免费视频大全麻豆| 国产精品亚洲产品一区二区三区 | 久久99国产乱子伦精品免费| 亚洲国产精品婷婷久久| 中文无码精品一区二区三区| 国产精品日本欧美一区二区 | 久久久精品人妻一区二区三区蜜桃| 欧美一区二区精品| 免费国产阿v视频在线观看| 精品国产欧美一区二区| 亚洲国产精品碰碰| 99精品久久精品一区二区| 色婷婷久久久SWAG精品| .精品久久久麻豆国产精品 | 四虎国产精品永久在线观看| 国产L精品国产亚洲区久久| 色婷婷在线精品国自产拍| 国产精品单位女同事在线| 久久99精品久久久久久hb无码| 九九久久精品国产|