一乐电子

一乐电子百科

 找回密码
 加入本站

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 1311|回复: 70
收起左侧

[avr] M8V7数控电源升级为M328V7,除LCD12864外,还有新功能和新赠品

[复制链接]
发表于 2021-10-17 19:58 | 显示全部楼层 |阅读模式
本帖最后由 cdhigh 于 2021-11-20 20:28 编辑

不久前成功让M8V7“用上”12864屏,方法是尽量裁剪和优化代码,然后将部分字库存放在EEPROM中,这样才勉强勉强的霸王硬上弓,将那么多代码塞到M8小小的FLASH里面。
但是我感觉意义不大,将12864退化为1604,没有充分利用12864的点阵优势,就没有继续了。
然后我就开始着手将M8V7移植到Atmega328P上,因为Atmega328PAtmega8管脚兼容,直接插上即可,不需要更改PCB
经过几天的努力,终于成功!
工作量不小,要将所有的汇编代码转换回C语言,再逐一确认两个CPU不同寄存器配置的区别,还有工作量比较大的是ICCAVR太简陋了,调试起来不方便,就顺便移植到GCC编译器,使用ATMEL官方IDE Atmel Studio编译,有调试和仿真一体,方便多了。
M328就是爽,FLASHM84倍,基本不用担心FLASH容量问题,不像M8,每条语句都斟酌一番,要使用最省空间的写法。
除支持LCD12864外,继续兼容1602/1604/2004显示屏。

固件的功能继续延续我之前的工作,管脚分配也是一致的,

如果屏幕还是LCD1602/1604/2004,则功能和之前的 M8V7_V726.HEX 一致。

在这里再做一个V726版本的功能简述:
  • ADC0(23)接入LM35测温
  • PD1(3脚)用在自动风扇开关
  • PC5(28脚)接有源蜂鸣器用作提示
  • 长按电压按键开关机
  • 长按电流按键清零输出电量


M328V7特性:  
  • 支持12864
  • 支持智能充电器/示波器/红外解码器模式
  • 支持电压电流曲线显示
  • 支持上电默认输出电压/默认关闭输出/使用上次关机时状态
  • 新增运行时间显示(此处应该实现为实时时钟的,但M328管脚不够,只能实现为上电运行时间显示)
  • 更多的配置项
  • 一些小的改进


12864主屏显示信息更丰富  
                              
main.png
主屏.JPG

但我认为最重要新增特性为12864的第二屏(锁定状态下旋转电压编码器进入,和1602的操作一致,类似手机滑动进入第二屏)
第二屏我增加了一个显示电流/电压曲线的功能,可以弥补数字电流表的不足,因为主屏1s仅刷新4次,无法反应瞬间变化的电流,此屏可以最短显示30ms的电流变化。
这也是现在还有不少维修电源继续保留指针表头的原因,在添加了电流曲线功能后,指针表头就可以不用了。
这个电压电流曲线的灵敏度应该不输指针表头,而且更直观,还可以拍照保留分析。
12864_second_page.png


第二屏实拍,一格最小1s(屏幕水平分四格,一格32个点,每点30ms,所以可以分辨最小30ms的电流变化)
第二屏idle.JPG

第二屏,一格最长6.8h,一屏可以显示超过24小时的曲线(下方左侧显示 I~ 表示当前显示电流曲线)
第二屏_最长时基.JPG

第二屏操作方法:
  • 默认为电流曲线显示,可以在显示第二屏时,长按电流编码器按键切换显示电压曲线还是电流曲线
  • 水平刻度:使用电流编码器旋钮选择,最小为1s/div(每个点30ms,每格32个点)
  •           1s/div ~ 45.1s/div (步进0.96s),单位为秒,用于显示短期变化较快的电压电流
  •   1.6m/div, 3.2m/div, 6.4m/div, 12.8m/div, 25.6m/div, 51.2m/div 单位为分钟,用于充电或监控设备的工作状态
  •   1.7h/div, 3.4h/div, 6.8h/div 单位为小时,用于监控长时间缓慢变化的电压电流
  • 垂直刻度,自动适配,电流曲线状态下,输出电流=设置电流则为满刻度,否则输出电压=设置电压为满刻度(可以在菜单里设置一个偏移量)
  • 支持HOLD功能,短按电流按键则暂停波形显示,用于观察或拍照




实际测试图片,我使用了一个ST7565串口SPI(LCR-T4晶体管测试仪使用的屏幕,尺寸应该是2.4寸或2.8寸)
下图显示的是一个报废的老手机的启动电流曲线的一部分。
new_lcd_wave.jpg

第二屏_手机启动曲线.JPG


这个曲线功能有什么用呢?  
  • 通过启动时的电流曲线形状诊断各种电器的可能故障部位。
  • 水平时基足够长(最长6.8h/div,一屏显示超过24小时),可以监控电池充电曲线或放电曲线。
  • 好看,装逼,接一些电器时屏幕像心电图似的,好玩。

下面开始为升级方法:  
如果你已经有正常运行的M8V7,换M328P后建议烧写和原来屏幕一致的固件,确认M328P正常运行,然后再换LCD12864屏。

M328P烧录熔丝位:  
fuse.png
低位:0xff
高位:0xd7
扩展位:0xfc


LCD12864硬件接线:
  • 我手头只有ST7565屏,所以只能实际测试ST7565,硬件连线如下:
需要四根线,如果还嫌多,可以将RST接一个电容到地,一个大电阻到ST7565的20脚(电源)
ST7565_WIRE.png

  • ST7920并行接口,连线基本和1602一致(未实际测试,仅仿真通过):
st7920_4bit.png


  • ST7920串行接口,仅需两根线(未实际测试,仅仿真通过):
st7920_ser.png

我从一些网友的经验了解到,ST7920更适合字符模式,其绘图模式效率比较低。
所以对ST7920的支持我仅是通过Proteus仿真进行测试,如果有志愿者,可以帮我测试一下ST7920的显示效果。

我采用的绘图方案是在内存开辟缓冲区,先在内存中画好,然后再一股脑的传送给屏幕,
好处是方便适配不同的屏幕,增加一种屏幕的支持非常简单,写一个最简单的写屏幕寄存器驱动即可。
坏处就是要支持其他分辨率比如TFT等就麻烦一些。

V7.80
M328V7_V780.rar (667.69 KB, 下载次数: 48)

评分

参与人数 3一乐金币 +300 收起 理由
fujiachun + 100 很给力!
Joe_Black + 100 赞一个!
3AG1 + 100 很给力!

查看全部评分

 楼主| 发表于 2021-10-17 20:11 | 显示全部楼层
本帖最后由 cdhigh 于 2021-10-31 17:48 编辑

M328V7赠品介绍:
如果你使用的M328V7的LCD12864编译版本,已经内置了一个玩具级的示波器,或者连玩具都算不上,算是一个示波器的演示吧。
它能干嘛?其实什么都干不了!
不过至少可以在音频范围内看看有没有波形,或者可以体会一下怎么使用示波器,比如时基/触发之类的概念~
反正是免费赠送的,就不要嫌弃了~
我做这个也不是缺示波器,我已经买了一个真正的玩具示波器,做这个是因为好玩,可以加深对AVR和对示波器的理解。
注:从7.82开始,再赠送一个 “红外解码器”

技术规格 :  
* 采样率:最高250ksps  
* 模拟带宽:2Hz ~ 20kHz
* 存储深度:128pt (说人话就是波形不能缩放平移)  
* 水平时基:128us, 480us, 896us, 1.7ms, 3.5ms, 7.1ms, 14ms, 50ms, 100ms, 1s  
* 垂直刻度:0.13v, 0.63v, 1.25v  
* 触发模式:自动,正常(手动选择触发电平),滚动(不触发),单次
* 触发条件:上升沿,下降沿  
* 显示参数:峰峰值(VPP/mVp),频率,最大值(Vmax),最小值(Vmin),平均值(Vavg)  
* 波形冻结:长按电压按键冻结波形(HOLD)  
注1:因为没有使用浮点运算,并且屏幕分辨率有限,所以软件计算出来的频率误差较大,仅供参考,同样的原因,小于1Hz的频率则显示为0Hz。  
注2:采样率250ksps已经是ATMEGA328P能达到的最大采样率,网上流传的基于M328P的所谓1Msps采样率"高速"示波器是虚假宣传,1M是ADC时钟频率,而不是采样率,每次采样需要13个ADC时钟周期,我设置最大的ADC时钟频率为2M(对应到128us时基),并且提取读取采样数据,不需要等待13个ADC周期,实际采样率大约250k。  
注3:垂直刻度为软件计算,而不是实际衰减或放大,只是将ADC值乘以一定倍数,方便看小信号。  

硬件准备:  
当前默认使用ADC4(PC4/27脚)接入待测信号,可以在配置菜单中修改为其他未使用的端口。
比如如果没有使用温度功能,可以设置为ADC0,特别是如果使用ST7920的并口模式,ADC4被占用,则需要调整为ADC0,否则进入示波器模式后,屏幕可能不能正常显示。
因使用TL431A为参考电压源,所以测量范围为 0-2.5V。
直接接入信号即可,因为原版M8V7的此管脚已经引到屏接口,所以可以在原屏幕插座上接线出来即可。
如果要测量负电压,可以使用一个简单的偏置电路,调整电位器让扫描线位于屏幕中间即可。
如果要测量更高或更低电压,可以使用衰减器或运放放大。
最简示波器探头.png
可测负电压探头.png

可测负电压并10x衰减探头.png

操作方法:  
1. 按住电流按键开机则弹出工作模式选择菜单,再使用电压编码器选择 Oscilloscope 进入。  
mode_select.png

2. 主界面展示  
osc_main.png

3. 按键  
  * 短按电压按键:切换触发模式  
     * A:自动,软件自动设置触发电平为峰峰值的一半  
     * N:正常,手动模式,使用电压编码器旋钮上下移动触发电平标识来选择触发电平值  
     * R:滚动,不触发,波形将在屏幕上左右滚动  
     * S:单次,默认不显示波形,选择好触发沿和触发电平,等满足条件的信号出现后抓取一帧波形并暂停采样  

   * 长按电压按键:冻结波形,暂停采样,波形冻结后在下部信息栏显示“Paused”  
    osc_paused.png

   * 电压旋钮:选择触发电平或垂直刻度  
     * 在触发模式为N(正常)/S(单次)时,电压旋钮用于选择触发电平值   
     * 在触发模式为A(自动)/R(滚动)时,电压旋钮用于选择垂直刻度   

   * 短按电流按键:切换触发沿为上升沿或下降沿,N/A模式触发点位于屏幕中间,S模式出发点位于屏幕左侧  

   * 长按电流按键:切换显示更多测量数据(显示在左上角),   
    osc_disp_all.png

   * 电流旋钮:选择水平时基   

测试图库:
测试信号源为AD9833模块,AD9833输出波形偏移0.3V,峰峰值0.64V  

示波器_1k_正弦波
示波器_1k_正弦波.JPG

示波器_5k_正弦波
示波器_5k_正弦波.JPG

示波器_10k_正弦波(已经开始有锯齿了,因为是软件放大两倍,锯齿更严重,如果使用运放放大会好一些)
示波器_10k_正弦波.JPG

示波器_20k_正弦波
示波器_20k_正弦波.JPG

示波器_30k_正弦波
示波器_30k_正弦波.JPG

示波器_40k_正弦波
示波器_40k_正弦波.JPG

示波器_50k_正弦波(尽管没法看了,但是频率还是计算出来了)
示波器_50k_正弦波.JPG

示波器_60k_正弦波
示波器_60k_正弦波.JPG

示波器_2Hz_正弦波
示波器_2Hz_正弦波.JPG

示波器_1k_方波
示波器_1k_方波.JPG

示波器_10k_方波
示波器_10k_方波.JPG

示波器_20K_方波
示波器_20K_方波.JPG

示波器_50k_方波
示波器_50k_方波.JPG

示波器_1k_三角波
示波器_1k_三角波.JPG

示波器_10k_三角波
示波器_10k_三角波.JPG

示波器_20k_三角波
示波器_20k_三角波.JPG

示波器_单次触发
遥控器维修实录.png

1人打赏

发表于 2021-10-17 20:35 | 显示全部楼层
啊这。。支持。就是有点搞不动。静态电流底数的问题最好解决下

点评

还好,静态电流底数大多数情况下为0.000/0.001直接跳,偶尔跳到0.002,还好吧。  详情 回复 发表于 2021-10-17 20:38
 楼主| 发表于 2021-10-17 20:38 | 显示全部楼层
本帖最后由 cdhigh 于 2021-10-17 20:53 编辑
zhqsoft 发表于 2021-10-17 20:35
啊这。。支持。就是有点搞不动。静态电流底数的问题最好解决下

还好,静态电流底数大多数情况下为0.000/0.001之间跳,偶尔跳到0.002,还好吧。如果是强迫症,可以加一个配置项,设定一个阀值,小于此阀值的就显示为0.000,这样就好看了。
大于此阀值的电流显示可以考虑两套方式
1. 减去阀值
2. 不减阀值,直接显示

发表于 2021-10-17 20:47 | 显示全部楼层
很不错!支持一下

点评

谢谢3AG支持,这个论坛是因为有3AG我才继续呆在这的,即使人气不足,但是通过3AG学了很多东西,经常来看看3AG的设计,收益良多。  详情 回复 发表于 2021-10-17 20:56
 楼主| 发表于 2021-10-17 20:56 | 显示全部楼层
3AG1 发表于 2021-10-17 20:47
很不错!支持一下

谢谢3AG支持,这个论坛是因为有3AG我才继续呆在这的,即使人气不足,但是通过3AG学了很多东西,经常来看看3AG的设计,收益良多。

点评

楼主把这个电源玩到极致了。谢谢分享。  详情 回复 发表于 2021-10-17 21:13
发表于 2021-10-17 21:13 | 显示全部楼层
cdhigh 发表于 2021-10-17 20:56
谢谢3AG支持,这个论坛是因为有3AG我才继续呆在这的,即使人气不足,但是通过3AG学了很多东西,经常来看 ...

楼主把这个电源玩到极致了。谢谢分享。
发表于 2021-10-17 22:12 | 显示全部楼层
谢谢分享
发表于 2021-10-18 08:44 | 显示全部楼层
又可以开干了 感谢分享

点评

如果不是原有的m8v7升级,要重新画板的话,我会将SPI接口和IIC接口留出来给屏幕和其他外设,现在spi和 iic接口的屏幕和其他外设很多,但当时GandF设计此电源时市场上的SPI/IIC外设还不普及,所以SPI被编码器占用,II  详情 回复 发表于 2021-10-18 17:55
发表于 2021-10-18 10:24 | 显示全部楼层
楼主把我想做的给做了,提个建议,加上电压电流曲线或示波器的功能建议用彩屏输出,效果比这个强太多了

点评

谢谢建议,想过,但是担心m328吃不消,因为cpu占用率已经七八十了,所以示波器模式我都采用单独的进入点,不运行其他任务。 不知tft彩屏对cpu资源的占用相比12864会多多少?  详情 回复 发表于 2021-10-18 17:06
您需要登录后才可以回帖 登录 | 加入本站

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号-1粤公网安备44522102000183号 )

GMT+8, 2021-12-2 03:08 , Processed in 0.054421 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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