Fórum témák

» Több friss téma
Cikkek » Egyszerű PIC-es, digitális oszcilloszkóp folytatás
Egyszerű PIC-es, digitális oszcilloszkóp folytatás
Szerző: bbatka, idő: Márc 18, 2022, Olvasva: 7553, Oldal olvasási idő: kb. 2 perc
Lapozás: OK   5 / 8

Ez a panel tartalmazza a számlálót. Az áramkör lelke az XC9572 CPLD. A segéd oszcillátor egy 50 MHz-es modul, annak idején a ChipCAD-tól vettem. 3,3 V-os jelet ad, de ennek ellenére jól illeszkedik az 5 V-os XC9572-hőz. A panelen még található egy analóg stabilizátor, amely 5 V-ból 3,3 V-ot állít elő.

A VHDL forrás a 72 makrócellának csak felét használja, így érdemes lehet kísérletezni az XC9536XL CPLD-vel, a RET-nél kapható. Kár, hogy nagyobb CPLD-ket nem árulnak. Ha már az áruházban vásárolunk akkor érdemes TLC5510i-t is venni. SRAM-jaik is vannak, igaz nagyobb méretben, de ez a számláló lehetőséget ad arra, hogy 64 kB-ig címezzük a SRAM-ot. A számláló módosítható akár nagyobb méretű SRAM-hoz is, de ekkor már XC9572-re lesz szükség. Az XC9536XL 3,3 V-os, ezért busz drivert kell használni hozzá az 5 V környezetben. Én a 74LVX3245QSC-t fogom erre a célra használni. Még nincs tapasztalatom vele.

CPLD modul kapcsolási rajza:

cpld_570.png

Kattints a képre a nagyobb méretért!

 

Kép a panelről:

cpld_felul_kiskep_570.jpg

Kattints a képre a nagyobb méretért!

cpld_alul_kiskep_570.jpg

Kattints a képre a nagyobb méretért!

Most pedig következzen a VHDL forrás:

  1. ----------------------------------------------------------------------------------
  2. -- Developer:bbatka (Kiss Attila) verzió:2022-01-02
  3. --
  4. -- Create Date:    20:41:19 10/25/2008
  5. -- Design Name:
  6. -- Module Name:    villi - Behavioral
  7. -- Project Name:
  8. -- Target Devices:
  9. -- Tool versions:
  10. -- Description:
  11. --
  12. -- Dependencies:
  13. --
  14. -- Revision:2022-01-02
  15. -- Revision:
  16. -- Additional Comments: High 'Z' (DACLK, MCLK, CS1, LED) When GTS1=0 mód:2022-01-02
  17. --
  18. ----------------------------------------------------------------------------------
  19. Library ieee;
  20. Use ieee.std_logic_1164.ALL;
  21. Use ieee.STD_LOGIC_ARITH.ALL;
  22. Use ieee.std_logic_unsigned.ALL;
  23.  
  24. Entity k1 is
  25.  port( LED: out std_logic_vector(15 downto 0);--SRAM címzés
  26.       CLK: in std_logic;
  27.         SCLK: inout std_logic;--Segéd órajel
  28.         SCLKI: inout std_logic;--Inverz Segéd órajel        
  29.         GTS1: in std_logic;--Engedélyező láb
  30.         DACLK: inout std_logic;--ADC órajele
  31.         ClkSel: in std_logic_vector(3 downto 0);
  32.         --CS1: out std_logic;--SRAM Chip Select, nincs kivezetve, dsPIC kezeli, P1 pin ill. P40
  33.         --LED_ZOLD: out std_logic;
  34.         MCLK: inout std_logic);--Másodlagos órajel,SRAM WE jel, nincs kivezetve, dsPIC kezeli, P27 pin ill. P35
  35. end;
  36.  
  37. Architecture rtl of k1 is
  38. signal count: std_logic_vector(16 downto 0):="00000000000000000";
  39. signal count2: std_logic_vector(0 downto 0):="0";
  40. signal count3: std_logic_vector(0 downto 0):="0";
  41. signal ADC_div: std_logic_vector(8 downto 0):="000001111";
  42. signal ADCClk: std_logic:='0';
  43.  
  44. begin
  45.  
  46.  SCLK  --LED  DACLK  MCLK  --CS1  SCLKI  --LED_ZOLD  LED  
  47. --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  48.  process(SCLK)
  49.  begin
  50.   if SCLK'event and SCLK='1' then
  51.    if GTS1='1' then
  52.    count     else
  53.     count <= "00000000000000000";-- SRAM Címzés nullázása
  54.     end if;
  55.   end if;
  56.  end process;
  57. --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  58. process(SCLK)
  59.  begin
  60.   if SCLK'event and SCLK='1' then --Kettővel való leosztott jel
  61.    if GTS1='1' then  
  62.     count2     else
  63.     count2 <= "0";--Másodlagos órajel nullázás    
  64.     end if;
  65.   end if;
  66.  end process;
  67. --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  68. process(SCLK)
  69.  begin
  70.   if SCLK'event and SCLK='0' then --Kettővel való leosztott jel
  71.    if GTS1='1' then  
  72.     count3     else
  73.     count3 <= "0";--Másodlagos órajel nullázás    
  74.     end if;
  75.   end if;
  76.  end process;
  77. --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  78.  
  79. ClkDivP: process(CLK,GTS1)
  80.  begin
  81.   if GTS1='0' then  
  82.   ADCClk <= '0';
  83.   ADC_div <= "000001001";
  84.   elsif CLK='0' and CLK'event then
  85.     if ADC_div="000000000" then
  86.         ADCClk         case ClkSel is
  87.             when "0001" =>                                  -- Div4  12,5Mhz 50Mhz órajelnél
  88.             when "0010" => ADC_div <= "000000001";  -- Div8 (érték+1)*2=osztás érték
  89.             when "0011" => ADC_div <= "000000100";  -- Div20        
  90.             when "0100" => ADC_div <= "000001001";  -- Div40
  91.             when "0101" => ADC_div <= "000010011";  -- Div80
  92.             when "0110" => ADC_div <= "000110001";  -- Div200
  93.             when "0111" => ADC_div <= "001100011";  -- Div400
  94.             when "1000" => ADC_div <= "011000111";  -- Div800
  95.             when "1001" => ADC_div <= "111110011";  -- Div2000
  96.             when others => ADC_div <= "111110011";  -- Div2000  25000Hz 50MHz órajelnél
  97.         end case;
  98.     else
  99.         ADC_div     end if;
  100.     end if;
  101. end process;
  102. --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  103.  process(CLK,GTS1)
  104.  begin
  105.   if CLK='0' and CLK'event then
  106.    if GTS1='0' then  
  107.     MCLK <= 'Z';
  108.     DACLK <= 'Z';
  109.     --CS1 <= 'Z';
  110.     LED(0) <= 'Z';
  111.     LED(1) <= 'Z';
  112.     LED(2) <= 'Z';
  113.     LED(3) <= 'Z';
  114.     LED(4) <= 'Z';
  115.     LED(5) <= 'Z';
  116.     LED(6) <= 'Z';
  117.     LED(7) <= 'Z';
  118.     LED(8) <= 'Z';
  119.     LED(9) <= 'Z';
  120.     LED(10) <= 'Z';
  121.     LED(11) <= 'Z';
  122.     LED(12) <= 'Z';
  123.     LED(13) <= 'Z';
  124.     LED(14) <= 'Z';
  125.     LED(15) <= 'Z';    
  126.     end if;
  127.  end if;
  128.  end process;
  129.  
  130. end;

A forrásban benne hagytam korábbi megjegyzéseket, amik a későbbiekben támpontokat nyújthatnak. Figyelmes szemlélő láthatja a megjegyzésben, hogy az SRAM kétféle képen is címezhető. A DACLK szinkronban az MCLK (WE)-val vagy ahhoz képest eltolva. Mind a kétféle mód működött nálam.

Eltolt DACLK:

kezdes_eltolt_570.jpg

Kattints a képre a nagyobb méretért!

Szinkron DACLK:

kezdes_szink_570.jpg

Kattints a képre a nagyobb méretért!

A helyes számláló indítási feltétel: clksel() nullázás, GTS1 nullázás, GTS1 magas értékre állítás, clksel() értékadás.


A cikk még nem ért véget, lapozz!
Következő: »»   5 / 8
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem