SPARTAN3 Y ADC0804

Hola amigos,

estoy intentando controlar un conversor adc 0804 al que he conectado un electret ,con la spartan3 pero debe de haber algun problema por que no me funciona bien.... No recibo la señal INTR procendente del adc. La spartan la programo con el System generator de Simulink. Alguien ha intentado algo similar? ... necesitaria conectar un microfono a la spartan y digitalizar la señal recibida....

Muchas gracias, Un saludo!
 
tienes el Codigo con el cual manejas el ADC? yo tambien tengo la spartan 3 pero tengo para programar el ise foundation. pero en una de esas te puedo ayudar
 
Hola,

muchas gracias!, uno de los codigos vhdl que probe para el control del adc0804 es el que te paso a continuacion. No se si es problema del propio codigo... o del plugin que tuve que crear para usar los puedos i/o de la spartan3... ¿?

----------------------------------------------------------------------------------
-- Sistema control para conversor AD
-- Maquina de estados
-------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL; -- Antes: use IEEE.STD_LOGIC_UNSIGNED.ALL;

library UNISIM;
use UNISIM.VComponents.all;

entity Control_AD_0804 is
port (
clk,ce: IN STD_LOGIC;
RESET: IN STD_LOGIC;

N_CS,N_RD,N_WR: OUT STD_LOGIC; -- Señales desde SPARTAN -> AD0804
N_INTR: IN STD_LOGIC; -- Señal desde AD0804 -> SPARTAN

DATA_IN: IN STD_LOGIC_VECTOR(7 downto 0) ; -- Datos procedentes del conversor A/D
DATA_OUT: OUT STD_LOGIC_VECTOR(7 downto 0) -- Datos salida hacia sistema ANC
--CONT_OUT: OUT STD_LOGIC_VECTOR(9 downto 0)
);
end Control_AD_0804;

architecture Behavioral of Control_AD_0804 is
-- Codificacion de la maquina de estados
type ESTADO_type is (Estado0, Estado1, Estado2, Estado3, Estado4, Estado5, Estado6); -- Declaracion de tipo ESTADO
signal ESTADO:ESTADO_type;
signal CONT:STD_LOGIC_VECTOR(9 downto 0); -- Para contaje de temporizacion (7 bits: 0-127)

begin

ESTADO_machineROCESS (clk,ce,RESET)
begin

if (ce='1') then
if (RESET='0') then
if (clk'event and clk='1') then

CASE ESTADO IS

WHEN Estado0 => -- Inicializacion de variables

N_CS <= '1'; -- Selecciono el conversor
N_WR <= '1';
N_RD <= '1';

ESTADO <= Estado1; -- Cambio de estado


WHEN Estado1 =>

CONT <= "0000000000";
N_CS <= '0';

ESTADO <= Estado2;


WHEN Estado2 => -- Doy ORDEN CONVERSION A/D

N_WR <= '0'; -- TW (100ns min => CONT>=5)
--CONT_OUT <= CONT;

if (CONT<6) then -- Espero 6 periodos (=> 120ns) antes de cambiar de estado
CONT<=CONT +'1';
end if;
if (CONT<6) then ESTADO <= Estado2;
else ESTADO <= Estado3;
end if;


WHEN Estado3 => -- Espero a que acabe la conversion (=> N_INTR=0)

N_WR <= '1';
CONT <= "0000000000";

if N_INTR='0' then
ESTADO <= Estado4;
else ESTADO <= Estado3;
end if;


WHEN Estado4 => -- Doy ORDEN LECTURA de DATO

N_RD <= '0'; -- Tacc (200ns max)
--CONT_OUT <= CONT;

if (CONT<10) then -- Espero 10 periodos (=> 200ns) antes de cambiar de estado
CONT<=CONT +'1';
end if;
if (CONT<10) then ESTADO <= Estado4;
else ESTADO <= Estado5;
end if;


WHEN Estado5 =>

DATA_OUT <= DATA_IN; -- Paso datos del conversor a sistema ANC

ESTADO <= ESTADO6;


WHEN Estado6 =>

if N_INTR='1' then -- Pongo N_RD=1 solo despues de que N_INTR vuelva a 1
N_RD <= '1';
ESTADO <= Estado1;
else ESTADO <= Estado6;
end if;


WHEN OTHERS =>
ESTADO <= Estado0;

end case;

end if;
elsif RESET='1' then N_CS<='1';
N_WR <= '1';
N_RD <= '1';
DATA_OUT <= "00000000";
end if;
else N_CS<='1';
N_WR <= '1';
N_RD <= '1';
DATA_OUT <= "00000000";
end if;

end process; -- Fin ESTADO_machine

end Behavioral;
 
viendo tu codigo me parece que esta bien.

Considero que debieras hacer que encienda un led segun cambie de estado para verificar que haga todos.

Tambien considera que el ADC utiliza señales de 5V asi que el Fpga debera entregarle este voltaje en vez de los 3.3V.

como sea reviso mas a fondo tu codigo y reviso la hoja de datos del adc.

Por otro lado te comento que yo tambien quiero usar un ADC para elaborar un pequeño osciloscopio que se vea en una pantalla VGA y agregarla a un frecuencimetro de 8 digitos que ya hice y lo muestro en pantalla VGA.

YouTube - Frecuencimetro de 8 digitos en Spartan 3
 
Hola,

muchas gracias por tus comentarios, volvere a echar un ojo par comprobar que efectivamente se pasa por todos los estados, y muy interesante esa idea de usar el adc para hacer el osciloscopio.

Un saludo desde Galicia!

Pablo
 
Atrás
Arriba