[Icestudio][7-seg] Soporte de decodificadores para 7 segmentos en icestudio

1,448 views
Skip to first unread message

Obijuan

unread,
Oct 3, 2016, 2:26:08 AM10/3/16
to FPGA-WARS: explorando el lado libre
Hola,

  Os propongo incluir los decodificadores de 7 segmentos en icestudio.  Tiene que haber dos: correspondientes a cátodo / ánodo común

Nombre propuesto: Hex7Seg (Para cátodo común. Segmentos se activan a nivel alto (1))
                             Hex7Seg_n  (Para ánodo común. Segmentos se activan a nivel bajo(0)). Es el anterior pero con las salidas negadas

Como elemento gráfico ponemos el típico 7 segmentos, con las letras de cada segmento. Algo como esto:

http://www.micropic.es/mpblog/2007/07/jugando-con-displays-de-7-segmentos/

Entradas:  h3,h2,h1,h0
Salidas:  a, b, c, d, e, f, g (para Hex7Seg).  a_n, b_n, c_n, d_n, e_n, f_n, g_n (para Hex7Seg_n)

Los iremos desarrollando en Verilog en este hilo, y finalmente lo incluimos en icestudio

Responded a este hilo con las propuestas. Sin en unos días no hay voluntarios, lo iré desarrollando yo

Saludos, Obijuan

Carlos 47

unread,
Oct 3, 2016, 2:31:58 AM10/3/16
to fpga-wars-explora...@googlegroups.com
Hola,
Puedo hacer el de cátodo común, solo tendríamos que ver en que menú del icestudio ponerlos, ¿algo como propósito general?

Saludos
-C

--
Has recibido este mensaje porque estás suscrito al grupo "FPGA-WARS: explorando el lado libre" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/0fd379d9-32a2-400c-a7c9-4294ee54a288%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Obijuan

unread,
Oct 3, 2016, 2:44:24 AM10/3/16
to FPGA-WARS: explorando el lado libre
Genial! :)

De momento lo podemos poner dentro de Logic/Comb, junto a los multiplexores y demultiplexores que hay.  Cuando haya muchos combinacionales los agrupamos en sub-categorías

Saludos, Obijuan

Democrito

unread,
Oct 3, 2016, 4:13:04 AM10/3/16
to FPGA-WARS: explorando el lado libre
Anoche, antes de hacer el KITT con el display estuve probando el código de Carlos (gracias Carlos!), y como en mi caso era ánodo común tuve que cambiar sólo un pequeño detalle en su decodificador de 7 segmentos. En el código de éste justo al final tiene puesto esto:

assign {g, f, e, d, c, b, a} = _o;  (Cátodo común, es decir, negativo de los leds comunes.)

y lo cambié por esto otro:

assign {g, f, e, d, c, b, a} = ~_o; (Ánodo común, es decir, positivo de los leds comunes.)

Una simple negación.

Los display de 7 segmentos tienen un punto (punto decimal) pero eso no se decodifica, se puede tratar como un simple led.

Saludos!

Democrito

unread,
Oct 3, 2016, 4:32:09 AM10/3/16
to FPGA-WARS: explorando el lado libre
Se me olvidó decir que por supuesto que me pondré a ello. No estoy en mi casa y no llego hasta bien entrada la noche, pero es sólo un momento hacer los cambios y crear ambas versiones.

Si alguien quiere adelantarse que lo haga! El trabajo duro ya lo hizo Carlos.

Obijuan

unread,
Oct 3, 2016, 4:35:28 AM10/3/16
to FPGA-WARS: explorando el lado libre
Estupendo Demócrito! Cuando Carlos haga el pull-request final, haz las modificaciones oportunas para añadir tu parte, y lanzas tu pull-request

Luego habrá que hacer ejemplos sencillos de uso, que se pueden subir al repo icestudio-examples. Cualquier colaboración será bienvenida :-)

Gracias!

Saludos, Obijuan

Carlos 47

unread,
Oct 3, 2016, 4:39:56 PM10/3/16
to fpga-wars-explora...@googlegroups.com
Que tal,
Acabo de terminar de hacer las imágenes (solo cambia el texto), y también recién hice el PR. Se ve así el del catodo común:


Saludos
-C

--
Has recibido este mensaje porque estás suscrito al grupo "FPGA-WARS: explorando el lado libre" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.

Democrito

unread,
Oct 3, 2016, 6:08:21 PM10/3/16
to FPGA-WARS: explorando el lado libre
Te ha quedado genial Carlos!

Estoy pensando que no creo que haga falta que meta en el github lo que hice porque es una copia de lo que hizo Carlos, pero realicé los cambios que le comentó Obijuan sobre el contador (vale como ejemplo de display de 7 segmentos, en mi caso de ánodo común). En el decodificador sólo cambia un pequeño detalle para que sea ánodo común, en vez de cátodo, se trata de negar  el registro "_o" con un "~_o" en el decodificador de 7 segmentos, justo en la última línea, no antes, eso es todo.



Carlos, si no me he explicado bien me lo comentas, de todas formas te adjunto el "ICE" con las modificaciones que he comentado por si surge alguna duda.

Saludos! 
ejemplo_contador_7_segmentos_anodo_comun.ice

Democrito

unread,
Oct 3, 2016, 6:28:19 PM10/3/16
to FPGA-WARS: explorando el lado libre

Carlos 47

unread,
Oct 3, 2016, 7:22:39 PM10/3/16
to fpga-wars-explora...@googlegroups.com
Hola,

Entonces ¿hago otro PR con el driver para ánodo común? o ¿que lo hagan directo Juan o Jesús? Solo había mandado el del cátodo común para que mandaras el otro :D.
Si tienes la versión de git de icestudio también añadí la imagen para el driver de ánodo común, además de que cambie los  `define por localparam, porque leyendo (corríjanme si estoy mal) los `define y param se pueden redefinir fuera del módulo, y los localparam no, me pareció mejor tenerlos como esta última opción.

Quedo a disposición con respecto al PR del driver del ánodo común.

Saludos
-Carlos

El 3 de octubre de 2016, 17:28, Democrito<spo...@gmail.com> escribió:

--
Has recibido este mensaje porque estás suscrito al grupo "FPGA-WARS: explorando el lado libre" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.

Democrito

unread,
Oct 3, 2016, 8:17:16 PM10/3/16
to FPGA-WARS: explorando el lado libre
Hola de nuevo Carlos,

yo no sé poner el dibujo sobre el circuito, por eso pienso que es mejor que te encargues tú de hacer lo del ánodo común. Sólo hay que negar con el '~' la variable '_o' de tu decodificador, que está justo al final del código del decodificador de 7 segmentos.

Es lo mismo que has hecho pero con ese cambio (para que sea ánodo común), y luego en el dibujo del integrado poner el texto "ánodo común".

Saludos.

Obijuan

unread,
Oct 4, 2016, 3:01:08 AM10/4/16
to FPGA-WARS: explorando el lado libre
Wow!!!  Como mola!!!!!  Muchas gracias Carlos!!!!!  Me encanta!!!!

Saludos, Obijuan

Obijuan

unread,
Oct 4, 2016, 3:03:04 AM10/4/16
to FPGA-WARS: explorando el lado libre
Ok. Los nombres de las salidas tienen que ser diferentes (porque son negadas). Bien se puede poner a_n, b_n, ....   o na, nb...  como más os guste

Estoy deseando probar los nuevos bloques :-)

Saludos, Obijuan

Carlos 47

unread,
Oct 4, 2016, 3:37:00 AM10/4/16
to fpga-wars-explora...@googlegroups.com
Hola, en un rato hago el PR con el nuevo bloque, con la imagen que le
corresponde y el nombre de las salidas señalando que estan negadas,
aunque supongo que al tener el texto "ánodo común " en la imagen ya no
haría falta, ¿que opinan? saludos

Obijuan

unread,
Oct 4, 2016, 3:41:58 AM10/4/16
to FPGA-WARS: explorando el lado libre
Correcto. En la imagen no hace falta poner los pines negados

Gracias! :-)

Saludos, Obijuan

Carlos 47

unread,
Oct 4, 2016, 8:38:59 AM10/4/16
to fpga-wars-explora...@googlegroups.com
Listo el PR.
Me refería a que las salidas del bloque a lo mejor no necesitan indicar que están negadas, porque en la imagen con el texto "ánodo común" ya esta implícito que van a salir invertidas, igual si hay que cambiarlas se puede hacer muy fácil.

@Democrito, para "ponerle" imagen a los bloques debes de tener la imagen en formato svg en el directorio app/resources/images, luego exportas tu bloque, y abres el archivo con un editor de textos, en la segunda linea dice images: "" , entre las comillas añades resources/images/nombreDeTuImagen.svg, quedando asi: images: "resources/images/nombreDeTuImagen.svg" y guardas los cambios, lo único malo es que el bloque no se adapta al tamaño de la imagen, así que debes de hacer la imagen calculando el tamaño a "ojo de buen cubero", casi siempre las hago de 30mmx30mm.

Saludos
-C

--
Has recibido este mensaje porque estás suscrito al grupo "FPGA-WARS: explorando el lado libre" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.

Obijuan

unread,
Oct 5, 2016, 6:29:41 AM10/5/16
to FPGA-WARS: explorando el lado libre
Estoy haciendo pruebas con un 7 segmentos de ánodo común en la Icezum Alhambra, usando el decodificador de Carlos y el ejemplo de demócrito

La verdad es que... es super divertido!!!  Estoy disfrutando como nunca :-D

Las salidas de la icezum Alhambra son de 5v, que se obtienen pasando las pines de la ice40 por unos conversores de nivel bidireccionales (los detalles los podéis ver en el esquemático en el repo).
Para poder usar correctamente el display de  7 segmentos he tenido que utilizar resistencias de 1K en serie con los leds de los segmentos. Inicialmente probé con valores de 100ohm, pero las salidas se quedaban oscilando. Y es que estos conversores, que a priori parecían una solución muy buena, tienen sus problemillas.  Al final, con las resistencias de 1K las salidas son estables, pero el display se ve con baja luminosidad

Luego os mando más fotos y vídeos

Gracias Carlos y Demócrito!!!!  :-)

Saludos, Obijuan
IMG_20161005_101227.jpg
IMG_20161005_101300.jpg

Obijuan

unread,
Oct 5, 2016, 12:38:24 PM10/5/16
to FPGA-WARS: explorando el lado libre
Hola,

He soldado una plaquita con el 7 segmentos, que se pincha directamente en la Icezum Alhambra, en vez de usar la protoboard

Os adjunto fotos

El ejemplo está subido en el repo:

https://github.com/FPGAwars/icestudio-examples/tree/master/Icezum-alhambra/Contador-7seg

Y aquí un vídeo en youtube para ver su funcionamiento:

https://www.youtube.com/watch?v=iKdgIqJyfaw


Saludos, Obijuan


El lunes, 3 de octubre de 2016, 8:26:08 (UTC+2), Obijuan escribió:
icezum-7seg-2.jpg
icezum-7seg-1.jpg
icezum-7seg-icestudio-screenshot-1.jpg

Carlos 47

unread,
Oct 5, 2016, 2:08:28 PM10/5/16
to fpga-wars-explora...@googlegroups.com
Creo que voy a copiarte la idea de hacer una PCB con los displays, de repente me da pereza cablearlos cada vez que quiero hacer algo con ellos xD.

Ahora la pregunta del millón:
Digamos que tengo un contador, de 0 a 99 (decimal) y quiero mostrar la cuenta usando dos displays, uno para las decenas y otro para las unidades, ¿Como multiplexar las señales de salida?.
Como primer implementación se me ocurrió usar dos bloques y conectar las salidas de ambos al mismo pin, por ejemplo, las dos 'a' conectarlas al pin de salida TR3, pero no he podido, creo que no es posible en icestudio.
¿Tendria que poner una or antes de TR3 y con ambas 'a' en sus entradas?

Espero sea entendible mi explicación, nunca ha sido mi fuerte explicar xD
Saludos
-C

--
Has recibido este mensaje porque estás suscrito al grupo "FPGA-WARS: explorando el lado libre" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.

Democrito

unread,
Oct 5, 2016, 8:57:56 PM10/5/16
to FPGA-WARS: explorando el lado libre
Hola Carlos,

Te pongo un croquis de cómo se suele hacer de manera convencional.

Se ha de controlar los transistores.


Si le das un '1' a la base de uno de los transistor conduce y representa el número o carácter que tengas puesto en a,b,c,d,e,f,g; y si se le pone un cero, no conduce y es como si esos leds estuviesen al aire. Sólo puede conducir uno de los transistores, nunca los dos juntos. No pasa nada si sucediera pero se repetiría el número o carácter en ambos displays. 


Mañana me miro mejor este tema porque voy muy apurado y se me está acumulando trabajo por todos lados.


Saludos!


Carlos 47

unread,
Oct 5, 2016, 9:13:30 PM10/5/16
to fpga-wars-explora...@googlegroups.com
Hola,
Si, supongo que tendré que hacer un bloque nuevo que controle el display de decenas y unidades, las salidas a,b,c...g mas las salidas para los transistores y no usar dos bloques por separado que es como tenia pensado hacerlo :(.
No hay problema con el tiempo. Todavía tengo pendiente lo de la PCB xD.

Saludos

--
Has recibido este mensaje porque estás suscrito al grupo "FPGA-WARS: explorando el lado libre" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.

Obijuan

unread,
Oct 6, 2016, 2:20:08 AM10/6/16
to FPGA-WARS: explorando el lado libre
Hola Carlos!


El miércoles, 5 de octubre de 2016, 20:08:28 (UTC+2), Carlos escribió:
Creo que voy a copiarte la idea de hacer una PCB con los displays, de repente me da pereza cablearlos cada vez que quiero hacer algo con ellos xD.

Ahora la pregunta del millón:
Digamos que tengo un contador, de 0 a 99 (decimal) y quiero mostrar la cuenta usando dos displays, uno para las decenas y otro para las unidades, ¿Como multiplexar las señales de salida?.
Como primer implementación se me ocurrió usar dos bloques y conectar las salidas de ambos al mismo pin, por ejemplo, las dos 'a' conectarlas al pin de salida TR3, pero no he podido, creo que no es posible en icestudio.


En realidad no es una limitación de icestudio. Es un tema electrónica: Nunca puedes conectar dos salidas directamente. Eso generaría un cortocircuito. El propio verilog también te lo impide

La solución se divide en dos partes:

1)  Diseño de un circuito combinacional que a partir del número de 7 bits devuelva 4 bits para la unidad y 4 bits para la decena
2)  Bien puedes sacar cada uno de los dígitos (decena, unidad) en un display de forma independiennte (para cada dígito pones un decodificador de 7 segmentos. En total tendrás 7 x 2 = 14 salidas)
    o bien usas el esquema de demócrito para multiplexar las señales en el tiempo, y pasar de usar 14 salidas a 9

Saludos, Obijuan

 

Carlos 47

unread,
Oct 6, 2016, 2:45:23 AM10/6/16
to fpga-wars-explora...@googlegroups.com
Cierto, me lo plantee mal, estudiare lo que propuso Democrito.

Saludos

Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-lib...@googlegroups.com.

--
Has recibido este mensaje porque estás suscrito al grupo "FPGA-WARS: explorando el lado libre" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.

Democrito

unread,
Oct 6, 2016, 4:57:56 AM10/6/16
to FPGA-WARS: explorando el lado libre
Hola de nuevo Carlos,

Te dejo con dos páginas que pertenece a la misma web, y los resuelve de forma electrónica pura (sin microcontrolador). Habría que traducir todo eso a FPGA, creando algunos componentes, otros ya están en el propio icestudio y uno de ellos lo hiciste tú (el decodificador de 7 segmentos).

Observa que hay tres CLOCK, el 1, 2 y X. El CLOCK1 (señal de 1HZ) y CLOCK2 (señal de 100Hz) salen de dos 555 independientes (dos osciladores), y el CLOCKX (a la derecha del esquema) sale un flip-flop JK. Ese flip-flop lo puedes sustituir por uno tipo D (uniendo /Q a la entrada D) o bien usar un tipo T, porque el JK está configurado como divisor de 2; lo importante es que tenga Q y /Q. El 74HC157 es como un multiplexor paralelo de sólo dos combinaciones.


Si te fijas no es en principio tan complicado como parece porque las señales CLOCK las sacarás de dos preescalares de la FPGA; los contadores que cuenten de 0 a 99 lo diseñarás tú, pero son simples contadores ascendente BCD (cuando llega a 10 se pone a cero en cada contador). Lo único que hay que hacer nuevo es es el 74HC157. Lo demás ya lo tienes y sería ir conectando en el icestudio los elementos.

Y el otro esquema es para hacer lo mismo pero con 4 displays.





Carlos

unread,
Oct 8, 2016, 12:57:24 AM10/8/16
to FPGA-WARS: explorando el lado libre


Hola Democrito, gracias por los links :D

Lo hice diferente, pero parecido xD, últimamente he leído mucho la frase "there's many ways to skin a cat" y creo se ejemplifica acá.




El clk_out "alimenta" al contador de arriba, que es el contador de unidades, va incrementándose en una unidad hasta que llega a 9, en ese momento se regresa a 0 y la salida tc (terminal count) se pone en 1 lógico un ciclo del clk del bloque, esa salida tc sirve como clk del contador de decenas, asi cada que el contador de unidades llega a 9 el de decenas se incrementa en una unidad.
(retorna a 0 cuando llega a 9). Más adelante se le podría agregar una terminal tc y poner un contador para las centenas.

Las salidas de ambos contadores van a un array de muxes que son controlados por el bloque de hasta abajo (preescaler de refreshRate), y la salida de los muxes van al decodificador del display de 7 segmentos.

El preescaler de refreshRate es el que controla los transistores que están en el común de los displays, y las salidas tU (transistor Unidades) y tD están negadas entre si, así que en teoría nunca están activos al mismo tiempo. Lo que no he podido es obtener una señal cuadrada a la salida del bloque del preescaler de hasta abajo, el que controla el refreshRate, obtenía una señal como con un duty cicle de 85%. La frecuencia de la señal de salida de este bloque debe de ser mayor a 50Hz (sigo con los calculos xD) .

Todavía no reviso su funcionamiento en físico (estoy buscando los displays y tratando de generar esa señal cuadrada en el prescaler de refreshRate), pero hace la verificacion y el build de manera exitosa.
Feedback bienvenido :D, adjunto el ice.

Saludos
-C
display_DeUn_v2.ice

Democrito

unread,
Oct 8, 2016, 2:10:02 AM10/8/16
to FPGA-WARS: explorando el lado libre
Hola Carlos!

Tiene muy buena pinta tu esquema!

Yo también estoy intentando hacer lo mismo, pero de momento me estoy creando algún componente como el 74LS157. Este proyecto se le puede sacar jugo porque luego se puede utilizar (con algunos cambios) como frecuencímetro, y por eso me he decidido a hacerlo. Saqué un display de 4 dígitos a un horno microondas, le soldé unos transistores para la selección del dígito y a ver qué tal sale...

Si todo va bien sacaremos dos versiones!

Saludos!

Carlos 47

unread,
Oct 8, 2016, 3:53:19 AM10/8/16
to fpga-wars-explora...@googlegroups.com
Bue, al parecer nada funciona a la primera xD.
La cuenta de las unidades va bien, de 0 a 9, o el número que le especifiques en MAX_COUNT, cuando pasa de MAX_COUNT a 0 manda el pulso al contador de las decenas, en las decenas esta el problema, cuando va a incrementarse pone un dígito raro y aumenta, así hasta el 3, de 3 pasa a 0 :/ .
Otra corrección es que debe hacer falta un buffer entre las salidas del FPGA y los displays.

Adjunto el ice con unas correcciones minimas pero que no solucionan lo de arriba, sigo tratando de solucionarlo en el transcurso del día.

Saludos
-C

--
Has recibido este mensaje porque estás suscrito al grupo "FPGA-WARS: explorando el lado libre" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
display_DeUn_v2.ice

Democrito

unread,
Oct 8, 2016, 4:12:02 AM10/8/16
to FPGA-WARS: explorando el lado libre
Acabo de probar tu circuito, el primero, y va medio bien. Hace bien la multiplexión y eso es lo importante, sólo que no cuenta bien, da saltos, pero eso es "picata minuta" (pequeña minucia).

Voy a ver el segundo código.

Democrito

unread,
Oct 8, 2016, 4:18:11 AM10/8/16
to FPGA-WARS: explorando el lado libre
El segundo código sigue sin contar bien... voy a ver los contadores...

Democrito

unread,
Oct 8, 2016, 4:42:56 AM10/8/16
to FPGA-WARS: explorando el lado libre
Perdón, perdón, perdón! Metí la gamba en unas conexiones!

Sigo investigando.

Carlos 47

unread,
Oct 8, 2016, 4:47:50 AM10/8/16
to fpga-wars-explora...@googlegroups.com
En mi caso hace la cuenta mal en el display de las decenas, en las unidades todo va bien.

Saludos y gracias por estarlo revisando :D.

El 8 de octubre de 2016, 03:42, Democrito<spo...@gmail.com> escribió:
Perdón, perdón, perdón! Metí la gamba en unas conexiones!

Sigo investigando.

--
Has recibido este mensaje porque estás suscrito al grupo "FPGA-WARS: explorando el lado libre" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.

Democrito

unread,
Oct 8, 2016, 5:12:19 AM10/8/16
to FPGA-WARS: explorando el lado libre
Ya lo tengo! pero le he hecho algunas modificaciones.

Para simplificar los contadores le puse un clock que fuese por flanco de bajada (lo verás en el código del contador como !clk), porque así es más sencillo ponerlos en cascada. Cuando los contadores funcionan por flanco de bajada sólo hay que llevar la patilla de mayor peso (en este caso es h3) al clock del siguiente contador, así con todos los que quieras.

He puesto otro preescalar, pero sólo para que fuese más rápido y poder verificar en poco tiempo.

No sé porqué, y no es la primera vez, me sale el decodificador de 7 segmentos desordenado, tanto las entradas como las salidas. Este decodificador lo modifiqué yo, igual es por eso.

Adjunto dos códigos, uno con ánodo común y otro con cátodo común, sólo se diferencia en eso.

Gracias por tu esquema! me has ahorrado mucho tiempo!
display_DeUn_v2_cátodo_comun .ice
display_DeUn_v2_anodo_comun .ice

Democrito

unread,
Oct 8, 2016, 5:39:13 AM10/8/16
to FPGA-WARS: explorando el lado libre
Os pongo un vídeo y una foto para que luzca un poco!




Democrito

unread,
Oct 8, 2016, 7:10:16 AM10/8/16
to FPGA-WARS: explorando el lado libre
Le he hecho más modificaciones y por mi parte ya queda así. Adjunto el "ice" por si alguien le apetece echar un ojo.


contador_00_99_anodo_comun .ice

Democrito

unread,
Oct 8, 2016, 12:05:08 PM10/8/16
to FPGA-WARS: explorando el lado libre
Me acabo de dar cuenta de una pequeña cosa mejorable que se me ha escapado, y lo corrijo aquí antes de que me regañe Obijuan...

En los contadores, donde pongo:

always @(posedge !clk)

es en realidad:

always @(negedge clk)

"negedger" es flanco de bajada. 

Carlos 47

unread,
Oct 8, 2016, 12:11:21 PM10/8/16
to fpga-wars-explora...@googlegroups.com
Hola, acabo de bajar el ice, cambie el decoder por el de cátodo común y si, va de una, cambie lo del negedge e igual sirve muy bien, mi error debe estar en los contadores o en los muxes :s, seguiré investigando.

Adjunto tu ice con decoder de cátodo común. Genial el 74ICE157 :D

Saludos

--
Has recibido este mensaje porque estás suscrito al grupo "FPGA-WARS: explorando el lado libre" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
contador_00_99_catodo_comun .ice

Carlos 47

unread,
Oct 8, 2016, 12:40:11 PM10/8/16
to fpga-wars-explora...@googlegroups.com
Estoy trabajando en tu ice para ver en donde tengo el error, cambié el 157 por 4 muxes y funciona bien, entonces el error lo tengo en los contadores :/ .

Saludos
Adjunto el ice

El 8 de octubre de 2016, 11:11, Carlos 47<carlos.san...@gmail.com> escribió:
Hola, acabo de bajar el ice, cambie el decoder por el de cátodo común y si, va de una, cambie lo del negedge e igual sirve muy bien, mi error debe estar en los contadores o en los muxes :s, seguiré investigando.

Adjunto tu ice con decoder de cátodo común. Genial el 74ICE157 :D

Saludos
El 8 de octubre de 2016, 11:05, Democrito<spo...@gmail.com> escribió:
Me acabo de dar cuenta de una pequeña cosa mejorable que se me ha escapado, y lo corrijo aquí antes de que me regañe Obijuan...

En los contadores, donde pongo:

always @(posedge !clk)

es en realidad:

always @(negedge clk)

"negedger" es flanco de bajada. 

--
Has recibido este mensaje porque estás suscrito al grupo "FPGA-WARS: explorando el lado libre" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-lib...@googlegroups.com.
contador_00_99_catodo_comun .ice

Carlos 47

unread,
Oct 8, 2016, 2:27:12 PM10/8/16
to fpga-wars-explora...@googlegroups.com
Y bue, al fin encontré el bug, era un typo en el nombre de las salidas del contador de decenas, en la imagen de abajo pueden ver como las salidas del contador de decenas son: h0, h1, h2, h4, cuando deberían ser h0,h1,h2 y h3 :l

En la siguiente imagen ya esta corregido el typo y funciona todo bien :D


Les debo el vídeo, debo conseguir un buffer porque cuando conecto ambos displays los LEDs casi no se ven al prender.

Adjunto el ice funcional
Saludos
-C

El 8 de octubre de 2016, 11:40, Carlos 47<carlos.san...@gmail.com> escribió:
Estoy trabajando en tu ice para ver en donde tengo el error, cambié el 157 por 4 muxes y funciona bien, entonces el error lo tengo en los contadores :/ .

Saludos
Adjunto el ice
display_DeUn_v2.ice

Carlos 47

unread,
Oct 8, 2016, 2:32:07 PM10/8/16
to fpga-wars-explora...@googlegroups.com
Por cierto, se me olvido comentar que si no quieren que la cuenta llegue hasta 99 solo deben cambiar el valor de los localparam MAX_COUNT en ambos contadores, por ejemplo si quieren que solo llegue hasta 35, en el contador de unidades MAX_COUNT debe ser 4'h5 y en el contador de decenas MAX_COUNT debe ser 4'h3.

Saludos

El 8 de octubre de 2016, 13:27, Carlos 47<carlos.san...@gmail.com> escribió:
Y bue, al fin encontré el bug, era un typo en el nombre de las salidas del contador de decenas, en la imagen de abajo pueden ver como las salidas del contador de decenas son: h0, h1, h2, h4, cuando deberían ser h0,h1,h2 y h3 :l

En la siguiente imagen ya esta corregido el typo y funciona todo bien :D


Les debo el vídeo, debo conseguir un buffer porque cuando conecto ambos displays los LEDs casi no se ven al prender.

Adjunto el ice funcional
Saludos
-C

Democrito

unread,
Oct 8, 2016, 7:22:24 PM10/8/16
to FPGA-WARS: explorando el lado libre
Adjunto el "ice" de un contador 0..9999, tiene cuatro displays. Un oscilador va a la entrada del primer contador que incrementa cada 1/4 de segundo. Funciona perfecto.


contador 0_9999 anodo comun.ice

Democrito

unread,
Oct 8, 2016, 7:27:24 PM10/8/16
to FPGA-WARS: explorando el lado libre
Ahora estoy liado con el frecuencímetro y funciona "medio bien". Me cuenta ciclos de más y estoy buscando la razón de ello.

Si le pongo un oscilador de 100Hz me cuenta 140; si se lo pongo de 1000 me cuenta 1400. Cosa más rara!, en fin!

Democrito

unread,
Oct 8, 2016, 8:39:37 PM10/8/16
to FPGA-WARS: explorando el lado libre
Por si alguien tiene dudas sobre el conexionado de las salidas de la FPGA con los displays, dejo un esquema del conexionado. En este caso es ánodo común, pero aquí lo importante es ver la "filosofía" del conexionado. Hay 11 resistencias de 220 ohmios. Todos las 'A' de los displays van unidas, y todas las 'B' con el resto de las B, y todas las 'C' con el resto de las C... etc. Los ánodos comunes es lo que va a sus respectivos transistores; los transistores son de propósito general, no importa el que utilices mientras sea NPN, van a funcionar en modo corte/saturación.
 
Ya sea dos o más displays, esta forma de hacerlo funcionar se llama "modo dinámico", que es en forma de barrido, de esta manera se ahorran muchas patillas, especialmente a partir de más de dos displays.
 
Haz clic en la imagen para ver la imagen completa.

 

Democrito

unread,
Oct 8, 2016, 10:28:10 PM10/8/16
to FPGA-WARS: explorando el lado libre
Por fin! He conseguido arreglar lo del frecuencímetro!!! Y no era moco de pavo...
Resulta que los prescalares no son onda cuadras perfectas (me refiero al duty cycle) y cuando contaba pulsos sólo contaba durante el tiempo de duración del flaco de bajada. He tenido que usar un viejo truco para poder leer el ciclo completo. Ha sido utilizar ese viejo truco y ale, cuenta perfecto, perfecto, perfecto. Ufff! con proyectos de este tipo es bueno conocer estos detalles... Mañana con más tiempo posteo este proyecto.


Democrito

unread,
Oct 9, 2016, 8:09:09 AM10/9/16
to FPGA-WARS: explorando el lado libre
Hola!

Pongo el esquema y algunas explicaciones.

En el proyecto anterior habíamos hecho un contador ascendente con display. Para hacer un frecuencímetro es muy parecido, sólo que hay que resetear los contadores por unidad de tiempo, en el caso más sencillo es de 1 segundo, porque así nos da directamente los hercios; y otra cosa importante es que justo antes de resetear se ha de guardar (o retener) en una memoria (16 flip-flop tipo D) el valor que tenían los contadores. Una vez guardado, el resto es como en el anterior ejercicio, se multiplexa esa información a los displays. Pero hay un pequeño problema, tenemos que medir todo 1 segundo y como puedes ver en el esquema, a la vez que se retiene los datos en los 16FFD, se resetea el contador durante la mitad de ese segundo, porque estaría a '1' el reset. Hay un truco para resetear el reset sin perturbar los tiempos de contaje y para eso hay que hacerlo ultra rápido. De esto se encarga un flip-flop que tiene la salida /Q conectada a 4 puertas Not. Cuando entra un pulso por el clock del Flip-flop, se pone a 1 la señal Q y /Q a '0'. Estas puertas Not actúan como una red de atraso para hacer reset al propio flip-flop (el reset del flip-flop se activa por '0'). El resultado es un pulso tan corto que sólo mide unos pocos nanosegundos.

Dejo un vídeo del funcionamiento. Utilicé un 555 para ir variando las frecuencias y utilicé un osciloscopio USB para verificar la exactitud de la frecuencia. Tened en cuenta que necesita todo un segundo para "situarse" y dar el valor correcto.


Adjunto el "ICE" para quien quiera probrarlo; originalmente está realizado sobre una icestick.

Saludos.
frecuencimetro_icestick.ice

Democrito

unread,
Oct 9, 2016, 8:13:38 AM10/9/16
to FPGA-WARS: explorando el lado libre
En el esquema digo: "Multiplexadores 4x4", en realidad son de 4x1, pero con la construcción que hice (los 4 juntos) actúan como un multiplexor 4x4.

Julián Caro Linares

unread,
Jul 29, 2017, 4:42:24 PM7/29/17
to FPGAwars: explorando el lado libre

¡Buenas!

Tenía pendiente cacharrear por cacharrear un día con un display de 7 segmentos con icestudio. 

He estado siguiendo un poco este hilo (tampoco todo por que hay una cantidad de información detallada enorme) e iba a usar alguno de los bloques que habíais creado para ello, pero los del repo han desaparecido o los adjuntos se han quedado viejos.

Total que al final como lo importante es jugar pues he hecho mi propio bloque, lo único significativo que tiene es la entrada anode_comm que permite según sea 1 o 0 utilizar el bloque para 7 segmentos de ánodo o cátodo común.

Aquí el bloque:


Y aquí en un ejemplo de contador de segundos de 0  a 9




He reutilizado la imagen del bloque que rondaba por este hilo (gracias Carlos)


Dejo mi bloque y el ejemplo en:


https://github.com/jcarolinares/fpga-biorobots/tree/master/icestudio_blocks



Pedazo de hilo más guay ¡gracias por toda la información!





Reply all
Reply to author
Forward
0 new messages