找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2587|回复: 1
收起左侧

PIC16LF6720单片机+AD7714采集+SD卡读写程序

[复制链接]
ID:856380 发表于 2020-12-7 21:53 | 显示全部楼层 |阅读模式
PIC16LF6720单片机+AD7714采集程序,采用SPI通讯协议,AD7714本身为6通道24位高精度AD芯片,通过PIC单片机IO口控制AD采集和SD卡通讯,全部原创设计,单片机程序为MPLAB8.7环境编译通过。

电路原理图如下:
1.png

单片机源程序如下:
  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, 下载次数: 23)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:517951 发表于 2021-6-25 15:58 | 显示全部楼层
我这里还有好几个AD7714的IC,可以参考楼主的资料搞下电路
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表