viernes, 24 de julio de 2015

Instalando impresora Samsung SL M2022 en Manjaro Linux

Muy bien, despues de dos dias de andar con jale de esta impresora, me encontré con un problema similar al que marcan en este link, sin embargo, los pasos que ahi marcan, no me funcionaron, y a pesar de haber bajado los drivers oficiales de Samsung, y luego encontre esta otra información, y de igual modo no me funcionó.

El detalle, despues de seguir buscando, es que se debe a un bug con el paquete the Gutenprint, la información la encontré aqui, y pues al desinstalar tal paquete, y al reinstalar el driver unificado de samsung desde AUR, todo funcionó de maravilla.

Como recomendación, la versión que instalé fue la 1 de aur, existen las versiones 4, pero estas, a mi, no me funcionaron.

viernes, 17 de julio de 2015

Mi aventura para elaborar un componente nuevo para Fritzing (el CPLD EPM240 de Altera)

(Ví que en una página mencionaron este pequeño aporte - ¡gracias!)
Pues antes que nada, el desarrollo de material para prácticas de Electrónica digital, requiere de un buen tiempo y en este caso, me enfrente a la situación de que el material debe contener la conexión de una CPLD, en especifico, de un tipo de tarjeta, una Altera, la EPM240.

El breakout que requiero es el siguiente:

Y con la finalidad de que se mostrará la forma de conectar esta CPLD con un protoboard, pense en usar la herramienta Fritzing, la cual, para los estudiantes que recien inician, les facilita mucho la visualización de conexión.

El problema es que este elemento no se encuentra en las bibliotecas de Fritzing, y pues los vendedores en aliexpress, mercadolibre y otros mas, no me dan las medidas de este elemento.

Ahora bien, siguiente los tutoriales de aquí, aquí y aquí  pude, después de algunas horas (inicie hoy a las 11 am y finalice mas o menos a las 2030 hrs) y con ayuda de Inkscape, logré el siguiente gráfico

El problema, después de terminar el gráfico, fue añadirlo al Fritzing, para lo cual, de acuerdo a los anteriores tutos, se puede tomar algún elemento y modificarlo para grabar nuestro nuevo componente.

De igual modo, un problema que encontré, es que la tarjeta contiene muchos terminales (aproximadamente 100), por lo cual me vi en la necesidad de usar un conector, sin embargo Fritzing contiene conectores con una capacidad máxima de 64 terminales. Para esto, de momento y de forma muy chapucera, deje muchos terminales sin conectar.

Otra situación que me encontre, es que Fritzing solo importa imágenes SVG con fuentes OCRA y/o tipo Droid, y lamentablemente mi PC no contaba con esa fuente; este problema se arregla agregando las fuentes requeridas (lee aquí y aquí).

Parecería que ya casi terminaba, pero me encontré con la situación de que a pesar de cambiar las fuentes que había anexado, las ubicaciones de los textos no correspondian con las terminales, y esto lo resolví al modificar una propiedad de los textos en Inkscape:


En el combobox espacio entre líneas, lo tenia a un porcentaje diferente al 100% y esto ocasionaba que al importar la imagen a Fritzing se modificaran las posiciones.

Ya con la imagen bien diseñada, ahora corresponde a la ubicación de los pines según su posición en la tarjeta y reutilizar aquellos que no se encuentran en la numeración. Esto si me llevo un tiempo ;)

Ya finalizado, ahora solo hay que jalar el componente nuevo y armar el proto, el resultado fue el siguiente (para un multiplexor de 4 a 1).

Gracias por leer y no aburrirse  ........

Grabando un CPLD Altera en Manjaro Linux de 64 bits

lunes, 13 de julio de 2015

GHDL en Manjaro Linux 64 bits y error sufijo de instrucción inválido para `push' (Solucionado)

Bueno, mientras mi esposa canta canciones rancheras, mi hija juega plantas contra zombies y mi bebe esta viendo la tv, yo me dada de topes por simular un codigo de VHDL con GHDL en mi lap viejita de 64 bits. El problema que tenia al tratar de analizar con ghdl un codigo que en Quartus II compila adecuadamente me salia lo siguiente en la consola
[miguel@casita PracticaMux]$ ghdl -a mux4_1tb.vhd 
mux4_1tb.s: Mensajes del ensamblador:
mux4_1tb.s:55: Error: sufijo de instrucción inválido para `push'
mux4_1tb.s:57: Error: sufijo de instrucción inválido para `pop'
mux4_1tb.s:555: Error: sufijo de instrucción inválido para `push'
mux4_1tb.s:602: Error: sufijo de instrucción inválido para `push'
mux4_1tb.s:663: Error: sufijo de instrucción inválido para `push'
mux4_1tb.s:724: Error: sufijo de instrucción inválido para `push'
mux4_1tb.s:785: Error: sufijo de instrucción inválido para `push'
mux4_1tb.s:846: Error: sufijo de instrucción inválido para `push'
mux4_1tb.s:887: Error: sufijo de instrucción inválido para `push'
mux4_1tb.s:929: Error: sufijo de instrucción inválido para `push'
ghdl: compilation error
El problema según lei en los foros de ghdl, se debe a que ghdl es un programa para 32 bits y el equipo que tengo tiene gcc de 64 bits, y buscando una solución encontre el wiki de UMHDL que está SourceForge y que es un IDE para trabajar de forma inicial con VHDL; en su wiki se indica lo siguiente de forma textual
"Possible problems in Linux 64-bits
1. Problem: in Linux 64-bits the following errors are got when compiling:
/home/myworkspace/e~and_gate.s: Assembler messages:
/home/myworkspace/e~and_gate.s:40: Error: invalid instruction suffix for 'push'
/home/myworkspace/e~and_gate.s:42: Error: invalid instruction suffix for 'pop'
Solution: the problem is that GHDL is a 32-bit program. The solution is to append some extra options when invoking to GHDL.
$ ghdl -a -Wa,--32 ...
$ ghdl -e -Wa,--32 -Wl,-m32 ...

However, UMHDL already checks the Operating System when executing and take it into account, so that errors should not happen.
"
A partir de esta indicación, no es necesario instalar entonces el IDE para compilar y simular un codigo de VHDL, es por ellos que de acuerdo a la wikibooks de vhdl (https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_VHDL/Ap%C3%A9ndices/Instalaci%C3%B3n_y_uso_de_GHDL)
Se puede simular de la forma
[miguel@casita PracticaMux]$ ghdl -a -Wa,--32 mux4_1.vhd
[miguel@casita PracticaMux]$ ghdl -a -Wa,--32 mux4_1tb.vhd
[miguel@casita PracticaMux]$ ghdl -e -Wa,--32 -Wl,-m32 mux4_1tb
[miguel@casita PracticaMux]$ ghdl -r mux4_1tb --vcd=mux4_1.vcd
[miguel@casita PracticaMux]$ gtkwave mux4_1.vcd
Los códigos son los siguientes
-- mux4.vhd
-- Multiplexor 4 a 1
-- Direcciona una de cuatro señales de entrada (d0 a d3) hacia la salida
-- dependiendo del estado de los bits de selecci´on

ENTITY mux4_1 is port(
 d0,d1,d2,d3 : in bit;
 --s    : in bit_vector (1 downto 0);
   s0,s1       : in bit;
 y    : out bit);
 END mux4_1;
 
architecture mux4to1 of mux4_1 is
begin
-- Asignaci´on de señales concurrentes
y<= ((not(s1)) and  (not(s0)) and d0)
 or ((not(s1)) and s0 and d1)
 or (s1 and (not s0) and d2)
 or (s1 and s0 and d3);
 end mux4to1;
--mux4_1tb.vhd
-- Multiplexor 4 a 1
-- Direcciona una de cuatro señales de entrada (d0 a d3) hacia la salida
-- dependiendo del estado de los bits de selecci´on

ENTITY mux4_1tb is
END mux4_1tb;

ARCHITECTURE muxtb OF mux4_1tb is
 COMPONENT mux4_1
 PORT(
 d0,d1,d2,d3 : in bit;
 --s    : in bit_vector (1 downto 0);
   s0,s1       : in bit;
 y    : out bit);
 END COMPONENT;

  SIGNAL d0,d1,d2,d3: bit;
  SIGNAL s0,s1: bit;
  SIGNAL y: bit;

 BEGIN
   u0: mux4_1 PORT MAP (d0,d1,d2,d3,s0,s1,y);
 d0 <= '1' after 0 ns, '0' after 5  ns, '1' after 10 ns, '0' after 15 ns;
        d1 <= '1' after 0 ns, '0' after 10 ns, '1' after 20 ns, '0' after 30 ns;
        d2 <= '1' after 0 ns, '0' after 20 ns, '1' after 40 ns, '0' after 60 ns;
  d3 <= '1' after 0 ns, '0' after 40 ns, '1' after 80 ns, '0' after 90 ns;

        s0 <= '0' after 0 ns, '0' after 1 ns;
        s1 <= '0' after 0 ns, '1' after 2 ns;
END muxtb;
La salida es la siguiente