Autor Tema: Juego de dardos con PIC + Lenguaje C o Ensamblador  (Leído 8626 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado MoonSakura

  • PIC10
  • *
  • Mensajes: 4
Juego de dardos con PIC + Lenguaje C o Ensamblador
« en: 13 de Mayo de 2009, 16:40:16 »
Buenas, soy una chica que estudia telecomunicaciones y que en el mundo del PIC estoy algo pez xD.
Me han mandando hacer un trabajo que combina el PIC:16F84A y el lenguaje C o ensamblador.
Si alguien tiene un poco de tiempo, sabe sobre el tema y quiere ayudarme le estare muy agredecida el trabajo se compone de lo siguiente:
Espero sus respuestas, gracias ^^
« Última modificación: 04 de Junio de 2009, 13:58:22 por MoonSakura »

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Juego de dardos con PIC + Lenguaje C o Ensamblador
« Respuesta #1 en: 13 de Mayo de 2009, 18:05:51 »
Hola Moon.

Primero tienes que saber como trabaja el PIC, en este caso el 16F84. Te paso el datasheet de 16F84A para que lo estudies.

Una vez que sepas como trabaja el 16F84A, tienes que elejir con que lenguaje quieres trabajar. En este foro hay unos tutoriales para aprender a programar en ASM como en C:

ASM desde 0 y Indice de Hilos Destacados en el sub-Foro de C para Microcontroladores.

Una vez que ayas elejido por uno, te recomiendo el tutorial de Mis primeros programas en en ASM. PIC16F84A y PIC16F628A/648A

Para poder diseñar el software que llevará el PIC, debes primero diseñar el hardware. Tendrás que realizar un bosquejo de como será el hardware y como trabaja los sensores que utilizarás (en el caso de armar el proyecto)

Saludos y suerte.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado J_jOsE

  • PIC12
  • **
  • Mensajes: 57
Re: Juego de dardos con PIC + Lenguaje C o Ensamblador
« Respuesta #2 en: 13 de Mayo de 2009, 19:11:07 »
hola :mrgreen:
MoonSakura

concuerdo con LeonPic
primero, elegi en que lenguaje vas a programar
segundo, elegi el pic
haste un dibujo de lo que vas a hacer (el sensor, el pic, y otros periferico )

una ves que te decidas, me avisas para poder ayudarte


No Pain No Gain

Desconectado MoonSakura

  • PIC10
  • *
  • Mensajes: 4
Re: Juego de dardos con PIC + Lenguaje C o Ensamblador
« Respuesta #3 en: 14 de Mayo de 2009, 15:46:24 »
 :( el problema es q no se por dnd empezarlo -.- lo unico q se seguro es q necesito 3 display con sus correspodientes decodicadores por lo demas no lo se... de toas formas lo intentare y si no me aclaro, os puedo preguntar? thx ^^

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Juego de dardos con PIC + Lenguaje C o Ensamblador
« Respuesta #4 en: 14 de Mayo de 2009, 16:02:30 »
Yo realmente no entendi ni como funciona el juego  :D  :D  :D

Miremos primero la parte del hardware. Vas a necesitar 3 display, con multiplexación de la señal. Para esto se puede usar directamente un puerto para controlar que segmentos encender o usar un CI conversor como el 74LS47 o el CD4511. Para leer un poco sobre esto entra a Mis primeros programas en en ASM. PIC16F84A y PIC16F628A/648A, por ahora intenta entender como funciona y despues vemos la parte de programación.
Despues hay que saber de que manera nos enviará la información el sensor (serial o paralelo). Con esto mas o menos aclarado podras armar tu bosquejo y podrás enfocarte en la parte de programación. Y no dudes en preguntar :wink:
No contesto mensajes privados, las consultas en el foro

Desconectado jgpeiro06

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 276
Re: Juego de dardos con PIC + Lenguaje C o Ensamblador
« Respuesta #5 en: 14 de Mayo de 2009, 19:31:29 »
Hola moonsakura!
También soy estudiante de teleco, en la UMH, y mi profesor Sistemas Electronicos Digitales me dijo una vez que si todos sus alumnos fuesen como yo, él se quedaría sin trabajo...jajaja

Antes que nada quiero decirte que te podemos ayudar, te podemos hacer todo el trabajo, pero supongo que en examen aparecerá un ejercicio similar, así que si quieres aprobar deberás coger soltura, y eso se coge escribiendo y depurando programas...Pero si no hay examen y quieres entregar el trabajo sin haberlo leído, por mi ningún problema...

Lo primero es definir correctamente el funcionamiento de la aplicación, seria interesante obtener un organigrama del programa a partir de las especificaciones que aparecen en el PDF. Ademas del funcionamiento, es importante saber como se van a recibir los datos del sensor y como se van a escribir en el display.
Después hay que hacer una primera implementacion general, sin centrarse en detalles, y para eso lo mas facil es hacerlo en C. Si queremos el programa en ensamblador lo podremos traducir a mano si tenemos cerca el juego de ¿35? instrucciones del PIC. Aunque vayas a trabajar en ensamblador, recomiendo que lo hagas primero en C, siempre que tengas una base mínima de C.
Y ya puedes entregar la practica!

Diagrama de flujo del programa

Código en de del programa
Código: C
  1. unsigned char leePuntuacion( ){ // Lee la puntuación de los 5 primeros bits del PORTA
  2.         TRISA |= 0x1F;
  3.         return PORTA & 0x1F;
  4. }
  5.  
  6. void muestraContador( unsigned char v ){ // Muestra el contador en los 8 bits del PORTB
  7.         TRISB &= 0;
  8.         PORTB = v;
  9. }
  10.  
  11.  
  12.  
  13. int main(){
  14.  
  15.         unsigned char contador = 201;  
  16.         unsigned char puntuacion = 0;
  17.        
  18.         while( contador != 0 ){
  19.                 puntuacion = leePuntuacion();
  20.                 if( contador >= puntuacion )
  21.                         contador -= puntuacio;
  22.                 muestraContador( contador );
  23.         }
  24.        
  25.         muestraContador( 255 );
  26.        
  27.         while(1);
  28.        
  29.         return 0;
  30. }


Una vez tenemos el código en C, podemos compilarlo directamente con el PICC Lite que viene como el MPLAB o podemos ir "incrustando" el equivalente en ensamblador.

Código en ensamblador del programa
Código: Microchip Assembler
  1. list      p=16f84
  2. #include <p16f84.inc>
  3.  
  4. CBLOCK 0x020
  5. temp0
  6. contador
  7. puntuacion
  8. ENDC
  9.  
  10. ORG 0x000
  11. clrf PCLATH
  12. goto MAIN
  13.  
  14. ORG 0x100
  15. ;unsigned char leePuntuacion( ){ // Lee la puntuación de los 5 primeros bits del PORTA
  16. leePuntuacion:
  17. ;       TRISA |= 0x1F;
  18. bsf STATUS, RP0
  19. movlw 0x1F
  20. iorwf TRISA,f
  21. bcf STATUS, RP0
  22. ;       return PORTA & 0x1F;
  23. movf PORTA, w
  24. andlw 0x1F
  25. return
  26. ;}
  27.  
  28. ;void muestraContador( unsigned char v ){ // Muestra el contador en los 8 bits del PORTB
  29. muestraContador:
  30. movwf TEMP0;
  31. ;       TRISB &= 0;
  32. bsf STATUS, RP0
  33. movlw 0
  34. andwf TRISB,f
  35. bcf STATUS, RP0
  36. ;       PORTB = v;
  37. movwf TEMP0, w
  38. movwf PORTB
  39. return
  40. ;}
  41.  
  42.  
  43.  
  44. ;int main(){
  45. MAIN:
  46. ;       unsigned char contador = 201;  
  47. movlw D'201'
  48. movwf contador
  49. ;       unsigned char puntuacion = 0;
  50. movlw 0x00
  51. movwf puntuacion
  52.  
  53. ;       while( contador != 0 ){
  54. CLINE1:
  55. movf contador, w
  56. btfs? STATUS, z
  57. goto CLINE3
  58. ;               puntuacion = leePuntuacion();
  59. call leePuntuacion
  60. movf puntuacion
  61. ;               if( contador >= puntuacion )
  62. movf contador, w
  63. subwf puntuacion, w
  64. btfs? STATUS, c
  65. goto CLINE2
  66. ;                       contador -= puntuacio;
  67. movf contador
  68. subwf puntuacion, w
  69. movwf contador
  70.  
  71. ;               muestraContador( contador );
  72. CLINE2;
  73. movf contador, w
  74. call muestraContador
  75. goto CLINE1
  76. ;       }
  77.        
  78. ;       muestraContador( 255 );
  79. CLINE3:
  80. movf contador, w
  81. call muestraContador
  82.        
  83. ;       while(1);
  84. goto $-1;
  85.        
  86. ;       return 0;
  87. nop
  88. ;}
  89.  
  90. END


Este código no funciona, pero solo es cuestión de introducirlo cacho a cacho en el MPLAB para corregirlo.

Si necesitas saber exactamente como comparar dos números en ensamblador, o necesitas una plantilla .ASM inicial, te recomiendo que descargues el Code Module Library de Microchip. Es un programa que muestra rutinas pre-escritas y listas para ser utilizadas en PIC.

Sobre como pintar un dato en el display de 7 segmentos... depende un poco de como quieras hacerlo. Si solo dispones de un display de 7 segmentos y quieres mostrar el numero 201, tendras que mostrarlo "secuencialmente", primero las centenas, decenas, unidades y pausa... Lo más fácil es que busques en la red varias rutinas para controlar un display de 7 segmentos e intentes copiar la más sencilla que veas. Puedes buscar por http://www.microchipc.com/ o http://www.piclist.com/ .

Sobre como leer el dato de la puntuación... ten en cuenta que este dato solo debe ser medido una vez por tirada. Para no restar dos veces la puntuación de una tirada es necesario esperar a que el dato se borre (PORTA==0) dentro de la función leePuntuacion.

y ya no se me ocurre más que decir.
Espero te sirva de mucha ayuda.

Saludos
« Última modificación: 15 de Mayo de 2009, 10:50:58 por jgpeiro06 »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Juego de dardos con PIC + Lenguaje C o Ensamblador
« Respuesta #6 en: 14 de Mayo de 2009, 19:39:41 »
Decirte que yo te puedo ayudar, te puedo hacer todo el trabajo...

 :shock:
No contesto mensajes privados, las consultas en el foro

Desconectado MoonSakura

  • PIC10
  • *
  • Mensajes: 4
Re: Juego de dardos con PIC + Lenguaje C o Ensamblador
« Respuesta #7 en: 14 de Mayo de 2009, 20:10:40 »
 :shock: Me has dejado asi con los ojos como platos, tienes razon... le kitarias su trabajo xD muchas gracias, lo mirare trankilamente (q ara ya es un poco tarde) y preguntare las dudas ^^ thx bss
 

Desconectado jgpeiro06

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 276
Re: Juego de dardos con PIC + Lenguaje C o Ensamblador
« Respuesta #8 en: 20 de Mayo de 2009, 07:28:18 »
¿Que tal va el trabajo?¿Has intentado probar el código en ensamblador?

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: Juego de dardos con PIC + Lenguaje C o Ensamblador
« Respuesta #9 en: 20 de Mayo de 2009, 10:44:40 »
MoonSakura, aunque jgpeiro06 te haya puesto el código o parte de él (no lo he mirado) yo que tu no lo copiaba, me quedaba con el diagrama de flujo e intentaba escribir el código por mi cuenta.

Date cuenta de que todopic es una de las primeras opciones al buscar en google, y muchos compañeros tuyos y profesores se meterán para ver que hace la gente.

No dudes en preguntar cualquier cosa y bienvenida

Desconectado MoonSakura

  • PIC10
  • *
  • Mensajes: 4
Re: Juego de dardos con PIC + Lenguaje C o Ensamblador
« Respuesta #10 en: 04 de Junio de 2009, 12:00:13 »
Volvi, si no es muxa molestia, podrian borrar el post? please! gracias ^^

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: Juego de dardos con PIC + Lenguaje C o Ensamblador
« Respuesta #11 en: 04 de Junio de 2009, 12:46:21 »
No sé, pero creo que no lo van a borrar. El foro está porque la gente no borra los mensajes.....

Desconectado jgpeiro06

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 276
Re: Juego de dardos con PIC + Lenguaje C o Ensamblador
« Respuesta #12 en: 04 de Junio de 2009, 15:23:59 »
Citar
yo que tu no lo copiaba
Si buscas en google "juego dardos pic" este hilo aparece en la primera pagina de resultados, así que es posible que alguien más que haya intentado encontrar la solución al problema de MoonSakura en internet haya leído este hilo.

Citar
si no es muxa molestia, podrian borrar el post?
¿Quieres que se borre el hilo entero?¿Quieres que borre algo de mi solución?¿porque?