La venganza de los Tiny VGA Pong, ahora se controla con un solo botón
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.
Y un prototipo que hice con Fritzing
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!



