domingo, 18 de noviembre de 2012

Panel 8x8 con PIC16F628A

Para los alumnos de microcontroladores implementar  el Laboratorio :"Panel 8x8 con PIC16F628A"
Hacer las siguientes modificaciones:
A.- Modificar el tipo de letra que se muestra, pasar a letra corrida, si la memoria del micro no alcanza pasarlo al PIC16F877A o similar
B. Implementar  Panel de mensajes 8x48 con  PIC16F877A.

A continuación les mostrare que si se puede implementar un pequeño panel 8x8 de solo mensajes con el PIC 16F628A simulado en el ISIS PROTEUS., Cuando lo implementen y los led no tienen mucho brillo agregar
8 transistores para las FIlas y el ULN2803 para las columnas









'******************************************************************************
define OSC 8
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_BAUD 4800
RCIF VAR PIR1.5 ' Alias RCIF (USART Receive Interrupt Flag)
OERR VAR RCSTA.1 ' Alias OERR (USART Overrun Error Flag)
CREN VAR RCSTA.4 ' Alias CREN (USART Continuous Receive Enable)
INTCON = %11000000 ' Enable interrupts
ON INTERRUPT GoTo MSG ' Declare interrupt handler routine
PIE1.5 = 1 ' Enable interrupt on USART
'******************************************************************************
'VARAIABLES PARA MENSAJE O VISUALIZACION EN PANEL
B1 var Byte:B var Byte : X VAR Byte:I VAR Word : V VAR Byte : B2 VAR BYTE
C VAR Word : W VAR WORD:Velocidad VAR Byte
Col_texto VAR Word:y var byte:dato var byte:d var byte:direccion var word
Cuadro_temp  VAR Byte [8]:Dat VAR Byte [9]
mensaje VAR Byte [40]:Longitud var Word:Letra var byte
Dirf2 VAR Word :CAR VAR BYTE:
'*******************************************************************************
'PINES DE USADOS PARA MEMORIA SERIAL
SDA VAR PORTA.3
SCK VAR PORTA.4
cont Con %10100000
'********************************************************************************
TRISA=0  :PORTA=0
CAR=1
'*******************************************************************************
I2cREAD SDA,SCK,CONT,510,[COL_TEXTO]
pause 100
'*******************************************************************************
'///////////////////////////////////////////////////////////////////////////////

INICIO:
    CAR=1
    w=0
    For I = 1 To Col_texto
        W = I
        For B = 1 To 8'Columnas
            I2CREAD SDA,SCK,CONT,W,[B1]
            'B1.0=B2.7:B1.1=B2.6:B1.2=B2.5: B1.3=B2.4
            'B1.4=B2.3:B1.5=B2.2:B1.6=B2.1: B1.7=B2.0
            Cuadro_temp[b] = ~B1
            W = W + 1
        Next B
        Gosub Desplegar
    Next I
    GOTO INICIO
'*******************************************************************************
Desplegar:
    FOR V = 0 To 10'velocidad                                   'Velocidad
        PORTA.1=1  ' DATOS REGISTRO
        For X = 1 To 8'Columnas
            Toggle PortA.0   ' CLOCK DEL REGISTRO
            PORTA.1=0
            Toggle PortA.0
            Toggle PortA.2   ' LATCH DEL REGISTRO
            Shiftout Portb.3 , Portb.0 ,4,[Cuadro_temp(x)]
            Toggle Portb.4
            Toggle Portb.4
            Toggle PortA.2
            PAUSEUS 800' TIEMPO
            'portb = 255
        Next X
    Next V
    Return
'*******************************************************************************
 disable
'///////////////////////////////////////////////////////////////////////////////
'****/////RUTINA GRABA MENSAJE EN MEMORIA FLASH EEPROM 24C32 ///////***********
'***** SI SE RECIBE BYTE "*"  SE PROCEDE HA LEER MENSAJE Y GRABAR EN EEPROM*****
MSG:

HSERIN [WAIT ("*"),STR MENSAJE \60\"."]
I=0
WHILE  CAR <> 0

    LETRA= MENSAJE(I)
    I=I+1
    IF LETRA="," THEN
        CAR=0
    ENDIF
WEND
LONGITUD=I
'*******************************************************************************
Direccion = 7
'SI MENSAJE ES MEOR A 3 CARACTERES NO SE MUESTRA SOLO SE GUARDA EFECTO
IF LONGITUD < 3 THEN
    RESUME
ENDIF
'################################################################################
'Lee letra por letra y graba en memoria serial 24C32
For I = 0 To Longitud
   LETRA=MENSAJE(I)
   Select Case Letra
'***************************LETRAS MAYUSCULAS***********************************

      Case "A","a"
         Dat(1) = 63
         Dat(2) = 127
         Dat(3) = 200
         Dat(4) = 72
         Dat(5) = 63
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "B","b"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 145
         Dat(4) = 145
         Dat(5) = 110
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "C","c"
         Dat(1) = 126
         Dat(2) = 255
         Dat(3) = 129
         Dat(4) = 129
         Dat(5) = 66
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "D","d"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 129
         Dat(4) = 129
         Dat(5) = 126
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "E","e"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 145
         Dat(4) = 145
         Dat(5) = 129
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "F","f"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 136
         Dat(4) = 136
         Dat(5) = 128
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "G","g"
         Dat(1) = 126
         Dat(2) = 255
         Dat(3) = 139
         Dat(4) = 139
         Dat(5) = 78
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "H","h"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 16
         Dat(4) = 16
         Dat(5) = 255
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "I","i"
         Dat(1) = 129
         Dat(2) = 129
         Dat(3) = 255
         Dat(4) = 129
         Dat(5) = 129
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "J","j"
         Dat(1) = 135
         Dat(2) = 129
         Dat(3) = 129
         Dat(4) = 255
         Dat(5) = 255
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "K","k"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 40
         Dat(4) = 68
         Dat(5) = 131
         Dat(6) = 0
         Y = 6
         Gosub Grabar
      Case "L","l"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 1
         Dat(4) = 1
         Dat(5) = 1
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "M","m"
         Dat(1) = 255
         Dat(2) = 64
         Dat(3) = 32
         Dat(4) = 64
         Dat(5) = 255
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "N","n"
         Dat(1) = 255
         Dat(2) = 64
         Dat(3) = 32
         Dat(4) = 16
         Dat(5) = 255
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "+"
         Dat(1) = 63
         Dat(2) = 160
         Dat(3) = 144
         Dat(4) = 136
         Dat(5) = 63
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "O","o"
         Dat(1) = 126
         Dat(2) = 129
         Dat(3) = 129
         Dat(4) = 129
         Dat(5) = 126
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "P","p"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 136
         Dat(4) = 136
         Dat(5) = 112
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "Q","q"
         Dat(1) = 126
         Dat(2) = 129
         Dat(3) = 141
         Dat(4) = 130
         Dat(5) = 125
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "R","r"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 152
         Dat(4) = 148
         Dat(5) = 146
         Dat(6) = 97
         Dat(7) = 0
         Y = 7
         Gosub Grabar

      Case "S","s"
         Dat(1) = 98
         Dat(2) = 145
         Dat(3) = 145
         Dat(4) = 145
         Dat(5) = 78
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "T","t"
         Dat(1) = 128
         Dat(2) = 128
         Dat(3) = 255
         Dat(4) = 128
         Dat(5) = 128
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "U","u"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 1
         Dat(4) = 1
         Dat(5) = 254
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "V","v"
         Dat(1) = 252
         Dat(2) = 2
         Dat(3) = 1
         Dat(4) = 2
         Dat(5) = 252
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "W","w"
         Dat(1) = 255
         Dat(2) = 2
         Dat(3) = 4
         Dat(4) = 2
         Dat(5) = 255
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "X","x"
         Dat(1) = 129
         Dat(2) = 66
         Dat(3) = 36
         Dat(4) = 24
         Dat(5) = 36
         Dat(6) = 66
         Dat(7) = 129
         Dat(8) = 0
         Y = 8
         Gosub Grabar

      Case "Y","y"
         Dat(1) = 128
         Dat(2) = 64
         Dat(3) = 63
         Dat(4) = 64
         Dat(5) = 128
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "Z","z"
         Dat(1) = 135
         Dat(2) = 137
         Dat(3) = 145
         Dat(4) = 161
         Dat(5) = 193
         Dat(6) = 0
         Y = 6
         Gosub Grabar
'************************************NUMEROS************************************
      Case "1"
         Dat(1) = 16
         Dat(2) = 32
         Dat(3) = 64
         Dat(4) = 255
         Dat(5) = 0
         Y = 5
         Gosub Grabar

      Case "2"
         Dat(1) = 67
         Dat(2) = 133
         Dat(3) = 137
         Dat(4) = 145
         Dat(5) = 97
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "3"
         Dat(1) = 66
         Dat(2) = 129
         Dat(3) = 137
         Dat(4) = 137
         Dat(5) = 118
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "4"
         Dat(1) = 8
         Dat(2) = 24
         Dat(3) = 40
         Dat(4) = 72
         Dat(5) = 255
         Dat(6) = 8
         Dat(7) = 0
         Y = 7
         Gosub Grabar

      Case "5"
         Dat(1) = 241
         Dat(2) = 145
         Dat(3) = 145
         Dat(4) = 145
         Dat(5) = 142
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "6"
         Dat(1) = 126
         Dat(2) = 137
         Dat(3) = 137
         Dat(4) = 137
         Dat(5) = 70
         Dat(6) = 0
         Y = 6
         Gosub Grabar
      Case "7"
         Dat(1) = 128
         Dat(2) = 128
         Dat(3) = 135
         Dat(4) = 136
         Dat(5) = 240
         Dat(6) = 0
         Y = 6
         Gosub Grabar
      Case "8"
         Dat(1) = 118
         Dat(2) = 137
         Dat(3) = 137
         Dat(4) = 137
         Dat(5) = 118
         Dat(6) = 0
         Y = 6
         Gosub Grabar
      Case "9"
         Dat(1) = 112
         Dat(2) = 136
         Dat(3) = 136
         Dat(4) = 136
         Dat(5) = 127
         Dat(6) = 0
         Y = 6
         Gosub Grabar
      Case "0"
         Dat(1) = 126
         Dat(2) = 225
         Dat(3) = 145
         Dat(4) = 137
         Dat(5) = 135
         Dat(6) = 126
         Dat(7) = 0
         Y = 7
         Gosub Grabar

'***********************************SIGNOS**************************************
   
   Case " "                                                 'espacio
         Dat(1) = 0
         Dat(2) = 0
         Dat(3) = 0
         Y = 3
         Gosub Grabar
 
 
    Case "%"                                                ' cara feliz

         Dat(1) = 60
         Dat(2) = 66
         Dat(3) = 169
         Dat(4) = 133
         Dat(5) = 133
         Dat(6) = 169
         Dat(7) = 66
         Dat(8) = 60
         Dat(9) = 0
         Y = 9
         Gosub Grabar
     Case ")"                                               ' cara TRISTE

         Dat(1) = 60
         Dat(2) = 66
         Dat(3) = 165
         Dat(4) = 137
         Dat(5) = 137
         Dat(6) = 165
         Dat(7) = 66
         Dat(8) = 60
         Dat(9) = 0
         Y = 9
         Gosub Grabar
    Case "$"                                               'corazon
         Dat(1) = 112
         Dat(2) = 248
         Dat(3) = 124
         Dat(4) = 62
         Dat(5) = 63
         Dat(6) = 124
         Dat(7) = 248
         Dat(8) = 112
         Dat(9) = 0
         Y = 9
         Gosub Grabar  
      Case "&"                                              'corazon ROTO
         Dat(1) = 112
         Dat(2) = 248
         Dat(3) = 120
         Dat(4) = 54
         Dat(5) = 39
         Dat(6) = 92
         Dat(7) = 152
         Dat(8) = 112
         Dat(9) = 0
         Y = 9
         Gosub Grabar
      Case "?"                                                 'interrogacion
         Dat(1) = 64
         Dat(2) = 128
         Dat(3) = 128
         Dat(4) = 141
         Dat(5) = 144
         Dat(6) = 96
         Dat(7) = 0
         Y = 7
         Gosub Grabar
      Case "("                                                ' telefono
         Dat(1) = 14
         Dat(2) = 7
         Dat(3) = 7
         Dat(4) = 14
         Dat(5) = 220
         Dat(6) = 248
         Dat(7) = 112
         Dat(8) = 0
         Y = 8
         Gosub Grabar  
       
     
 '*******************************letras minusculas******************************
      Case Else
         Dat(1) = 0
         Y = 1
         Gosub Grabar
 
   End Select
 
Next I
    COL_TEXTO = Direccion  ' total de bytes incluido los 48 bytes iniciales
    Dirf2 = COL_TEXTO + 8  ' sele agrega 48 ceros al final
    Dato = 0
    For I = COL_TEXTO To Dirf2
        I2cWRITE SDA,SCK,CONT,i,[dato] ' graba 48 ceros al final de mensaje
    pause 10
    Next I
    'GRABA EL VALOR DE LA CANTIDAD DE BYTES DEL MENSAJE EN LA POSICION 510
    I2cWRITE SDA,SCK,CONT,510,[COL_TEXTO]
    pause 10
    Dato = 0
    For I = 0 To 7                                          
        I2cWRITE SDA,SCK,CONT,i,[dato]
        pause 10
    Next I
RESUME

'################################################################################
'*******************************************************************************
grabar: ' grabar en memoria los bytes de las letras del mensaje
    For D = 1 To Y
         Direccion = Direccion + 1
         Dato = Dat(d)
         I2cWRITE SDA,SCK,CONT,DIRECCION,[dato]
         pause 10
    Next d
 
 return
'******************************************************************************

No hay comentarios: