Addon entrenadora

Todo aquello que acompaña a la placa ZXDOS (carcasas, alimentadores, cables, monitores, joysticks, etc)

Moderador: antoniovillena

Responder
antoniovillena
GAL
Mensajes: 85
Registrado: 17 Ago 2018, 10:09

Addon entrenadora

Mensaje por antoniovillena » 27 Dic 2018, 15:13

A petición de gente del grupo de Telegram he sacado este addon para los que os iniciéis con el mundo de las FPGAs. Quiero sacar una tirada limitada de 20 unidades y vender por aquí 10 de ellas. Como no sacaré más, dejo los ficheros eagle para el que se quede fuera pueda hacerlo por su cuenta.

https://github.com/antoniovillena/zxuno ... dons_zxdos

Al final el array de leds es de 8 leds en lugar de los 10 que permite la PCB. La razón es que no encontré arrays de 11 pines, y también que con 8 leds es suficiente para representar aritmética de 8 bits. Esta lista es para que se apunte la gente interesada.

Interesados, segundo lote:
  • Fons, Telegram
Adjuntos
Untitled_Combined_Top.png
Untitled_Combined_Top.png (371.69 KiB) Visto 26668 veces

wilco2009
Veroboard
Mensajes: 16
Registrado: 17 Ago 2018, 10:53

Re: Addon entrenadora

Mensaje por wilco2009 » 27 Dic 2018, 16:04

Me apunto a una en formato kit.
Igual sería buena idea poner el precio.

BCH
Veroboard
Mensajes: 2
Registrado: 17 Ago 2018, 11:00

Re: Addon entrenadora

Mensaje por BCH » 27 Dic 2018, 16:11

Apuntame uno montado si es posible.

Lo he puesto en el grupo de telegram, pero por las dudas lo pongo aqui tambien

antoniovillena
GAL
Mensajes: 85
Registrado: 17 Ago 2018, 10:09

Re: Addon entrenadora

Mensaje por antoniovillena » 27 Dic 2018, 16:16

wilco2009 escribió:
27 Dic 2018, 16:04
Me apunto a una en formato kit.
Igual sería buena idea poner el precio.
El precio sería de 10 euros el kit y 15 euros montado en caso de que se lleve a cabo la tirada.

avlixa
Veroboard
Mensajes: 5
Registrado: 19 Dic 2018, 09:29

Re: Addon entrenadora

Mensaje por avlixa » 03 Ene 2019, 23:19

Hola, apuntame uno montado.

antoniovillena
GAL
Mensajes: 85
Registrado: 17 Ago 2018, 10:09

Re: Addon entrenadora

Mensaje por antoniovillena » 04 Ene 2019, 00:21

avlixa escribió:
03 Ene 2019, 23:19
Hola, apuntame uno montado.
Hecho.

Número de seguimiento de las PCBs: RS288598737DE

antoniovillena
GAL
Mensajes: 85
Registrado: 17 Ago 2018, 10:09

Re: Addon entrenadora

Mensaje por antoniovillena » 21 Ene 2019, 20:38

Me ha llegado todo. Procedo al tutorial de montaje.

Primero soldamos el array de 10k, no importa orientación, perdón por la foto porque la lente estaba empañada.
photo_2019-01-21_20-22-05.jpg
photo_2019-01-21_20-22-05.jpg (125.33 KiB) Visto 26464 veces
Luego soldamos los dos arrays de 100 ohm, no importa orientación.
photo_2019-01-21_20-22-17.jpg
photo_2019-01-21_20-22-17.jpg (145.4 KiB) Visto 26464 veces
Ahora las tiras de pines hembra torneadas para el display.
photo_2019-01-21_20-22-28.jpg
photo_2019-01-21_20-22-28.jpg (129.58 KiB) Visto 26464 veces
Lo siguiente son los dos pulsadores interiores, no importa la orientación.
photo_2019-01-21_20-22-36.jpg
photo_2019-01-21_20-22-36.jpg (137.72 KiB) Visto 26464 veces
Después toca los transistores.
photo_2019-01-21_20-22-45.jpg
photo_2019-01-21_20-22-45.jpg (136.52 KiB) Visto 26464 veces
Vamos a por los 8 switches de abajo, no importa la orientación.
photo_2019-01-21_20-22-50.jpg
photo_2019-01-21_20-22-50.jpg (128.46 KiB) Visto 26464 veces
Lo que toca ahora es el array de 330 ohm. En este caso el componente sí está orientado. El punto está a la izquierda (la serigrafía se ve desde delante). Y se suelda desplazado a la izquierda, dejando dos pines vacíos en la derecha.
photo_2019-01-21_20-23-03.jpg
photo_2019-01-21_20-23-03.jpg (124.39 KiB) Visto 26464 veces
Procedemos con la tira de pines de 2x21 porque será más cómodo al no estar el array de LEDs aún montado.
photo_2019-01-21_20-23-10.jpg
photo_2019-01-21_20-23-10.jpg (130.06 KiB) Visto 26464 veces
Ahora el array de LEDs. Es muy importante la orientación y que esté desplazado a la izquierda (dejando 2 pines libres a la derecha). Quedan unas letras en la parte superior, aunque recomiendo usar polímetro como en la foto para asegurarse.
photo_2019-01-21_20-23-22.jpg
photo_2019-01-21_20-23-22.jpg (126.03 KiB) Visto 26464 veces
Soldamos los pulsadores laterales.
photo_2019-01-21_20-23-32.jpg
photo_2019-01-21_20-23-32.jpg (137.12 KiB) Visto 26464 veces
Por último colocamos el display. He recortado un poco los pines para que quede más pegado a la PCB
photo_2019-01-21_20-23-39.jpg
photo_2019-01-21_20-23-39.jpg (118.4 KiB) Visto 26464 veces
El addon colocado en el ZXDOS.
photo_2019-01-21_20-23-47.jpg
photo_2019-01-21_20-23-47.jpg (151.24 KiB) Visto 26464 veces
Por último una foto en la que he puesto también uno de los prototipos de addon inferior que hice para el teclado/ratón/microSD.
photo_2019-01-21_20-23-57.jpg
photo_2019-01-21_20-23-57.jpg (155.46 KiB) Visto 26464 veces
Lo siguiente que haré será una demo en VHDL para comprobar que todo funciona perfectamente.

antoniovillena
GAL
Mensajes: 85
Registrado: 17 Ago 2018, 10:09

Re: Addon entrenadora

Mensaje por antoniovillena » 21 Ene 2019, 20:46

Esta es la demo que voy a probar. Está sacada de este libro:
http://misp.mui.ac.ir/sites/misp.mui.ac ... ersion.pdf

ch03_zxdos.ucf

Código: Seleccionar todo

#========================================================
# clock
#========================================================
NET "clk"       LOC="A10"  | IOSTANDARD=LVCMOS33;

#========================================================
# buttons & switches
#========================================================
# 6 push buttons 
NET "bot<0>"    LOC="A14"  | IOSTANDARD=LVCMOS33 | PULLUP; #up right
NET "bot<1>"    LOC="A9"   | IOSTANDARD=LVCMOS33 | PULLUP; #down right
NET "bot<2>"    LOC="A11"  | IOSTANDARD=LVCMOS33 | PULLUP; #1 left
NET "bot<3>"    LOC="B14"  | IOSTANDARD=LVCMOS33 | PULLUP; #2 left
NET "bot<4>"    LOC="A13"  | IOSTANDARD=LVCMOS33 | PULLUP; #3 left
NET "bot<5>"    LOC="A12"  | IOSTANDARD=LVCMOS33 | PULLUP; #4 left

# 8 slide switches
NET "sw<0>"     LOC="E11"  | IOSTANDARD=LVCMOS33 | PULLUP;
NET "sw<1>"     LOC="F10"  | IOSTANDARD=LVCMOS33 | PULLUP;
NET "sw<2>"     LOC="C10"  | IOSTANDARD=LVCMOS33 | PULLUP;
NET "sw<3>"     LOC="A4"   | IOSTANDARD=LVCMOS33 | PULLUP;
NET "sw<4>"     LOC="A5"   | IOSTANDARD=LVCMOS33 | PULLUP;
NET "sw<5>"     LOC="A6"   | IOSTANDARD=LVCMOS33 | PULLUP;
NET "sw<6>"     LOC="A7"   | IOSTANDARD=LVCMOS33 | PULLUP;
NET "sw<7>"     LOC="A8"   | IOSTANDARD=LVCMOS33 | PULLUP;

#========================================================
# 4-digit time-multiplexed 7-segment LED display
#========================================================
# digit enable
NET "an<0>"     LOC="N5"   | IOSTANDARD=LVCMOS33;
NET "an<1>"     LOC="D8"   | IOSTANDARD=LVCMOS33;
NET "an<2>"     LOC="F9"   | IOSTANDARD=LVCMOS33;
NET "an<3>"     LOC="D6"   | IOSTANDARD=LVCMOS33;

# 7-segment led segments 
NET "sseg<7>"   LOC="E7"   | IOSTANDARD=LVCMOS33; # decimal point
NET "sseg<6>"   LOC="C8"   | IOSTANDARD=LVCMOS33; # segment a
NET "sseg<5>"   LOC="E6"   | IOSTANDARD=LVCMOS33; # segment b
NET "sseg<4>"   LOC="C6"   | IOSTANDARD=LVCMOS33; # segment c
NET "sseg<3>"   LOC="M6"   | IOSTANDARD=LVCMOS33; # segment d
NET "sseg<2>"   LOC="F7"   | IOSTANDARD=LVCMOS33; # segment e
NET "sseg<1>"   LOC="D9"   | IOSTANDARD=LVCMOS33; # segment f
NET "sseg<0>"   LOC="P4"   | IOSTANDARD=LVCMOS33; # segment g

#========================================================
# 8 discrete led
#========================================================
NET "led<0>"    LOC="B6"   | IOSTANDARD=LVCMOS33;
NET "led<1>"    LOC="C7"   | IOSTANDARD=LVCMOS33;
NET "led<2>"    LOC="B8"   | IOSTANDARD=LVCMOS33;
NET "led<3>"    LOC="C9"   | IOSTANDARD=LVCMOS33;
NET "led<4>"    LOC="B10"  | IOSTANDARD=LVCMOS33;
NET "led<5>"    LOC="C11"  | IOSTANDARD=LVCMOS33;
NET "led<6>"    LOC="B12"  | IOSTANDARD=LVCMOS33;
NET "led<7>"    LOC="C13"  | IOSTANDARD=LVCMOS33;
disp_mux.vhd

Código: Seleccionar todo

-- Listing 4.13
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity disp_mux is
   port(
      clk, reset: in std_logic;
      in3, in2, in1, in0: in std_logic_vector(6 downto 0);
      point: in std_logic;
      colon: in std_logic;
      an: out std_logic_vector(3 downto 0);
      sseg: out std_logic_vector(7 downto 0)
   );
end disp_mux ;

architecture arch of disp_mux is
   -- refreshing rate around 800 Hz (50MHz/2^16)
   constant N: integer:=18;
   signal q_reg, q_next: unsigned(N-1 downto 0);
   signal sel: std_logic_vector(1 downto 0);
begin
   -- register
   process(clk,reset)
   begin
      if reset='1' then
         q_reg <= (others=>'0');
      elsif (clk'event and clk='1') then
         q_reg <= q_next;
      end if;
   end process;

   -- next-state logic for the counter
   q_next <= q_reg + 1;

   -- 2 MSBs of counter to control 4-to-1 multiplexing
   -- and to generate active-low enable signal
   sel <= std_logic_vector(q_reg(N-1 downto N-2));
   process(sel,in0,in1,in2,in3,colon,point)
   begin
      case sel is
         when "00" =>
            an <= "1110";
            sseg <= '1' & in0;
         when "01" =>
            an <= "1101";
            sseg <= '1' & in1;
         when "10" =>
            an <= "1011";
            sseg <= colon & in2;
         when others =>
            an <= "0111";
            sseg <= point & in3;
      end case;
   end process;
end arch;
hex_to_sseg.vhd

Código: Seleccionar todo

-- Listing 3.12
library ieee;
use ieee.std_logic_1164.all;
entity hex_to_sseg is
   port(
      hex: in std_logic_vector(3 downto 0);
      sseg: out std_logic_vector(6 downto 0)
   );
end hex_to_sseg;

architecture arch of hex_to_sseg is
begin
   with hex select
      sseg <=
         "0000001" when "0000",
         "1001111" when "0001",
         "0010010" when "0010",
         "0000110" when "0011",
         "1001100" when "0100",
         "0100100" when "0101",
         "0100000" when "0110",
         "0001111" when "0111",
         "0000000" when "1000",
         "0000100" when "1001",
         "0001000" when "1010", --a
         "1100000" when "1011", --b
         "0110001" when "1100", --c
         "1000010" when "1101", --d
         "0110000" when "1110", --e
         "0111000" when others; --f
end arch;
list_ch03_13_led_test.vhd

Código: Seleccionar todo

-- Listing 3.13
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity hex_to_sseg_test is
   port(
      clk: in std_logic;
      bot: in std_logic_vector(5 downto 0);
      sw: in std_logic_vector(7 downto 0);
      led: out std_logic_vector(7 downto 0);
      an: out std_logic_vector(3 downto 0);
      sseg: out std_logic_vector(7 downto 0)
   );
end hex_to_sseg_test;

architecture arch of hex_to_sseg_test is
   signal inc: std_logic_vector(7 downto 0);
   signal led3, led2, led1, led0: std_logic_vector(6 downto 0);
begin

   led <= (sw(7 downto 6) & not bot);

   -- increment input
   inc <= std_logic_vector(unsigned(sw) + 1);

   -- instantiate four instances of hex decoders
   -- instance for 4 LSBs of input
   sseg_unit_0: entity work.hex_to_sseg
      port map(hex=>sw(3 downto 0), sseg=>led0);
   -- instance for 4 MSBs of input
   sseg_unit_1: entity work.hex_to_sseg
      port map(hex=>sw(7 downto 4), sseg=>led1);
   -- instance for 4 LSBs of incremented value
   sseg_unit_2: entity work.hex_to_sseg
      port map(hex=>inc(3 downto 0), sseg=>led2);
   -- instance for 4 MSBs of incremented value
   sseg_unit_3: entity work.hex_to_sseg
      port map(hex=>inc(7 downto 4), sseg=>led3);

   -- instantiate 7-seg LED display time-multiplexing module
   disp_unit: entity work.disp_mux
      port map(
         clk=>clk, reset=>'0',
         in0=>led0, in1=>led1, in2=>led2, in3=>led3,
         point=>'1', colon=>'0',
         an=>an, sseg=>sseg);
end arch;
Adjuntos
ch03.zip
(8 KiB) Descargado 810 veces

Responder

Volver a “Accesorios”