Difference between revisions of "User:FabienM"

From ArmadeusWiki
Jump to: navigation, search
(Une led qui clignote avec le spartan 3)
Line 35: Line 35:
 
L'intérêt du clignotement d'une led est relativement limité, cependant il permet de prendre en main la totalité de la chaine de développement sur le fpga de l'ASP.
 
L'intérêt du clignotement d'une led est relativement limité, cependant il permet de prendre en main la totalité de la chaine de développement sur le fpga de l'ASP.
  
Après avoir installé le Xilinx Web Pack fourni généreusement par Xilinx, il suffit de réaliser un compteur qui divisera la fréquence de l'horloge de manière à avoir un clignotement de quelques Hertz (La fréquence du spartan3 étant de 96MHz nous diviserons par 48000000 !).
+
Après avoir installé le Xilinx Web Pack généreusement par Xilinx, il suffit de réaliser un compteur qui divisera la fréquence de l'horloge de manière à avoir un clignotement de quelques Hertz (La fréquence du spartan3 étant de 96MHz nous diviserons par 48000000 !).
 +
 
 +
<source lang="VHDL">
 +
library IEEE;
 +
use IEEE.STD_LOGIC_1164.ALL;
 +
 
 +
entity Clk_div_led is
 +
    Port ( Clk : in  STD_LOGIC;
 +
          led_cathode : out STD_LOGIC;
 +
          led_anode : out STD_LOGIC);
 +
end Clk_div_led;
 +
 
 +
architecture Behavioral of Clk_div_led is
 +
 
 +
constant max_count : natural := 48000000;
 +
signal count : natural range 0 to max_count;
 +
 +
begin
 +
-- compteur de 0 à max_count
 +
compteur : process(Clk)
 +
begin
 +
if Clk'event and Clk = '1' then -- rising clock edge
 +
if count < max_count/2 then
 +
led_anode <='1';
 +
led_cathode <='0';
 +
count <= count + 1;
 +
elsif count < max_count then
 +
led_anode <='0';
 +
led_cathode <='0';
 +
count <= count + 1;
 +
else
 +
count <= 0;
 +
led_anode <='1';
 +
led_cathode <='0';
 +
end if;
 +
end if;
 +
end process compteur;
 +
 
 +
end Behavioral;
 +
</source>

Revision as of 22:08, 19 December 2007

Présentation

Fabien Marteau, Électronicien/Informaticien en dernière année d'école d'ingé spécialisée en systèmes embarqués (ENSEIRB)

J'ai toujours fait de l'électronique/informatique, depuis les magnétoscopes et réveils que j'ai démonté en passant par la filière SI du Bac S ainsi que le DUT GEII et l'ENSEIRB. J'aime bidouiller des petits circuits électroniques avec des applications plus ou moins utiles comme ma station météo.

En tant que membre d'Eirbot je suis très intéressé par les applications en robotiques réalisable avec armadeus. Je suis aussi particulièrement intéressé par les applications en domotique avec la gestion de capteurs ainsi que la gestion de l'énergie. .


Compétences :

- réalisation de cartes electroniques numériques (Eagles et Kicad)

- programmation en C / assembleur 68000

- Conception et simulation VHDL

- microcontrolleurs Atmega, 68HC11, PIC

Objectifs :

- Faire de l'embarqué sur des platforme autre que x86 avec les vrais contraintes de l'embarqué

- me former à Linux embarqué

- créer ...

Mes petites bidouilles avec l'armadeus

Une led qui clignote avec le spartan 3

Pour me faire la main avec le kit et surtout avec le fpga je me suis mis en tête de faire clignoter le une led du fpga. Pour cela je me suis un peu inspiré du montage proposé FPGA_and_led que j'ai modifié pour pouvoir tester ensuite la led en capteur de lumière.

Diode.png

L'intérêt du clignotement d'une led est relativement limité, cependant il permet de prendre en main la totalité de la chaine de développement sur le fpga de l'ASP.

Après avoir installé le Xilinx Web Pack généreusement par Xilinx, il suffit de réaliser un compteur qui divisera la fréquence de l'horloge de manière à avoir un clignotement de quelques Hertz (La fréquence du spartan3 étant de 96MHz nous diviserons par 48000000 !).

 library IEEE;
 use IEEE.STD_LOGIC_1164.ALL;

 entity Clk_div_led is
    Port ( Clk 			: in  STD_LOGIC;
           led_cathode 	: out STD_LOGIC;
           led_anode 	: out STD_LOGIC);
 end Clk_div_led;

 architecture Behavioral of Clk_div_led is

	constant max_count : natural := 48000000;
	signal count : natural range 0 to max_count;
	
 begin
	-- compteur de 0 à max_count
	compteur : process(Clk)
	begin
		if Clk'event and Clk = '1' then -- rising clock edge
			if count < max_count/2 then
				led_anode	<='1';
				led_cathode <='0';
				count <= count + 1;
			elsif count < max_count then
				led_anode	<='0';
				led_cathode <='0';
				count <= count + 1;
			else
				count <= 0;
				led_anode	<='1';
				led_cathode <='0';
			end if;
		end if;
	end process compteur;

 end Behavioral;