[VGA][I2C][icestudio] Proyecto screen-pong.

579 views
Skip to first unread message

Juanma Rico

unread,
Oct 15, 2017, 12:50:15 PM10/15/17
to FPGAwars: explorando el lado libre

Buenas a todas/os,

Era inevitable... tras controlar el monitor VGA y el ADC junto con el I2C, tenía que venir el proyecto screen-pong. Aún está muy (pero muy...) verde y tiene el siguiente aspecto en icestudio.


Hoy me he centrado en el bloque de control del juego. Junto con la prueba de I2C y de lectura del ADC, he creado un bloque que controla el juego con un par de potenciómetros (como lo hacía el juego original).

He encapsulado todo lo que he podido el módulo de I2C y la máquina de estados que lee del ADC, aún así no está para nada optimizado ni generalizado. He hecho un copy-paste de código para leer dos canales del ADC "a güevo" y así asignarlo a la posición de los jugadores para saciar el SAV cuanto antes... pero esta dejadez ha traido como consecuencia que ya me cuesta avanzar, apenas incluyo algo de gráfica o de dinámica (no he podido definir ni los rebotes ni las líneas superiores, ni por supuesto los puntos del juego) la FPGA se queda sin recursos... Aunque, tal y como está, el resultado es "jugable" entre dos personas, así que lo he querido compartir con el grupo (los sonidos y los puntos los tenéis que poner vosotros... :))).

El vídeo os muestra el aspecto que tiene ahora mismo (es difícil jugar uno solo y grabar al mismo tiempo... me disculpáis)



Para probarlo simplemente tenéis que poner dos potenciómetros, uno en el canal 0 (juagador 1) y otro en el 2 (para el jugador 2) del ADC (pines A0 y A2), girando el potenciómetro movéis vuestro jugador. Los botones cambian la velocidad de la pelota. Aún queda mucho por hacer, porque los potenciómetros (he usado unos de 100K) hay que calibrarlos con el juego, hay que hacer una máquina de estados para el propio juego, hay que poner el marcador... pero bueno... para echar unas risas recordando tiempos pasados puede servir. :)))

Lo podéis encontrar como siempre en mi cuenta de github: https://github.com/juanmard/screen-pong
Simplemente clonad el proyecto y abrir screen-pong.ice con icestudio, sintetizar y a disfrutar... :))

Saludos.
Juan Manuel Rico




Auto Generated Inline Image 1

Juan Gonzalez Gomez

unread,
Oct 15, 2017, 2:04:45 PM10/15/17
to FPGA-WARS: explorando el lado libre
Oh my God! oh my God! oh my god!!!!!!! 😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍

Me muero de la emoción!!!! Y eso que sólo he visto el vídeo!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

¡Acojonante Juanma!!!!!  ¡Gracias!!!!!!

Saludos, Obijuan

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar 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/961330a7-f9d0-4e1a-9e48-9b46ab39f0a9%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Eladio Delgado

unread,
Oct 15, 2017, 2:26:33 PM10/15/17
to FPGAwars: explorando el lado libre
Juanma, es muy emocionante ver esto!!!!

Muchísimas gracias!!!

Saludos,
Eladio

El 15 oct. 2017 8:04 p. m., "Juan Gonzalez Gomez" <obijua...@gmail.com> escribió:
Oh my God! oh my God! oh my god!!!!!!! 😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍

Me muero de la emoción!!!! Y eso que sólo he visto el vídeo!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

¡Acojonante Juanma!!!!!  ¡Gracias!!!!!!

Saludos, Obijuan
El 15 de octubre de 2017, 18:50, Juanma Rico <juan...@gmail.com> escribió:

Buenas a todas/os,

Era inevitable... tras controlar el monitor VGA y el ADC junto con el I2C, tenía que venir el proyecto screen-pong. Aún está muy (pero muy...) verde y tiene el siguiente aspecto en icestudio.


Hoy me he centrado en el bloque de control del juego. Junto con la prueba de I2C y de lectura del ADC, he creado un bloque que controla el juego con un par de potenciómetros (como lo hacía el juego original).

He encapsulado todo lo que he podido el módulo de I2C y la máquina de estados que lee del ADC, aún así no está para nada optimizado ni generalizado. He hecho un copy-paste de código para leer dos canales del ADC "a güevo" y así asignarlo a la posición de los jugadores para saciar el SAV cuanto antes... pero esta dejadez ha traido como consecuencia que ya me cuesta avanzar, apenas incluyo algo de gráfica o de dinámica (no he podido definir ni los rebotes ni las líneas superiores, ni por supuesto los puntos del juego) la FPGA se queda sin recursos... Aunque, tal y como está, el resultado es "jugable" entre dos personas, así que lo he querido compartir con el grupo (los sonidos y los puntos los tenéis que poner vosotros... :))).

El vídeo os muestra el aspecto que tiene ahora mismo (es difícil jugar uno solo y grabar al mismo tiempo... me disculpáis)



Para probarlo simplemente tenéis que poner dos potenciómetros, uno en el canal 0 (juagador 1) y otro en el 2 (para el jugador 2) del ADC (pines A0 y A2), girando el potenciómetro movéis vuestro jugador. Los botones cambian la velocidad de la pelota. Aún queda mucho por hacer, porque los potenciómetros (he usado unos de 100K) hay que calibrarlos con el juego, hay que hacer una máquina de estados para el propio juego, hay que poner el marcador... pero bueno... para echar unas risas recordando tiempos pasados puede servir. :)))

Lo podéis encontrar como siempre en mi cuenta de github: https://github.com/juanmard/screen-pong
Simplemente clonad el proyecto y abrir screen-pong.ice con icestudio, sintetizar y a disfrutar... :))

Saludos.
Juan Manuel Rico




--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar 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.

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar 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.

Jose Pico

unread,
Oct 15, 2017, 3:51:14 PM10/15/17
to FPGAwars: explorando el lado libre
 Que Bárbaro!
 Es verdaderamente fantásctico!
 
 Enhorabuena!

Gerardo Gomez Fernandez

unread,
Oct 16, 2017, 5:52:40 AM10/16/17
to FPGAwars: explorando el lado libre
Ya veo a obijuan preparando los mandos para jugar con una pcbprints......

Como diria
  Buzz Lightyear  ""Al infinito... ¡y más allá!»
Donde estaran los limites de la maravillosa Alhambra.

Fantastico juanma

Jose Pico

unread,
Oct 17, 2017, 7:39:20 AM10/17/17
to FPGAwars: explorando el lado libre
  Hola Juanma:

  Como te veo con el SAV subido te envío este enlace que creo que te va a gustar y quizás te reactive aún más tu SAV VGA


  Saludos

Juanma Rico

unread,
Oct 17, 2017, 10:28:20 AM10/17/17
to FPGAwars: explorando el lado libre
Jajajaja, gracias José.

Le he echado un vistazo rápido y veo mucho código (para nuestra 1K) y que preprocesa las imágenes con Matlab como yo hice... (parece que todos nos copiamos en Internet... jejeje ;))

Pero sí, mi siguiente paso a intentar era grabar una imagen en nuestra flash y leerla por SPI para mostrarla en el monitor... a ver dónde está el límite de velocidad y capacidad... es posible que mejore si ya le añado la RAM que pedí para el "Warm boot" y leo directamente de ella.

Gracias por el enlace, me lo guardo. ;)
Avisaré si me da tiempo a hacerlo en estos días (aunque ya empieza el agobio de uno de mis proyectos que "me dan de comer" y lo dudo... pero lo haré, no lo intentaré... como decía Yoda... ;))

Saludos.
Juan Manuel Rico

Juan José Luna Espinosa

unread,
Oct 17, 2017, 12:22:02 PM10/17/17
to fpga-wars-explora...@googlegroups.com
Felicidades por el pong Juanma.
Umm creo que ni siquiera la ram spi podrá mantener el ritmo de la VGA :-/

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar 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 una entrada en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.

Juanma Rico

unread,
Oct 17, 2017, 12:49:52 PM10/17/17
to FPGAwars: explorando el lado libre
Gracias Juan José,

El pong está un poco verde todavía y ya he llegado al límite de la 1K, pero por lo menos se ve el concepto y lo mejor, es "jugable"... :)

Si tiene algo bueno que esté tan verde es que todavía puede simplificarse y optimizarse, a ver si por lo menos un generador de sonido y un marcador puede entrar. ;)

El tema de la imagen estoy contigo... el SPI creo que no va a llegar, pero por lo menos ver el límite,... ¿imagen?¿cuanto de ancho?¿cuanto de alto?¿cuanto de profundidad de color? Igual usando la RAM de la propia FPGA (que sabemos que anda por los 100x100 de límite) como "buffer" intermedio, nos permite leer y mostrar desde el SPI algo más...

También tener una FPGA tan limitada nos hace pensar en los recursos y aprovecharlos al máximo... ;)

Saludos.
Juan Manuel Rico

Juan José Luna Espinosa

unread,
Oct 17, 2017, 1:39:02 PM10/17/17
to fpga-wars-explora...@googlegroups.com
Bueno, en 100x100 pixels se puede hacer hasta un Invaders :-)

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar 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 una entrada 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 18, 2017, 2:54:27 AM10/18/17
to FPGAwars: explorando el lado libre
Hola Juanma!!

Mira, tu pong se ha convertido en MONSTER-PONG!!!



jajjaajajaj  Lo he sintetizado y probado en un proyectos.... Nos os podéis imaginar lo que mola!!!!!!!!!!!!

También probé a poner el logo de FPGAwars:




Sería la caña enseñarlo en las charlas!!!  :-)

¡¡Gracias Juanma!!!!!

Saludos, Obijuan
Auto Generated Inline Image 1
Auto Generated Inline Image 2

Juanma Rico

unread,
Oct 18, 2017, 5:28:44 AM10/18/17
to FPGAwars: explorando el lado libre
Jajajajaja, ¡¡Genial Juan!!
¡¡El logo se ve super a ese tamaño!!

Y jugar al Pong con el proyector debe ser una pasada... ;)

Gracias por las imágenes... es para sentirse orgulloso y anima un montón. ;)))

Saludos.
Juan Manuel Rico

Juanma Rico

unread,
Oct 18, 2017, 5:33:00 AM10/18/17
to FPGAwars: explorando el lado libre
Por supuesto... ni qué decir tiene que cuentas con todo mi permiso para usarlo en las charlas... Como digo, es todo un orgullo y estaría encantado de que así fuera. ;)

Saludos.
Juan Manuel Rico

Juanma Rico

unread,
Jun 11, 2018, 11:14:16 AM6/11/18
to FPGAwars: explorando el lado libre


Buenas a todos/as,

Retomo este hilo puesto que como ya sabéis realicé una adaptación de este proyecto a la colección iPxs de Sergio Cuenca, que hice público en este otro hilo.
Lo dejé todo empaquetado a modo de colección y que podéis encontrar aquí.

El tema es que no está nada optimizado y en la icezum Alhambra (1K) no entra la versión completa, así que hice una versión para la TinyFPGA-B2, a la cuestión, que me enrollo como siempre... :)))

Como sabéis la TinyFPGA-B2 no tiene nada más que lo esencial y no tiene ADC para leer los potenciómetros, así que en un princio lo hice con cuatro botones, dos para cada jugador, pero me quedó la espinita de redondear el proyecto con unos controles como los de antaño y si era posible hacer la caja para ello.

Iba a disponer de un ADC externo para conectar a la TinyFPGA-B2, pero antes quise probar otra cosa a propuesta de Luke Valenty que me pareció mejor y más simple: intentarlo con un circuito RC. Investigando comprobé que esto se hace ya en los microcontroladores cambiando el pin de salida a entrada y midiendo el tiempo de subida de la señal retrasada por la descarga del condensador y controlada por la resistencia (RC-ADC se llama).

La cuestión es que como no sé si esto es posible en la FPGA, yo he intentado este fin de semana diferentes enfoques y ninguno ha funcionado, así que para evitar entrar en un loop de pruebas infinitas alimentadas por la desesperación del #SAV... antes os pregunto por si alguien me puede guiar. Mis pruebas se pueden resumir en varios puntos y preguntas:

  1. Lo primero, es lo primero... ¿Es posible cambiar la configuración de un pin de entrada a salida una vez sintetizado el circuito como se hace en un microcontrolador?
    Imagino que no porque esto tendría que ver con el problema que tenemos para sintetizar los malditos triestado en Yosys... pero ahí dejo la pregunta.

  2. Descartado el primero, un segundo enfoque fue utilizar dos pines, uno de salida donde fijo la tensión al RC (canal azul) y luego leo por otro (amarillo), la teoría era sencilla y las señales de ambos pines en el osciloscopio parecían correctas.



    Pero nunca llegó a funcionar. El esquema en icestudio para el control del Pong es sencillo.




    Y el código en Verilog en principio no debía dar problemas. Se lleva un contador con el sistema y se rearma al provocar la señal de salida. Se espera a que se se active la entrada y mientras se cuenta, dándonos un tiempo de carga a la activación. La carga y descarga dependerá de la resistencia (nuestro potenciómetro) y el tiempo nos dará una medida de la posición a través del valor de la resistencia.


    // Control game by simple RC-ADC.
    localparam N
    = 32;

    // General counter.
    reg
    [N-1:0] counter;

    // Output Signal.
    reg T
    = 0;

    // Counter clock system.
    always
    @(posedge clk)
    begin
        counter
    <= counter + 1;
    end

    // We get enough time for descharging, active output.
    always
    @(posedge counter[22])
    begin
        T
    <= ~T;
        counter
    <= 0;
    end

    // Output pin with T period.
    assign out_ply1
    = T;

    // Detected input, get counter.
    always
    @(posedge in_ply1)
    begin
        pos_ply1
    <= counter[9:0];
    end


    Más sencillo no puede ser... pues nada, por muchas vueltas que le he dado no funciona. :(((
    Y me surge la pregunta... ¿Cuales son los límites de tensión para que la activación de un pin se detecte como un flanco de subida?¿Depende de la tensión o depende de la tangente de la curva de dicha tensión? :((

  3.  Desesperado y ante la duda, este mismo fin de semana he intentado otro enfoque, sería complicar un poco más el circuito, pero aún así sería un poco más sencillo y se necesitarían menos recursos de la FPGA que montar un ADC por I2C (por ejemplo). Se trata de utilizar un 555 para crear un circuito monoestable, disparar el "trigger" mediante el mismo pin de output (out_ply1) y así me enviara al pin de entrada (in_ply1) un pulso ya cuadrado según la resistencia de control y evitar el inconveniente anterior de saber cuando o cuando no se activa el flanco.


    Las señales en osciloscopio eran correctas pero la cosa seguía sin funcionar, no tenía sentido, era simplemente un medidor de ancho de pulso y no funcionaba.
    Para evitar más variables que pudieran intervenir y liberar pines en la FPGA decidí utilizar un esquema típico Astable con el 555.



    Donde ya no es necesario el output del "trigger" y la resistencia controlable (potenciómetro) es la RA (100K), las señales en osciloscopio correctas, con pulsos desde 1ms hasta 100ms, suficientes para pruebas lentas de posición en pantalla... y sigue sin funcionar. Ahora simplifico el código Verilog, reseteo un contador temporal en el flanco de subida, cuento a la velocidad del reloj del sistema mientras el pulso de entrada está arriba (16Mhz, cada 0.0625us, por tanto unos 21 bits para el máximo pulso de 100ms... yo pongo uno de 32 por si acaso) y vuelco la cuenta en la posición en el flanco de bajada de la señal del 555 (in_ply1).


    // Se cuenta a la velocidad del sistema (16Mhz)
    // siempre que la entrada esté activa en el pulso alto.
    always
    @(posedge clk)
    begin
       
    if (in_ply1)
       
    begin
            temp_ply1
    <= temp_ply1 + 1;
       
    end
    end

    // En el flanco de subida de la entrada se resetea el contador.
    always
    @(posedge in_ply1)
    begin
        temp_ply1
    <= 0;
    end

    // En el flanco de bajada se vuelca el contador como  posición de salida
    // del jugador.
    always
    @(negedge in_ply1)
    begin
        pos_ply1
    <= temp_ply1;
    end


    Y las señales aparecen correctamente en el osciloscopio (azul en este caso una salida preescalada de la FPGA para ver que funciona y la amarilla la obtenida del 555)...



    Pero la cosa sigue sin funcionar y el jugador sigue sin actualizar su posición... :((

    He hecho unas pequeñas pruebas y en la FPGA se detectan correctamente los flancos de subida y bajada de la señal proveniente del 555, pero lo que es contar sigue sin contar... :((

    Hay otros enfoques para el control del jugador (un encoder digital, el propio ADC externo y demás...), pero quería pediros antes ayuda para ver si a alguno de vosotros se le ocurre qué puede estar pasando, ya que para alguna prueba sencilla puede ser perfecto el RC-ADC e incluso el uso del 555 en algunos casos (y porque me puede el #SAV de hacer funcionar algo tan sencillo... :)) ).

Toda sugerencia será bienvenida.

Un saludo
Juan Manuel Rico


Auto Generated Inline Image 1
Auto Generated Inline Image 2
Auto Generated Inline Image 3
Auto Generated Inline Image 4
Auto Generated Inline Image 5

Jose Pico

unread,
Jun 11, 2018, 5:40:06 PM6/11/18
to FPGAwars: explorando el lado libre
Hola Juanma:

Puede que tengas un problema de concepto a la hora de describir el hardware en verilog, el código se ve fácil pero puede ser que no funcione por esto:

Un registro no puede reaccionar a dos señales de reloj. Funciona por flanco ascendente o descendente, dependiendo de si está negada la entrada o no. Pero físicamente no existe circuito para Double Data Rate.

Detectar los flancos ascendentes y descendentes requiere, por tanto, dos registros: https://www.google.ch/patents/US7317773

En la datasheet de la iCE40 se indica, que, como en el caso de los triestado, hay pines I/O que soportan DDR:

Input Register Block
The input register blocks for the PIOs on all edges contain registers that can be used to condition high-speed inter-
face signals before they are passed to the device core. In Generic DDR mode, two registers are used to sample the
data on the positive and negative edges of the system clock signal, creating two data streams
.
 
Output Register Block
The output register block can optionally register signals from the core of the device before they are passed to the
sysIO buffers. In Generic DDR mode, two registers are used to capture the data on the positive and negative edge
of the system clock and then muxed creating one data stream
.
- mostrar texto citado -

Explicación que me dio en otro hilo 


 
nuestro gran Unai.

En el código que pones  entiendo que  el registro counter  quizás no pueda actuar con clk y por otra parte con counter[22],
puede que por ahí vaya el error?

necesites un DDR para realizar lo que quieres?

Saludos

Jose Pico

unread,
Jun 11, 2018, 5:46:33 PM6/11/18
to FPGAwars: explorando el lado libre
Hola Juanma:

 no sé si te valdrá pero te paso un DDR que hice y algún ejemplo por si te puede inspirar.

Saludos
DDR FlipFlop v3.ice
Ex DDR FlipFlop v3 01.ice
Ex DDR FlipFlop v3.ice
Ex DDR FlipFlop.ice

Juanma Rico

unread,
Jun 11, 2018, 7:29:01 PM6/11/18
to FPGAwars: explorando el lado libre

Gracias Jose por el código y por tus respuestas,

Está claro que aún me cuesta pensar en hardware. :)))

Le echaré un vistazo con calma porque así, a primera vista y a estas horas, no he consegido encontrar el error.
Lo que sí he conseguido con el esquema de doble flanco que uso es que la variación de frecuencia que proviene del 555 me haga variar la velocidad del jugador, pero no es lo que quiero, lo que quiero es que me haga variar la posición, así que ahí sigo... buscando. :)))

Es cierto que en alguna prueba que he dejado olvidado el mismo registro incrementándose en dos "allways" con distinto flanco me aparece un error de "double driver" (o algo parecido) que no sabía a qué achacar y es posible que sea por lo que me dices, lo extraño es que en este código que pongo no me dice nada y sintetiza, pero no funciona :(((

Pero es muy probable que anden por ahí los tiros con el tema de los flancos... cuando lo tenga más o menos "acorralado" y saque alguna conclusión te cuento.

Saludos
Juan Manuel Rico


Gabriel Marturano

unread,
Jun 11, 2018, 9:09:18 PM6/11/18
to fpga-wars-explora...@googlegroups.com
Hola, Juan Manuel,
Es mi primer contacto en el canal.
Cuál sería el inconveniente de colocar un Arduino mini o nano con 3V3 de alimentación anexo al tu fpga?
No son costosos, no son grandes de tamaño y te proveerían de canales analógicos y buses I2C, SPI, USART y/o paralelos.
Es decir , lo conectarías a la FPGA según tu comodidad.
Además, podés usarlo para parte del proceso.
Espero te sirva lo aportado que va con ese espíritu.
Saludos

Gabriel

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar 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.

Jose Pico

unread,
Jun 18, 2018, 6:10:05 PM6/18/18
to FPGAwars: explorando el lado libre
Hola Juanma:

Solo comentarte que podrías usar como mandos de los jugadores, dos encoders de quadratura rotativos ( parecen un potenciómetro). 
Mediante el encoder de cuadratura obtienes una señal que te puede indicar la dirección hacia donde se mueve el cursor, de forma que atacando a un contador este se incrementa/decrementa dando así la posición del cursor del jugador.

He realizado un pequeño ejemplo donde uso el encoder que ataca a un contador y este incrementa-decrementa conforme se mueve el rotativo del encoder.


Te adjunto esquema, ficheros *ice y pequeño video por si te puede parecer interesante.

Saludos



El lunes, 11 de junio de 2018, 17:14:16 (UTC+2), Juanma Rico escribió:
DecQuadrature.ice
EjemDecQuad05.ice
Contador-8bits UD_Reset_EN.ice
Encoder.mp4

Juanma Rico

unread,
Jun 19, 2018, 2:10:29 AM6/19/18
to FPGAwars: explorando el lado libre

Buenas Gabriel, bienvenido... :))

¿Inconveniente de incluir un Arduino a 3v3? Ninguno, por supuesto... :))

El no incluirlo es simplemente por utilizar toda la potencia de la FPGA y aprender a utilizarla.
A mi entender hacerlo de otra forma es matar "moscas a cañonazos" o, como dice Sergio: "Cuando tu única herramienta es un martillo, todos los problemas te parecen clavos". :)))

El control del Pong por potenciómetros ya lo hice y funcionaba en la icezum Alhambra (de forma cutre, eso sí) que tiene integrado un ADC y que se comunica con la FPGA por I2C, es decir, el hacerlo con un ADC externo ya no me aportaría nada, o más bien muy poco. El hacerlo con un Arduino creo que sería algo similar y tampoco creo que aporte mucho a este proyecto.

Aunque no te niego que lo del conectar la FPGA y comunicarla con un microcontrolador como el Arduino también puede ser interesante en sí mismo, no es el modo en que quiero enfocar este proyecto.

Saludos.
Juan Manuel Rico

Juanma Rico

unread,
Jun 19, 2018, 2:17:59 AM6/19/18
to FPGAwars: explorando el lado libre

Buenas Jose,

Sí, eso mismo me propusieron en Twitter... y a eso me refería con el "encoder digital" en la frase:

Hay otros enfoques para el control del jugador (un encoder digital, el propio ADC externo y demás...), pero quería pediros antes ayuda para ver si a alguno de vosotros se le ocurre qué puede estar pasando [..]

Gracias por los ficheros, le echaré un vistazo, pero como le dije a Gabriel me interesa más cerrar este frente que abrir otros nuevos, lo del Pong es realmente la excusa, lo que más me interesa es echar a andar este ADC-RC... ¿Hay algo más sencillo que convertir cualquier pin de la FPGA en un pin Analógico con una resistencia y un condensador? :)))

Saludos
Juan Manuel Rico


Juan Gonzalez Gomez

unread,
Jun 19, 2018, 3:10:46 AM6/19/18
to FPGA-WARS: explorando el lado libre
Hola Jose!

Justo el encoder rotativo es un ejemplo genial para enseñar electrónica digital, y tenía pensado incluirlo en los tutoriales. Como tú ya tienes esto funcionando, me basaré en ellos (los créditos son tuyos, por supuesto)

¡Muchísimas gracias! Es un gran aporte 😊

Saludos, Obijuan

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar 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.

Jose Pico

unread,
Jun 19, 2018, 3:29:24 AM6/19/18
to FPGAwars: explorando el lado libre
Tranquilo Obijuan!
Aquí no hay créditos que valgan jejejejje. ( Realmente me he basado en la página de fpga4fun, algún libro que tengo  y adapto para probarlo en iceStudio )
úsalo, mejóralo y disfrútalo...!
Un placer.
Comentar que el encoder que uso es realmente un  encoder mecánico y puede aparecer algún rebote entiendo ( uno óptico sería mucho mejor ) pero es muy barato y como aplicación funcional es interesante.

Saludos y Gracias

Gabriel Marturano

unread,
Jun 19, 2018, 10:52:30 AM6/19/18
to fpga-wars-explora...@googlegroups.com
Te comento, me conseguí una FPGA modelo mojo V3 y contiene en la placa un Arduino para la carga de la configuración.
Ademas, utiliza las entradas analógicas del Arduino pero usándolas en la FPGA como si de un conversor A/D incluido en la placa se tratase. En fin , a mi el cañonsito me viene bien aunque no tuve oportunidad de usarlo en mis proyectos. Como está incluido en la placa desde mi perspectiva es parte del sistema.

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar 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.

Juanma Rico

unread,
Jun 19, 2018, 6:45:50 PM6/19/18
to FPGAwars: explorando el lado libre

Buenas Gabriel,

Sí, he oído hablar de esa tarjeta.
Es seguro que es el futuro, integrar en una misma tarjeta microcontrolador y FPGA.
Incluso creo recordar que en el grupo (si no me equivoco fue Unai) se comentó de que los tiros actualmente en la industria van por integrarlo todo en una misma pastilla, un SoC con un microcontrolador que tenga la FPGA como una parte más del mismo, un periférico... al igual que tienen módulos I2C, UART, ADC y demás para comunicarse con el exterior... que pueda usarse como "pegamento lógico" (glue-logic) del microcontrolador, que es para lo que, hoy en día, más se utiliza las FPGA en el entorno profesional.

Ahora voy a hacer de "pitoniso", con lo cual seguramente me equivocaré... jejejejejeje :))

Yo pienso que será así durante un tiempo... y será el futuro sólo porque estamos cambiando de paradigma, estamos acercándonos a esta tecnología pero el común de los mortales no la conocemos ni la controlamos bien, por eso será un futuro, pero será un futuro "pasajero"... y me explico...

Aún nuestro martillo (o cañonazo) son los microcontroladores... por eso todo se quiere resolver con ellos, lo mismo ocurría con los relés y contactos en la automatización hace unos años, incluso existe cierto paralelismo con el idioma de programación de los primeros PLC Simatic de Siemens (creo que van por el Step-7). Utilizaban una programación basada en estos relés y contactos (KOP) donde ya no había relés y contactos, sino simples registros de memoria...y todo esto para hacer más fácil la transición. Fue un motivo muy fuerte de ventas de estos PLC para sustituir antiguos automatismos basados en relés, es decir, bajaron la barrera de entrada al disponer a los técnicos de una forma de representación ya conocida, aunque en un primer momento se desaprovechara un alto porcentaje de la potencia real del PLC... esto lo estoy diciendo de memoria, igual alguien que esté más actualizado en el tema de los PLC, su uso en la automatización y su historia puede corregirme... :))

Por eso yo auguro que las FPGA seguirán un camino similar: primero serán un añadido al microcontrolador, por simple "transición" o "tradición" pero, con el uso, las personas serán capaces de pensar en otros modos "no-secuenciales" de resolver los problemas y cada vez tomará más y más importancia el bloque FPGA... hasta que las personas que se dediquen a utilizar estos nuevos SoC descubran que un martillo está muy bien, pero utilizar la fragua de la FPGA de al lado, donde poder fabricar las herramientas que requieras... cuchillos, destornilladores, alicates y todo lo que tu imaginación (no secuencial) te permita (incluso martillos), para resolver problemas concretos en cada momento, está mucho mejor...

Para eso hay que saber fabricar y fabricar bien, esas herramientas... pero eso llegará irremediablemente, cuando se generalice su uso y los idiomas de descripción HDL sean tan comunes como lo puedan ser hoy día los idiomas C++ o el Python en software... dejaremos de usar martillos para todo y refinaremos mejor la herramienta a utilizar. :))

De ahí mi empeño en saber hacer un ADC-RC sin nada más que con un circuito sintetizado en la propia FPGA, que, en teoría, debería ser tan simple como poder medir el tiempo de descarga de un condensador con un simple contador a golpe de reloj... pero que mi mente secuencial de tantos años de programación de microprocesadores no me deja encontrar el modo y la forma más sencilla de hacerlo... como conclusión: definitivamente me faltan muchos años para poder ser herrero de la fragua si todavía no sé ni cómo calentar el acero...  :))

Saludos
Juan Manuel Rico


Message has been deleted

Gabriel Marturano

unread,
Jun 20, 2018, 10:54:13 AM6/20/18
to fpga-wars-explora...@googlegroups.com
Mi amigo JuanMa:
Lo mio no es usar el micro, solo los periféricos que este trae. Cuando como decís vos estos ya vengan integrados a la FPGA no necesitaremos los micros. El soft que trae el micro es solo leer el periférico ADC y poner en el SPI que transfiere a la FPGA, solo eso. Chiquitito, baratito, simple y sin problemas. Lo del RC yo lo probé en otro proyecto (no con un FPGA) y se me armó una grosa...
Por eso te daba esta opción. Al final es mas pequeña, mas económica y mas práctica.Pero veo que eres un purista y por eso te recomiendo que leas la hoja de datos del DAC08 o similar para que veas como está diseñado y por que es mas conveniente mi opción, o quizá te oriente mas en lo que buscas y te sirva.
Te adjunto página para busca integrados que me ha sido muy útil:


Saludos.

Gabriel

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar 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.

Juanma Rico

unread,
Jun 20, 2018, 10:02:31 PM6/20/18
to FPGAwars: explorando el lado libre
Sí, dejémoslo en purista... :)))

Juanma Rico

unread,
Jun 20, 2018, 10:07:25 PM6/20/18
to FPGAwars: explorando el lado libre
Gracias Unai por todos tus datos y enlaces... los miraré con atención...
Más que nada por no ser un futurólogo del presente... jejejejejeje

"El futuro no es más que la ignorancia de tu presente."  :)))

Gracias de nuevo por pasarte de vez en cuando por el grupo.

Saludos
Juan Manuel Rico


Gabriel Marturano

unread,
Jun 21, 2018, 2:52:07 PM6/21/18
to fpga-wars-explora...@googlegroups.com
Jua jua !!!
Espero te sirva el vínculo te envié.
Bajate hoja de Dac08 y decime si te sirvió.

Saludos

Gabriel

El 20 de junio de 2018, 23:02, Juanma Rico <juan...@gmail.com> escribió:
Sí, dejémoslo en purista... :)))

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar 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.
Reply all
Reply to author
Forward
0 new messages