Académique Documents
Professionnel Documents
Culture Documents
DMSEEA
INFORMATIQUE INDUSTRIELLE :
Travaux Pratique d’Initiation à la Programmation VHDL avec
l’Outil ISEDESIGN SUITE de XILINX
LIBRARY IEEE;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
USE ieee.NUMERIC_std.all;
entity CM10 is
port(clk, reset : in std_logic;
compteur : inout std_logic_vector (3 downto 0);
s : out std_logic_vector (6 DOWNTO 0));
end CM10;
end if;
end process;
process(incompt)
begin
if incompt = 0 THEN s <= "1111110";
ELSif incompt = 1 THEN s <= "0110000";
elsif incompt = 2 THEN s <= "1101101";
elsif incompt = 3 THEN s <= "1111001";
elsif incompt = 4 THEN s <= "0110011";
elsif incompt = 5 THEN s <= "1011011";
elsif incompt = 6 THEN s <= "1011111";
elsif incompt = 7 THEN s <= "1110000";
elsif incompt = 8 THEN s <= "1111111";
elsif incompt = 9 THEN s <= "1111011";
ELSE s <= "0000001";
END IF;
end process;
end COMPTEUR10;
Résultats de la simulation du compteur.
Problèmes rencontrés :
La première erreur été que XILINX refuse d’utiliser des variables internes pour corriger ceci, nous
avons déclaré la bibliothèque IEEE.NUMERIC_STD. Le nom de la variable interne utilisé est
incompt sur le programme.
La résolution de la deuxième erreur, caractérisée par un décalage entre le compteur et l'affichage lors
de la simulation, a été effectuée en introduisant un nouveau processus. Les instructions d'affichage,
initialement incluses dans le premier processus, ont été séparées et placées dans ce nouveau
processus séquentiel. Cette modification a favorisé une synchronisation plus précise entre le
compteur et l'affichage, éliminant ainsi le décalage observé pendant la simulation
II. Conception de l'Afficheur 7 Segments :
Détails sur la conception de l'afficheur 7 segments.
Nous avons élaboré le programme sous deux modes en concurrentielle a savoir sélectif par
l’instruction « with select ». Et conditionnel par l’instruction « when else »
III. Fusion des deux programmes et leurs affichages sur deux afficheurs différents
Le circuit de contrôle d'affichage par balayage peut être utilisé pour afficher un nombre à
quatre chiffres sur cet affichage. Ce circuit pilote les signaux d'anode et les motifs de cathode
correspondants de chaque chiffre dans une succession continue et répétée, à une fréquence de mise à
jour plus rapide que l'œil humain ne peut détecter. Chaque chiffre est illuminé seulement un quart du
temps, mais parce que l'œil ne peut pas percevoir l'obscurcissement d'un chiffre avant qu'il ne soit à
nouveau illuminé, le chiffre apparaît continuellement illuminé. Si la fréquence de mise à jour ou
"rafraîchissement" est ralentie à environ 45 hertz, la plupart des gens commenceront à voir un
scintillement de l'affichage.
Pour que chacun des quatre chiffres apparaisse brillant et continuellement illuminé, les quatre chiffres
doivent être pilotés une fois toutes les 1 à 16 ms, pour une fréquence de rafraîchissement de 1 kHz à
60 Hz.
Par exemple, dans un schéma de rafraîchissement à 60 Hz, l'ensemble de l'affichage serait rafraîchi
une fois toutes les 16 ms, et chaque chiffre serait illuminé pendant ¼ du cycle de rafraîchissement,
soit 4 ms. Le contrôleur doit piloter les cathodes avec le motif correct lorsque le signal d'anode
correspondant est piloté. Pour illustrer le processus, si AN0 est activé pendant que CB et CC sont
activés, alors un "1" sera affiché dans la position du chiffre 1. Ensuite, si AN1 est activé pendant que
CA, CB et CC sont activés, alors un "7" sera affiché dans la position du chiffre 2. Si AN0 et CB, CC
sont activés pendant 4 ms, et ensuite A1 et CA, CB, CC sont activés pendant 4 ms dans une
succession sans fin, l'affichage affichera "17" dans les deux premiers chiffres. Un exemple de
chronogramme pour un contrôleur à quatre chiffres est fourni.
Pour notre cas on veut afficher de 0 à 9 , par des switches pour le premier afficheur et par un
compteur interne sur le deuxième afficheur.
Les etapes que nous avons suivi pour la réalisation du programme été comme suite :
process (clk)
begin
if rising_edge(clk) then
refresh_coMPT <= refresh_coMPT + 1;
if refresh_coMPT = 1000 then
refresh_coMPT <= 0;
if digit_count = 4 then
digit_count <= 0;
else
digit_count <= digit_count + 1 ;
case digit_count is
when 0 =>
digit <= "1110";
bcd <= sw(15 downto 12);
when 1 =>
digit <= "1101";
BCD <= s;
when 2 =>
digit <= "1011";
bcd <= sw(6 downto 4);
when 3 =>
digit <= "0111";
bcd <= sw(3 downto 0);
when others =>
digit <= "1111";
end case;
end if;
end if;
end if;
end process;
par la suite nous avons rediger la description du code du compteur
--compteur--
process(clk_com,reset_com)
begin
if reset_com ='1' then iNcompt <= 0;
elsif rising_edge(clk_com) then
if incompt = 9 THEN iNcompt <= 0;
else iNcompt <= iNcompt +1;
end if;
end if;
end process;
---compteur
process (incompt)
begin
if incompt = 0 THEN s <= "0000";
ELSif incompt = 1 THEN s <= "0001";
elsif incompt = 2 THEN s <= "0010";
elsif incompt = 3 THEN s <= "0011";
elsif incompt = 4 THEN s <= "0100";
elsif incompt = 5 THEN s <= "0101";
elsif incompt = 6 THEN s <= "0110";
elsif incompt = 7 THEN s <= "0111";
elsif incompt = 8 THEN s <= "1000";
ELSE s <= "1001";
END IF;
end process;
library ieee;
use ieee.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.all;
USE IEEE.numeric_std.all;
entity bcd is
Port (Clk : in STD_LOGIC;
Résultats de la simulation de la fusion des programmes afficheur-compteur.
Dans la simulation :
Nous avons affecter une horloge de 1us pour l’horloge gérant le rafraichissement des afficheurs , et
pour celle du compteur 5ms
Sur l’illustration :
SW : représente les switches .
S : sortie du compteur .
Digit : sélectionneur des afficheurs.
Seven segment : L’affichage du résultat sur les afficheurs .
Conclusion :
En conclusion, la réalisation de ces trois programmes pour la carte Nexys3 démontre l'application
concrète des concepts théoriques en électronique numérique et en programmation embarquée.
L'afficheur et le compteur à sept segments sont des composants fondamentaux dans de nombreux
systèmes embarqués, offrant une interface utilisateur intuitive et permettant de suivre des données en
temps réel.
De plus, en ajoutant un troisième code pour la fusion et l'affichage des deux programmes sur deux
afficheurs différents de la même carte, nous avons enrichi notre projet en démontrant la capacité de
contrôler plusieurs périphériques simultanément. Cette capacité est cruciale dans de nombreuses
applications où la visualisation de multiples ensembles de données est nécessaire pour une prise de
décision efficace et rapide.
À travers ce projet, nous avons acquis une compréhension plus approfondie de la manière dont les
périphériques d'affichage et les compteurs peuvent être contrôlés et intégrés dans des systèmes
électroniques. Ces compétences sont précieuses dans de nombreux domaines, notamment
l'automatisation, la domotique, les technologies de l'information et bien d'autres encore.
En continuant à explorer et à expérimenter avec des cartes de développement telles que la Nexys3,
nous sommes en mesure d'approfondir notre expertise en conception de circuits intégrés et en
développement de logiciels embarqués, ouvrant ainsi la voie à de nouvelles innovations et
applications dans le domaine de l'électronique et de l'informatique.