Cientificosaficionados.com

Los foros de los científicos aficionados de la red.
Fecha actual Vie May 29, 2020 6:32 pm

Todos los horarios son UTC [ DST ]




Nuevo tema Responder al tema  [ 6 mensajes ] 
Autor Mensaje
NotaPublicado: Mié Feb 28, 2018 5:29 am 
Desconectado

Registrado: Vie Nov 13, 2009 4:27 am
Mensajes: 612
País: mexico
Ciudad: acapulco
Hola conforeros, estoy haciendo un juego para niños para la Feria de las Ciencias de mi hijo, es una tabla con dos botones de tipo "el que oprima primero gana", la mecánica es que, en cada turno, el Arduino elige un valor aleatorio x, luego enciende unos leds rojos x veces, tocando un beep en cada una y avisando en la pantalla que no presionen, al llegar a x+1 enciende los leds verdes, beepea y avisa que ahora sí, entonces, el primero que oprima el botón es el ganador, pero si se adelantan y lo oprimen antes, pierden, dándole el punto al adversario.

Ya todo estaba funcionando adecuadamente, salvo por un mensaje de inicio, estuve depurando con el Arduino conectado a una Laptop, pero, de repente, al subir un sketch, dejó de reconocer el puerto USB, enviando un error de Windows, probé cambiando el cable USB, cambiando a otra computadora y el error persiste, en cuanto conecto el Arduino zaz, mensaje de error de Windows del tipo "el dispositivo falló y no será reconocido".

Dando por hecho que el Arduino había fallado conecté otro, Windows lo reconoce, el entorno lo acepta, subo el sketch y justo un instante antes de poner el mensaje de "subido", otra vez Windows manda error y desde entonces la placa también es inaccesible.

Es claro que algo en mi sketch está deshabilitando el puerto USB, pero la placa sigue funcionando bien hasta donde la tenía programada. Alguna idea de por dónde empezar?

Son Arduinos Leonardo, estoy usando los siguientes pines:

0 - Botón maestro.
1 - Desconectado.
2 - Botón del jugador 1 (INT 0) manejando los pulsos de ambos botones como interrupciones.
3 - Botón del jugador 2 (INT 1)
4 y 5 - Desconectado.
6 - Bocina pequeña 8 ohms.
7 al 12 - Pantalla LCD 16x2.

De antemano mil gracias.

_________________
Creo en la evidencia, creeré cualquier cosa, sin importar cuán extraña o ridícula sea, siempre que haya evidencias de ello, cuanto más extraña o ridícula sea, sin embargo, más sólidas tendrán que ser las evidencias.


Arriba
 Perfil  
 
NotaPublicado: Mié Feb 28, 2018 6:35 am 
Desconectado
Avatar de Usuario

Registrado: Mié Sep 06, 2006 7:28 am
Mensajes: 1470
Ubicación: Alcala de Henares (Madrid, España)
País: España
Ciudad: Alcalá de Henares
Buenos dias mmcompu.

El problema es estas usando el PIN 0 para el "botón maestro". Prueba a usar el PIN 4 ó el PIN 5 para esa función.

En Arduino UNO o Arduino Leonardo no puedes usar los pines 0 ni 1 para pulsadores o salidas generales porque se usan para la comunicación serie. Cuando tu sketch programa el PIN 0 como entrada general deja de funcionar como pin de la UART y no ya no puedes comunicar con el ATMEGA.
Estos pines deben dejarse sin uso si quieres mantener la comunicación serie, si los usas para otra cosa pierdes esa función y no puedes decargar los sketch.
El pin 0 esta rotulado con RX y el pin 1 con TX

Imagen

_________________
¡No es imposible, lo que pasa es que no sabes como hacerlo!
Aka: no es difícil si sabes como.
http://heli.xbot.es


Arriba
 Perfil  
 
NotaPublicado: Mié Feb 28, 2018 6:39 am 
Desconectado

Registrado: Vie Nov 13, 2009 4:27 am
Mensajes: 612
País: mexico
Ciudad: acapulco
Mil gracias, ahora... ¿alguna idea de cómo recuperar los dos que ya dejé sin serial?

_________________
Creo en la evidencia, creeré cualquier cosa, sin importar cuán extraña o ridícula sea, siempre que haya evidencias de ello, cuanto más extraña o ridícula sea, sin embargo, más sólidas tendrán que ser las evidencias.


Arriba
 Perfil  
 
NotaPublicado: Mié Feb 28, 2018 11:08 am 
Desconectado
Avatar de Usuario

Registrado: Mié Sep 06, 2006 7:28 am
Mensajes: 1470
Ubicación: Alcala de Henares (Madrid, España)
País: España
Ciudad: Alcalá de Henares
Buf!
En los Arduino UNo esto tiene facil solución porque tienen otro micro dedicado a la conversión USB-SERIE y el proporciona el reset al ATMEGA328.
Pero los Leonardo solo tienen un ATmega32u4 que lleva el USB y el bootloader interno. Los pines TX y RX no deberían interferir en la comunicación serie en esta placa (en la ARDUINO UNO sí que lo hacen, por hardware).
Quizás se haya corrompido el bootloader, puedes usar la opción de quemar bootloader.

Con este método programas el chip ATmega32u4 del Leonardo desde otro arduino que funcione:

Imagen
http://www.instructables.com/id/Overvie ... cess-and-/

_________________
¡No es imposible, lo que pasa es que no sabes como hacerlo!
Aka: no es difícil si sabes como.
http://heli.xbot.es


Arriba
 Perfil  
 
NotaPublicado: Mié Feb 28, 2018 11:10 am 
Desconectado

Registrado: Vie Nov 13, 2009 4:27 am
Mensajes: 612
País: mexico
Ciudad: acapulco
Gracias, ya lo resolví, por si a alguien más le ocurre:

Entré a tutoriales para saber cómo borrar el sketch de la placa y reemplazarlo con un bootloader en limpio.

En teoría muy facilito, se conecta una placa funcional de cualquier tipo, se le sube el sketch "Arduino ISP" de los ejemplos del IDE oficial, se cablea la placa a reprogramar vía conector ICSP o, en Arduino UNO y Mega, con los pines que duplican este conector, se conecta el pin 10 de la placa programadora al reset de la placa a programar, en herramientas/placa se elige el tipo de placa que se va a programar (aunque este conectada una de otro tipo), se elige "Arduino como ISP" en las opciones de programador y se le da a quemar bootloader, todo bien, excepto que de Leonardo a Leonardo no funciona.

Lo que sí funcionó prácticamente a la primera fue un truco genial que vi en un tutorial, se carga un sketch pequeñito (el tipo usó el ejemplo "Blink") se conecta la placa a programar, da mensaje de error, lo ignoras, le das a subir, inicia compilación y justo cuando está terminando de compilar oprimes reset en la placa, esto detiene la ejecución del programa y con ello cualquier error que estuviera bloqueando la comunicación, entonces la computadora reconoce el puerto y el IDE graba el nuevo sketch sin ningún problema.

_________________
Creo en la evidencia, creeré cualquier cosa, sin importar cuán extraña o ridícula sea, siempre que haya evidencias de ello, cuanto más extraña o ridícula sea, sin embargo, más sólidas tendrán que ser las evidencias.


Arriba
 Perfil  
 
NotaPublicado: Mié Feb 28, 2018 7:29 pm 
Desconectado

Registrado: Vie Nov 13, 2009 4:27 am
Mensajes: 612
País: mexico
Ciudad: acapulco
Actualizando: El problema lo generaba el uso de Interrupts() y noInterrupts(), estuve subiendo mi código con el truco de oprimir reset, hasta que llegué a la parte donde deshabilitaba las interrupciones para prevenir que ya registrado el primer push a un botón se oprimiera el otro, esto con el fin de registrar solo al primero, tuve que resolver este asunto de quién oprimió primero dentro del bloque loop, porque sencillamente no hubo modo de deshabilitar las interrupciones sin que el puerto serie se pierda, no se a qué se deba, seguramente estoy haciendo algo mal, pero seguiré investigando después de la feria, que el tiempo es poco y aún nos falta hacer un vending de dulces casero para premiar al ganador del jueguito de la tabla, en cuanto pueda subo fotos de todo el proyecto.

De nuevo mil gracias por la ayuda.

PD: la imagen que subiste está genial como referencia.

_________________
Creo en la evidencia, creeré cualquier cosa, sin importar cuán extraña o ridícula sea, siempre que haya evidencias de ello, cuanto más extraña o ridícula sea, sin embargo, más sólidas tendrán que ser las evidencias.


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 6 mensajes ] 

Todos los horarios son UTC [ DST ]


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com