Bien le bonjour à tous et toutes,
Comme indiqué dans l'intitulé je possède une carte de développement de chez Altera (que vous pouvez voir en PJ).
J'ai donc commencé à m'amuser avec (chacun son trip)..Pour des choses "simples" aucun problème, c'est quand j'ai voulu afficher du texte sur les 7segments que ça a commencé à m**der, après plusieurs semaines de travail et de recherches acharnées je m'en remet donc à vous
Je vais vous montrer le code que j'ai fais parce que là franchement, j'vois pas..Les problèmes sont les suivants, lorsque "clk_rapide" est dans la bande audible (jusqu'à environ 30kHz) on entend un sifflement, plutôt désagréable.Second problème le message s'affiche (jusque là ça va..) mais on voit, plus ou moins clairement, le même message qui s'affiche mais décalé d'un afficheur vers la gauche Là où c'est encore plus vicieux c'est qu'avec il y avait des exemples de codes, dont un qui affiche les nombres de 0 à 7 et ben la aucun soucis, pas de dédoublement de message, et pas de sifflement j'ai bien tenté de décrypter leur code mais franchement j'y ai (presque) rien pigé..Pour comprendre ma méthode d'affichage, se référer au scéma en PJ.
Pour info je programme en VHDL sous Quartus 10.1, et mon programmateur est le "USB Blaster".Bon je pense pas avoir oublié quelque chose dans le doute vous pouvez toujours me poser des questions.
Voilà mon code, ce qui est en commentaire n'est pas primordial pour le bon fonctionnement du programme.
et voilà le code proposer par le constructeur pour afficher des nombres de 0 à 7, en soit ça à pas l'air compliqué mais je comprends pas pourquoi avec leur code y a aucun sifflement du tout..Code:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity affichage is port( clk: in std_logic; --quartz 50MHz --led: out std_logic; segments, sel: out std_logic_vector (7 downto 0); --leds_off: out std_logic_vector (1 downto 0) ); end affichage; architecture arch_affichage of affichage is signal selection, sept: std_logic_vector (7 downto 0); signal clk_lente, clk_rapide: std_logic; signal A,B,C,E,F,G,H,I,J,L,O,P,S,U,Y,blank: std_logic_vector (7 downto 0); signal sel1,sel2,sel3,sel4,sel5,sel6,sel7,sel8: std_logic_vector (7 downto 0); signal compt_def: integer range 0 to 7; begin H_lente: process(clk) --1Hz variable compt_lent: integer range 0 to 49999999; begin if (rising_edge(clk)) then compt_lent:=(compt_lent+1); end if; if (compt_lent>24999999) then clk_lente<='1'; else clk_lente<='0'; end if; end process; H_rapide: process(clk) --30kHz variable compt_rapide: integer range 0 to 1666; begin if (rising_edge(clk)) then compt_rapide:=(compt_rapide+1); end if; if (compt_rapide>833) then clk_rapide<='1'; else clk_rapide<='0'; end if; end process; aff_lettres: process(compt_def,I,S,A,B,E,L) begin case compt_def is when 0=>sept<=I; when 1=>sept<=S; when 2=>sept<=A; when 3=>sept<=B; when 4=>sept<=E; when 5=>sept<=L; when 6=>sept<=L; when 7=>sept<=E; end case; end process; sel_afficheur: process(compt_def,sel8,sel7,sel6,sel5,sel4,sel3,sel2,sel1) begin case compt_def is when 0=>selection<=sel8; when 1=>selection<=sel7; when 2=>selection<=sel6; when 3=>selection<=sel5; when 4=>selection<=sel4; when 5=>selection<=sel3; when 6=>selection<=sel2; when 7=>selection<=sel1; end case; end process; incr_def: process(clk_rapide,compt_def) begin if (rising_edge(clk_rapide)) then compt_def<=(compt_def+1); end if; end process; --led<=clk_lente; segments<=sept; sel<=selection; --leds_off<="11"; --Alphabet A<="10001000"; B<="10000000"; C<="11000110"; E<="10000110"; F<="10001110"; G<="11000010"; H<="10001001"; I<="11111001"; J<="11100001"; L<="11000111"; O<="11000000"; P<="10001100"; S<="10010010"; U<="11000001"; Y<="10010001"; blank<=X"FF"; --Selection des afficheurs sel1<=X"7F"; sel2<=X"BF"; sel3<=X"DF"; sel4<=X"EF"; sel5<=X"F7"; sel6<=X"FB"; sel7<=X"FD"; sel8<=X"FE"; end arch_affichage;
Bon voilà merci beaucoup de votre attention, j'vais continuer à chercher en attendant une âme charitable..Code:library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY seg2 IS PORT ( clk : IN std_logic; rst : IN std_logic; dataout : OUT std_logic_vector(7 DOWNTO 0); --¸÷¶ÎÊý¾ÝÊä³ö en : OUT std_logic_vector(7 DOWNTO 0)); --COMʹÄÜÊä³ö END seg2; ARCHITECTURE arch OF seg2 IS signal cnt_scan : std_logic_vector(15 downto 0 ); signal data4 : std_logic_vector(3 downto 0); signal dataout_xhdl1 : std_logic_vector(7 downto 0); signal en_xhdl : std_logic_vector(7 downto 0); begin dataout<=dataout_xhdl1; en<=en_xhdl; process(clk,rst) begin if(rst='0')then cnt_scan<="0000000000000000"; elsif(clk'event and clk='1')then cnt_scan<=cnt_scan+1; end if; end process; process(cnt_scan(15 downto 13)) begin case cnt_scan(15 downto 13) is when"000"=> en_xhdl<="11111110"; when"001"=> en_xhdl<="11111101"; when"010"=> en_xhdl<="11111011"; when"011"=> en_xhdl<="11110111"; when"100"=> en_xhdl<="11101111"; when"101"=> en_xhdl<="11011111"; when"110"=> en_xhdl<="10111111"; when"111"=> en_xhdl<="01111111"; when others=> en_xhdl<="11111110"; end case; end process; process(en_xhdl) begin case en_xhdl is when "11111110"=> data4<="0000"; when "11111101"=> data4<="0001"; when "11111011"=> data4<="0010"; when "11110111"=> data4<="0011"; when "11101111"=> data4<="0100"; when "11011111"=> data4<="0101"; when "10111111"=> data4<="0110"; when "01111111"=> data4<="0111"; when others => data4<="1000"; end case; end process; process(data4) begin case data4 is WHEN "0000" => dataout_xhdl1 <= "11000000"; WHEN "0001" => dataout_xhdl1 <= "11111001"; WHEN "0010" => dataout_xhdl1 <= "10100100"; WHEN "0011" => dataout_xhdl1 <= "10110000"; WHEN "0100" => dataout_xhdl1 <= "10011001"; WHEN "0101" => dataout_xhdl1 <= "10010010"; WHEN "0110" => dataout_xhdl1 <= "10000010"; WHEN "0111" => dataout_xhdl1 <= "11111000"; WHEN "1000" => dataout_xhdl1 <= "10000000"; WHEN "1001" => dataout_xhdl1 <= "00011001"; WHEN "1010" => dataout_xhdl1 <= "00010001"; WHEN "1011" => dataout_xhdl1 <= "11000001"; WHEN "1100" => dataout_xhdl1 <= "01100011"; WHEN "1101" => dataout_xhdl1 <= "10000101"; WHEN "1110" => dataout_xhdl1 <= "01100001"; WHEN "1111" => dataout_xhdl1 <= "01110001"; WHEN OTHERS => dataout_xhdl1 <= "00000011"; END CASE; END PROCESS; end arch;
Bonnes fêtes de fin d'année à tous et toutes et encore merci!
-----