搜索
bottom↓
回复: 4

ADS7825的控制

[复制链接]

出0入0汤圆

发表于 2011-4-30 22:34:10 | 显示全部楼层 |阅读模式
有没有人用FPGA控制ADS7825完成AD转换(然后写入外部FIFO存储器)的经历,可否留下联系方式,QQ或电话,诚心交流和请教,谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2011-5-1 11:30:40 | 显示全部楼层
下面是VHDL的源码,可以帮我看一下吗,不是很长:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;

entity ad is
       
    GENERIC
    (
      STARTAD0: INTEGER:=1;
      RC0 :     INTEGER:=2;
      RC1 :     INTEGER:=3;
      STARTAD1: INTEGER:=4;
      RC2 :     INTEGER:=5;
      RC3 :     INTEGER:=6;
      STARTAD2: INTEGER:=7;
      
      
      STATE2: integer:= 8;
      STATE8: INTEGER:=9;
      READ0:  INTEGER:=10;
      READ1:  INTEGER:=11;
      
      STATE5: INTEGER:=12;
      READ2: integer:=13;
      READ3: INTEGER:=14;
      
      IDLE: integer:=0
      );
      
           port
        (
                -- Input ports
                clk        : in  std_logic ;--系统外部有源晶振时钟,50MHZ
               
                ad_busy_n        : in  std_logic ;--ADS7825 转换忙状态,_n表示低电平有效,下面的均是此含义
                datain :  in std_logic_vector(7 DOWNTO 0);--ADS7825的数据输出端,即FPGA数据输入端
               
                               
                -- Output ports
                ad_r_c_n        : out std_logic;--ADS7825 read/convert
                ad_byte        : out std_logic;--ADS7825 转换输出数据的高低位选择,低电平对应高8位,高电平对应低8位                         ad_addr        : out std_logic_vector(1 downto 0);--ADS7825 地址               
                dataout : out std_logic_vector(7 downto 0)--这里,把读出的AD数据通过datain->data_r寄存器->dataout(连接的是LED灯显示)
                               
                );
end zong;

-- Library Clause(s) (optional)
-- Use Clause(s) (optional)

architecture arc_zong of zong is

SIGNAL ad_addr_r: STD_LOGIC_VECTOR(1 downto 0):="00";
SIGNAL data_r1,data_r2 : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL cstate: integer;
SIGNAL ad_r_c_n_r,ad_byte_r: STD_LOGIC;--_r代表寄存器,临时信号
SIGNAL read_0,read_1,rc_0,rc_1: integer;--定时计数的参数,


       
begin
         
     PROCESS(clk,cstate,datain,data_r1,data_r2)
        
      
          BEGIN
           
           IF (clk'EVENT AND clk='1') THEN
                  
                  CASE cstate IS
                    
                    WHEN IDLE=>cstate<=STARTAD0;

                    WHEN STARTAD0=>ad_r_c_n_r<='1';
                                   rc_0<=0;
                                  cstate<=RC0;
                    WHEN RC0=>    rc_0<=rc_0+1;
                                  cstate<=RC1;
                    WHEN RC1=>  IF(rc_0=1) THEN
                                   cstate<=STARTAD1;
                                 ELSE cstate<=RC0;
                                END IF;
                    WHEN  STARTAD1=>ad_r_c_n_r<='0';
                                    rc_1<=0;
                                    cstate<=RC2;
                    WHEN  RC2=>  rc_1<=rc_1+1;
                                 cstate<=RC3;
                    WHEN  RC3=>  IF(rc_1=50) THEN
                                   cstate<=STARTAD2;
                                 ELSE cstate<=RC2;
                                END IF;
                    
                    WHEN  STARTAD2=>ad_r_c_n_r<='1';
                                    cstate<=STATE2;--以上几个状态完成了ad_c_r_n位的负脉冲启动AD转换,时间为50个计数,就是1us左右
                              
                    WHEN STATE2=> IF( ad_busy_n='1' ) THEN
                                     cstate<=STATE8;
                                   ELSE cstate<=STATE2;  
                                      
                                   END IF;--等待转换完毕
                                 
                    
                    WHEN STATE8=>  ad_r_c_n_r<='1';
                                   ad_byte_r<='0';
                                   read_0<=0;
                                   cstate<=READ0;
                       
                                   
                     WHEN READ0=>  data_r1<=datain;
                                   read_0<=read_0+1;
                                   cstate<=READ1;
                     WHEN READ1=> IF(read_0=200) THEN
                                     cstate<=STATE5;
                                  ELSE cstate<=READ0;
                                  END IF;                       --读取高8位数据,放入data_r1寄存器
                                 
                    
                     WHEN STATE5=> ad_byte_r<='1';
                                    read_1<=0;
                                    cstate<=READ2;
                                    
                      WHEN READ2=> data_r2<=datain;
                                   read_1<=read_1+1;
                                   cstate<=READ3;
                      WHEN READ3=> IF(read_1=200) THEN
                                     cstate<=STARTAD0;
                                   ELSE cstate<=READ2;
                                   END IF;                  --读取低8位,放入data_r2寄存器                 
                                            
                                                                                            
                                                  
                       WHEN others=>cstate<=IDLE;
                                   
                  END CASE;
                  
            END IF;   
         END PROCESS;
  
  



ad_addr<="01";--一直转换通道1
ad_r_c_n<=ad_r_c_n_r;
ad_byte<=ad_byte_r;

  dataout<=data_r1;--LED显示高8位,因为为了简单看一下是否能转换,通道1接的就是一个直流电平,所以两次转换之间没有额外延时,给LED充分的显示时间,如果数据不是直流信号,当然得给每次显示延时到人眼能识别

end arc_zong;

现在的问题是,我感觉AD芯片根本就没启动,我把输出数据一直为00000000(低8位,高8位没看)。不知道是为什么。

出0入0汤圆

 楼主| 发表于 2011-5-1 19:33:37 | 显示全部楼层
会不会是因为FPGA为3.3V的I/O逻辑电平,而ADS7825为5V逻辑电平芯片,会不会不匹配,常用的3.3V精度精度和速度要求均相对较高的AD芯片可否推荐几款?

出0入0汤圆

 楼主| 发表于 2011-5-2 22:59:14 | 显示全部楼层
有没有人用过这个芯片啊……真的需要求助。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 15:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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