Autor Tema: Ruleta francesa con Pic16f84 y 36 LEDs  (Leído 12931 veces)

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

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Ruleta francesa con Pic16f84 y 36 LEDs
« Respuesta #15 en: 05 de Febrero de 2013, 16:18:37 »
la velocidad iría variando en secciones de 8, o me equivoco?

 :mrgreen:  lo que yo digo, es una suposición,... porque al no ver tu programa... lo pienso como si yo lo escribo  ;-)

Yo lo plantearia, manejando tablas (para el encendido de cada salida) ... por lo que la velocidad, se decrementaria para cada salida en forma uniforme... y no de a 8....
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado Darkman_A

  • PIC18
  • ****
  • Mensajes: 288
Re: Ruleta francesa con Pic16f84 y 36 LEDs
« Respuesta #16 en: 05 de Febrero de 2013, 17:35:29 »
La cosa sería conectar cada salida de uno de los puertos del PIC a la entrada DS del registro, conectando también la salida de reloj del PIC a la entrada de reloj del registro. De esta forma podría controlar los tiempos que dura cada led encendido por medio de programación, y utilizando varios registros hasta obtener 36 salidas en total. El problema surge cuando quiera hacer que al soltar el pulsador la ruleta descienda de velocidad de "giro", ya que pienso yo que los led irían descendiendo de velocidad de 8 en 8, (programándolo con delays diferentes para cada salida del pic...) no se como solucionar este problema. He de hacerlo con el PIC 16F84 si o si, está así especificado. Si me podéis ayudar a comprender como utilizar el registro me sería de muchísima ayuda ;)

Hola DuguSF.
¿Que te parece si acompañas lo que estas explicando con algun grafico?.
Estaria bueno que probaras hacer algun programita que haga correr los led de un puerto, asi vas tomando practica.
Si tenes algo ya iniciado seria bueno que lo subas.
Saludos.


Desconectado DuguSF

  • PIC10
  • *
  • Mensajes: 13
Re: Ruleta francesa con Pic16f84 y 36 LEDs
« Respuesta #17 en: 15 de Febrero de 2013, 15:03:46 »
Este fin de semana si ando con tirmpo subo la partedel programa que tengo pensado, luego necesito ayuda para las temporizaciones del pic pero eso ya no es problema xq lo hablaré con un profesor de lógica digital, aunque toda ayuda es poca para la escasa idea que tengo.

Desconectado DuguSF

  • PIC10
  • *
  • Mensajes: 13
Re: Ruleta francesa con Pic16f84 y 36 LEDs
« Respuesta #18 en: 19 de Febrero de 2013, 09:03:17 »
El programa que he pensado (aún no lo tengo escrito) consistiría en lo siguiente:

Usando el puerto B del pic para activar los leds controlados por el registro, haría un ciclo que dijera
PortA(entrada)
mientras RA0 =1 se ejecutaría un ciclo a una frecuencia usando el TMR0, ciclo en el que portb haría lo siguiente:
PORTB=0b00000001
PORTB=0b00000000 y así usando diferentes delays o funciones de TMR0, mantendría en ese estado el puerto B hasta que los primeros 8 leds terminen de encenderse (todo sincronizado con temporizaciones, interrupciones y esas cosas que aún no tengo muy claras)
luego PORTB pasaría a 0b00000010 y seguidamente a 0b00000000, pasando a 0b00000100 cuando el segundo registro que conectaré a la segunda RB1 termine de controlar los 8 LED que le corresponden. así hasta encender los 36 LED de la ruleta sincronizando pic y registro mediante el reloj. Esto es lo que no se como hacer, sincronizar todo para que la ruleta no funcione a saltos de 8 leds... sino que vayan seguidos. Otra duda que tengo es lo que ocurriría al desear que se parara la ruleta descendiendo de velocidad, pues me temo que siempre se detendría en uno de los últimos leds de cada registro, eliminando la posibilidad de que caiga por ejemplo en la 2ª salida de un registro...

necesito saber que les parece la idea y que soluciones me podéis dar a los problemas que seguro me surgirán,..

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Ruleta francesa con Pic16f84 y 36 LEDs
« Respuesta #19 en: 19 de Febrero de 2013, 10:34:03 »
Hola, opino que la idea de planeta9999 encaja perfectamente en el funcionamiento que describes en tu ultimo post, haz la prueba nada pierdes.

saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado DuguSF

  • PIC10
  • *
  • Mensajes: 13
Re: Ruleta francesa con Pic16f84 y 36 LEDs
« Respuesta #20 en: 19 de Febrero de 2013, 11:10:00 »
Hola, opino que la idea de planeta9999 encaja perfectamente en el funcionamiento que describes en tu ultimo post, haz la prueba nada pierdes.

saludos.
La idea de planeta9999 está muy bien, es sencilla y tal. Pero repito que es IMPRESCINDIBLE utilizar el PIC 16F84.

Desconectado DuguSF

  • PIC10
  • *
  • Mensajes: 13
Re: Ruleta francesa con Pic16f84 y 36 LEDs
« Respuesta #21 en: 19 de Febrero de 2013, 11:14:56 »
El caso es que tengo que hacerlo utilizando ese integrado, el PIC16F84...

Eso es lo de menos, obviamente no has captado la esencia de mi post, en el que te estoy diciendo como controlar decenas de leds con tan solo unos pocos puertos, conectando los led en contraposición. Si prefieres liarla con 3 pic o con varios registros de desplazamiento, no llegarás a ninguna parte, y mucho menos con un nivel de conocimientos tan básico.

como encuentro la forma de posicionar los LED para que actúe de la forma que yo deseo? y de esta forma podría reducir la velocidad se giro de forma que la velocidad disminuya de forma constante?¿

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Ruleta francesa con Pic16f84 y 36 LEDs
« Respuesta #22 en: 19 de Febrero de 2013, 12:13:51 »
La idea de planeta9999 está muy bien, es sencilla y tal. Pero repito que es IMPRESCINDIBLE utilizar el PIC 16F84.

Con el puerto B tienes para 56 leds, mas que sobrado.


como encuentro la forma de posicionar los LED para que actúe de la forma que yo deseo? y de esta forma podría reducir la velocidad se giro de forma que la velocidad disminuya de forma constante?¿

Fijate en las combinaciones necesarias para lograr el encendido de cada led, el codigo que puso planeta999 esta muy claro, seteas TRIS y las salidas del puerto, el truco esta en las combinaciones.

Para lo de la velocidad es el mismo tema tanto de la manera de planeta como la que te mencionaron de los latchs. Tienes que variar los tiempos segun tus necesidades.

Prueba con 9 leds y veras.

Por lo que veo no tienes mucha experiencia en el uso de los pics, por lo que te recomiendo superes etapas, primero prueba los leds, que te funcionen los que necesitas, y luego pasas a lo de los tiempos, veras que te vas a divertir con este proyecto.

led1 ON
pausa
led2 ON
pausa
led3 ON
pausa
.
.
.
.
led final ON
pausa
led1 ON
pausa


el valor de pausa lo puedes modificar para que se muestre el efecto de variar la velocidad de los leds


saludos!! :)



« Última modificación: 19 de Febrero de 2013, 12:17:16 por KALLITOS »
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado DuguSF

  • PIC10
  • *
  • Mensajes: 13
Re: Ruleta francesa con Pic16f84 y 36 LEDs
« Respuesta #23 en: 19 de Febrero de 2013, 12:51:19 »
La idea de planeta9999 está muy bien, es sencilla y tal. Pero repito que es IMPRESCINDIBLE utilizar el PIC 16F84.

Con el puerto B tienes para 56 leds, mas que sobrado.


como encuentro la forma de posicionar los LED para que actúe de la forma que yo deseo? y de esta forma podría reducir la velocidatd se giro de forma que la velocidad disminuya de forma constante?¿

Fijate en las combinaciones necesarias para lograr el encendido de cada led, el codigo que puso planeta999 esta muy claro, seteas TRIS y las salidas del puerto, el truco esta en las combinaciones.

Para lo de la velocidad es el mismo tema tanto de la manera de planeta como la que te mencionaron de los latchs. Tienes que variar los tiempos segun tus necesidades.

Prueba con 9 leds y veras.

Por lo que veo no tienes mucha experiencia en el uso de los pics, por lo que te recomiendo superes etapas, primero prueba los leds, que te funcionen los que necesitas, y luego pasas a lo de los tiempos, veras que te vas a divertir con este proyecto.

led1 ON
pausa
led2 ON
pausa
led3 ON
pausa
.
.
.
.
led final ON
pausa
led1 ON
pausa


el valor de pausa lo puedes modificar para que se muestre el efecto de variar la velocidad de los leds


saludos!! :)




Muchas gracias por vuestra ayuda, creo que finalmente lo haré utilizando la idea del preograma que postee anteriormente. Me resulta más sencillo y fácil de comprender. Había pensado utilizar una patilla del pic como salida de reloj que controle el registro(programandolo, ya que no se si el pic tie e la función de reloj externo en alguna de sus patillas), sincronizarlo con las temporizaciones del tmr0. Y el resto sería simplemente ir variando los delays e ir probando. Creen que es buena idea? Se que las habrá más simples pero esta es la forma que más rápido he entendido. Saludos ;-)

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Ruleta francesa con Pic16f84 y 36 LEDs
« Respuesta #24 en: 19 de Febrero de 2013, 13:17:58 »
ok bueno si lo haras con los registros esta bien, finalmente funcionara, pero con mas hardware.

No es necesario pulso externo, el mismo pic te dara el clock necesario para los registros.
Variando el valor del desborde del timer0 lograras el efecto que deseeas, las pausas tendran valores diferentes debes buscar los valores que se adecuen a lo que deseas, si el tmr en si no te da mucho tiempo puedes usar contadores para que logres la pausa correcta.

Dale que ya debes hacer algo de codigo.

saludos
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado DuguSF

  • PIC10
  • *
  • Mensajes: 13
Re: Ruleta francesa con Pic16f84 y 36 LEDs
« Respuesta #25 en: 19 de Febrero de 2013, 15:53:25 »
bueno pues muchísimas gracias a todos, ya he pedido los componentes, en cuanto me lleguen y saque tiempo me pongo a hacer pruebas. Os mantendré informados ;)

Desconectado DuguSF

  • PIC10
  • *
  • Mensajes: 13
Re: Ruleta francesa con Pic16f84 y 36 LEDs
« Respuesta #26 en: 23 de Febrero de 2013, 07:28:57 »
Esto es lo que llevo hecho hasta ahora, y tras simularlo he comprobado que funciona y se sale del ciclo en cualquier momento en el que RA0 pase a nivel bajo.

Código: [Seleccionar]
unsigned short i;
unsigned short u;



unsigned long saca(unsigned long num)
{
    switch (num)
    {
    case 1: return 0b00000001;
    case 2: return 0;
    case 3: return 0;
    case 4: return 0;
    case 5: return 0;
    case 6: return 0;
    case 7: return 0;
    case 8: return 0;
    case 9: return 0b00000010;
    case 10: return 0;
    case 11: return 0;
    case 12: return 0;
    case 13: return 0;
    case 14: return 0;
    case 15: return 0;
    case 16: return 0;
    case 17: return 0b00000100;
    case 18: return 0;
    case 19: return 0;
    case 20: return 0;
    case 21: return 0;
    case 22: return 0;
    case 23: return 0;
    case 24: return 0;
    case 25: return 0b00001000;
    case 26: return 0;
    case 27: return 0;
    case 28: return 0;
    case 29: return 0;
    case 30: return 0;
    case 31: return 0;
    case 32: return 0;
    case 33: return 0b00010000;
    case 34: return 0;
    case 35: return 0;
    case 36: return 0;
    }
}

void main ()
{
PORTA=0;
PORTB=0;
TRISA=1;
TRISB=0;

do
{


          if (PORTA.F0==1)
          {
              for (i=1;i<37;i++)
              {
                  if (PORTA.F0==1)
                  {
              PORTB=saca(i);
              delay_ms(200);
              }
              }
              }
              else
                  {
                            for (i=1;i<37;i++)
                              {
                               if (PORTA.F0==1)
                  {
                                  PORTB=saca(i);
                                  delay_ms(200);
              }
              }

              break;

          } while (1);
    }


Ahora haré cuando tenga tiempo otro ciclo para cuando RA0 sea igual a 0. El ciclo trataría de ir aumentando el delay entre cada salida del puerto b. En este mismo momento en el que RA0 pase a nivel bajo, tendré que configurar una salida del puerto b para que funcione como reloj que va aumentando poco a poco su ciclo de trabajo, de forma que controle de forma sincronizada los registros.

Me surge el siguiente problema (por comentar alguno xD)
No sé como hacer para que cuando cambia de 1 a 0 RA0 empiece a aumentar el valor de los delays desde el valor del puerto b que había antes de cambiar de estado RA0, no se si se entiende... alguna sugerencia?

que os parece lo que tengo hecho hasta ahora? se que se podría hacer mas simplificado pero de esta forma me resulta mas claro.

Desconectado DuguSF

  • PIC10
  • *
  • Mensajes: 13
Re: Ruleta francesa con Pic16f84 y 36 LEDs
« Respuesta #27 en: 27 de Febrero de 2013, 08:43:56 »
Necesito ayuda urgente con el TMR0

este sería el programa principal
Código: [Seleccionar]
do
{

              for (i=1;i<37;i++)
              {
                  if (PORTA.F0==1)
                  {
              PORTB=saca(i);
              delay_ms(200);
              } else  for (j=1;j<6;j++)
              {
                               if (PORTA.F0==0)
                  {
                                  PORTB=saca(i);
                                  TMR0=conta(j);
              }
              }
              }
          } while (1);

TR0=conta(j) se explica de la siguiente forma

Código: [Seleccionar]
unsigned short conta(int pausa)
                   {
                            switch(pausa)
                            {
                             case 1: return 300;
                             case 2: return 500;
                             case 3: return 700;
                             case 4: return 900;
                             case 5: return 1100;
                             }
                             }

el problema es que no me carga esos valores en el tmr0, lo he estado probando y no aumenta el tiempo en esos valores, solo aumenta en microsegundos (todo esto cuando PORTA.F0=0)

necesito ayuda por favor, no se si hay que inicializar el tmr0, o tengo que utilizar el option_reg o como hacerlo :S tengo que entregarlo el viernes, me urge bastante. Gracias de antemano a quien pueda ayudarme

Desconectado DuguSF

  • PIC10
  • *
  • Mensajes: 13
Re: Ruleta francesa con Pic16f84 y 36 LEDs
« Respuesta #28 en: 27 de Febrero de 2013, 08:46:04 »
Os dejo aquí todo el programa

Código: [Seleccionar]
unsigned int i;
unsigned int j;

                   unsigned short conta(int pausa)
                   {
                            switch(pausa)
                            {
                             case 1: return 300;
                             case 2: return 500;
                             case 3: return 700;
                             case 4: return 900;
                             case 5: return 1100;
                             }
                             }
unsigned long saca(unsigned long num)
{
    switch (num)
    {
    case 1: return 0b00000001;
    case 2: return 0;
    case 3: return 0;
    case 4: return 0;
    case 5: return 0;
    case 6: return 0;
    case 7: return 0;
    case 8: return 0;
    case 9: return 0b00000010;
    case 10: return 0;
    case 11: return 0;
    case 12: return 0;
    case 13: return 0;
    case 14: return 0;
    case 15: return 0;
    case 16: return 0;
    case 17: return 0b00000100;
    case 18: return 0;
    case 19: return 0;
    case 20: return 0;
    case 21: return 0;
    case 22: return 0;
    case 23: return 0;
    case 24: return 0;
    case 25: return 0b00001000;
    case 26: return 0;
    case 27: return 0;
    case 28: return 0;
    case 29: return 0;
    case 30: return 0;
    case 31: return 0;
    case 32: return 0;
    case 33: return 0b00010000;
    case 34: return 0;
    case 35: return 0;
    case 36: return 0;
    }
}
 
void main ()
{

PORTA=0;
PORTB=0;
TRISA=1;
TRISB=0;

do
{

              for (i=1;i<37;i++)
              {
                  if (PORTA.F0==1)
                  {
              PORTB=saca(i);
              delay_ms(200);
              } else  for (j=1;j<6;j++)
              {
                               if (PORTA.F0==0)
                  {
                                  PORTB=saca(i);
                                  TMR0=conta(j);
              }
              }
              }
          } while (1);
    }

El ciclo "saca" no es definitivo, ya que únicamente necesito un pulso en la primera patilla del pic, el resto lo controlo colocando los registros de desplazamiento en cascada.

Desconectado VOLTIO

  • PIC16
  • ***
  • Mensajes: 154
Re: Ruleta francesa con Pic16f84 y 36 LEDs
« Respuesta #29 en: 01 de Mayo de 2014, 08:12:27 »
Buen dia amigos, queria retomar este proyecto , me gustaria hacer una ruleta con led pero adicionarle dos cosas la imitacion del sonido y el numero aleatorio en el cual se para  .
Saludos  y feliz dia del trabajador para todos !!