AD9238 + LCD

2024-08-24 15:04
文章标签 lcd ad9238

本文主要是介绍AD9238 + LCD,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摸鱼怪得到了新装备,学着用一下

用的是小梅哥的7010和ad9238(配套的,不用自己画板嘿嘿嘿)

【偷偷吐槽一下:IO好少,想加俩按键都很难写T_T】

ADC模-数转换原理与实现_模数转换器如何实现-CSDN博客

之前用的是EDA扩展版上的adc128s102是8通道12位SPI协议

本次使用的AD9238是双核12位高速ADC,(因为本摸鱼怪需要同时采集两路信号

adc_1024_one.v


module adc_1024_one(input clk ,input key ,output adc_clk_0 ,output adc_clk_1 ,input [11:0]adc_in_0 ,input [11:0]adc_in_1 ,input adc_ovr_0 ,input adc_ovr_1 ,output VGA_CLK ,output VGA_HS , //TFT行同步信号output VGA_VS , //TFT场同步信号output VGA_BLK ,        //VGA 场消隐信号output [23:0] VGA_RGB ,//TFT数据输出output TFT_BL  //背光);assign adc_clk_0 = clk ;assign adc_clk_1 = clk ;wire clk_vga ;       assign TFT_BL = 1'b1 ;reg [23:0]disp_data ;wire [11:0]hcount ;wire [11:0]vcount ;wire Data_Req ;assign VGA_CLK = clk_vga ; wire key_flag , key_state ; reg  key_cnt = 1'b0; reg  key_cnt_now = 1'b0; always@(posedge clk)key_cnt <= key_cnt_now ;always@(posedge clk)if((key_flag)&&(key_state==1))key_cnt_now <= key_cnt_now + 1'b1 ;reg [2:0] clk_10M_cnt = 3'b000 ; //10MHz采样always@(posedge clk)if(!key_cnt_now)clk_10M_cnt <= 3'b000 ;else if(clk_10M_cnt == 3'b100)clk_10M_cnt <= 3'b000 ;else clk_10M_cnt <= clk_10M_cnt + 1'b1 ;reg ram_adc_w = 1'b0 ;always@(posedge clk)if(clk_10M_cnt == 3'b100)ram_adc_w <= 1'b1 ;else ram_adc_w <= 1'b0 ;reg adc_go = 1'b0 ;reg adc_ing = 1'b0 ;reg adc_done = 1'b0 ;reg [9 : 0] ram_adc_addra = 0 ;always@(posedge clk)if( (!key_cnt) && key_cnt_now )adc_go <=  1'b1 ;else  adc_go <=  1'b0 ;      always@(posedge clk)if( adc_go )adc_ing <=  1'b1 ;else if( adc_done ) adc_ing <=  1'b0 ;always@(posedge clk)if( adc_go )ram_adc_addra <= 0 ;else if( adc_ing && (clk_10M_cnt == 3'b011) )ram_adc_addra <= ram_adc_addra + 1'b1 ;else ram_adc_addra <= ram_adc_addra ;always@(posedge clk)if( (ram_adc_addra == 10'd1023) &&  (clk_10M_cnt == 3'b100) && adc_ing)adc_done <=  1'b1 ;else adc_done <=  1'b0 ;   wire [15:0] ram_adc_0_doutb ;wire [15:0] ram_adc_1_doutb ;//定义颜色编码localparam BLACK       = 24'h000000 , //黑色BLUE        = 24'h0000FF , //蓝色YELLOW       = 24'h00FF00 , //绿色WHITE       = 24'hFFFFFF ; //白色              localparam LINE = BLACK ,  //线是黑色BACKGROUND = WHITE ,  //背景白色ADC_0 = BLUE ,ADC_1 = YELLOW ;wire R_all = vcount >= 0 && vcount < 480 ;  wire C_all = hcount >= 0 && hcount < 800 ; wire BR = R_all & C_all;//底色全为白色wire L_mid = vcount == 255 ;//中间黑线wire adc_dot_0 = (vcount == ram_adc_0_doutb[11:3]) && hcount;wire adc_dot_1 = (vcount == ram_adc_1_doutb[11:3]) && hcount; always@(*)case({ BR , L_mid , adc_dot_0 , adc_dot_1 })4'b1000: disp_data = BACKGROUND;4'b1100: disp_data = LINE;4'b1101: disp_data = LINE;4'b1110: disp_data = LINE;4'b1111: disp_data = LINE;4'b1010: disp_data = ADC_0;4'b1001: disp_data = ADC_1;4'b1011: disp_data = ADC_1;endcase             clk_33 clk_33_(.clk_out1(clk_vga),.clk_in1(clk));key_one key_one_(. clk(clk) , . reset_n(1'b1),. key(key),. key_flag(key_flag),. key_state(key_state));      ram_adc_0 ram_adc_0_(.clka(clk) ,.wea(ram_adc_w ? 2'b11 : 2'b00) ,.addra( ram_adc_addra) ,.dina({4'b0000 ,adc_in_0}) ,.clkb(clk_vga) ,.addrb(hcount) ,.doutb(ram_adc_0_doutb));ram_adc_1 ram_adc_1_(.clka(clk) ,.wea(ram_adc_w ? 2'b11 : 2'b00) ,.addra(ram_adc_addra) ,.dina({4'b0000 ,adc_in_1}) ,.clkb(clk_vga) ,.addrb(hcount) ,.doutb(ram_adc_1_doutb));VGA_CTRL VGA_CTRL(.clk(clk_vga),    //系统输入时钟33MHZ.reset_n(1'b1),.data(disp_data),    //待显示数据.data_req(Data_Req),.H_addr(hcount),        //VGA行扫描计数器.V_addr(vcount),        //VGA场扫描计数器.VGA_HS(VGA_HS),        //VGA行同步信号.VGA_VS(VGA_VS),        //VGA场同步信号.VGA_BLK(VGA_BLK) ,     //VGA 场消隐信号.VGA_RGB(VGA_RGB)  //VGA数据输出);               
endmodule

adc.xdc

set_property SEVERITY {Warning} [get_drc_checks NSTD-1]
set_property SEVERITY {Warning} [get_drc_checks RTSTAT-1]
set_property SEVERITY {Warning} [get_drc_checks UCIO-1]set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[15]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[14]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[13]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[12]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[11]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[10]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[9]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[8]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports VGA_BLK]
set_property IOSTANDARD LVCMOS33 [get_ports TFT_BL]
set_property IOSTANDARD LVCMOS33 [get_ports VGA_CLK]
set_property IOSTANDARD LVCMOS33 [get_ports VGA_HS]
set_property IOSTANDARD LVCMOS33 [get_ports VGA_VS]
set_property PACKAGE_PIN W20 [get_ports {VGA_RGB[15]}]
set_property PACKAGE_PIN W19 [get_ports {VGA_RGB[14]}]
set_property PACKAGE_PIN V17 [get_ports {VGA_RGB[13]}]
set_property PACKAGE_PIN V16 [get_ports {VGA_RGB[12]}]
set_property PACKAGE_PIN T15 [get_ports {VGA_RGB[11]}]
set_property PACKAGE_PIN V20 [get_ports {VGA_RGB[10]}]
set_property PACKAGE_PIN U17 [get_ports {VGA_RGB[9]}]
set_property PACKAGE_PIN V18 [get_ports {VGA_RGB[8]}]
set_property PACKAGE_PIN T16 [get_ports {VGA_RGB[7]}]
set_property PACKAGE_PIN R16 [get_ports {VGA_RGB[6]}]
set_property PACKAGE_PIN U19 [get_ports {VGA_RGB[5]}]
set_property PACKAGE_PIN Y19 [get_ports {VGA_RGB[4]}]
set_property PACKAGE_PIN W18 [get_ports {VGA_RGB[3]}]
set_property PACKAGE_PIN Y18 [get_ports {VGA_RGB[2]}]
set_property PACKAGE_PIN W16 [get_ports {VGA_RGB[1]}]
set_property PACKAGE_PIN Y17 [get_ports {VGA_RGB[0]}]
set_property PACKAGE_PIN W14 [get_ports VGA_VS]
set_property PACKAGE_PIN U14 [get_ports VGA_HS]
set_property PACKAGE_PIN U15 [get_ports VGA_CLK]
set_property PACKAGE_PIN R17 [get_ports TFT_BL]
set_property PACKAGE_PIN U18 [get_ports clk]
set_property PACKAGE_PIN W15 [get_ports VGA_BLK]set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_0[11]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_0[10]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_0[9]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_0[8]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_0[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_0[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_0[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_0[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_0[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_0[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_0[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_0[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_1[11]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_1[10]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_1[9]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_1[8]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_1[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_1[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_1[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_1[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_1[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_1[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_1[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_in_1[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports adc_clk_0]
set_property IOSTANDARD LVCMOS33 [get_ports adc_clk_1]
set_property IOSTANDARD LVCMOS33 [get_ports adc_ovr_0]
set_property IOSTANDARD LVCMOS33 [get_ports adc_ovr_1]
set_property IOSTANDARD LVCMOS33 [get_ports key]set_property PACKAGE_PIN K14 [get_ports adc_clk_0]
set_property PACKAGE_PIN K16 [get_ports adc_clk_1]
set_property PACKAGE_PIN J16 [get_ports adc_ovr_1]
set_property PACKAGE_PIN L15 [get_ports {adc_in_0[0]}]
set_property PACKAGE_PIN G14 [get_ports {adc_in_0[1]}]
set_property PACKAGE_PIN J14 [get_ports {adc_in_0[2]}]
set_property PACKAGE_PIN F16 [get_ports {adc_in_0[3]}]
set_property PACKAGE_PIN D18 [get_ports {adc_in_0[5]}]
set_property PACKAGE_PIN D19 [get_ports {adc_in_0[7]}]
set_property PACKAGE_PIN F17 [get_ports {adc_in_0[9]}]
set_property PACKAGE_PIN G17 [get_ports {adc_in_0[11]}]
set_property PACKAGE_PIN H15 [get_ports {adc_in_0[4]}]
set_property PACKAGE_PIN E17 [get_ports {adc_in_0[6]}]
set_property PACKAGE_PIN E18 [get_ports {adc_in_0[8]}]
set_property PACKAGE_PIN D20 [get_ports {adc_in_0[10]}]
set_property PACKAGE_PIN E19 [get_ports adc_ovr_0]
set_property PACKAGE_PIN G19 [get_ports {adc_in_1[1]}]
set_property PACKAGE_PIN G18 [get_ports {adc_in_1[3]}]
set_property PACKAGE_PIN H16 [get_ports {adc_in_1[5]}]
set_property PACKAGE_PIN J19 [get_ports {adc_in_1[7]}]
set_property PACKAGE_PIN K19 [get_ports {adc_in_1[9]}]
set_property PACKAGE_PIN H17 [get_ports {adc_in_1[11]}]
set_property PACKAGE_PIN G20 [get_ports {adc_in_1[0]}]
set_property PACKAGE_PIN H20 [get_ports {adc_in_1[2]}]
set_property PACKAGE_PIN J20 [get_ports {adc_in_1[4]}]
set_property PACKAGE_PIN H18 [get_ports {adc_in_1[6]}]
set_property PACKAGE_PIN J18 [get_ports {adc_in_1[8]}]
set_property PACKAGE_PIN K18 [get_ports {adc_in_1[10]}]
set_property PACKAGE_PIN F20 [get_ports key]

测试结果

10MHz采样,被测信号100kHz
测的1MHz信号显示前800看起来是一堆点,后面显示大概十个周期,去学习一下划线算法

//摸鱼怪貌似停更了好久,我爱摸鱼(◞‸◟ )

这篇关于AD9238 + LCD的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102816

相关文章

LCD彩条显示——FPGA学习笔记10

部分素材来自原子哥 一、LCD简介         基本原理:在两块平行玻璃板中填充液晶材料,通过电场控制液晶分子旋转从而达到透光和遮光的目的。

【蓝桥杯嵌入式(二)Led、Key、Lcd】

蓝桥杯嵌入式(二)Led、Key、Lcd 五、Led模块1.原理图配置2. 知识点3.底层代码 六、Key模块1.原理图配置2.知识点3.底层代码底层代码(四⾏代码版本)底层代码(状态机版本) 七、LCD模块1.原理图配置2.知识点底层代码 五、Led模块 1.原理图配置 2. 知识点 链接: 上拉电阻的通俗解释 链接: 单⽚机怎么输出⾼电平!推挽输出和开

解决OpenMV非官方LCD显示

以下代码可以解决花屏,就是屏幕被分割的情况,但是并不能够解决完全能解决,屏幕起码能看,额,最好的方式就是改变驱动。之后再说。感谢一位友的分享。 # SPI 控制## 这个例子展示了,如何使用OpenMV的SPI总线# LCD 扩展板没有使用内置的lcd驱动。而是使用了SPI。# 需要插入LCD扩展板来运行这个例子import sensor, image, timefrom pyb i

stm32 8080时序驱动lcd屏幕

PSAM使用的硬件接口 PSAM读时序 PSAM写时序 相关时序 PSAM_RCRx NOR 和PSRAM控制寄存器

市占率最高的显示器件,TFT_LCD的驱动系统设计--Part 1

目录 一、简介 二、TFT-LCD驱动系统概述 (一)系统概述 (二)设计要点 二、扫描驱动电路设计 (一)概述 扫描驱动电路的功能 扫描驱动电路的组成部分 设计挑战 驱动模式 (二)移位暂存器电路  (三)电位转移器 电位转移器的工作原理 实现方式 (四)数位缓冲放大器 数位缓冲放大器的作用 设计步骤 设计要点 一、简介         前序文章,

LCD显示问题-lcd中像素深度bpp和像素格式(比如RGB,YUV)的关系

lcd中像素深度bpp和像素格式(比如RGB,YUV)的关系 像素深度(bits per pixel,简称bpp) 一个像素的颜色在计算机中由多少个字节数据来描述。计算机中用二进制位来表示一个像素的数据,用来表示一个像素的数据位越多,则这个像素的颜色值更加丰富、分的更细,颜色深度就更深。 一般来说像素深度有这么几种:1位、8位、16位、24位、32位。 像素格式(pixel format

CS1621L贴片LCD 驱动控制芯片

CS1621L主要应用:饭煲,电表,电话机,对讲机,U盾。 CS1621L是一种128点阵式存储映射多功能LCD驱动电路。CS1621的S/W结构特点,使它适合点阵式LCD显示,包括LCD模块和显示子系统,CS1621还具有节电功能。 CS1621L其主要特点如下: 工作电压:2.4V~5.5V, 内部 256KHz RC 振荡器, 外部 32KHz 晶振或 256KHz 频率输入, 可选

调试一个新LCD

CIVIA LCD调试指南 一、改动板级文件LCD配置 Uboot: /bootable/bootloader/uboot-imx/board/freescale/mx53_ard/mx53_ard.c Kernel: /kernel_imx/arch/arm/mach-mx5/mx53_ard.c 改动内容: static struct fb_videomodevideo_

调试LCD及Touchscreen硬件错误

今天客户提了一个产品的升级的设想,并带来了一个新的10寸 LCD 及 Touchscrenn需要更换。 由于LCD挂在I2C上的地址,及中断线的IO都未变,所以可以直接在板级文件中,设置新LCD参数: arch/arm/mach-mx5/mx53_ard.c   board/freescale/mx53_ard/mx53_ard.c 数据位于fb_videom

基于imx6ull平台opencv的图像采集和显示屏LCD显示功能(不带Qt界面)

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境 三、开发流程3.1 编写测试3.2 验证功能 一、概述 本文档是针对imx6ull平台opencv的图像采集和显示屏LCD显示功能,opencv通过摄像头采集视频图像,将采集的视频图像送给显示屏LCD进行显示。 测试结果如下图所示: 二、环境要求 2.1 硬件环境 硬件:正点原子-I.MX6U ALPHA开