[FPGA] MAXIMATOR obsługa ADC

MAXimatora – jak zacząć, sprzęt, oprogramowanie, pierwszy projekt, następne zaawansowane projekty, kursy itp.
Awatar użytkownika
PROTON
Expert
Expert
Posty: 527
Rejestracja: czwartek 08 paź 2015, 18:35
Lokalizacja: Warszawa

[FPGA] MAXIMATOR obsługa ADC

Postautor: PROTON » czwartek 17 mar 2016, 23:14

Obsługa ADC na kanale ANAIN1, czyli tam gdzie jest podłączony potencjometr.
Podczas kręcenia potencjometrem w prawo zapalaną się diody na płytce.

ADC.7z
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Gott weiß ich will kein Engel sein.

Awatar użytkownika
dambo
Expert
Expert
Posty: 645
Rejestracja: czwartek 17 mar 2016, 17:12

Re: [FPGA] MAXIMATOR obsługa ADC

Postautor: dambo » czwartek 17 mar 2016, 23:59

mógłbyś coś więcej o tym napisać? widzę, że jest tu użyty gotowy ip-core do adc-ka, tak samo będzie z innymi "peryferiami" wewnętrznymi w MAX10?
Nowy blog o tematyce embedded -> https://www.embedownik.pl/

Awatar użytkownika
PROTON
Expert
Expert
Posty: 527
Rejestracja: czwartek 08 paź 2015, 18:35
Lokalizacja: Warszawa

Re: [FPGA] MAXIMATOR obsługa ADC

Postautor: PROTON » piątek 18 mar 2016, 09:22

Wersja poprawiona kodu VHDL, okazuje się że nie potrzeba automatu skończonego (FSM) do obsługi ADC.
Wystarczy sprawdzać czy response_valid = '1'

Kod: Zaznacz cały

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;

ENTITY Test_ADC IS

   PORT(
      CLK : IN  STD_LOGIC;
      LED : OUT STD_LOGIC_VECTOR(3 downto 0)
   );

   END Test_ADC;

ARCHITECTURE logic OF Test_ADC IS

   signal reset_reset_n : STD_LOGIC;
   signal command_valid : STD_LOGIC;
   signal command_channel : STD_LOGIC_VECTOR(4 DOWNTO 0);
   signal command_startofpacket : STD_LOGIC;
   signal command_endofpacket : STD_LOGIC;
   signal command_ready : STD_LOGIC;
   signal response_valid : STD_LOGIC;
   signal response_channel : STD_LOGIC_VECTOR(4 DOWNTO 0);
   signal response_data : STD_LOGIC_VECTOR(11 DOWNTO 0);
   signal response_startofpacket : STD_LOGIC;
   signal response_endofpacket : STD_LOGIC;


   component adc_qsys is
      port (
         clk_clk                : in  std_logic                     := 'X';             -- clk
         reset_reset_n          : in  std_logic                     := 'X';             -- reset_n
         command_valid          : in  std_logic                     := 'X';             -- valid
         command_channel        : in  std_logic_vector(4 downto 0)  := (others => 'X'); -- channel
         command_startofpacket  : in  std_logic                     := 'X';             -- startofpacket
         command_endofpacket    : in  std_logic                     := 'X';             -- endofpacket
         command_ready          : out std_logic;                                        -- ready
         response_valid         : out std_logic;                                        -- valid
         response_channel       : out std_logic_vector(4 downto 0);                     -- channel
         response_data          : out std_logic_vector(11 downto 0);                    -- data
         response_startofpacket : out std_logic;                                        -- startofpacket
         response_endofpacket   : out std_logic                                        -- endofpacket
      
      );
   end component adc_qsys;

   begin
   
   u0 : component adc_qsys
      port map (
         clk_clk                => CLK,                --        clk.clk
         reset_reset_n          => reset_reset_n,          --      reset.reset_n
         command_valid          => command_valid,          --    command.valid
         command_channel        => command_channel,        --           .channel
         command_startofpacket  => command_startofpacket,  --           .startofpacket
         command_endofpacket    => command_endofpacket,    --           .endofpacket
         command_ready          => command_ready,          --           .ready
         response_valid         => response_valid,         --   response.valid
         response_channel       => response_channel,       --           .channel
         response_data          => response_data,          --           .data
         response_startofpacket => response_startofpacket, --           .startofpacket
         response_endofpacket   => response_endofpacket   --           .endofpacket
      );
      
      command_channel <= "00000";
      reset_reset_n <= '1';
      command_valid <= '1';
      command_startofpacket <= '1';
      command_ready <= '1';
      
      process(CLK)
      
      begin
      
         if rising_edge(CLK) and response_valid = '1' then
            
            if response_data > 512 then
               LED(0) <= '0';
            else
               LED(0) <= '1';
            end if;
         
            if response_data > 1536 then
               LED(1) <= '0';
            else
               LED(1) <= '1';
            end if;
            
            if response_data > 2560 then
               LED(2) <= '0';
            else
               LED(2) <= '1';
            end if;
            
            if response_data > 3584 then
               LED(3) <= '0';
            else
               LED(3) <= '1';
            end if;
      
         end if;
      
      end process;
END logic;
Gott weiß ich will kein Engel sein.

Awatar użytkownika
PROTON
Expert
Expert
Posty: 527
Rejestracja: czwartek 08 paź 2015, 18:35
Lokalizacja: Warszawa

Re: [FPGA] MAXIMATOR obsługa ADC

Postautor: PROTON » piątek 18 mar 2016, 09:34

dambo pisze:mógłbyś coś więcej o tym napisać? widzę, że jest tu użyty gotowy ip-core do adc-ka, tak samo będzie z innymi "peryferiami" wewnętrznymi w MAX10?

Nie jest to typowy IP-Core, został wygenerowany przy użyciu konfiguratora Qsys ( w menu: Tools->Qsys ), do wszystkich wbudowanych peryferiów używa się tego konfiguratora.
Gott weiß ich will kein Engel sein.


Wróć do „FPGA - MAXimator”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 8 gości