# Control de Matriz de leds con teclado de pc



## cevollin (Feb 24, 2009)

hola que tal camaradas y siguo dando lata con los carteles hace poco arme una matriz de leds de 7x40 el texto a mostrar se desplasa de derecha a izquierda ahora estuve investigando mas sobre el caso y vi este video que la verdad se me hiso super 

YouTube - matrix de leds 80 columnas y teclado pc - pic16f628a

ahora  mi pregunta es esta como le hago para que en mi matriz de leds el texto lo pueda modificar por medio de un teclado de pc como en el  video 

tengo una teoria que es que el pic se dedique a leer las teclas pulsadas del teclado de pc  y estas las tradusca a un bit map correspondiente a la misma letra de la  tecla pulsada en el teclado  por ejemplo 

01110                                      fila 1
10001         fila2
10001         fila3
11111                                      fila4
10001         fila5
10001         fila6
10001         fila7

y luego estos datos los grabe en una memoria eeprom (la memoria que el pic se dedica a leer para asi volcar los datos en la matriz de leds por medio de los registros de desplasamiento)

bueno esa es una teoria pero ps yo la verdad no se como es que funciona el teclado de la pc  se que es como un teclado matricial pero no se como es el codigo correspondiente a cada tecla  y como es que trasmite este codigo por medio serial o paralelo por el puerto del teclado


----------



## cevollin (Mar 3, 2009)

jajaja apenas ya hace una semana de postear esta pregunta y ya supe como modificar el texto por medio de la computadora del puerto serie 
ps les cuento para todos aquellos que tenian la dudita como yo ps aqui les explico pues mira para 
poder modificar el texto por pc es muy sencillo tienes que trabajar con interrupciones por rcie (en mi caso pic16f628a) este registro es la interrupcion por datos recibidos (pin rx en pic16f628a) pero mucho ojo antes de hacer esto habilita las interrupciones  en el registro intcon pie1 y gie 

ya que activaste las interrupciones dentro del vector de resetet 0x04 inserta el bit map correspondiente a cada tecla que pulsaste  por ejemplo la tecla A seria 

01110                                      fila 1
10001         fila2
10001         fila3
11111                                      fila4
10001         fila5
10001         fila6
10001         fila7

despues este dato lo grabas en la memoria eeprom que es la misma memoria que el pic se encarga de leer la información en ella para asi volcarla en el registro de desplasamiento


----------



## Gradmaster (Mar 3, 2009)

Ahora para ponerle mas sabor a tu proyecto por que no intentas omitir la Pc, y leer el teclado desde el pic.
a ver si te llama la atensión la idea.

saludos y exito.


----------



## Moyano Jonathan (Mar 4, 2009)

Acá dos link's que pueden ayudar:
http://picmania.garcia-cuervo.com/Proyectos_Teclado_PS2.php
http://picmania.garcia-cuervo.com/Proyectos_KBDEMUL.php


----------



## cevollin (Mar 4, 2009)

monayo jonathan buen aporte ya havia leeido este articulo 

el siguiente paso seria igual la lectura del teclado solo que utilisaria los scan codes del teclado  en vez de el codigo assi generado por el puerto serie me imagino que la comounicacion entre pic y puerto serie es igual que la comunicacion entre pic y solamente el teclado solamente que con el teclado serian los escan codes y por el puerto serie seria codigo  ascii


----------



## Moyano Jonathan (Mar 4, 2009)

Ha ya entendi vos te referis a leer los datos de la matriz del teclado y despúes interpretar el dato?


----------



## cevollin (Mar 4, 2009)

si a eso me referia jajajaja  no suena muy complicado 

los datos que se mandan desde el puerto serial es asincrono son 1 bite de star  mas 8 de datos y 1 bit de stop pero es codigo ascii

y los datos que manda el teclado son asincronos 1 bit de star mas 8 bits de datos y 1 bit de stop pero los codigos son los llamados scan codes  los codigos de la matriz del teclado


----------



## leo_programer (Mar 5, 2009)

ole cevollin, me entro una duda, 

como le estas haciendo para mandar los datos del teclado al puerto serie del pc? digo, la unica forma que se me ocurre es que usas un software que mande la tecla digitada, o el computador solo por que si al presionar una tecla lo manda por puerto serie? por que creo que esa parte la obviaste en la explicación dada, saludos


----------



## cevollin (Mar 5, 2009)

a pues mira el sofware que manda la información por medio del puerto serie es el hyper terminal de windows xp cuando instalas tu windos se instala ese programa en inicio todos los programas acessorios y comunicaciones este programa te manda la información en codigo ascii y te lo manda por el puerto que tu selecciones ya sea el puerto com1 (puerto serie)
puerto com2  etc  y la información se mada a la velocidad que tu le configures baudios (bits por segundo)
adjunto tabla ascii


----------



## Pedro1000 (Jul 6, 2009)

soy nuevo disculpen si les molesto pero podrian mandarme el circuito


----------



## Chico3001 (Jul 7, 2009)

Hay muchos carteles de leds  por el foro... usa el buscador para localizarlos.....


----------



## ga7i70 (Dic 31, 2009)

buen aporte chevere el foro

cevollin la matriz que hiciste antes tenia una proogramacion fija???

podrias mandar la progracmacion del primero de 7x40?


----------



## fey116 (Dic 23, 2011)

*Matriz de leds 7X32.
Pic 16f628a + 74lc164*

*Mi contribucion al foro por  toda la ayuda brindada y espero que les sirva.



Proyecto completo codigo fuente + simulacion + proteus.*

Descarga link https://www.forosdeelectronica.com/attachment.php?attachmentid=64789&d=1324675703

video corriendo:http://www.youtube.com/v/108jzdzfBNw&hl


codigo fuente:

```
DEFINE OSC 4


LINEA            var byte[32]
CHAR             VAR BYTE[7]
CHAR_ACT         VAR BYTE ' puntero de caracter
CHAR_LENGTH_ACT  VAR BYTE 'puntero de la longitud del caracter
CHAR_LENGTH      var byte ' longitud de la longitud
Caracter         var byte
Counter1         var byte
Counter2         var byte
Counter3         var byte
Counter4         var byte



'declaracion de alias

DATOS            var PORTA.0
CLOCK            var PORTA.1

'Inicializacion de los datos


TRISB = 0
TRISA = 0

linea[1]=$FF
linea[2]=$FF
linea[3]=$FF
linea[4]=$FF
linea[5]=$FF
linea[6]=$FF
linea[7]=$FF
linea[8]=$FF
linea[9]=$FF
linea[10]=$FF
linea[11]=$FF
linea[12]=$FF
linea[13]=$FF
linea[14]=$FF
linea[15]=$FF
linea[16]=$FF
linea[17]=$FF
linea[18]=$FF
linea[19]=$FF
linea[20]=$FF
linea[21]=$FF
linea[22]=$FF
linea[23]=$FF
linea[24]=$FF
linea[25]=$FF
linea[26]=$FF
linea[27]=$FF
linea[28]=$FF
linea[29]=$FF
linea[30]=$FF
linea[31]=$FF
linea[32]=$FF

char_act=0
counter3=0
counter4=0
counter2=1
char_length_act = 1
low clock
low datos

DATA @0,"CRISTO VIENE PRONTO PREPARATE      FELIZ NAVIDAD 2011 FOROS UCONTROL  " 'aca guardamos nuetro programa, es modificable al gusto
read char_act,caracter
gosub tabla_char

'inicio del programa
Inicio:

MENSAJE:
        linea[1]=char[char_length_act]
        IF CHAR_LENGTh_act = char_length  then
           char_act = char_act + 1  
Mens_Salto1:
           read char_act,caracter
           if caracter=$FF then 
              char_act=0
              goto mens_salto1
           endif   
           gosub tabla_char
           char_length_act=0
        endif   
Img:
        counter1=0
                
LineH:
         PORTB = $FF
         counter1 = counter1 + 1      'envia LA ACTIVACION del registro
         if counter1 = counter2 then  'serial paralelo
            gosub send_data0          'para activar la linea vertical
         else
             gosub send_data1
         endif
         if counter1 = 32 then goto LineV
         goto lineh
LineV:
      PORTB = LINEA[COUNTER2]    'determina la posicion activa horizontal
      pauseus 500              'y genera la activacion de los leds verticales
      if counter2 = 32 then
           counter2 = 1
         gosub send_data0   
      ELSE
            counter2 = counter2 + 1
            gosub send_data1
      endif
 
      
Shift_Left:
           if counter3 = 35 then
                counter3 = 0
                COUNTER4 = COUNTER4 + 1
                if counter4 = 2 then ' 250 del counter3 *4 del 
                
                   linea[32]=linea[31]'                   
		           linea[31]=linea[30]'
                   linea[30]=linea[29]'counter4 es aprox 0.5seg
                   linea[29]=linea[28]'si hay mas lineas 
                   linea[28]=linea[27]'hay q agrandar losvectores
                   linea[27]=linea[26]'y cambiar por un for   
                   linea[26]=linea[25]  
                   linea[25]=linea[24]  
                   linea[24]=linea[23]
                   linea[23]=linea[22]'counter4 es aprox 0.5seg
                   linea[22]=linea[21]'si hay mas lineas 
                   linea[21]=linea[20]
                   linea[20]=linea[19]'y cambiar por un for   
                   linea[19]=linea[18]  
                   linea[18]=linea[17]  
                   linea[17]=linea[16]    
       			   linea[16]=linea[15]'
                   linea[15]=linea[14]'counter4 es aprox 0.5seg
                   linea[14]=linea[13]'si hay mas lineas 
                   linea[13]=linea[12]'hay q agrandar losvectores
                   linea[12]=linea[11]'y cambiar por un for   
                   linea[11]=linea[10]  
                   linea[10]=linea[9]  
                   linea[9]=linea[8]  
                   linea[8]=linea[7]'counter4 es aprox 0.5seg
                   linea[7]=linea[6]'si hay mas lineas 
                   linea[6]=linea[5]'hay q agrandar los vectores
                   linea[5]=linea[4]'y cambiar por un for   
                   linea[4]=linea[3]  
                   linea[3]=linea[2]  
                   linea[2]=linea[1]
                   counter4 = 0
                   char_length_act = char_length_act+1
                   GOTO INICIO
                endif
            ELSE
                counter3 = counter3 + 1
            endif
            goto IMG
                      
SEND_DATA0:
           low datos
           pauseus 2
           low clock
           pauseus 2
           high clock
           RETURN

SEND_DATA1:
           HIGH DATOS
           pauseus 2
           low clock
           pauseus 2
           high clock
           RETURN

'tabla de seleccion de caracter
           
TABLA_CHAR:
    select case caracter
            case " "
                char_LENGTH=5
                char[5]=$FF
                char[4]=$FF
                char[3]=$FF
                char[2]=$FF
                char[1]=$FF
            
            
            
           
           case "C"
                char_LENGTH=5
                char[5]=$FF
                char[4]=%1011101
                char[3]=%0111110
                char[2]=%0111110
                char[1]=%1000001 
            
                
              
            case "R"
                char_LENGTH=5
                char[5]=$FF
                char[4]=%1001000
                char[3]=%0110111
                char[2]=%0110111
                char[1]=%0000000  
                
            
            
            case "I"
                char_LENGTH=4
                char[4]=$FF
                char[3]=%0111110
                char[2]=%0000000
                char[1]=%0111110
                
            
            case "T"
                char_LENGTH=5
                char[5]=$FF
                char[4]=%0111111
                char[3]=%0000000
                char[2]=%0000000
                char[1]=%0111111
                       
                     
                
            
            case "O"
                char_LENGTH=6
                char[6]=$FF
                char[5]=%1000001
                char[4]=%0111110
                char[3]=%0111110
                char[2]=%0111110
                char[1]=%1000001
            
             ...........caracteres del A a la Z + numeros 
           
                
            case else
                char_LENGTH=5
                CHAR[1]=$FF
                CHAR[2]=$FF
                CHAR[3]=$FF
                CHAR[4]=$FF
                CHAR[5]=$FF

    end select
    return
             
                 
END
```






cevollin dijo:


> hola que tal camaradas y siguo dando lata con los carteles hace poco arme una matriz de leds de 7x40 el texto a mostrar se desplasa de derecha a izquierda ahora estuve investigando mas sobre el caso y vi este video que la verdad se me hiso super
> 
> YouTube - matrix de leds 80 columnas y teclado pc - pic16f628a
> 
> ...


----------



## Daniel Alvis (Sep 12, 2013)

hola soy nuevo en este foro,yo tambien estoy haciendo el matris de led controlado por teclado de pc porfabor ayudenme como instalar el teclado al pic con un diagrama se lo agradeceria mucho...


----------



## D@rkbytes (Sep 12, 2013)

Sobre este enlace se encuentra más información:
*Matriz de Leds PIC16f628a Controlada por Teclado PS2*​


----------

