[活动专区]

【AT-START-F405测评】简易示波器3 屏显波形+小结

[复制链接]
1066|12
手机看帖
扫描二维码
随时随地手机跟帖
lcdi|  楼主 | 2024-5-31 17:58 | 显示全部楼层 |阅读模式
本帖最后由 lcdi 于 2024-6-4 09:21 编辑

屏幕使用的是中景园的1.9寸模块,SPI驱动,厂家给出的例程基本上都是软SPI,当然要改成硬件spi,
添加厂家的文件,其中修改lcd_init.c中的如下:

void LCD_Writ_Bus(u8 dat)
{        
    spi_i2s_data_transmit(SPI2, dat);
    while(spi_i2s_flag_get(SPI2, SPI_I2S_TDBE_FLAG) == RESET);
}

这里判断标志在发送后,发送完毕才能返回,原因是如此方可配合DC引脚电平,区分好命令和数据。
另本设计未留GPIO控制lcd reset,所以设置完外设后,需要等待一段时间,再去设置LCD,否则LCD设置不成功。
厂家例程文字显示函数编译不成功,字符和画线正常,先继续~

DMA1设置为16bit模式,因为ADC数据是10位的。
DMA2是8bit模式,DAC数据是8位的。
tmr11的ch1通道输出作为ADC的时钟,同时也作为DMA1的触发信号。
tmr10的ch1通道输出作为DAC的时钟,同时也作为DMA2的触发信号。

ADC采样够一屏幕数据DMA1停止,然后画线显示出来,暂停一段时间以便观察,然后继续采样。

注意设置这里,at32f402_405_wk_config.h里面要定义:
#define DMA1_CHANNEL1_BUFFER_SIZE   300
#define DMA1_CHANNEL1_MEMORY_BASE_ADDR   (uint32_t)&adcdata

#define DMA2_CHANNEL1_BUFFER_SIZE   120
#define DMA2_CHANNEL1_MEMORY_BASE_ADDR   (uint32_t)&sindata

主程序中
  wk_dma_channel_config(DMA1_CHANNEL1, (uint32_t)&GPIOA->idt, DMA1_CHANNEL1_MEMORY_BASE_ADDR, DMA1_CHANNEL1_BUFFER_SIZE);
要手动修改外设地址为GPIOA的idt,workbench里面没有修改之处,而且会傻傻的设置为触发信号,也就是tmr11的地址。

同理如下:
  wk_dma_channel_config(DMA2_CHANNEL1, (uint32_t)&GPIOB->odt, DMA2_CHANNEL1_MEMORY_BASE_ADDR, DMA2_CHANNEL1_BUFFER_SIZE);

还有,workbench虽然设置了DMA1的中断,但是并没有设置具体中断信号,对比官方例程,还需添加如下:
dma_interrupt_enable(DMA1_CHANNEL1, DMA_FDT_INT, TRUE);

如此传输一遍DMA数据后,可以进入中断,然后检测传输完成标志:
  if(dma_interrupt_flag_get(DMA1_FDT1_FLAG) != RESET)
  {
                dma_channel_enable(DMA1_CHANNEL1, FALSE);//关闭DMA1
                    dma_flag_clear(DMA1_FDT1_FLAG);//清标志
                adcfinish =1;//自定义变量,主程序中检测可知得到一帧ADC数据
  }

效果:

显示板上的一个时钟信号:
16.jpg
显示LCD的背光控制信号,因为直接三极管,故而被拉低了:
17.jpg
显示DAC输出的正弦波,太大干扰了,测量发现DAC的基准电压上干扰很大不稳定,后续再研究看是芯片问题还是布线问题。
由此可以看出本项目方案有一定实用价值,可以清晰的看出干扰越下面越大,代表电平越高干扰越大(波形上下是反向显示的),而基准电压是最高的1.2V干扰最大。
18.jpg

小结:
雅特力的workbench是很方便的工具,修改设置,调整频率非常方便。
但是不足还是有的:
1,DMA的地址设置方面还没有能够直接在workbench里选择,而是很奇怪的把触发外设填在外设地址那里。
2,DMA的中断设置居然漏了中断标志开启(没有任何标志选择或设置)。
以上在10楼得到了解释,当然在workbench里面能够选择设置就会更方便,期待以后workbench完善度更高。


经过做项目式的评测,AT32F402/405系列成熟好用,性能强悍,高频率的端口操作也比较顺畅。非常棒!
项目中遇到一些问题耗费一些时间调试,主要是自己考虑不周(焊接水平差),布线不够好,程序不完善,这也是通常的过程。
坚持就会有收获!
项目验证了设计思路,值得继续测试完善。
暂且到此~~

噪声干扰确定是有布线的原因,还有跟随器设计不当,高频自激,绕过跟随器的波形就比较好了,补一张:
19.jpg


使用特权

评论回复
这个效果还真可以

使用特权

评论回复
coody| | 2024-6-1 15:19 | 显示全部楼层
最高采样率多少?

使用特权

评论回复
lcdi|  楼主 | 2024-6-1 17:48 | 显示全部楼层
coody 发表于 2024-6-1 15:19
最高采样率多少?

按adc的指标,是50M~

使用特权

评论回复
lcdi|  楼主 | 2024-6-1 17:58 | 显示全部楼层

嗯嗯,我也觉得可以继续下去,目前只是验证了高速部分,触发和GUI有待完善~

使用特权

评论回复
qintian0303| | 2024-6-1 18:00 | 显示全部楼层
效果挺不错的,其实主要还是屏幕的刷新速率和电压的采集速率影响最大

使用特权

评论回复
trucyw| | 2024-6-1 21:42 | 显示全部楼层
这个采样看着不错

使用特权

评论回复
caigang13| | 2024-6-2 15:32 | 显示全部楼层
这个界面还有很大优化空间啊

使用特权

评论回复
lcdi|  楼主 | 2024-6-2 15:54 | 显示全部楼层
caigang13 发表于 2024-6-2 15:32
这个界面还有很大优化空间啊

对的,GUI还没来得及做~

使用特权

评论回复
tanleitanlei| | 2024-6-3 09:58 | 显示全部楼层
1,DMA的地址设置方面还没有能够直接在workbench里选择,而是很奇怪的把触发外设填在外设地址那里。
对于一般外设而言,使用DMA时外设地址就是对应外设的数据寄存器,例如USART的DT寄存器,IIC/SPI的DT寄存器,所以这里默认就配置了外设地址,当然也可以修改,这是一种灵活的使用方式;在DMA的Memory to memory模式下,地址都是没有默认带入的。

2,DMA的中断设置居然漏了中断标志开启(没有任何标志选择或设置)
不光是DMA,其他外设默认都是没有开启中断标志的,但是对应的初始化函数内有注释,讲如何开启;为什么不默认开启呢??是因为如果开启了,应用中断代码如果没有处理标志的话,可能会一直进中断,卡死程序,所以开启标志、处理标志这部分都交给用户处理。

使用特权

评论回复
lcdi|  楼主 | 2024-6-3 18:49 | 显示全部楼层
tanleitanlei 发表于 2024-6-3 09:58
1,DMA的地址设置方面还没有能够直接在workbench里选择,而是很奇怪的把触发外设填在外设地址那里。
对于一 ...

谢谢解惑,确实如此。
默认归默认。如果能在workbench里面选择那就更方便了。

使用特权

评论回复
chenjun89| | 2024-6-4 08:00 | 显示全部楼层
软件模拟SPI速度和效率更低

使用特权

评论回复
weifeng90| | 2024-6-6 23:07 | 显示全部楼层
还需要被背景刻度线,参数等显示出来。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://www.eeboard.com/avago-shengji?invite_id=5579

33

主题

416

帖子

7

粉丝