verilog实验3:AD转换后串口输出到PC端

一、实验任务

通过tcl549AD转换芯片将模拟电压信号转换为数字信号,并通过串口显示到电脑上。此AD转换芯片为串行转换芯片,且转换速率要和串口选择的速率匹配。等待串口发送完后,再进行下一次AD转换。就实际应用而言,此转换速率有点低。

二、代码开发

根据AD芯片的芯片手册编写程序。以下为顶层程序。

//将实时转换的数字结果通过串口传输到PC上
module adc_top
    (
        clk,
        rst,
        ad_cs_out,//--TLC549片选信号
        ad_clk_out,//--TLC549时钟信号
        ad_data_in,//--TLC549数字的输入
        txd_out   //--串口输出
    );

input clk,rst,ad_data_in;
output ad_cs_out,ad_clk_out,txd_out;

reg ad_cs_out,ad_clk_out;
wire clk_100k,txd_out;
reg [4:0] cnt;
reg [7:0] addata;

wire TxClk,TxFinish;
reg XmitPlus;

//416分频的,产生115200的时钟
defparam Gen_RxClk.divdFACTOR=208,Gen_RxClk.divdWIDTH=7;//分频时钟
gen_divd Gen_RxClk(.reset(rst),.clkin(clk),.clkout(TxClk));//端口名称关联

//480分频的,产生100k的时钟
defparam Gen_100k.divdFACTOR=240,Gen_100k.divdWIDTH=7;//分频时钟
gen_divd Gen_100k(.reset(rst),.clkin(clk),.clkout(clk_100k));//端口名称关联

//串口发送
uart_t UartTx(.Bclk(TxClk),.Resett(rst),.Txd(txd_out),
                .XmitCmdp(XmitPlus),.TxdBuf(addata),.TxDone(TxFinish));

always @(posedge clk_100k or negedge rst)
begin
    if(!rst)
        begin
            cnt<=5‘d0;
            ad_cs_out<=1‘b1;
            ad_clk_out<=1‘b0;
            XmitPlus<=1‘b0;
        end
    else
        begin
            cnt<=cnt+1‘b1;
            case(cnt)
                0:begin ad_cs_out<=1‘b0;ad_clk_out<=1‘b0;end
                1:begin ad_clk_out<=1‘b1;end
                2:begin addata[7]<=ad_data_in;ad_clk_out<=1‘b0;end
                3:begin ad_clk_out<=1‘b1;end
                4:begin addata[6]<=ad_data_in;ad_clk_out<=1‘b0;end

                5:begin ad_clk_out<=1‘b1;end
                6:begin addata[5]<=ad_data_in;ad_clk_out<=1‘b0;end
                7:begin ad_clk_out<=1‘b1;end
                8:begin addata[4]<=ad_data_in;ad_clk_out<=1‘b0;end

                9:begin ad_clk_out<=1‘b1;end
                10:begin addata[3]<=ad_data_in;ad_clk_out<=1‘b0;end
                11:begin ad_clk_out<=1‘b1;end
                12:begin addata[2]<=ad_data_in;ad_clk_out<=1‘b0;end

                13:begin ad_clk_out<=1‘b1;end
                14:begin addata[1]<=ad_data_in;ad_clk_out<=1‘b0;end
                15:begin ad_clk_out<=1‘b1;end
                16:begin addata[0]<=ad_data_in;ad_clk_out<=1‘b0;end

                17:begin ad_cs_out<=1‘b1;end//--拉高CS,等待ADC内部转换,时间<=17us
                //18:;
                //19:;
                //20:;
                21:begin XmitPlus<=1‘b1; end
                //22:;
                29:begin XmitPlus<=1‘b0;end
                30:
                    begin
                        if(TxFinish==1‘b1)//等待发送完成
                            cnt<=5‘d31;//发送完成,再按一次复位键,重新一次转换发送
                        else
                            cnt<=5‘d30;
                    end

                default:;
            endcase
        end
end
endmodule

三、感悟

通过改变开发板上的可变电阻来改变串口调试助手的显示数字,其实速率真的是很低。毕竟串口就是一个很慢的转换,115200。而AD也只分频100k。楼主正在做一个40M的AD还是并行的,不知道能不能测试成功,希望能够赶紧把这个项目结束。

原文地址:https://www.cnblogs.com/amberwang2018/p/8443473.html

时间: 2024-08-26 02:38:25

verilog实验3:AD转换后串口输出到PC端的相关文章

s5pv210 AD转换

1:ADC:Analog-to-Digital Converter,模拟信号转数字信号,自然界一般为模拟信号,而SoC需要数字信号,所以之间通信需要ADC. 2:转换原理: 以逐次逼近式AD转换为例: 这里以8位为例,而S5pv210SoC是可选10bit.12bit: (1) 首先发出"启动信号"信号S.当S由高变低时,"逐次逼近寄存器SAR"清0,DAC输出Vo=0,"比较器"输出1.当S变为高电平时, "控制电路"使SA

java语言将任意一个十进制数数字转换为二进制形式,并输出转换后的结果

1 package com.llh.demo; 2 3 import java.util.Scanner; 4 5 /** 6 * 7 * @author llh 8 * 9 */ 10 public class Test { 11 /* 12 * 将任意一个十进制数数字转换为二进制形式,并输出转换后的结果(使用数组存储) 13 */ 14 public static void main(String[] args) { 15 Scanner sc = new Scanner(System.in

输入人民币/美元后自动判断,输出转换后相对应的值

1 ''' 2 作者:pasaulis 3 版本:v2.0 4 日期:2018.11.7 5 功能:输入人民币/美元后自动判断,输出转换后相对应的值 6 ''' 7 in_str_value=input('请输入人民币/美元金额(格式示例:100rmb/100usd)') 8 9 usd_vs_value=6.91 10 rmb_value='' 11 usd_value='' 12 if in_str_value[-3:]=='rmb': 13 rmb_value=eval(in_str_va

STM32F10X入门指南---AD转换

首先,点击下面的链接下载我们需要使用的代码.链接 1.添加必要的文件: 之前我们说过,有三个文件是必须添加的,这三个文件分别是:startup_stm32f10x_xd.s ,stm32f10x_rcc.c ,system_stm32f10x.c.其中,前面的xd是根据你的芯片的容量来选择的.这三个文件都可以在千帆提供的代码中找到.文件路径:Core.rar\Core\STM32\Source\Must . 另外,如果想操作IO口,必须添加千帆的一个库文件DeviceBase.cpp.文件路径:

(七)ADC0809 模数转换的学习 AD转换

ADC0808 引脚功能各引脚功能如下: 1-5和26-28(IN0-IN7):8路模拟量输入端 8.14.15和17-21:8位数字量输出端 22(ALE):地址锁存允许信号,输入,高电平有效. 6(START): A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换). 7(EOC): A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平). 9(OE):数据输出允许信号,输入,高电平有效.  

msp430单片机AD转换

msp430单片机AD转换 2010-08-01 20:14:05|  分类: msp430单片机|举报|字号 订阅 一.简单介绍: ADC12模块中是由以下部分组成:输入的16路模拟开关(外部8路,内部4路),ADC内部电压参考源,ADC12内核,ADC时钟源部分,采集与保持/触发源部分,ADC数据输出部分,ADC控制寄存器等组成. 四种采样模式: (1)单通道单次转换模式 (2)序列通道单词转换模式 (3)单通道多次转换模式 (4)序列通道多次转换模式 个人觉得(3)模式应该是使用较多的,

低成本,小体积模拟信号采集,隔离转换RS-485/232输出

为了满足广大客户的要求,我公司特推出一款IBF20系列小体积模块化设计两路4-20mA/0-5V信号转RS-485/232,MODBUS数据采集模块.IBF20产品实现传感器和主机之间的信号采集,用来检测模拟信号.IBF20系列产品可应用在 RS-232/485总线工业自动化控制系统,4-20mA / 0-5V信号测量.监测和控制,以及工业现场信号隔离及长线传输等等. 产品包括电源隔离,信号隔离.线性化,A/D转换和RS-485串行通信.每个串口最多可接255只 IBF20系列模块,通讯方式默认

温故《单片机基础》之——AD转换

重新翻开这本书,还是有收获的,这里记录点ADC的知识点,虽然书上有些知识点跟不上时代的发展,但是基本上,还算比较系统的,也不是很过时,零几年的技术,数字电路的基本原理是没变过.这里结合自己的项目实际和书上的知识点整理一下. 1.ADC的采样过程,这个四步骤基本上,没变过,采样.保持.量化.编码,而且在∑△还有一个数字滤波器的. 2.在采样的前端,通常需要有传感器.放大器,传感器有温度传感器.光电传感器.湿度传感器.流量传感器.压力传感器.机械量传感器pH传感器等,目前我接触过温度传感器.光电传感

如何设置ubuntu系统的串口输出(五)及下一步计划

终于将/boot/grub/grub.cfg精简为自己想要的内容: [email protected]:~$ cat /boot/grub/grub.cfg set timeout=5 linux   /boot/vmlinuz-3.16.0-23-generic root=/dev/sda1 ro  text console=tty0 console=ttyS0,115200n8 initrd  /boot/initrd.img-3.16.0-23-generic boot 这样,系统可以在g