TODOPIC
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?
31 de Octubre de 2014, 19:03:34

Ingresar con nombre de usuario, contraseña y duración de la sesión
Buscar:     Búsqueda Avanzada
350569 Mensajes en 39337 Temas por 41082 Usuarios
Último usuario: pablo-nm
* Inicio Ayuda Buscar Calendario Ingresar Registrarse
Buscar en TodoPIC
+  TODOPIC
|-+  Microcontroladores PIC
| |-+  Lenguaje Basic para microcontroladores PIC (Moderadores: dogflu66, doppel, jansuini, Marioguillote, aitopes)
| | |-+  Proyectos simples en PIC Simulator IDE
0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Marcar como favorito Imprimir
Autor Tema: Proyectos simples en PIC Simulator IDE  (Leído 4278 veces)
sn4k32k6
PIC10
*
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 11



« : 11 de Mayo de 2012, 23:33:36 »

Hola comunidad!  Acabo de modificar el Post para que valla quedando indexado. Voy a ir subiendo todas las ideas que veo en Internet, entre informacion y otras cosas me hayan ayudado ami a avanzar en todo lo que refiere a Pic en Simulator ide. Vi algunos dados electronicos, que estaban hechos con 7 leds (simulando la forma de un dado),  y como el famoso "Led Cube", pero en todos lados lo vi hecho con Arduino(a pesar de eso la idea está y eso es lo que nos sirve). He visto tambien el control de Displays de 7 seg (1 display, 2 y hasta 4 o a lo sumo 5) y en mas de una oportunidad he preguntado para el control de 40 displays de 7 seg y me han dicho que es poco probable con un solo Pic, pero le he encontrado la vuelta. SI SE PUEDE! , solo necesitan saber que quieren, entender cuales son las Limitaciones con las que se van a encontrar(Pines, Memoria de Flash) y en base a eso...a programar XD.

Pd: este post es meramente instructivo, pensando en las personas que recien ingresan en el mundo de los microcontroladores con leves conocimientos en Basic
Pd2: yo tambien soy aprendiz lol
Cualquier critica constructiva es bien recibida Smile


Indice:


1 - Dado para Juego de Rol, Con Selector de Dados (4/6/8/10/12/20/99)


2 - Cube Led 3x3x3 con 16F84A, con la poca memoria Flash y los pines, intentare hacerle 6 rutinas de movimiento (Proximamente)













Cuando tenga tiempo voy a ir subiendo los demas. saludos! lol

« Última modificación: 15 de Mayo de 2012, 18:13:28 por sn4k32k6 » En línea
sn4k32k6
PIC10
*
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 11



« Respuesta #1 : 14 de Mayo de 2012, 16:48:18 »

1 - Dado de Rol

Pic: 16F876A

Es muy facil y utiliza un solo pulsador para todo. Haciendo pulsaciones, te muestra un aleatorio entre 1 y 20 (el predeterminado cuando inicializa) y si mantienes apretado por 3 segundos, ingresa al "modo" opcion, es muy facil darse cuenta porque los displays haran una intermitencia, y les mostrara los valores disponibles (4 -6-10-12-20-99). Para seleccionarlo, basta con esperar en el elegido por unos 5 segundos, y vuelve al modo "Tira dado"

Subo la imagen hecha en Isis del schema, y el codigo hecho en PSI.

Código
GeSHi (freebasic):
  1. Dim t2_ms As Word
  2. Dim t2_ms_contar As Word
  3. Dim t1_ms As Word
  4. Dim t1_ms_contar As Word
  5. Dim n_rand As Byte
  6. Dim i As Byte
  7. Dim d_var As Byte
  8. Dim d_set(7) As Byte
  9. Dim un As Byte
  10. Dim de As Byte
  11. Dim d_varu As Byte
  12. Dim d_vard As Byte
  13. AllDigital
  14. t1_ms = 0
  15. t1_ms_contar = 2000  'milisegundos a contar
  16. t2_ms = 0
  17. t2_ms_contar = 500 'base para intermitencia
  18. TMR0 = 0
  19. TRISA = %000010
  20. TRISB = 0
  21. TRISC = 0
  22. PORTB = 0
  23. PORTC = 0
  24.  
  25.  
  26. d_var = 20  'predeterminado 20
  27. d_set(0) = 4
  28. d_set(1) = 6
  29. d_set(2) = 8
  30. d_set(3) = 10
  31. d_set(4) = 12
  32. d_set(5) = 20
  33. d_set(6) = 99
  34.  
  35. OPTION_REG.T0CS = 0
  36. OPTION_REG.PSA = 0
  37. OPTION_REG.PS0 = 1
  38. OPTION_REG.PS1 = 0
  39. OPTION_REG.PS2 = 0
  40. INTCON.TMR0IF = 0
  41. INTCON.TMR0IE = 1
  42. INTCON.PEIE = 1
  43. Enable
  44. Goto main
  45. opcion:
  46. i = 0
  47. While t1_ms < 3000
  48. d_var = d_set(i)
  49. If d_var < 10 Then
  50. d_varu = d_var
  51. d_vard = 10
  52. Else
  53. d_varu = d_var - (d_var / 10) * 10
  54. d_vard = d_var / 10
  55. Endif
  56. Select Case t2_ms
  57. Case <= 300  'uso la base de t2 para generar la intermitencia en Opciones
  58. Call display(d_varu, d_vard)
  59. Case < 600  '600
  60. Call display(11, 11)
  61. Case Else
  62. t2_ms = 0
  63. EndSelect
  64. If PORTA.1 = 1 Then
  65. While PORTA.1 = 1
  66. Select Case t2_ms
  67. Case <= 300  '300
  68. Call display(d_varu, d_vard)
  69. Case < 600  '600
  70. Call display(11, 11)
  71. Case Else
  72. t2_ms = 0
  73. EndSelect
  74. Wend
  75. i = i + 1
  76. If i = 7 Then i = 0
  77. t1_ms = 0
  78. Endif
  79. Wend
  80. main:
  81. Call display(10, 10)  'del 0 al 9 son numeros, el 10 es "-" y el 11 es vacio
  82. If PORTA.1 = 1 Then
  83. t1_ms = 0
  84. TMR0 = 0
  85. t1_ms_contar = 2000
  86. While RA1 = 1
  87. Call display(10, 10)
  88. If t1_ms = 2000 Then
  89. TMR0 = 0
  90. t1_ms = 0
  91. t1_ms_contar = 5000
  92. t2_ms = 0
  93. t2_ms_contar = 600
  94. While RA1 = 1
  95. Wend
  96. Goto opcion
  97. Endif
  98. Wend
  99. n_rand = TMR0 Mod d_var
  100. If n_rand = 0 And d_var = 99 Then n_rand = 0
  101. If n_rand = 0 And d_var <> 99 Then n_rand = 1
  102. Select Case n_rand  'select case para separar Unidad y Decena
  103. Case < 10
  104. un = n_rand
  105. de = 0
  106. Case Else
  107. un = n_rand - (n_rand / 10) * 10
  108. de = n_rand / 10
  109. EndSelect
  110. t1_ms = 0
  111. t1_ms_contar = 1000
  112. TMR0 = 0
  113. While t1_ms < 1000
  114. Call display(un, de)
  115. Wend
  116. Endif
  117. Goto main
  118. End                                              
  119. Proc display(unidad As Byte, decena As Byte)
  120. PORTB = LookUp(0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x18, 0xbf, 0xff), unidad
  121. PORTC = %01
  122. WaitMs 5
  123. PORTC = %11
  124. WaitMs 2
  125. PORTB = LookUp(0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x18, 0xbf, 0xff), decena
  126. PORTC = %10
  127. WaitMs 5
  128. PORTC = %11
  129. WaitMs 2
  130. End Proc                                          
  131. On Interrupt
  132. Save System
  133. If t1_ms < t1_ms_contar Then t1_ms = t1_ms + 1
  134. If t2_ms < t2_ms_contar Then t2_ms = t2_ms + 1
  135. TMR0 = 0
  136. INTCON.TMR0IF = 0
  137. Resume                                            
  138.  
  139.  
  140.  
En línea
sn4k32k6
PIC10
*
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 11



« Respuesta #2 : 15 de Mayo de 2012, 18:09:50 »

2 - Cube Led 3x3x3

Pic: 16F84A

Este es un Cube led, en su version Chiquita. Se necesitan  27 leds, cada "piso" esta en catodo comun, y cada anodo conectado con el que esta debajo de el, teniendo asi 9 anodos, y 3 catodos a controlar(No voy a detallar como es el armado del "cubo" en si, ya que estoy enfocando el hilo con el Pic y la programacion, pueden hacerlas con las mismas patas de cada led). Para reducir un poco mas los pines (ya que asi suman 12 y no podriamos usar el 16F84A de una manera agil) agregamos un decodificador BCD to Decimal  [CD4028] (se pueden usar otros similares). Intente aprovechar la memoria al maximo ya que es muy chica, y me han salido 5 rutinas, si alguien aporta alguna que ocupe menos, se podrian agregar algunas mas.

Adjunto imagen del Esquema en Isis (la simulación en Proteus es muy pobre, les recomendaria que lo prueben directamente en la Protoboard, es mas directo y descarta muchas dudas.

Psi:
Código
GeSHi (freebasic):
  1. AllDigital
  2. Dim piso As Byte
  3. Dim pos As Byte
  4. Dim i As Byte
  5. Dim ii As Byte
  6. Dim salir As Byte
  7. Dim t1_ms As Word
  8. Dim t1_ms_contar As Word
  9. t1_ms = 0
  10. OPTION_REG.T0CS = 0
  11. OPTION_REG.PSA = 0
  12. OPTION_REG.PS0 = 0
  13. OPTION_REG.PS1 = 1
  14. OPTION_REG.PS2 = 0
  15. INTCON.T0IF = 0
  16. INTCON.T0IE = 1
  17. Enable
  18. TRISA = 0
  19. TRISB = 0
  20. PORTB = 0
  21. PORTA = 0
  22. main:
  23. Gosub plataformas
  24. Gosub giro_vertical
  25. Gosub barras_verticales
  26. Gosub espiral
  27. Gosub aleatorio
  28. Goto main
  29. End                                              
  30. plataformas:
  31. piso = 1
  32. t1_ms = 0
  33. t1_ms_contar = 1000
  34. salir = 0
  35. While salir < 5
  36. t1_ms = 0
  37. While t1_ms < 200
  38. For i = 1 To 3
  39. For ii = 1 To 3
  40. Call mostrar(ii, i)
  41. WaitMs 1
  42. Next ii
  43. Next i
  44. Wend
  45. t1_ms = 0
  46. While t1_ms < 200
  47. For i = 1 To 3
  48. For ii = 4 To 6
  49. Call mostrar(ii, i)
  50. WaitMs 1
  51. Next ii
  52. Next i
  53. Wend
  54. t1_ms = 0
  55. While t1_ms < 200
  56. For i = 1 To 3
  57. For ii = 7 To 9
  58. Call mostrar(ii, i)
  59. WaitMs 1
  60. Next ii
  61. Next i
  62. Wend
  63. t1_ms = 0
  64. While t1_ms < 200
  65. For i = 1 To 3
  66. For ii = 3 To 9 Step 3
  67. Call mostrar(ii, i)
  68. WaitMs 1
  69. Next ii
  70. Next i
  71. Wend
  72. t1_ms = 0
  73. While t1_ms < 200
  74. For i = 1 To 3
  75. For ii = 2 To 8 Step 3
  76. Call mostrar(ii, i)
  77. WaitMs 1
  78. Next ii
  79. Next i
  80. Wend
  81. t1_ms = 0
  82. While t1_ms < 200
  83. For i = 1 To 3
  84. For ii = 1 To 7 Step 3
  85. Call mostrar(ii, i)
  86. WaitMs 1
  87. Next ii
  88. Next i
  89. Wend
  90. salir = salir + 1
  91. Wend
  92. Return                                            
  93. giro_vertical:
  94. piso = 2
  95. salir = 0
  96. t1_ms = 0
  97. t1_ms_contar = 1000
  98. While salir < 10
  99. While t1_ms < 150
  100. For i = 1 To 9
  101. Call mostrar(i, piso)
  102. WaitMs 1
  103. Next i
  104. Wend
  105. t1_ms = 0
  106. While t1_ms < 150
  107. For i = 1 To 3
  108. Call mostrar(i, 3)
  109. WaitMs 1
  110. Next i
  111. For i = 4 To 6
  112. Call mostrar(i, 2)
  113. WaitMs 1
  114. Next i
  115. For i = 7 To 9
  116. Call mostrar(i, 1)
  117. WaitMs 1
  118. Next i
  119. Wend
  120. t1_ms = 0
  121. While t1_ms < 150
  122. For i = 1 To 3
  123. For ii = 4 To 6
  124. Call mostrar(ii, i)
  125. WaitMs 1
  126. Next ii
  127. Next i
  128. Wend
  129. t1_ms = 0
  130. While t1_ms < 150
  131. For i = 7 To 9
  132. Call mostrar(i, 3)
  133. WaitMs 1
  134. Next i
  135. For i = 4 To 6
  136. Call mostrar(i, 2)
  137. WaitMs 1
  138. Next i
  139. For i = 1 To 3
  140. Call mostrar(i, 1)
  141. WaitMs 1
  142. Next i
  143. Wend
  144. t1_ms = 0
  145. While t1_ms < 150
  146. For i = 1 To 9
  147. Call mostrar(i, piso)
  148. WaitMs 1
  149. Next i
  150. Wend
  151. salir = salir + 1
  152. Wend
  153. Return                                            
  154. barras_verticales:
  155. pos = 1
  156. piso = 1
  157. While piso < 4
  158. Call mostrar(pos, piso)
  159. WaitMs 100
  160. pos = pos + 1
  161. If pos = 10 Then
  162. piso = piso + 1
  163. pos = 1
  164. Endif
  165. Wend
  166. Return                                            
  167. aleatorio:
  168. i = 0
  169. While i < 100
  170. pos = (TMR0 Mod 9) + 1
  171. WaitUs 25
  172. piso = (TMR0 Mod 3) + 1
  173. WaitUs 25
  174. Call mostrar(pos, piso)
  175. WaitMs 50
  176. i = i + 1
  177. Wend
  178. Return                                            
  179. espiral:
  180. pos = 0
  181. piso = 1
  182. While piso < 4
  183. For i = 1 To 3
  184. pos = i
  185. Call mostrar(pos, piso)
  186. WaitMs 150
  187. Next i
  188. pos = 6
  189. Call mostrar(pos, piso)
  190. WaitMs 150
  191. For i = 9 To 7 Step -1
  192. pos = i
  193. Call mostrar(pos, piso)
  194. WaitMs 150
  195. Next i
  196. pos = 4
  197. Call mostrar(pos, piso)
  198. WaitMs 150
  199. piso = piso + 1
  200. Wend
  201. t1_ms = 0
  202. While t1_ms < 1000
  203. For i = 1 To 9
  204. Call mostrar(i, 3)
  205. WaitMs 1
  206. Next i
  207. Call mostrar(5, 2)
  208. WaitMs 1
  209. Call mostrar(5, 1)
  210. WaitMs 1
  211. Wend
  212.  
  213. Return                                            
  214. Proc mostrar(posicion As Byte, nivel As Byte)
  215. PORTB = LookUp(%0000, %0001, %0010, %0011, %0100, %0101, %0110, %0111, %1000, %1001), posicion
  216. PORTA = LookUp(%111, %110, %101, %011), nivel
  217. End Proc                                          
  218. On Interrupt
  219. Save System
  220. If t1_ms < t1_ms_contar Then t1_ms = t1_ms + 1
  221. TMR0 = 130
  222. INTCON.T0IF = 0
  223. Resume  

Fue muy divertido verlo funcionar xD. Animense!
« Última modificación: 15 de Mayo de 2012, 18:15:43 por sn4k32k6 » En línea
wolfman77
PIC12
**
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 68


WWW
« Respuesta #3 : 26 de Agosto de 2012, 10:19:14 »

Hola, como estas? tendras algun ejemplo basico con interrupciones? por ejemplo que haya 3 leds, uno parpadee y al pulsar un boton ese led se apague y comience a parpadear el siguiente?
gracias

Martin
En línea

Ayer no sabia nada, hoy se prendio el led.... Wiiiiii!!! lol
sn4k32k6
PIC10
*
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 11



« Respuesta #4 : 05 de Septiembre de 2012, 12:00:55 »

Hola, como estas? tendras algun ejemplo basico con interrupciones? por ejemplo que haya 3 leds, uno parpadee y al pulsar un boton ese led se apague y comience a parpadear el siguiente?
gracias

Martin

Hola martin! hay muchos ejemplos de leds intermitentes en el foro, igualmetne te paso uno que acabo de hacer rapidito en el trabajo, probalo. Lo que pedis, lo hace perfectamente, yo lo haria con interrupciones para que no se pare el programa en el bucle del boton.

Código
GeSHi (freebasic):
  1. AllDigital
  2. TRISA = %00000001
  3. TRISB = 0
  4. Dim i As Byte
  5. Dim accion As Byte
  6. i = 1
  7. accion = 1
  8. main:
  9. If RA0 = 1 Then
  10. While RA0 = 1
  11. Wend
  12. i = i + 1
  13. If i = 4 Then i = 1
  14. PORTB = 0
  15. Endif
  16. Call led(i, accion)
  17. WaitMs 300
  18. Goto main
  19. End                                              
  20. Proc led(i1 As Byte, acc As Byte)
  21. If acc = 1 Then
  22. Select Case i1
  23. Case 1
  24. PORTB.0 = 1
  25. Case 2
  26. PORTB.1 = 1
  27. Case 3
  28. PORTB.2 = 1
  29. EndSelect
  30. Else
  31. Select Case i1
  32. Case 1
  33. PORTB.0 = 0
  34. Case 2
  35. PORTB.1 = 0
  36. Case 3
  37. PORTB.2 = 0
  38. EndSelect
  39. Endif
  40. If accion = 0 Then
  41. accion = 1
  42. Else
  43. accion = 0
  44. Endif
  45. End Proc
  46.  

saludos!
En línea
wolfman77
PIC12
**
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 68


WWW
« Respuesta #5 : 06 de Septiembre de 2012, 11:53:47 »

Hola sn4k32k6
Gracias por el ejemplo, lamentablemente yo sin ejemplos no aprendo jajaja
voy a probar con el que subiste a ver que me sale, pero me viene al pelo

gracias!

En línea

Ayer no sabia nada, hoy se prendio el led.... Wiiiiii!!! lol
sn4k32k6
PIC10
*
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 11



« Respuesta #6 : 11 de Septiembre de 2012, 16:22:46 »

Hola sn4k32k6
Gracias por el ejemplo, lamentablemente yo sin ejemplos no aprendo jajaja
voy a probar con el que subiste a ver que me sale, pero me viene al pelo

gracias!



De nada! después cuéntanos como vas avanzando. saludos!
En línea
Fgabriel
PIC10
*
Desconectado Desconectado

Ecuador Ecuador

Mensajes: 2


« Respuesta #7 : 14 de Septiembre de 2012, 17:01:50 »

hola, quiseiera que me ayuden, tengo dos modulos de comunicación Rf Hm-tr y no se como configurarlos con el programa Pic Simulator Ide, lo que quiero hacer es controlar tres motores de forma inalambrica, con el modulo de transmision conectado a un pic 16f887 tener conectado pulsadores que van a controlar la direccion de giro de los motores y con el modulo de recepcion conectado a otro pic 16f887 hacer girar los motores con la ayuda de un puente H, les agradeceria bastante si pueden subir a la pagina un ejemplo de como seria la programacion de los modulos en pic simulator ide.
De antemano les agradezco por su ayuda
En línea
sn4k32k6
PIC10
*
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 11



« Respuesta #8 : 17 de Septiembre de 2012, 14:36:28 »

hola, quiseiera que me ayuden, tengo dos modulos de comunicación Rf Hm-tr y no se como configurarlos con el programa Pic Simulator Ide, lo que quiero hacer es controlar tres motores de forma inalambrica, con el modulo de transmision conectado a un pic 16f887 tener conectado pulsadores que van a controlar la direccion de giro de los motores y con el modulo de recepcion conectado a otro pic 16f887 hacer girar los motores con la ayuda de un puente H, les agradeceria bastante si pueden subir a la pagina un ejemplo de como seria la programacion de los modulos en pic simulator ide.
De antemano les agradezco por su ayuda

Hola amigo! este hilo esta hecho para proyectos simples, pero el buen DogFlu66 tiene ejemplos de RF en Simulator Ide, me parece que quizás ahí puedas encontrar algo que te ayude con tu proyecto. Hay que utilizar el buscador.

Te dejo el link directo Wink

http://www.todopic.com.ar/foros/index.php?topic=14917.msg167492#msg167492
En línea
TODOPIC
   

 En línea
Páginas: [1] Imprimir 
« anterior próximo »
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.20 | SMF © 2006-2008, Simple Machines XHTML 1.0 válido! CSS válido!
Página creada en 0.207 segundos con 29 consultas.
anything