当前位置: 首页 > news >正文

02- 模块化编程-005 MAX1241数码显示

1、MAX1241 芯片介绍

        MAX1241 是一款低功耗、12 位串行模数转换器,具有 8 个管脚,工作电压范围为 +2.7~+5.5V。它具有高效的连续 AD 转换能力,最高采样速率可达 73ksps,功耗仅为 37mw(Vdd=3V)。此外,MAX1241 还具有关闭模式,可以降低功耗,但这时传输速率也会降低。

特性

  • 单电源供电:
    • +2.7V至+3.6V (MAX1240)
    • +2.7V至+5.25V (MAX1241)
  • 12位分辨率
  • 内部2.5V基准电压源(MAX1240)
  • 小尺寸:8引脚PDIP/SO封装
  • 低功耗:3.7µW(73ksps、MAX1240)
    • 3mW(73ksps,MAX1241)
    • 66µW(1ksps、MAX1241)
    • 5µW(关断模式)
  • 内部采样/保持
  • SPI/QSPI/MICROWIRE 3线串行接口
  • 内部时钟

内部结构

 引脚定义

典型电路

应用场景

 

  • 电池供电应用

  • 仪器仪表
  • 隔离数据采集
  • 便携式数据记录
  • 过程控制

 注意事项

  • 在开始加电 20ms 内不要有任何转换工作。
  • 将 CS 置低电平后,开始转化。在 CS 的下降沿,采样保持电路进入保持状态,而且转化正式开始,经过一段内部转化时间后,转化结束的标志是 Dout 信号置高。
  • 在外部时钟的作用下,数据将依次被传送。在这一操作过程中,需要通过CPU的一个通用I/O接口拉低CS,并保持SCLK在低电平状态。此时,我们需要等待最大转换时间,或者查询DOUT的高电平信号,以判断转换是否已完成。当转换结束后,DOUT的数据输出将在SCLK的下降沿开始。在第13个脉冲时,将CS置为高电平。如果CS继续保持在低电平状态,后续输出的数据将为0。在启动新的转换之前,我们还需等待规定的最小时间tcs,此时CS应保持高电平。

2、仿真电路

 

3、软件代码

max1241.c

/****************************************************************************
*  文件名:max1241-io.c
*  文件描述:max124的IO模拟时序驱动函数定义
*  创建人:bianjingyuan
*  编程日期:2024-11-05
*  版本号:1.0
*  修改记录:无
****************************************************************************/
#include  	"pic.h"#define 	uchar 		unsigned char
#define 	uint  		unsigned int
#define 	ulong 		unsigned long
#define 	nop  		asm("NOP")// 主要引脚的替代
#define 	dout	RC0		// 887引脚输入
#define 	sclk	RC1		// RC1-RC3为887引脚输出
#define 	cs		RC2		// 下降沿启动转换 1-dout呈现高阻
#define 	SHDN	RC3		// 0-器件关闭 1-器件工作// 外部变量引用
extern uint adre_1241;
extern void delayus(uchar a);//*****************************以下为函数和子程序****************************/
//* 名称:   max1241_read_io
//* 说明:   max1241的IO模拟时序驱动程序
//* 功能:   12位数据AD转换
//* 调用:   无
//* 输入:   无
//* 返回值: adre_1241
//****************************************************************************/
void max1241_read_io() // max1241的IO模拟时序驱动程序
{uchar k;adre_1241 = 0;SHDN = 1; // 使能1241cs = 0;   // 开始转换过程,采样保持时间1.5usdelayus(9); // 需要至少7.5us的延时作为转换时间sclk = 1;  delayus(1); // 第一个时钟的上升沿无操作sclk = 0;   // 时钟周期约6us,fclk必须小于2.1mhzdelayus(1);for (k = 12; k > 0; k--){   sclk = 1; // 从第二个时钟的上升沿开始输出数据delayus(1);adre_1241 |= dout;sclk = 0;delayus(1);    adre_1241 <<= 1; // 高位在前移位nop; nop;}adre_1241 >>= 1; // 完成12位数据的移位寄存cs = 1;          // 转换终止SHDN = 0;       // 关闭1241
}//****************************************************************************/
//* 名称:   max1241_init_io
//* 说明:   max1241的初始化函数
//* 功能:   单片1241的初始化
//* 调用:   send(uchar addres, uchar data);
//* 输入:   无
//* 返回值: 无
//****************************************************************************/
void max1241_init_io()
{   SHDN = 0; // 关闭1241cs = 1;   // 转换终止sclk = 0; // 空闲状态为低电平
}

main.c

 

//*  文件名:main.c
//*  文件描述:单片机主程序,负责系统初始化和电压监测
//*  编译环境: Windows XP + MPLAB IDE 8.83 + Picc 9.60
//*  编程者: bianjingyuan
//*  编程日期: 2024-11-05
//*  版本号:1.0
//*  修改记录:无
//********************************************************************
void main()
{Initial_System();     // 初始化系统设置ad_init();Set_Port_IO();        // 设置端口IO方向max7219_int();        // 初始化MAX7219显示驱动di();                 // 禁用全局中断TRISC=1;             // RC0为转换结果输入,RC1-RC3为输出max1241_init_io();add3 = 0; add2 = 0;  // 显示数据清零add1 = 0; add0 = 0;  
redo:counter = 0;for (k = 10; k > 0; k--)  // 5.12V电压基准{max1241_read_io();counter = counter + adre_1241;}cal_hex(counter >> 3);// cal_hex(adre_1241);send(0x01, 15);send(0x02, 15);send(0x03, 15);send(0x04, 15);send(0x05, add3 + 128);  // 加小数点, X.XXX Vsend(0x06, add2);send(0x07, add1);send(0x08, add0);delay1s();delayms(100);        // 延时100毫秒delayus(10);         // 延时10微秒delay1s();           // 延时1秒goto redo;           // 循环返回到redo标签
}

 4、代码解析

 

        该代码主要是用于配置和控制 MAX1241 ADC 的初始化和数据转换。程序通过模拟 SPI 时序控制 MAX1241 的转换过程,并读取转换结果。具体功能包括:

  1. 初始化 ADC(max1241_init_io)

    • 配置为关机模式,设置片选为不选中状态,并将时钟信号置于低电平以节省能耗。
  2. 读取 ADC 数据(max1241_read_io)

    • 启动 ADC 进行模数转换,通过时钟信号同步数据传输。
    • 在时钟的上升沿读取数据,将其移位到正确的位置,以得到完整的 12 位结果。

5、硬件资源分配表 

 

序号引脚类别方向功能定义功能内容相关寄存器及配置
1RC0数字IO输入dout数据输出TRISC0
2RC1数字IO输出sclk时钟信号TRISC1
3RC2数字IO输出cs片选控制TRISC2
4RC3数字IO输出SHDN开关控制TRISC3

        基于上述硬件资源分配表,程序主要实现了以下功能:

  1. 控制 MAX1241 的开关状态(通过 SHDN 引脚),以降低能耗。
  2. 使用模拟 SPI 时序,通过 sclk 和 dout 引脚进行数据传输和读取。
  3. 控制 cs 引脚以启用和禁用 ADC 的转换过程。
  4. 最终获取 12 位 ADC 转换结果,并将其存储到 adre_1241 变量中。

 6、软件流程图

 

在这个流程图中:

  • 开始初始化ADC:流程的起点,开始ADC的初始化过程。
  • 关闭ADC并空闲:在初始化之前,确保ADC处于关闭状态,以便进行配置。
  • 初始化完成,等待:ADC初始化设置完成后,等待主程序的调用。
  • 主程序调用:主程序开始调用ADC转换函数。
  • 启动ADC转换过程:根据主程序的调用,启动ADC的转换过程。
  • 等待转换完成:等待ADC完成模拟信号到数字信号的转换。
  • 通过时钟信号读取12位的ADC数据:转换完成后,通过时钟信号读取ADC转换的结果。
  • 完成数据读取并关闭ADC:读取完数据后,关闭ADC以节省能源或为下一次转换做准备。

 7、仿真运行结果

 

 


http://www.mrgr.cn/news/66384.html

相关文章:

  • RocketMQ可视化工具- Dashboard 使用教程 (附带可下载文件)
  • 谷歌浏览器怎么设置网页自动刷新
  • 年度融资超30亿!人形机器人能为连接器和线束线缆带来什么机遇?
  • 全面解析:大数据技术及其应用
  • 计算机网络面试题三道之二
  • 针对告警数量、告警位置、告警类型等参数进行统计,并做可视化处理的智慧能源开源了。
  • 配置深度学习环境
  • pdf添加目录标签python(手动配置)
  • dockerdockerfiledocker-compose操作nginx
  • MMBench-Video:上海 AI Lab 联合多所高校推出长视频理解基准测试工具,全面评估 LVLMs 视频理解的能力
  • 远程操作Linux服务器 _Xshell、Xftp以及Linux常见操作命令
  • 不要只知道deepl翻译,这里有10个专业好用的翻译工具等着你。
  • 自车坐标系与大地坐标系的理解与转换
  • 【C++】C++的单例模式
  • 讲讲软件业务设计原则?
  • 鸿蒙ArkTS中的布局容器组件(Column、Row、Flex、 Stack、Grid)
  • [Unity Demo]从零开始制作空洞骑士Hollow Knight第十九集:制作过场Cutscene系统
  • 第二届计算机网络技术与电子信息工程国际学术会议(CNTEIE 2024,12月6-8日)
  • 7.3、实验三:RIPv2的基本配置
  • LeetCode:20. 有效的括号(java)
  • 跨平台开发对于不同平台调用接口的抽象层设计
  • 项目管理基础认知
  • 轻松理解操作系统 - 轻松了解 inode 是如何管理文件的
  • 单臂路由技术,eNSP实验讲解
  • golang 实现比特币内核:处理椭圆曲线中的天文数字
  • 医院信息化与智能化系统(17)