TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: Karencita en 02 de Abril de 2016, 22:51:24

Título: Programacion Matriz de led 53x5
Publicado por: Karencita en 02 de Abril de 2016, 22:51:24
Hola chicos! Soy nueva en esto de la programación con matrices y estoy haciendo un proyecto donde realizo una matriz 53x5 con el pic 16f873a un registro de desplazamiento 74hc164n y necesito que me muestre diferentes palabras pero en la programación no hayo como declarar letras en cada pin y no en los puerto no se si estoy errada en lo que digo si de algo me pueden ayudar se lo agradecería
Título: Re:Programacion Matriz de led 53x5
Publicado por: KILLERJC en 02 de Abril de 2016, 23:48:06
Citar
pero en la programación no hayo como declarar letras en cada pin y no en los puerto no se si estoy errada en lo que digo si de algo me pueden ayudar se lo agradecería

Podrias explicar esto ?, es decir como queres que funcione, por que un pin puede tener 2 valores 0 o 1.
Otra de las cosas es que no sabemos de que compilador/lenguaje estas usando. Ya que podria ser C ( CCS o XC8 normalmente ) o BASIC.
Título: Re:Programacion Matriz de led 53x5
Publicado por: Moechh en 22 de Abril de 2016, 22:15:26
He vuelto con mas dudas ahora solo quisiera que me ayudaran a hacer que este codigo haga un corrimiento  - Tienes que ingresar para ver archivos adjuntos -
el primer archivo es el original
l segundo yo lo modifique pero no solo se puede hacer el corrimiento unos momentos despues se detiene o se altera
Título: Re:Programacion Matriz de led 53x5
Publicado por: KILLERJC en 23 de Abril de 2016, 08:18:59
No tenes un while aunque sea pone un while(1); al final del main, para que se quede alli.

Ya que termina el for.... y ... a donde va ? no se queda encerrado en ningun lado, ni repite algo.

Tambien podrias reemplazar:

Código: C
  1. output_bit(DATO,valor & bitMask[j]);

por

Código: C
  1. output_bit(DATO,bit_test(valor,j));

Y no necesitarias un array con las mascaras.
Título: Re:Programacion Matriz de led 53x5
Publicado por: Moechh en 23 de Abril de 2016, 23:51:39
No tenes un while aunque sea pone un while(1); al final del main, para que se quede alli.

Ya que termina el for.... y ... a donde va ? no se queda encerrado en ningun lado, ni repite algo.

Tambien podrias reemplazar:

Código: C
  1. output_bit(DATO,valor & bitMask[j]);

por

Código: C
  1. output_bit(DATO,bit_test(valor,j));

Y no necesitarias un array con las mascaras.
No realiza nada al contrario lo que yo quiero es que valor=datosalida[] pase de de la posicion 0 a la 7 del byte const Da[8]={0b10000000,
                     0b01000000,   
                     0b00100000,
                     0b00010000,
                     0b00001000,
                     0b00000100,
                     0b00000010,
                     0b00000001,};
yo quiero que rrecorra todas esas pociciones
Título: Re:Programacion Matriz de led 53x5
Publicado por: KILLERJC en 24 de Abril de 2016, 07:32:32
Yo crei que preguntas por como enviarle datos al registro de desplazamiento.

Pero lo que queres hacer es mover la imagen ?, Si podes explicarte un poco mas seria genial
Título: Re:Programacion Matriz de led 53x5
Publicado por: Moechh en 24 de Abril de 2016, 23:36:20
Yo crei que preguntas por como enviarle datos al registro de desplazamiento.

Pero lo que queres hacer es mover la imagen ?, Si podes explicarte un poco mas seria genial
esto es lo que pretendo pero resumirlo mas
Título: Re:Programacion Matriz de led 53x5
Publicado por: KILLERJC en 25 de Abril de 2016, 09:32:42
Código: C
  1. 0b01000000,    
  2.                      0b00100000,
  3.                      0b00010000,
  4.                      0b00001000,
  5.                      0b00000100,
  6.                      0b00000010,
  7.                      0b00000001};

Suponete que eso esa es la imagen a enviar. Y queres que se dezplace a la izquierda.

Hay 2 formas de hacerlo, uno es que se desplaze a la izquierda y "desaparesca", y la otra es que aparezca a medida que va saliendo por el otro lado.

La que desaparece es "simple". ya que deberias rotar cada dato X cantidad de veces.

Código: C
  1. for (x=0;x<8;x++)
  2. {
  3.       temp = Datos[x] << Rotacion;
  4.       ApagoComunes;
  5.       EnviodatosAlShift(temp)
  6.       EnciendoComunes;
  7. }

Y cada cierto tiempo procedes a modificar Rotacion, de 0 a 1, y ahi vas a tenerlo desplazado 1 lugar a la izquierda, luego 2, y van a ser 2 lugares.
El tema es que se van a ir llenando de 0 a la derecha, por lo cual va a ir "desapareciendo". La otra solucion para que aparezca del otro lado es rotarlos asi:

Código: C
  1. temp = (Datos[x] << Rotacion) || (Datos[x] >> (8 - Rotacion));

Rotacion va de 0 a 7, ya que 8 volveria a comenzar.. si hacemos esto , por ejemplo con estos datos:

Dato: 10100011
Rotacion: 3

temp va a ser: 00011101
Esos ultimos 3 bits estaban antes al comienzo. y ahi tenes tu rotacion.
Ahora solo tenes que modificar lo que le enviabas al shift register, por el dato rotado, y tambien, deberias hacer algo tal ves con un timer para que vaya incrementando la variable Rotacion.

PD: La mayoria del codigo esta escrito para que lo leas y entiendas, pero no va a funcionar un simple copy & paste.
Título: Re:Programacion Matriz de led 53x5
Publicado por: Moechh en 25 de Abril de 2016, 13:55:01
Código: C
  1. int datossalida [8]={0b01000000,//esta es la primera pocicion
  2.                                                   0b01000000,  //segunda  
  3.                                                   0b00100000, //tercera
  4.                                                   0b00010000, //cuarta
  5.                                                   0b00001000, //quinta
  6.                                                   0b00000100,// sexta
  7.                                                   0b00000010,// septima
  8.                                                   0b00000001,}; // octava
  9. valor=datossalida[0]
  10. lo que yo quiero es que en este array 0 adopte todas las pociciones y vuelva a repetirse ya se que es necesario un for pero de que manera lo hago se me ocurrio hacerlo asi:
  11. void Valor(void) {
  12. for(i=0;i<8;i++){
  13. valor=datossalida[i]}}tambien intente hacerlo asi pero no se genero nada
  14.  
  15. void Valor(void) {
  16. for(i=0;i<8;i++){
  17. output_bit(valor=datossalida[i])}}
  18. para finalizar lo que necesito es que convierta en esto: o mas bien que dentro de esta funcion:
  19. valor=DatosSalida[0];
  20. for(j=0;j<8;j++){
  21.             output_low(CLK);
  22.             output_bit(DATO,valor & bitMask[j]);
  23.             output_high(CLK);
  24. el array de valor=datossalida[]
  25. pase por todas estas pociciones;
  26. valor=datossalida[0]
  27. valor=datossalida[1]
  28. valor=datossalida[2]
  29. valor=datossalida[3]
  30. valor=datossalida[4]
  31. valor=datossalida[5]
  32. valor=datossalida[6]
  33. valor=datossalida[7]