找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 3593|回復: 1
打印 上一主題 下一主題
收起左側

PIC16LF6720單片機+AD7714采集+SD卡讀寫程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:856380 發(fā)表于 2020-12-7 21:53 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
PIC16LF6720單片機+AD7714采集程序,采用SPI通訊協(xié)議,AD7714本身為6通道24位高精度AD芯片,通過PIC單片機IO口控制AD采集和SD卡通訊,全部原創(chuàng)設計,單片機程序為MPLAB8.7環(huán)境編譯通過。

電路原理圖如下:


單片機源程序如下:
  1. #include <msp430x14x.h>
  2. #include "AD7714.h"

  3. extern unsigned char store[NUM_SAMPLES*MAX_REG_LENGTH +30] ;
  4. unsigned char *datapointer = store;
  5. /**************************************************************************
  6. **   
  7.         ----------------------              --------------------------         
  8.        |                      |            |
  9.        |MCLKIN                |            |
  10.        |MCLKOUT               |            |   
  11.        |AIN1                CS|<-----------|P2.7            
  12.        |AIN2              DRDY|----------->|P3.0
  13.        |AIN3                  |<-----------|         MSP430149F
  14.        |AIN4              SCLK|<-----------|P3.3
  15.        |AIN5               DIN|<-----------|P3.1/SIMO
  16.        |AIN6              DOUT|----------->|P3.2/SOMI
  17.        |                      |            |
  18.        |                      |            |
  19.        |  REFIN+     REFIN-   |            |
  20.         ----------------------              -------------------------

  21.                                                    **

  22. **************************************************************************/

  23. /*****************************************
  24. ***寫通信寄存器                        ***
  25. *****************************************/

  26. void Init_Clk(void)
  27. {
  28.     unsigned int i;
  29.     BCSCTL1 = 0X00;        //將寄存器的內容清零
  30.                                         //XT2震蕩器開啟
  31.                                         //LFTX1工作在低頻模式
  32.                                         //ACLK的分頻因子為1
  33.                                        
  34.     do
  35.     {
  36.                 // 清除OSCFault標志
  37.             IFG1 &= ~OFIFG;   
  38.             for (i = 0x20; i > 0; i--);               
  39.     }
  40.     while ((IFG1 & OFIFG) == OFIFG);// 如果OSCFault =1   
  41.                                        
  42.         //將寄存器的內容清零
  43.     BCSCTL2 = 0X00;               
  44.         //MCLK的時鐘源為TX2CLK,分頻因子為1
  45.     BCSCTL2 += SELM1;       
  46.         //SMCLK的時鐘源為TX2CLK,分頻因子為1
  47.     BCSCTL2 += SELS;       
  48. }

  49. void initSPI (void)
  50. {
  51.     UCTL0 = SWRST;                            // 8-bit SPI Master **SWRST**
  52.     UTCTL0 = CKPH | SSEL0 | STC;              // ACLK, 3-pin mode, clock idle low, data valid on rising edge, UCLK delayed
  53.     UBR00 = 0x8F;                             // 0x02: UCLK/8 (1 MHz), works also with 3 and 4
  54.     UBR10 = 0x02;                             // -"-
  55.     UMCTL0 = 0x00;                            // no modulation
  56.     UCTL0 = CHAR | SYNC | MM | SWRST;         // 8-bit SPI Master **SWRST**
  57.     UCTL0 &= ~SWRST;                          // clear SWRST
  58.     ME1 |= USPIE0;                            // Enable USART1 SPI mode
  59.     while (!(IFG1 & UTXIFG0));                // USART1 TX buffer ready (empty)?
  60. }

  61. void Init_AD7714 (void)
  62. {
  63.     P2DIR |= 0x80;                           //initial  port
  64.     P3DIR |= 0x1A;                          
  65.     P3SEL |= 0x0E;                           

  66.     initSPI();
  67.     CS_LOW();                                // 選通AD7714   
  68. }

  69. void Writetoreg(const unsigned char byteword)
  70. {        
  71.     CS_LOW();              /*CS is low*/
  72.     spiSendByte(byteword);
  73.    
  74.     //while(P3IN & BIT0);     /*wait for /DRDY to go low*/
  75.     CS_HIGH();             /*CS is high*/
  76. }

  77. void Read(const unsigned char number)
  78. {
  79.     unsigned char i;
  80.    
  81.    
  82.     //while(P3IN & BIT0);   /*wait for /DRDY to go low*/
  83.     CS_LOW();
  84.     for(i = 0;i < number;i++)
  85.     {
  86.         //while(!(P3IN & BIT0))   /*wait for /DRDY to go low*/
  87.         //{
  88.         *datapointer++ = spiRecByte();
  89.        // }
  90.             
  91.     }
  92. ……………………

  93. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
AD7714+SD.rar (3.89 KB, 下載次數: 24)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:517951 發(fā)表于 2021-6-25 15:58 | 只看該作者
我這里還有好幾個AD7714的IC,可以參考樓主的資料搞下電路
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表