TODOPIC
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?
26 de Octubre de 2014, 06:25:53

Ingresar con nombre de usuario, contraseña y duración de la sesión
Buscar:     Búsqueda Avanzada
350321 Mensajes en 39302 Temas por 41054 Usuarios
Último usuario: chrystopher
* Inicio Ayuda Buscar Calendario Ingresar Registrarse
Buscar en TodoPIC
+  TODOPIC
|-+  Microcontroladores PIC
| |-+  * PROYECTOS * (Moderadores: J1M, jfh900, MGLSOFT, Modulay, Sasián, LABmouse)
| | |-+  De matriz de leds, a letrero electronico
0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [15] 16 17 18 19 Marcar como favorito Imprimir
Autor Tema: De matriz de leds, a letrero electronico  (Leído 121007 veces)
Cryn
Colaborador
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Bolivia Bolivia

Mensajes: 4170


ya no te extraño =p


« Respuesta #280 : 05 de Mayo de 2010, 14:31:54 »

Hola marturetjulio,

Si acabo de leer tu post y vi tu simulación. Esa forma de realizarlo no está mal, ya que es la que más o menos plantie con mi código, se debe considerar un buffer, es decir unas variables temporales (o arreglos de preferencia) donde iras haciendo la rotación de tu letra y posteriormente enviar tu buffer al registro de desplazamiento, y no enviar los datos tal como son rotados, ya que lo veo muy confuso y difícil al momento de manejar en código, por eso que tus datos se pierden y ya solo envías ceros al registro por eso no puedes ver más nada.

saludos.
En línea

.
marturetjulio
PIC10
*
Desconectado Desconectado

Sexo: Masculino
Venezuela Venezuela

Mensajes: 44


« Respuesta #281 : 06 de Mayo de 2010, 22:02:42 »

HOLA CRYN GRACIAS POR TU EXPLICACION PERO POR MAS QUE TRATE NO ME DABA ASI...ENTONCES BUSQUE ESTA EXPLICACION DEL AMIGO PALMER SOBRE COMO HACER EL DESPLAZAMIENTO, ES ESTA.

bueno te voy a explicar mas o menos espero darme a entender lo hago en c (ccs) pero creo que la teoria seria la misma para asm

1° lo que la matriz debe hacer es un barrido en todas las columnas n columnas (en mi caso es por columnas) yo utilizo un for,
    dentro del for va el encendido de las columnas, ya sea con 1 o 0 de acuerdo a tu conexion, tambien dentro de ese mismo for
    le doy un valor al puertob que encenderia las filas (seria el dato), para probar le damos el mismo valor de i y tendrias lo que tu mencionas
    un mensaje fijo puede que salga al reves o algo asi pero no te preocupes ya lo cmpondremos

2° un segundo for lo utilizo para repetir n veces una misma posicion para el valor del puertob (filas), o sea repetir n veces el for anterior,

3° aqui esta el meollo del asunto, para poder desplazar el mensaje necesitas tener una referencia de donde empezar o terminar,
    y utilizo un tercer for que es un contador.... podria llamarlo contador general, entonces, este contador le dara el valor de desplazamiento
    a la matriz.

en lenguaje ccs quedaria algo asi:

3er for(cont=0;cont<capacidad de memoria;cont++)
      {
       dir_de_mem=cont; esto te dara el desplazamiento
       2° for(j=0;j<numero de repeticiones por posicion;j++)
           {
            1er for(i=;i<;i++)
                  {
                   porta=i;
                   portb=origen_de_datos(dir_de_mem--);
                   retardo(de unos 25 ms);
                   }
            }
       }

en resumen: el barrido, el numero de repeticiones por posición y el desplazamiento.


Y  TRATE DE ENTENDERLA Y PUDE HACER EL CODIGO, AHORA SI SE DESPLAZA HACIA LA IZQUIERDA PERO NO SE PORQUE SALE COMO UN SUCIO QUE AFECTA LA DATA QUE SALE Y QUE SE VA DEZPLAZANDO...ME PREGUNTABA SI ALGUNO DE LOS AMIGOS PODIA HECHARLE UNA MIRADA Y VER EL PORQUE  ESTE ES EL CODIGO Y LA SIMULACION..GRACIAS DE ANTEMANO A TODOS POR POSTEAR SUS PROYECTOS Y GRACIAS A DIOS POR CREAR PERSONAS TAN AMABLES COMO LO SON LA MAYORIA DE LOS QUE AYUDAN EN EL FORO..SALUDOS


#include <18f452.h>
#fuses xt,nolvp,nowdt,noprotect
#use delay(clock=4000000)
#BYTE PORTB = 0x06
#BYTE PORTD = 0x08


int LETRA_J[8]={0X40, 0X80, 0X81, 0X81, 0X7F, 0X01, 0X01, 0X00};   //la letra J
int LETRA_U[8]={0X00, 0X7F, 0X80, 0X80, 0X80, 0X80, 0X7F, 0X00};   //la letra U
int LETRA_L[8]={0X00, 0XFF, 0X80, 0X80, 0X80, 0X80, 0X80, 0X00};   //la letra L
int LETRA_I[8]={0X00, 0X81, 0X81, 0XFF, 0X81, 0X81, 0X00, 0X00};   //la letra I
int LETRA_O[8]={0X00, 0X3C, 0X42, 0X81, 0X81, 0X81, 0X42, 0X3C};   //la letra O
int LETRA_M[8]={0X00, 0XFF, 0X02, 0X04, 0X04, 0X02, 0XFF, 0X00};   //la letra M
int1 columnas[49]={1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int8 i=0;
int8 x=0,z;
int8 y;
//--------------------------------------------------
//Main----------------------------------------------
//--------------------------------------------------
void main(){
  set_tris_b(0);   
  set_tris_d(0);
  output_low(PIN_D0);
  output_b(0);
while (TRUE){
 for(y=49;y>0;y--){
 z=y;
 for(x=0;x<=1;x++){
 output_b(0);
 for(i=0;i<=49;i++){
  delay_ms(1);
  output_bit(PIN_D1,columnas);
  delay_us(2);
  output_low(PIN_D0);
  delay_us(2);
  output_high(PIN_D0);   
  output_b(~LETRA_J[z++]);
}

}
}
}
}

En línea

Expeciencia es simplemente el nombre que le damos a nuestros errores!!!
Cryn
Colaborador
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Bolivia Bolivia

Mensajes: 4170


ya no te extraño =p


« Respuesta #282 : 07 de Mayo de 2010, 13:36:38 »

Hola marturetjulio,

Bueno es difícil saber porque sucede ese paso de la basurita, pero al menos ya haz logrado un muy buen avance.

Me parece que estás refrescando por columnas, y eso no está mal, pero no es lo adecuado al menos para este cartel de más columnas que filas, lo mejor es enviar el dato de las columnas a los registros de desplazamiento fila por fila y mediante un puerto completo y transistores encender solamente una fila a la vez, se debe a muy alta velocidad ver más o menos algo así

Te recomiendo que veas ese hilo completo hay muy buenos conceptos y sugerencias para un mejor manejo de un cartel. Ya que la idea es lo principal y de ahí se pasa al lenguaje que más gustes.

Y para un mejor manejo de los mensajes, teniendo almacenado todo el abecedario de preferencia en la memoria flash del micro y guardar el mensaje que se va a pasar por el cartel directamente como cadena ASCII, te recomiendo ver y tratar de entender el código que deje en este tema.

saludos.
En línea

.
marturetjulio
PIC10
*
Desconectado Desconectado

Sexo: Masculino
Venezuela Venezuela

Mensajes: 44


« Respuesta #283 : 09 de Mayo de 2010, 12:40:01 »

hola amigo pero como podría hacer esto...

"Me parece que estás refrescando por columnas, y eso no está mal, pero no es lo adecuado al menos para este cartel de más columnas que filas, lo mejor es enviar el dato de las columnas a los registros de desplazamiento fila por fila y mediante un puerto completo y transistores encender solamente una fila a la vez"

fijate yo entiendo que debo enviar bit a bit al registro de desplazamiento...corrigeme si me equivoco..y si es asi como podria enviar el dato de 8 bits que antes enviaba por las filas por el registro de desplazamiento...disculpame tanta molestia es solo que me gusta aprender bien las cosas..leí los codigos y el que tu me colocaste tambien pero hay instrucciones que no se como trabajan por ejemplo esta load_letra(mensaje[msj][letra]);   se supone que load_letra(int caracter) es una funcion que debe llevar dentro un caracter pero en ves de eso esta mensaje[msj][letra]    osea 2 arreglos naguara alli me perdi y claro en muchas otras cosas jeje pero eso nunca lo habia visto disculpa mi ignorancia pero en ese caso se multiplican o se suman los valores de los arreglos o que ocurre en esos casos porque eso no lo habia visto yo antes...voy a tratar de buscarlo
En línea

Expeciencia es simplemente el nombre que le damos a nuestros errores!!!
Cryn
Colaborador
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Bolivia Bolivia

Mensajes: 4170


ya no te extraño =p


« Respuesta #284 : 10 de Mayo de 2010, 18:14:03 »

Lo que deberías hacer es enviar los datos de todas las columnas correspondientes a una fila primeramente a los registros de desplazamiento, después las columnas de toda la otra fila y así sucesivamente...

Citar
fijate yo entiendo que debo enviar bit a bit al registro de desplazamiento...corrigeme si me equivoco..y si es asi como podria enviar el dato de 8 bits que antes enviaba por las filas por el registro de desplazamiento...
Tendrías que hacer precisamente eso, coger bit a bit y enviarlo al registro de desplazamiento, para ello te puede ayudar la función output_bit dentro de un ciclo for e ir desplazando bit a bit cada byte, más o menos como hice en mi función void cargar(int datob) en el código.

Citar
hay instrucciones que no se como trabajan por ejemplo esta load_letra(mensaje[msj][letra]);   se supone que load_letra(int caracter) es una funcion que debe llevar dentro un caracter pero en ves de eso esta mensaje[msj][letra]    osea 2 arreglos
Efectivamente load_letra es una función que recibe un byte como parámetro y por tanto mensaje[msj][letra] hace referencia a un byte, mensaje[ x ][ y ] es un arreglo bidimensional de bytes o también casualmente conocida como matriz.

Una matriz tiene 2 indices, va más o menos así:

matriz[3][3]= 1   2   3
                   4   5   6
                   7   8   9

el ejemplo que te puse es una matriz 3x3 en CCS la declaras así:

int8 matriz[3][3]={{1,4,7},{2,5,8},{3,6,9}};
y para llamar/usar a los datos/bytes de la matriz usas 2 indices, como un 'x' y 'y' del sistema cartesiano, para nuestro ejemplo:
matriz[1][1]=1
matriz[1][2]=4
matriz[1][3]=7
....
matriz[3][2]=6
matriz[3][3]=9

Para que complicarme la vida si podría usar un arreglo unidimensional? y hacer:
int array[9]={1,2,3,4,5,6,7,8,9};
simplemente yo escogí usar la bidimensional, ya que al usar los 2 índices me era más fácil desplazarme con todos los datos que el cartel necesitaba.


Es un poco complicado para mi explicar estás ideas, pues al inicio es también un mundo algo complicado esto de los carteles, cuando comprendas algunas ideas de su funcionamiento te será más fácil programarlas.

Lo que te recomiendo es que leas más detenidamente los consejos y sugerencias que hay en el primer link que te deje en mi anterior post, y quizá las imágenes que dejé en ese mismo link, en la respuesta #50 que publiqué en ese hilo puse unas imágenes que explican a grandes rasgos más o menos como va el asunto.

La idea del arreglo bidimensional que usé para el código de mi cartel quizá no sea la correcta, pero al menos me sirvió de mucho para empezar y comprender la idea de los carteles.

saludos.
En línea

.
marturetjulio
PIC10
*
Desconectado Desconectado

Sexo: Masculino
Venezuela Venezuela

Mensajes: 44


« Respuesta #285 : 10 de Mayo de 2010, 20:45:49 »

hola amigo Cryn muchisimas gracias por tu explicación...la entendi y bueno he tratado de seguir tus consejos y bueno logre hacer un código según lo que entendi lo voy a postear espero me puedas guiar y decirme si esa es la forma de paso tuve que leer el data sheet del 4094 que es el registro de desplazamiento que tu empleas...discúlpame de verdad que sea tan terco y no me conforme con copiar tu codigo y simularlo...es solo que quisiera hacerlo yo mismo no con la calidad que tu tienes claro pero bueno que al menos funcione el desplazamiento jeje...gracias de verdad por todas tus explicaciones amigo yo sigo intentando e intentando jeje.. este codigo es un arreglo que le hice a un codigo que posteo una ves ariel en un codigo que maneja un 4094 con display. a quien le agradesco mucho tambien por sus tutoriales en ucontrol.

#include <18f452.h>
#fuses xt,nolvp,nowdt,noprotect
#use delay(clock=4000000)
#BYTE PORTB = 0x06
#BYTE PORTD = 0x08
#define DATA PIN_D1
#define CLOCK PIN_D0
#define STROBE PIN_D2

int   const letra[8]={0x3E,0X08, 0X08, 0X08, 0X08, 0X08,0X88,0x70};
int filas[8]={128,64,32,16,8,4,2,1};
//--------------------------------------------------
//Main----------------------------------------------
//--------------------------------------------------
int t;

// declaración de la función escribir_4094
void escribir_4094(int caracter);
// programa principal
void  main(){
   output_d(0x0);
   output_b(0x0);
   set_tris_d(0x0);
   set_tris_b(0x0);
  while(true){
     for(t=0;t<8;t++){
         escribir_4094(t);             
         delay_us(30);
     }
   }
}
void escribir_4094(int caracter){
int contador_8;
   output_low(DATA);
   output_low(STROBE);
   output_low(CLOCK);
   for(contador_8=0;contador_8<8;contador_8++){
      output_bit(DATA,bit_test(letra[caracter],contador_8));
      output_high(CLOCK);
      delay_cycles(1);
      output_low(CLOCK);
   }
   output_b(~filas[caracter]);
   output_low(CLOCK);
   output_high(STROBE);
   delay_cycles(1);
   output_low(STROBE);
   }



En línea

Expeciencia es simplemente el nombre que le damos a nuestros errores!!!
Cryn
Colaborador
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Bolivia Bolivia

Mensajes: 4170


ya no te extraño =p


« Respuesta #286 : 10 de Mayo de 2010, 22:41:11 »

Vas por muy buen camino marturetjulio, ya dentro te poco te sacarás la espina del cartel.

No hombre, no te preocupes, entiendo perfectamente y me gusta tu idea de sacar tus propias cosas adelante.

No es ningún problema usar un registro de desplazamiento u otro, ya que todos funcionan prácticamente igual, la característica de los 4094 es el strobe, que los 74164 no lo poseen, con el strobe tienes un mejor control. Si te recomendaría un registro sería el TPIC6595 de texas, que es un mounstrito en suministro de corriente ya que posee salidas de mosfet, aunque me parece que son algo difíciles de conseguir y hasta quizá un poco caros. Pero los 74HC595 son como sus hermanos menores y en brillo para los leds son la mejor solución, los 164 no los probé, me quedé con los tpic y con los 595 (que ambos tienen strobe) y no probé nada más, ya que los 4094 son una lágrima para el brillo de los leds.

Tu código va muy bien, ahora te falta el desplazo que tanto buscas. Algo que puedo reiterarte de las recomendaciones es que utilices un buffer, es decir un otro arreglo donde ahi puedas cargar tu mensaje a mostrar. Ya que me parece que tienes en el cartel la letra J desplazada hacia abajo, por falta de un buffer.

Hay dos opciones que puedes usar para el desplazo:
-Guardar en tu arreglo las letras por filas
-Guardar en tu arreglo las letras por columnas

por filas:                        por columnas:              orden en el array:

00011000                       00111111                    array[0]
00111100                       01000100                    array[1]
01100110                       01000100                    array[2]
01100110                       01000100                    array[3]
01111110                       00111111                    array[4]
01100110                       
01100110                       
00000000                       

letra 8x8                        letra 5x7
Ambos son una letra 'A'

Con la primera opción tienes que hacer algo similar a lo que hice acá en mi código, no necesariamente con una matriz, también podría ser en un arreglo. Como te dije yo escogí la matriz porque me pareció más sencillo el manejo e ir desplazando los datos del buffer que posteriormente se enviará a los registros, el buffer se carga con las letras del mensaje que quieres mostrar.

Con la segunda opción deberás reacomodar los datos de las letras, ya que las tendrías almacenadas por columnas, pero esta reacomodación, te dará un mejor control del cartel, ya que el desplazamiento ya no será por el mismo desplazamiento de los bytes(como el caso anterior), sino por un índice o puntero a las columnas que estarán en tu buffer.

Esta segunda idea no la se explicar muy bien, pero seguro que comprendes la idea del master BrunoF que seguramente la ha dejado plasmada en el link del hilo donde habían las imágenes fila por fila. Como te dije para mi es un poco difícil poder explicarla, ya que ni yo la comprendí a la primera Embarassed  jeje

A seguirle machando, ya de acá a unos días o mucho menos seguro que nos sorprendes con tu avance.

saludos
En línea

.
BrunoF
Administrador
DsPIC30
*******
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 3798



« Respuesta #287 : 10 de Mayo de 2010, 23:03:05 »

Bueno. Creo que es hora de explicarlo paso a paso. Hay mucha gente interesada en esto por lo visto. Hubiese jurado que Suky había hecho un tutorial de matrices de LEDs, pero no logré encontrarlo.

En cuanto pueda empiezo por lo más básico. Crear el buffer que contendrá la información a mostrar y en base a ello empezaremos a ver cómo manipularlo. Por ahora deberíamos empezar con eso y aprender a controlar el tema del refresco,etc.

En cuanto tenga un rato abro un hilo para dedicarselo a ésto. Mis carteles comerciales utilizan una cierta estructura creada por mi, que podríamos llegar a adoptar. Habría que ver qué sale y tal vez podamos hasta estandarizar un poco todo.

Saludos.
En línea

"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.
MLO__
Colaborador
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Colombia Colombia

Mensajes: 4503

MLO


« Respuesta #288 : 11 de Mayo de 2010, 00:08:32 »

Vendría muy bien .. no tenes un videillo por ahí para ir abriendo boca?
En línea

El papel lo aguanta todo
fgaretto
PIC10
*
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 33



WWW
« Respuesta #289 : 14 de Mayo de 2010, 11:07:23 »

Cryn: buenos días. Tengo algunos dudas con respecto al programa de la hoja 5 , te agradecería si pudieras resolverlas.
int matriz[matriz_num+1][size_matriz_col]={"\0"};  // por qué se inicializa con '0' ?


#int_TIMER0
void  TIMER0_isr(void){

   ShowFila();                  //Mostremos la fila actual...
   Fila++;
   if(Fila==8){
      Fila=0;
      VSync=1;                         
      if(Inhibit!=0)            // no entiendo bien este if-else
         Inhibit--;
      else
         desplazar_izq();
  }
  else
     VSync=0;
}

En línea

Cryn
Colaborador
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Bolivia Bolivia

Mensajes: 4170


ya no te extraño =p


« Respuesta #290 : 14 de Mayo de 2010, 11:32:32 »

int matriz[matriz_num+1][size_matriz_col]={"\0"};  // por qué se inicializa con '0' ?
Para que no me muestre basura por la matriz al comienzo del programa.

#int_TIMER0
void  TIMER0_isr(void){

   ShowFila();                  //Mostremos la fila actual...
   Fila++;
   if(Fila==8){
      Fila=0;
      VSync=1;                         
      if(Inhibit!=0)            // no entiendo bien este if-else
         Inhibit--;
      else
         desplazar_izq();
  }
  else
     VSync=0;
}
Este If else sirve para mostrar una determinada cantidad de veces lo que el buffer tiene, para que posteriormente se desplaze el mensaje una posición, en mi caso muestro 5 veces el mismo cuadro y después desplazo, ese valor determinará la velocidad del desplazamiento, si se muestra muchos más cuadros obviamente el desplazamiento será más lento, y por el contrario mientras menos cuadros más rápido pasa el mensaje y a veces no se puede ni leer XD

Un cuadro para mi es la muestra de una pasada de todas las filas.

Saludos.
En línea

.
fgaretto
PIC10
*
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 33



WWW
« Respuesta #291 : 14 de Mayo de 2010, 11:44:59 »

Muchas gracias Cryn, qué velocidad de respuesta !!
Por último te pido, si es posible, que me explique aunque sea en pocas palabras esta función:
void desplazar_izq(void){
   int i,j,a;

   if(desplazos==8 || desplazos==0){
      load_letra(mensaje[msj][letra]);
      desplazos=0;
   }
   for(i=0;i<8;i++){
      for(j=0;j<6;j++){
         a=matriz[j];
         carries[j]=shift_left(&a,1,0);
         matriz[j]=a;
      }
      for(j=0;j<6;j++){
         if(j!=5)
            matriz[j]|=carries[j+1];
         else
            matriz[j]|=carries[0];
      }
   }
   Inhibit=5;
   desplazos++;
   if(desplazos==8){
      letra++;
      if(letra>msj_length[msj])
         letra=0;
   }
}


En línea

Cryn
Colaborador
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Bolivia Bolivia

Mensajes: 4170


ya no te extraño =p


« Respuesta #292 : 14 de Mayo de 2010, 13:11:32 »

Código
GeSHi (c):
  1. void desplazar_izq(void){
  2.   int i,j,a;
  3.  
  4.   if(desplazos==8 || desplazos==0){  //uso caracteres de 8x8, por tanto deberé cargar una nueva letra si ya se han hecho 8 desplazos o ninguno.
  5.      load_letra(mensaje[msj][letra]);  //cargo la nueva letra
  6.      desplazos=0;                           //restablezco el valos de desplazos
  7.   }
  8.   for(i=0;i<8;i++){  //este for desplaza un bit a la izquierda de mi buffer matriz de cada fila, la matriz es de 6x8, en hadware tenía un cartel 8x40,
  9. //con un buffer de 5x8 bastaba, pero el 6to apareció por ser uno temporal para ir cargando ahí el nuevo caracter
  10.      for(j=0;j<6;j++){
  11.         a=matriz[j][i];  se carga el primer byte en una variable temporal
  12.         carries[j]=shift_left(&a,1,0); //desplazo esa variable temporal un bit a la izquierda, y almaceno en valor desplazado en un arreglo.
  13.         matriz[j][i]=a; //guardo el nuevo valor de la variable temporal que esta desplazada, en la misma posición de antes
  14.      }
  15.      for(j=0;j<6;j++){  //coloco los carries donde corresponden
  16.         if(j!=5)
  17.            matriz[j][i]|=carries[j+1];
  18.         else
  19.            matriz[j][i]|=carries[0];
  20.      }
  21.   }
  22.   Inhibit=5;   //restablezco valor de Inhibit
  23.   desplazos++;  //incremento el valor de desplazos
  24.   if(desplazos==8){   //si se han hecho 8 desplazos
  25.      letra++;  //hay que pasar a mostrar la siguiente letra del mensaje
  26.      if(letra>msj_length[msj])   //si se ha llegado a la última letra
  27.         letra=0;     //se comienza desde la primera letra del mensaje
  28.   }
  29. }
  30.  

Eso más o menos...
En línea

.
BrunoF
Administrador
DsPIC30
*******
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 3798



« Respuesta #293 : 14 de Mayo de 2010, 15:32:59 »

He creado a comenzar una librería para explicar y estandarizar un poco todo.

Está aquí: Librería Matríz de LEDs Universal[Compilador CCS]
En línea

"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.
fgaretto
PIC10
*
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 33



WWW
« Respuesta #294 : 14 de Mayo de 2010, 18:05:18 »

Cryn, nuevamente gracias !
Estoy simulando tu código en proteus y me parece que algo tengo mal ya que el comportamiento no es el correcto.
Lo hice con un 16F628A ya que así lo tenía armado anteriormente.
Te adjunto los archivos por si podés darle una mirada.
Saludos.
En línea

fgaretto
PIC10
*
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 33



WWW
« Respuesta #295 : 14 de Mayo de 2010, 18:18:13 »

brunoF, espero ansioso ese tutorial
En línea

Cryn
Colaborador
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Bolivia Bolivia

Mensajes: 4170


ya no te extraño =p


« Respuesta #296 : 15 de Mayo de 2010, 11:07:04 »

Cryn, nuevamente gracias !
Estoy simulando tu código en proteus y me parece que algo tengo mal ya que el comportamiento no es el correcto.
Lo hice con un 16F628A ya que así lo tenía armado anteriormente.
Te adjunto los archivos por si podés darle una mirada.
Saludos.
Está casi todo OK, si cambias el orden de las matrices en tu esquema verás el mensaje desplazandose, la que está de 1ra a la izquierda la llevas al lado 1ro derecha, el 2izquierda será 2derecha y así sucesivamente..

Y una cosa más:
const int msj_length[num_msj]={31};
sirve para determinar el largo del mensaje, en tu caso deberías usar 4, en vez de 31. Esa parte la deje así porque ya no trabajé mucho sobre el cartel, pero podrías optimizar el código para que el programa sea el que cuente la cantidad de caracteres (strlen, por ejemplo de la librería string.h) o directamente buscar el caracter NULL para que se sepa que se ha terminado el mensaje.

Te adjunto el esquema modificado
En línea

.
marturetjulio
PIC10
*
Desconectado Desconectado

Sexo: Masculino
Venezuela Venezuela

Mensajes: 44


« Respuesta #297 : 15 de Mayo de 2010, 23:05:57 »

hola amigos he intentado lo que me aconsejo cryn pero no entiendo como crear el otro buffer y ir rotando sobre el de verdad que lo intente de varias formas y nada...solo quiero aprender a rotar las letras estoy empleando un 4094 el cual emplea 3 pines para enviarle la data...bueno yo entiendo que primero se coloca el STROBE en bajo y el CLOCK Y EL DATO.. luego envio los primeros 8 bits al registro de desplazamiento y luego se coloca al STROBE en alto para que el registro los muestre en su salida...pero como hago ahora para rotar los valores de las columnas...yo entiendo que debo rotarlo para ver el desplazamiento pero no se como hacerlo en codigo...espero me puedan ayudar y  disculpen mi ignorancia...

este es el código que he realizado pero con su simulación...lo que hice fue colocarle otro contador para que no se corra hacia abajo la letra pero por fa que alguien me ayude a crear otro arreglo para rotar porque no entiendo como hacerlo

#include <18f452.h>
#fuses xt,nolvp,nowdt,noprotect
#use delay(clock=4000000)
#BYTE PORTB = 0x06
#BYTE PORTD = 0x08
#define DATA PIN_D1
#define CLOCK PIN_D0
#define STROBE PIN_D2

int   const letra[16]={0x3E,0X08, 0X08, 0X08, 0X08, 0X08,0X88,0x70,0X00, 0X7F, 0X80, 0X80, 0X80, 0X80, 0X7F, 0X00};
int desplazando[8];
int filas[8]={128,64,32,16,8,4,2,1};
//--------------------------------------------------
//Main----------------------------------------------
//--------------------------------------------------
int t;

// declaración de la función escribir_4094
void escribir_4094(int caracter);
// programa principal
void  main(){
   output_d(0x0);
   output_b(0x0);
   set_tris_d(0x0);
   set_tris_b(0x0);
  while(true){
     for(t=0;t<8;t++){
         escribir_4094(t);       
         delay_ms(3);
     }
   }
}
void escribir_4094(int caracter){
int contador2;
int contador_8;
for(contador2=0;contador2<8;contador2++){
   output_low(DATA);
   output_low(STROBE);
   output_low(CLOCK);
   for(contador_8=0;contador_8<8;contador_8++){
      output_bit(DATA,bit_test(letra[caracter],contador_8));
      output_high(CLOCK);
      delay_cycles(1);
      output_low(CLOCK); 
   }
   output_b(~filas[caracter]);
   output_low(CLOCK);
   output_high(STROBE);// transfiere los datos a las salidas del registro 4094
   delay_cycles(1);
   output_low(STROBE);
  }
}
En línea

Expeciencia es simplemente el nombre que le damos a nuestros errores!!!
fgaretto
PIC10
*
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 33



WWW
« Respuesta #298 : 17 de Mayo de 2010, 14:58:23 »

Cryn, era eso nomás, el orden de las matrices, muchas gracias.
Tengo pensado armar fisicamente una matriz de 8x24. Hace un tiempo compré leds de 5 mm de los comunes, tu qué opinas? utilizo esos leds o compro los que tienen mayor brillo ?
Con respecto al registro de desplzamiento, compro los 4094 o 595 ?
Es necesaria la utilización de los ULN2803 o 2003?
Saludos.
Fernando.
En línea

Cryn
Colaborador
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Bolivia Bolivia

Mensajes: 4170


ya no te extraño =p


« Respuesta #299 : 17 de Mayo de 2010, 16:24:12 »

hola amigos he intentado lo que me aconsejo cryn pero no entiendo como crear el otro buffer y ir rotando sobre el de verdad que lo intente de varias formas y nada...solo quiero aprender a rotar las letras estoy empleando un 4094 el cual emplea 3 pines para enviarle la data...bueno yo entiendo que primero se coloca el STROBE en bajo y el CLOCK Y EL DATO.. luego envio los primeros 8 bits al registro de desplazamiento y luego se coloca al STROBE en alto para que el registro los muestre en su salida...pero como hago ahora para rotar los valores de las columnas...yo entiendo que debo rotarlo para ver el desplazamiento pero no se como hacerlo en codigo...espero me puedan ayudar y  disculpen mi ignorancia...

este es el código que he realizado pero con su simulación...lo que hice fue colocarle otro contador para que no se corra hacia abajo la letra pero por fa que alguien me ayude a crear otro arreglo para rotar porque no entiendo como hacerlo
Hola marturetjulio, como te dije en el MP la idea del buffer es solamente por tener una copia, para poder manipular a gusto y placer los datos que se enviaran al cartel.


Cryn, era eso nomás, el orden de las matrices, muchas gracias.
Tengo pensado armar fisicamente una matriz de 8x24. Hace un tiempo compré leds de 5 mm de los comunes, tu qué opinas? utilizo esos leds o compro los que tienen mayor brillo ?
Con respecto al registro de desplzamiento, compro los 4094 o 595 ?
Es necesaria la utilización de los ULN2803 o 2003?
Dependerá del uso que le des, o mejor dicho del ambiente donde lo colocarás, si es para ambiente cerrado, quizá con los leds comunes no haya ningún problema, si más bien será para verlo en las afueras, con mucha luz solar, los led's de alto brillo serán los que seguramente darán un mejor rendimiento, aunque tengas leds de alto brillo casi siempre estarás a merced de ese brillo y a la vez el ángulo de visibilidad, lo que te obligará a hacer algunas pruebas para llegar al led adecuado.

Los 4094 son muy pobres en corriente, y por tanto en brillo para los leds y necesitan ayuda de los ULN2803
Los 74HC595 son muy buenos con corriente, prácticamente no hace falta usar ULN's.

Los ULN2003 y los ULN2803 difieren en pines, el 2003 tiene 7 salidas, el 2803 lleva 8. Después en características eléctricas son similares. Te conviene usar el 2803, porque para tu cartel solo usarías 3, en cambio si usas los 2003 necesitarás forzosamente 4 integrados, y quedarán pines sin uso.

Saludos
En línea

.
TODOPIC
   

 En línea
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [15] 16 17 18 19 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.078 segundos con 23 consultas.
anything