Inicio > Proyectos electrónicos > La venganza de los Tiny VGA Pong, ahora se controla con un solo botón

La venganza de los Tiny VGA Pong, ahora se controla con un solo botón

Tiny Pong VGA push button Como fue sugerido por los chicos de Hackaday , he añadido un botón simple en el pasador sólo está disponible de mi ATTINY45 con el fin de controlar el Tiny VGA Pong. El interruptor cambia la dirección de remar hacia arriba y abajo, cada vez que lo suelte.

He hecho algunos pequeños cambios en el código, así que echa un vistazo, es posible encontrar algo interesante o útil. Como siempre, el código fuente, esquemas, etc libremente disponible para su descarga.


Hardware

En comparación con Tiny 1.0 Pong , que acaba de agregar un botón en PB5 con una resistencia de 10K ohmios como pull-down.
Aquí está una foto del circuito en la protoboard.

Tiny Pong VGA on the protoboard

Tiny VGA Pong en el protoboard


Y un prototipo que hice con Fritzing

Tiny Pong VGA - Fritzing

Tiny VGA Pong - Fritzing


VGA pinout

VGA pinout


ATtiny firmware

Para utilizar PB5 como un puerto I / O tenemos que volver a programar los fusibles ATtiny con algunos indicadores específicos. Una vez hecho esto, usted no será capaz de volver a programar más con un regular programador ISP. Si usted necesita para flashear el firmware otra, tendrá que restablecer los fusibles con un programador de alto voltaje, éste funcionó bien para mí.
AVR herramientas GNU se utiliza para este proyecto, por lo que el código está escrito en ensamblador GNU.
Con el fin de crear el firmware, yo uso el siguiente script:

 #! / Bin / sh
 avr-gcc-mmcu = ATTINY45-mmcu = ATTINY45-Wall-gdwarf-2-Os-std = gnu99-funsigned-char-funsigned de campos de bits-fpack-estructura-fshort-enumeraciones-MD-MP-MT pong.o-MF pong.od x-ensamblador-con-cpp-Wa,-c-gdwarf2 pong.S tables.S
 avr-gcc-mmcu = ATTINY45-Wl,-Map = pong.map pong.o tables.o-o pong.elf
 avr-objcopy-O-R ihex. eeprom-R. fusible-R. lock-R. la firma pong.elf pong.hex
 . avr-objcopy-j eeprom - la sección de configuración de las banderas = eeprom = "ALLOC, la carga" -.. el cambio de sección-lma eeprom = 0 - no-cambio-warnings-O ihex pong.elf pong.eep | | exit 0
 avr-size-C - MCU = ATTINY45 pong.elf
 rm *. o
 rm *. od
 pong.eep rm
 pong.elf rm
 pong.map rm

Y para cargar en el chip (tenga en cuenta que estoy usando el Arduino con mega-ISP) que utilice la siguiente secuencia de comandos

 #! / Bin / sh
 [-E "/"] && dev/tty.usbserial-A8008VmU PORT = / dev/tty.usbserial-A8008VmU | | PORT = / dev/ttyUSB0
 avrdude-F-P $ PORT-p-c AVRISP ATTINY45-b 19200-U flash: w: pong.hex
 Número de fusibles
 ADVERTENCIA #: fusibles con PB5 como puerto I / O
 # Avrdude-F-P $ PORT-p-c AVRISP ATTINY45-b 19200-U flash: w: pong.hex-Ulfuse: w: 0xCE: m-Uhfuse: w: 0x5f: m-Uefuse: w: 0xff: m

Elimine el comentario de la última línea para programar los fusibles.

Código

El código fuente es casi lo mismo que la primera versión, pero fija algunos errores. En primer lugar, el algoritmo del Bresenham fue aplicado de forma incorrecta, y como yo lo necesitaba sólo para calcular la siguiente posición de la pelota cuando el ángulo es de 22,5 o 67,5, me di cuenta que era más fácil para incrementar simplemente el X (o Y) coordinar cuando la pelota está en una posición aún.
En cuanto a la lectura de botón, que se realiza durante la zona de borrado vertical, 60 veces por segundo lo que da una respuesta bastante buena - ver el chkinput etiqueta en el código para obtener más detalles.





Descargue el Pong Tiny 2.0 código fuente
Disfrute!


  1. No hay comentarios todavía.

Protección anti-spam por WP Captcha-Free