Autor Tema: Ayuda con "matriz"  (Leído 2237 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado kain589

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 324
Ayuda con "matriz"
« en: 14 de Mayo de 2006, 16:04:20 »
Saludos! El problema es que estoy intentando hacer una "matriz flotadora", con esto me refiero a una matriz hecha como los relojes que sacan mensajes o imagenes al aprovechar el movimiento de unos pocos leds o unos tapacubos que ha salido para coches, aunque esto usan neones, como es dificil de explicar y una imagen vale mas que 1000 palabras aqui pongo un link,algo asi:

http://www.instructables.com/ex/i/3C61E5B2FF42102880EC001143E7E506/

Yo ahora queria que poniendo la placa en la mano salga un mensaje, he empezado sacando una letra y ha salido; creo que se pueden intentar sacar hasta 3/4 letras a la vez usandola asi; el problema ha venido por la programacion o el compilador, he hecho el siguiente programa:
Código: C
  1. /*Crea mensajes en el aire a prtir de 7 led
  2.       Por ahora 1 letra simetrica
  3.       Funciona
  4. */
  5. #include <18F1320.h>
  6. #fuses INTRC_IO,NOWDT, PUT, BROWNOUT, BORV45, FCMEN, NOCPD, STVREN, NODEBUG, NOLVP, NOWRT, NOWRTC, NOWRTD, NOIESO, NOEBTR, NOEBTRB, NOMCLR, NOPROTECT, NOCPB
  7. //INTRCIO permite uso rc interno y ra6 como I/O normal
  8. #use delay(clock=4000000)
  9. #use standard_io(a)
  10. #use standard_io(b)
  11. #byte PORTA=0x0F80
  12. #byte PORTB=0x0F81
  13.  
  14. ///VARIABLES
  15. int letra1[7];
  16. int letra2[7];
  17. int i;
  18. int j;
  19.  
  20. void main() {//cambiar inicio y goto inicio a do-while y funciones
  21.    //INICIO:
  22.    setup_oscillator(OSC_4MHZ|OSC_INTRC);
  23.    //Puertos
  24.         set_tris_b(0x00);            //porb
  25.    set_tris_a(0x00);            //pora salida
  26.    //Prueba en este caso la letra A,C
  27.                                 letra1[0]=0b00000000;
  28.                                 letra1[1]=0b00111111;
  29.                                 letra1[2]=0b01001000;
  30.                                 letra1[3]=0b01001000;
  31.                                 letra1[4]=0b01001000;
  32.                                 letra1[5]=0b00111111;
  33.                                 letra1[6]=0b00000000;
  34.                                 letra2[0]=0b00000000;
  35.                                 letra2[1]=0b01111111;
  36.                                 letra2[2]=0b01111111;
  37.                                 letra2[3]=0b01000001;
  38.                                 letra2[4]=0b01000001;
  39.                                 letra2[5]=0b01000001;
  40.                                 letra2[6]=0b00000000;
  41.    do{//probado:5(original),1,10,4*,3
  42.       i= 0;
  43.       j= 0;
  44.                 for(i=0;i<7;i++){
  45.                    output_b(letra1[i]);         //filas
  46.                         delay_ms(1000);                 //pausa para poder verse
  47.                         }
  48.                 for(j=0;j<7;j++){
  49.                    output_b(letra2[j]);         //filas
  50.                         delay_ms(1000);                 //pausa para poder verse
  51.                         }
  52.       }while(true);
  53. }

El problema es que solo me saca la primera letra, solo me salia la primera letra por eso le puesto los 1000 ms para poder ir viendo la secuencia y solo sale la secuencia de la A. Pero no se a que puede deberse esto, al principio lo he puesto todo como una unica estructura "mensaje[]" y tampoco funcionaba; lo que no sé es si puede deberse al compilador o que puedo estar haciendo mal¿alguna idea?, gracias de antemano

Saludos desde Córdoba, españa

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: Ayuda con "matriz"
« Respuesta #1 en: 14 de Mayo de 2006, 20:02:45 »
Hola kain589!

He mirado y remirado 8 o 9 veces tú código y... aunque yo no lo haría así no me explico como no te funciona.

Cuando lo resuelvas comentalo por favor que siento una curiosidad tremenda. Por cierto, muy bonito el proyecto. Yo también estoy haciendo algo parecido (ya he conseguido acoplar el sistema al ventilador y solo me queda programar el PIC  :mrgreen: )

Un saludo desde Alicante.

Desconectado Hidalgork

  • PIC10
  • *
  • Mensajes: 7
Re: Ayuda con "matriz"
« Respuesta #2 en: 15 de Mayo de 2006, 00:20:56 »
Hola
  La verdad es que el codigo deberia cuncionar, al menos el ciclo DO While y los for no deberian tener problemas.
de hecho utilice la siguiente funcion para mostrar lo que enviava al puerto:

void MuestraBinario(char Num)
{
 int i;
 for(i=0;i<8;i++)
  printf("%u",bit_test(Num,(7-i)));
 printf(" :%u\n\r",Num);
}

y utilizando tu mimo codigo, reemplazando
output_b(letra1) por MuestraBinario(letra1) y
output_b(letra2) por MuestraBinario(letra2)
obtengo   
                                                                         
Pic Iniciado\0A       \0D                                                                                                                               
00000000 :0\0A \0D                                                                                                                                       
00111111 :63\0A0D                                                                                                                                       
01001000 :72\0A\0D                                                                                                                                       
01001000 :72\0A\0D                                                                                                                                       
01001000 :72\0A\0D                                                                                                                                       
00111111 :63\0A\0D                                                                                                                                       
00000000 :0\0A \0D                                                                                                                                       
00000000 :0\0A\0D                                                                                                                                       
01111111 :127\0AD                                                                                                                                       
01111111 :127\0A\0D                                                                                                                                     
01000001 :65\0A \0D                                                                                                                                     
01000001 :65\0A\0D                                                                                                                                       
01000001 :65\0A\0D                                                                                                                                       
00000000 :0\0A \0D                                                                                                                                       
00000000 :0\0A\0D                                                                                                                                       
00111111 :63\0A0D                                                                                                                                       
01001000 :72\0A\0D                                                                                                                                       
           
por lo que el problema no creo que sea el codigo.
Que compilador usas?
yo uso el PCWH compiler, el tuyo parece similar pero no conosco la instruccion setup_oscillator(OSC_4MHZ|OSC_INTRC);
tu compilador interpretara por defecto un int como entero sin signo de 8 bits?

podria mostrar lo que envias al puerto B con la misma funcion?.

El proyecto es genial!



Desconectado kain589

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 324
Re: Ayuda con "matriz"
« Respuesta #3 en: 15 de Mayo de 2006, 06:16:16 »
Gracias por sus respuestas, el codigo esta sin pulir luego pasare a hacerle una gestion por interrupciones y una mejor gestion del mensaje, esta asi porque era para hacer las pruebas de que es viable y la siguiente prueba que seria ver que pasa con letras y mensajes no simetricos, porque creo que puede influir.
Si utilizo el CCs, los int los reconoce como de 8, y la instruccion setup_oscillator(OSC_4MHZ|OSC_INTRC) es para aquellos pic que tienen oscilador interno y quieres usar el suyo propio en vez de un cristal.
Se me ha ocurrido hacer una funcion que muestre x(ahora son 7 por letra, pero quiero reducirlo para que salga mas mensaje) bytes cualesquiera (una letra); y actualizar esa informacion de alguna forma en el programa a ver que pasa; de todas formas la version final iria asi; no se si esto es lo que tu me querias decir Hidalgork
Saludos desde Córdoba, españa