找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 472|回复: 0
打印 上一主题 下一主题
收起左侧

max5481数字电位器测试仿真

[复制链接]
跳转到指定楼层
楼主

BASCOM-AVR代码:
' ==========================================================
' MAX5481数字电位器测试
'2025年10月17日
' ==========================================================
$regfile = "m16def.dat"     ' 指定ATmega16单片机型号定义文件
$crystal = 8000000          ' 设置晶振频率为8MHz
$hwstack = 64               ' 设置硬件堆栈大小为64字节
$swstack = 64               ' 设置软件堆栈大小为64字节
$framesize = 64             ' 设置帧大小为64字节

' ==========================================================
' 引脚定义
' ==========================================================
Cs Alias Portb.4            ' 定义片选引脚CS连接到PORTB.4

' ==========================================================
' SPI 配置
' ==========================================================
' 配置硬件SPI:无中断、MSB先传、主机模式、时钟极性低、相位0、无从机选择
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Noss = 1
Spiinit                     ' 初始化SPI接口

' ==========================================================
' 变量定义
' ==========================================================
Dim Command_byte As Byte    ' SPI命令字节
Dim Data_high As Byte       ' 数据高字节
Dim Data_low As Byte        ' 数据低字节
Dim Test As Word            ' 测试值变量
Dim Temp_word As Word       ' 临时数据变量

' ==========================================================
' 串口配置
' ==========================================================
'Config Serialin = Buffered , Size = 20  ' 注释掉的串口输入缓冲配置
'Enable Interrupts                       ' 注释掉的中断使能
$baud = 9600                ' 设置串口波特率为9600
Test = 1023                 ' 初始化测试值为1023(10位最大值)

' ==========================================================
' 子程序声明
' ==========================================================
Declare Sub Write_wiper(byval Value As Word)  ' 声明写入Wiper位置的子程序

' ==========================================================
' 主程序开始
' ==========================================================
Waitms 10                   ' 延时10ms,确保系统稳定

' ==========================================================
' 主循环 - 循环测试不同的Wiper位置
' ==========================================================
Do
   ' 测试不同的阻值位置
   Call Write_wiper(Test)    ' 写入最大阻值位置(1023)
   Waitms 200                ' 延时200ms

   Call Write_wiper(768)     ' 写入75%位置(768)
   Waitms 200

   Call Write_wiper(512)     ' 写入50%位置(512)  
   Waitms 200

   Call Write_wiper(256)     ' 写入25%位置(256)
   Waitms 200

   Call Write_wiper(0)       ' 写入最小阻值位置(0)
   Waitms 200
Loop
End                         ' 程序结束

' ==========================================================
' 写入Wiper位置子程序 (10位数字电位器)
' SPI传输格式:8位命令 + 16位数据(高10位有效,低6位无效)
' ==========================================================
Sub Write_wiper(byval Value As Word)
   ' 命令字节: 0x00 = 写入Wiper寄存器并立即更新
   Command_byte = &H00

   ' 数据格式转换:将10位数据左移6位,放到16位数据的D15-D6位置
   ' 因为数字电位器只使用高10位,低6位被忽略
   Temp_word = Value * 64    ' 相当于左移6位(乘以2^6=64)

   Data_high = High(temp_word)   ' 获取16位数据的高字节
   Data_low = Low(temp_word)     ' 获取16位数据的低字节

   ' SPI数据传输过程
   Reset Cs                 ' 片选置低,开始SPI传输
   Spiout Command_byte , 1  ' 发送命令字节
   Spiout Data_high , 1     ' 发送数据高字节
   Spiout Data_low , 1      ' 发送数据低字节
   Set Cs                   ' 片选置高,结束SPI传输

   ' 调试输出 - 通过串口显示传输的数据
   Print "输出原始值: " ; Value              ' 输出原始值
   Print "输出命令字节: " ; bin(command_byte)    ' 以二进制格式输出命令字节
   Print "输出数据高字节: " ; bin(data_high)      ' 以二进制格式输出数据高字节
   Print "输出数据低字节: " ; bin(data_low)        ' 以二进制格式输出数据低字节
   Print "---"                                  ' 输出分隔线
End Sub


评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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