VHDL код управления АЦП AD7266
Управление многоканальным АЦП типа AD7266 посредством ПЛИС имеет некоторые нюансы, которые новичку с наскоку не преодолеть. В данном посте представлен VHDL код управления AD7266 который поможет справиться с этим популярным АЦП. Микросхема выгодна по многим пунктам. Главный из них это многоканальность позволяющая оцифровывать сигнал аж по 12 каналам и по 6 каналам если разбить входы по дифференциальным парам. Такой АЦП идеален для построения различных многоканальных систем, например многоканальных цифровых фильтров, БПФ и др.
Итак согласно документации управление AD7266 - это стандартные сигналы типа SCLK и CS с помощью которых можно дать старт преобразования и по прошествию 13 или 14 тактовых сигналов получить результат. Не будем вдаваться в подробности настройки АЦП внешними управляющими сигналами для работы в различных режимах. Это достаточно подробно описано даташите на микросхему. Остановимся только на VHDL коде для ПЛИС позволяющем стартовать преобразование и получить его результат.
--------------------------------------------------------------------
-- Project : Модуль SPI AD7266
-- Author : Acvarif
-- Date : 20/02/12
-- File : spiad7266.vhd
--------------------------------------------------------------------
-- Description : Модуль управления АЦП AD7266
--------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity spiad7266 is
generic
(
-- общая размерность SPI порта
DATA_WIDTH : natural := 14
);
port
(
-- тактовая частота SPI
spi_sclk : in std_logic;
-- глобальный сброс
spi_clr : in std_logic;
-- CS SPI
spi_cs : in std_logic;
-- вход SPI
spi_input : in std_logic;
-- выходные данные
data_out : out std_logic_vector (DATA_WIDTH - 3 downto 0)
);
end spiad7266;
architecture behavioural of spiad7266 is
signal s_cnt : std_logic_vector (3 downto 0);
signal s_spi_data : std_logic_vector (0 to DATA_WIDTH - 1);
begin
-- SPI процесс
process(spi_clr, spi_sclk, s_spi_data)
begin
if spi_clr = '0' then
s_cnt <= (others => '0');
s_spi_data <= (others => '0');
data_out <= (others => '0');
elsif spi_sclk'event and spi_sclk = '1' then
if spi_cs = '1' then
s_cnt <= (others => '0');
s_spi_data <= (others => '0');
elsif spi_cs = '0' then
s_cnt <= s_cnt + 1;
if s_cnt > 0 then
s_spi_data(0 to DATA_WIDTH - 1) <= s_spi_data (1 to DATA_WIDTH - 1) & spi_input;
end if;
-- фиксация информации
if s_cnt = 13 then
data_out <= s_spi_data(2 to 13);
end if;
end if;
end if;
end process;
end behavioural;
Между двумя импульсами spi_sc необходимо обеспечить не менее 14 отрицательных фронтов тактовых импульсов spi_clk, причем так, чтобы отрицательный фронт spi_cs не совпадал с отрицательным фронтом spi_clk, что, согласно документации на АЦП, обеспечит только один первый неучитываемый нулевой бит результата. Это должен выполняет внешний модуль формирования тактовых импульсов. На нем пока не будем останавливаться. Будем считать, что это все уже имеется. Далее все выполняется за 13 тактов с получением результата в регистре data_out. Для подсчета тактов используется счетчик, который обнуляется по приходу положительного импулься spi_cs.
Нюанс состоит в том, что если сформировать импульс spi_cs так, что он будет совпадать своим отрицательным фронтом с отрицательным фронтом импульса spi_clk, то результат преобразования можно будет получить только через 14 тактов spi_clk, поскольку вначале будет не один неучитываемый нулевой бит результата, а два.
Электроника :
- Техника электроника (11)
- Полезная электроника (4)
- Электроника для всех (5)
- Техника для дома (6)
- Cхемотехника ПЛИС (11)
- Пректирование PCAD (4)
Программирование :
- Микроконтроллеры (9)
- ПЛИС VHDL Verilog (29)
- C++ Builder (7)
- Visual Studio C++ C# (7)
- Java programming (7)
- Matlab programming (4)
Сайтостроение :
- Сайтостроение HTML (5)
- Сайтостроение PHP (8)
- PHP CMS на файлах (3)
- Web инструменты (9)
- Полезное вебмастеру (11)
- SEO раскрутка сайта (4)
- PHP скрипты (3)
Реклама :
Книги и учебники :
- Шаблоны сайтов (6)
- Книги и учебники (2)
Компьютер и интернет :
Поиск по сайту :
Реклама :
Облако меток :
Бесплатная подписка :
Статистика :
- Популярность (3)
- Посещаемость (3)
- Поисковые запросы (3)