Você está na página 1de 49

TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

Índice
Introducción ------------------------------------------------------------------------ 3

Descripción ------------------------------------------------------------------------ 4

Programa en assembler -------------------------------------------------------- 8

Diagrama de flujo ------------------------------------------------------------------- 23

Diagrama del circuito ------------------------------------------------------------ 24

Presentación del proyecto terminado -------------------------------------- 25

Problemas en la realización del proyecto -------------------------------- 27

Apéndice A ------------------------------------------------------------------------- 28

Apéndice B ------------------------------------------------------------------------- 30

Apéndice C ------------------------------------------------------------------------- 32

Apéndice D ------------------------------------------------------------------------- 34

Conclusión ------------------------------------------------------------------------- 36

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

Introducción
El proyecto consiste en un cartel electrónico programable de matrices de “leds”.
Mediante un teclado de PC-AT se podrán ir ingresando los distintos caracteres, el
cual se podrán ir visualizando en la pantalla.
Esta compuesta de ocho matrices de “leds” 7x5 cátodo común, lo cual formara una
matriz de 7 filas por 80 columnas.
El tamaño máximo de caracteres del mensaje es de 128, que pueden ser desde
números del 0-9, y letras desde A-Z minúsculas y mayúsculas.
Dispondrá de un microcontrolador PIC 16F873, el cual posee 4K de memoria de
programa, 192 bytes de memoria de datos, 128 bytes de memoria RAM, además de
puertos de entrada/salida, etc. Este se utilizara para manejar todos los componentes
del proyecto como la memoria, las matrices, los codificadores, etc.
Se pueden visualizar dos tipos de mensajes, uno mensaje giratorio y otro de a frases
instantáneas.
Se utilizara una memoria EEPROM de 2K byte, en ella se irán guardando los
distintos mensajes ingresados.
Posee 8 lugares de memoria, 4 para cada modo. Una vez apagado se volverá a
mostrar el ultimo mensaje ingresado.

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

Descripción
El objetivo del trabajo es poder visualizar dos tipos de mensajes, un mensaje
giratorio y otro que va aparecer de a frases instantáneas. Los mensajes se
guardaran en la memoria I2C EEPROM (24C16), para poder ser utilizados
nuevamente, la conexión y funcionamiento se describe en el Apéndice C. La
cantidad máxima de caracteres que se pueden escribir es de 128. El control del
cartel se hará mediante un teclado de PC-AT, la descripción de este es detallado en
el Apéndice A. Los caracteres que se pueden visualizar son mayúsculas de la (A) a
la (Z), minúsculas de la (a) a la (z) y los números del (0) al (9). El control se va a
realizar mediante el microcontrolador PIC 16F873, (Apéndice D), que será el
encargado de manejar la memoria I2C EEPROM, el teclado, los decodificadores y
las matrices de “leds”.

Diseño Hardware

En el presente se describe el proceso que se ha llevado a cabo en el diseño lógico,


eléctrico de la placa que contiene el “Display” objeto del trabajo.
El “hardware” que se quiere construir es un Cartel luminoso. Su tamaño vendrá
impuesto por el de las matrices de “leds” que se van a usar en su construcción. Una
descripción detallada de estas matrices puede encontrarse en el Apéndice B de este
trabajo. Para el diseño inicial se utilizo 8 matrices, no se utilizo mas matrices por
razón de costo, de forma que se tendrá el control sobre 280 “leds” (7 x 5 x 8) por lo
que quedaran 13 señales digitales que son controladas por el microcontrolador PIC
16F873. El montaje final queda por tanto con 40 columnas y 7 filas.
El control de las matrices es multiplexado, de forma que las matrices se controlan
por filas y por columnas. Además se debe tener en cuenta la conexión de los “leds”
en la matriz, que es de cátodo común.
El diseño debe ser seguro. Esto quiere decir que ante una manipulación incorrecta el
estado de los componentes no se vea alterado, ni destruido.

Diseño lógico y eléctrico


Diseño lógico

Teniendo en cuenta las restricciones anteriores se comienza el diseño lógico del


circuito de control. En primer lugar se debe escoger la forma en que se va a realizar
el control sobre las matrices, teniendo en cuenta que se va a crear un “display”
lineal. Lo ideal sería poder controlar individualmente cada uno de los 280 “leds”, pero
para ello serían necesarias 47 señales de control, una por cada columna (40) y uno
por cada fila (7). El número es excesivo, así que se tendrá que plantear otro
esquema de control. Se plantearon dos soluciones, codificar las columnas o las filas,
de forma que en un momento dado sólo por una columna o por una fila pudiera
pasar corriente, permitiendo eso sí el control individual de los “leds” de la fila o
columna por la que pasará corriente. De las dos opciones se ha escogido la
codificación de las 40 columnas, con lo que en un instante determinado, sólo en 1
columna de las 40, se puede iluminar alguno de los 7 “leds” que la componen. A
continuación se procede a la codificación de todas las señales de control necesarias.
Para codificar las 40 columnas se necesitan 6 señales de control. Lo normal sería

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

usar un decodificador de 6 a 48, pero al hacer el diseño físico con una herramienta
beta, se usarán componentes más sencillos que seguro estarán disponibles. En vez
de decodificadores 6 a 48, se usarán decodificadores 3 a 8, y en vez de un sólo
decodificador se necesitarán 5 para codificar las 40 columnas. Esto no es suficiente
para mantener una sola columna activa, así que es necesario introducir un segundo
nivel de codificación, en este caso, lo que se codifica son las señales “enable” de los
decodificadores anteriores para que sólo 1 de los 5 anteriores este activo en un
momento dado. Con un decodificador 3 a 8 es suficiente para controlar los 5. Para el
primer nivel de codificación introducido se necesitan 3 señales de control que se
conectaran a las entradas A, B y C de los 5 decodificadores. Los 5 comparten las
mismas señales. Para el segundo nivel de codificación se necesitarán 3 señales,
para las entradas A, B y C del decodificador. Las salidas de este decodificador se
conectan con las entradas “enable” de los 5 decodificadores anteriores. El resto de
entradas se conectan a GND. Por otro lado se necesitan 7 señales, una por cada fila
del “Display”.
Una vez que se conoce el número de señales necesarias para el diseño se debe
realizar la conexión con los componentes, para ello se debe tener en cuenta el nivel
lógico de las señales. En primer lugar recordar que para iluminar un “led” es
necesario introducir una señal lógica alta (‟1‟) por el ánodo y tener una señal lógica
baja (‟0‟) por el cátodo. Por tanto, dado que los cátodos están unidos por las
columnas y son estas las que se han codificado, se situará la salida de cada
decodificador conectado a la columna de la matriz.
La salida será activa a nivel bajo así que será el decodificador 74138. Para el
decodificador de las señales “enable” al ser ésta activa a nivel alto, se usará el
decodificador 74238. El resultado de las conexiones entre componentes y el diseño
lógico inicial se puede ver en la figura 1.

Diseño eléctrico

Con la solución anterior se ha resuelto el problema lógico de control usando un total


de 13 señales, si bien, ahora se debe resolver el problema eléctrico, es decir el tema
de corrientes, resistencias y voltajes. Para ello, en primer lugar se elige la tecnología
de los componentes auxiliares (decodificadores, ...) que se necesitarán, en este caso
se uso tecnología TTL.
La forma que se ha escogido de control es por columnas y cada una esta conectada
a la salida de un decodificador. Cada decodificador debe manejar como máximo 7
“leds” por lo que se ha decidido introducir entre los cátodos y el codificador un par
“darlington” que es capaz de manejar hasta 550 mA. El circuito integrado que
proporciona estos “darlington” es el ULN2003.
El uso del par “darlington” provoca que se cambie el nivel de la señal lógica de
control. Antes, para que el “led” se encendiera debía entrar un ‟0‟ y este era
proporcionado directamente por el decodificador, en cambio, ahora es el “darlington”
el que se lo proporciona pero éste requiere de un ‟1‟ a su entrada por lo que se
deben de cambiar los 5 decodificadores con salidas a nivel bajo por decodificadores
con salida a nivel alto (74238). En la figura 2 se ve el conexionado.
Por otro lado las señales que controlan las filas como máximo alimentan a un “led”,
por lo que fue necesario colocar entre las filas y el puerto B del PIC un 74HC241 que
es un amplificador de corriente. En la figura 3 se muestra el puerto B del PIC
conecto con el 74HC241 y las filas de los “leds”.

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

FILA01
SEÑAL 01

FILA02
SEÑAL 02

FILA03
SEÑAL 03

FILA04
SEÑAL 04

FILA05
SEÑAL 05

FILA06
SEÑAL 06

FILA07
SEÑAL 07
COL 01

COL 02

COL 03

COL 04

COL 05

COL 06

COL 37

COL 38

COL 39

COL 40
15
14
13
12
11
10

15
14
13
12
11
10
9
7

9
7
U1 U2
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7

Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
74ALS138 74ALS138
E1
E2
E3

E1
E2
E3
C

C
A
B

A
B
1
2
3

6
4
5

1
2
3

6
4
5
SEÑAL 08
SEÑAL 09
SEÑAL 10
15
14
13
12
11
10
9
7

U3
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7

74HC238
E1
E2
E3
C
A
B
1
2
3

6
4
5

SEÑAL 11
SEÑAL 12
SEÑAL 13

FIGURA 1

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

COL 01

COL 02

COL 03

COL 04

COL 05

COL 06

COL 37

COL 38

COL 39

COL 40
16
15
14
13
12
11
10

16
15
14
13
12
11
10
9

9
U1 U2
1C
2C
3C
4C
5C
6C
7C

1C
2C
3C
4C
5C
6C
7C
COM

COM
ULN2003A ULN2003A
1B
2B
3B
4B
5B
6B
7B

1B
2B
3B
4B
5B
6B
7B
1
2
3
4
5
6
7

1
2
3
4
5
6
7
15
14
13
12
11
10

15
14
13
12
11
10
9
7

9
7
U3 U4
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7

Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
74HC238 74HC238
E1
E2
E3

E1
E2
E3
C

C
A
B

A
B
1
2
3

6
4
5

1
2
3

6
4
5

FIGURA 2

FILA01

FILA02
U2
9
OSC1/CLKIN RB0/INT
21 U1
10
OSC2/CLKOUT RB1
22 SEÑAL 01 2
1A0 1Y0
18
1 23 SEÑAL 02 4 16 FILA03
MCLR/Vpp/THV RB2 1A1 1Y1
RB3/PGM
24 SEÑAL 03 6
1A2 1Y2
14
2
RA0/AN0 RB4
25 SEÑAL 04 8
1A3 1Y3
12
3
RA1/AN1 RB5
26 SEÑAL 05 11
2A0 2Y0
9
4
RA2/AN2/VREF- RB6/PGC
27 SEÑAL 06 13
2A1 2Y1
7
5 28 SEÑAL 07 15 5 FILA04
RA3/AN3/VREF+ RB7/PGD 2A2 2Y2
6 17 3
RA4/T0CKI 2A3 2Y3
7 11
RA5/AN4/SS RC0/T1OSO/T1CKI
12 1
RC1/T1OSI/CCP2 1OE
13 19
RC2/CCP1 2OE
14 FILA05
RC3/SCK/SCL
15 74ALS241
RC4/SDI/SDA
16
RC5/SDO
17
RC6/TX/CK
18
RC7/RX/DT
FILA06
PIC16F873

FILA07
COL 01

FIGURA 3

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

Programa en assembler
List p=16F873
INCLUDE "P16F873.INC" ;Definiciones de registros internos
errorlevel -302

Doble_DATAIN EQU 0x20


ASCII EQU 0x21
BANDERAS EQU 0x22
SALTO EQU 0x23
GIRAR EQU 0x24
CONTADOR2 EQU 0x25

#DEFINE BANDERAS_CAPS BANDERAS,0


Nbits EQU 0x26
Nbytes EQU 0x27
NO_ROTAR EQU 0x28
KeyRtn EQU 0x29
DATAIN EQU 0x2a
#DEFINE KBD_CLK PORTB,0
#DEFINE KBD_DATO PORTC,0
#DEFINE BIT_ACTUAL DATAIN,7
STATUS_TEMP EQU 0x2b
W_TEMP EQU 0x2c
CUENTAS EQU 0x2d
CARACTER EQU 0x2e
RESTADOR EQU 0x2f
RESTADOR1 EQU 0x30
TIEMPO EQU 0x31
SAL EQU 0x32
saltar EQU 0x33
Delay_Cont EQU 0x34

#DEFINE banco_0 bcf STATUS,5 ; Banco 1 de RAM


#DEFINE banco_1 bsf STATUS,5 ; Banco 0 de RAM

cblock 0x35
Direccion,Dato,Banderas,Copia,restador,retardo,valor,cont,fila,fila1,GIRAR1,cuanto,memoria,comp

endc

org 0x00

goto INICIO
org 0x04
MOVWF W_TEMP
SWAPF STATUS,W
MOVwf STATUS_TEMP
CALL LEER_TECLADO
bcf INTCON,INTF
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE

TABLA0 addwf 02h,1


RETLW 0xFE
RETLW 0xFF
RETLW 0xFD
RETLW 0xFC
RETLW 0xA9
RETLW 0
RETLW 0
RETLW 0x50 ;q
RETLW 0x86 ;1
RETLW 0
RETLW 0
RETLW 0
RETLW 0x7e ;z

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

RETLW 0x59 ;s
RETLW 0x01 ;a
RETLW 0x6d ;w
RETLW 0x8A ;2
RETLW 0
RETLW 0
RETLW 0X0b ;c
RETLW 0x73 ;x
RETLW 0x10 ;d
RETLW 0x15 ;e
RETLW 0X94 ;4
RETLW 0X8F ;3
RETLW 0
RETLW 0
RETLW 0x83 ;ESPACIO
RETLW 0x67 ;v
RETLW 0x1a ;f
RETLW 0x5e ;t
RETLW 0x55 ;r
RETLW 0X9A ;5
RETLW 0
RETLW 0
RETLW 0x40 ;n
RETLW 0x06 ;b
RETLW 0x23 ;h
RETLW 0x1e ;g
RETLW 0x79 ;y
RETLW 0XA0 ;6
RETLW 0
RETLW 0
RETLW 0
RETLW 0x3a ;m
RETLW 0x2c ;j
RETLW 0x62 ;u
RETLW 0XA6 ;7
RETLW 0XAB ;8
RETLW 0
RETLW 0
RETLW 0
RETLW 0x31 ;k
RETLW 0x28 ;i
RETLW 0x45 ;o
RETLW 0XB7 ;0
RETLW 0XB1 ;9
RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0x36 ;l
RETLW 0
RETLW 0x4b ;p
RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0X0A
RETLW 0
RETLW 0
RETLW 0x08
RETLW 0
RETLW 0
RETLW 0
RETLW 0

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0x08 ;borrar

Tabla addwf 02h,1


nop
RETLW 3Fh ;A
RETLW 48h
RETLW 48h
RETLW 48h
RETLW 3Fh
RETLW 00h
RETLW 7Fh ;B
RETLW 49h
RETLW 49h
RETLW 49h
RETLW 3Eh
RETLW 00h
RETLW 3Eh ;C
RETLW 41h
RETLW 41h
RETLW 41h
RETLW 22h
RETLW 00h
RETLW 7Fh ;D
RETLW 41h
RETLW 41h
RETLW 41h
RETLW 3Eh
RETLW 00h
RETLW 7Fh ;E
RETLW 49h
RETLW 49h
RETLW 49h
RETLW 41h
RETLW 00h
RETLW 7Fh ;F
RETLW 48h
RETLW 48h
RETLW 48h
RETLW 40h
RETLW 00h
RETLW 3Eh ;G
RETLW 41h
RETLW 49h
RETLW 49h
RETLW 2Eh
RETLW 00h
RETLW 7Fh ;H
RETLW 08h
RETLW 08h
RETLW 08h
RETLW 7Fh
RETLW 00h
RETLW 41h ;I
RETLW 41h
RETLW 7Fh
RETLW 41h
RETLW 41h
RETLW 00h
RETLW 02h ;J
RETLW 01h
RETLW 41h
RETLW 7Eh
RETLW 40h
RETLW 00h
RETLW 7Fh ;K
RETLW 08h
RETLW 14h
RETLW 22h

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

RETLW 41h
RETLW 00h
RETLW 7Fh ;L
RETLW 01h
RETLW 01h
RETLW 01h
RETLW 01h
RETLW 00h
RETLW 7Fh ;M
RETLW 20h
RETLW 18h
RETLW 20h
RETLW 7Fh
RETLW 00h
RETLW 7Fh ;N
RETLW 10h
RETLW 08h
RETLW 04h
RETLW 7Fh
RETLW 00h
RETLW 3Eh ;O
RETLW 41h
RETLW 41h
RETLW 41h
RETLW 3Eh
RETLW 00h
RETLW 7Fh ;P
RETLW 48h
RETLW 48h
RETLW 48h
RETLW 30h
RETLW 00h
RETLW 3Eh ;Q
RETLW 41h
RETLW 45h
RETLW 42h
RETLW 3Dh
RETLW 00h
RETLW 7Fh ;R
RETLW 48h
RETLW 4Ch
RETLW 4Ah
RETLW 31h
RETLW 00h
RETLW 32h ;S
RETLW 49h
RETLW 49h
RETLW 49h
RETLW 26h
RETLW 00h
RETLW 40h ;T
RETLW 40h
RETLW 7Fh
RETLW 40h
RETLW 40h
RETLW 00h
RETLW 7Eh ;U
RETLW 01h
RETLW 01h
RETLW 01h
RETLW 7Eh
RETLW 00h
RETLW 7Ch ;V
RETLW 02h
RETLW 01h
RETLW 02h
RETLW 7Ch
RETLW 00h
RETLW 7Eh ;W
RETLW 01h
RETLW 0Eh
RETLW 01h
RETLW 7Eh

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

RETLW 00h
RETLW 63h ;X
RETLW 14h
RETLW 08h
RETLW 14h
RETLW 63h
RETLW 00h
RETLW 70h ;Y
RETLW 08h
RETLW 07h
RETLW 08h
RETLW 70h
RETLW 00h
RETLW 43h ;Z
RETLW 45h
RETLW 49h
RETLW 51h
RETLW 61h
RETLW 00h
NOP

TABLA1 addwf 02h,1


RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0xA9
RETLW 0
RETLW 0
RETLW 0x61 ;Q
RETLW '1'
RETLW 0
RETLW 0
RETLW 0
RETLW 0x97 ;Z
RETLW 0x6d ;S
RETLW 0x01 ;A
RETLW 0x85 ;W
RETLW '2'
RETLW 0
RETLW 0
RETLW 0X0d ;C
RETLW 0x8b ;X
RETLW 0x13 ;D
RETLW 0x19 ;E
RETLW '4'
RETLW '3'
RETLW 0
RETLW 0
RETLW 0x9d ;espacio
RETLW 0x7f ;V
RETLW 0x1f ;F
RETLW 0x73 ;T
RETLW 0x67 ;R
RETLW '5'
RETLW 0
RETLW 0
RETLW 0x4f ;N
RETLW 0x07 ;B
RETLW 0x2b ;H
RETLW 0x25 ;G
RETLW 0x91 ;Y
RETLW '&'
RETLW 0
RETLW 0
RETLW 0
RETLW 0x49 ;M
RETLW 0x37 ;J
RETLW 0x79 ;U
RETLW '7'
RETLW '8'
RETLW 0

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

RETLW 0
RETLW 0
RETLW 0x3d ;K
RETLW 0x31 ;I
RETLW 0x55 ;O
RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0x43 ;L
RETLW 0
RETLW 0x5b ;P

Tabla1 addwf 02h,1


nop
RETLW 02h ;a
RETLW 15h
RETLW 15h
RETLW 0Eh
RETLW 00h
RETLW 7Fh ;b
RETLW 11h
RETLW 11h
RETLW 0Eh
RETLW 00h
RETLW 0Eh ;c
RETLW 11h
RETLW 11h
RETLW 11h
RETLW 00h
RETLW 0Eh ;d
RETLW 11h
RETLW 11h
RETLW 7Fh
RETLW 00h
RETLW 0Eh ;e
RETLW 15h
RETLW 15h
RETLW 0Ch
RETLW 00h
RETLW 08h ;f
RETLW 3Fh
RETLW 48h
RETLW 00h
RETLW 18h ;g
RETLW 25h
RETLW 25h
RETLW 1Eh
RETLW 00h
RETLW 7Fh ;h
RETLW 10h
RETLW 10h
RETLW 0Fh
RETLW 00h
RETLW 11h ;i
RETLW 5Fh
RETLW 01h
RETLW 00h
RETLW 02h ;j
RETLW 01h
RETLW 11h
RETLW 5Eh
RETLW 00h
RETLW 7Fh ;k
RETLW 04h
RETLW 0Ah
RETLW 11h
RETLW 00h
RETLW 41h ;l
RETLW 7Fh

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

RETLW 01h
RETLW 00h
RETLW 1Fh ;m
RETLW 10h
RETLW 0Ch
RETLW 10h
RETLW 0Fh
RETLW 00h
RETLW 1Fh ;n
RETLW 08h
RETLW 10h
RETLW 0Fh
RETLW 00h
RETLW 0Eh ;o
RETLW 11h
RETLW 11h
RETLW 11h
RETLW 0Eh
RETLW 00h
RETLW 1Fh ;p
RETLW 14h
RETLW 14h
RETLW 08h
RETLW 00h
RETLW 08h ;q
RETLW 14h
RETLW 14h
RETLW 1Fh
RETLW 00h
RETLW 1Fh ;r
RETLW 08h
RETLW 10h
RETLW 00h
RETLW 09h ;s
RETLW 15h
RETLW 15h
RETLW 12h
RETLW 00h
RETLW 10h ;t
RETLW 7Eh
RETLW 11h
RETLW 00h
RETLW 1Eh ;u
RETLW 01h
RETLW 01h
RETLW 1Fh
RETLW 00h
RETLW 1Ch ;v
RETLW 02h
RETLW 01h
RETLW 02h
RETLW 1Ch
RETLW 00h
RETLW 1Eh ;w
RETLW 01h
RETLW 06h
RETLW 01h
RETLW 1Eh
RETLW 00h
RETLW 11h ;x
RETLW 0Ah
RETLW 04h
RETLW 0Ah
RETLW 11h
RETLW 00h
RETLW 1Dh ;y
RETLW 05h
RETLW 05h
RETLW 1Eh
RETLW 00h
RETLW 11h ;z
RETLW 13h
RETLW 15h

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

RETLW 19h
RETLW 00h
RETLW 80h ;espacio
RETLW 80h
RETLW 00h
RETLW 21h ;1
RETLW 7Fh
RETLW 01h
RETLW 00h
RETLW 23h ;2
RETLW 45h
RETLW 49h
RETLW 31h
RETLW 00h
RETLW 41h ;3
RETLW 51h
RETLW 69h
RETLW 46h
RETLW 00h
RETLW 0Ch ;4
RETLW 14h
RETLW 24h
RETLW 7Fh
RETLW 04h
RETLW 00h
RETLW 72h ;5
RETLW 51h
RETLW 51h
RETLW 51h
RETLW 4Eh
RETLW 00h
RETLW 1Eh ;6
RETLW 29h
RETLW 49h
RETLW 49h
RETLW 06h
RETLW 00h
RETLW 40h ;7
RETLW 47h
RETLW 48h
RETLW 70h
RETLW 00h
RETLW 36h ;8
RETLW 49h
RETLW 49h
RETLW 49h
RETLW 36h
RETLW 00h
RETLW 30h ;9
RETLW 49h
RETLW 49h
RETLW 4Ah
RETLW 3Ch
RETLW 00h
RETLW 3Eh ;0
RETLW 45h
RETLW 49h
RETLW 51h
RETLW 3Eh
RETLW 00h

INICIO
clrf PORTB
clrf PORTA
bsf STATUS,RP0
MOVLW b'00000001'
MOVWF TRISB
movlw b'00000110'
movwf ADCON1
MOVLW b'00000000'
MOVWF TRISA
MOVLW b'11111111'
MOVWF TRISC

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

MOVLW b'10000111'
MOVWF OPTION_REG
movlw b'10000000' ; La velocidad para la EEPROM sera de 100 Kc.
movwf SSPSTAT
movlw .9
movwf SSPADD
bcf STATUS,RP0
movlw b'00101000'
movwf SSPCON
clrf BANDERAS
clrf cuanto
clrf PCLATH
clrf Nbits
clrf Nbytes
clrf fila
clrf GIRAR1
clrf fila1
clrf DATAIN
clrf NO_ROTAR
clrf saltar
clrf SALTO
movlw 0x02
movwf GIRAR
clrf Direccion
clrf valor
MOVLW b'10010000'
MOVWF INTCON
movlw 0x4E
movwf FSR
movlw 0x28
movwf RESTADOR
borrar clrf INDF
incf FSR,F
decfsz RESTADOR
goto borrar
GOTO LAZO_LECTURA

mal
decf fila
decf Direccion
decf Direccion
CLRF KeyRtn
CLRF ASCII
CLRF Nbytes
goto Ru12

Cambiar clrf RESTADOR


Cambiar1 incf RESTADOR
movlw 0x02
subwf cont,1
btfsc STATUS,Z
goto Cam
btfsc STATUS,C
goto Cambiar1

Cam
movf RESTADOR,0
sublw 0x14
btfss STATUS,C
goto mal
btfsc STATUS,Z
goto LIMPIAR
movwf RESTADOR

Cambiar2
call ROTO1
clrf 0x4E
decfsz RESTADOR
goto Cambiar2
goto LIMPIAR

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

Ru12 movlw 0x4E


movwf FSR
movlw 0x28
movwf RESTADOR
bor clrf INDF
incf FSR,F
decfsz RESTADOR
goto bor
clrf PCLATH
movf fila,0
movwf fila1
clrf cont
clrf Direccion
movf GIRAR1,0
addwf Direccion,1
Ru121 call Recibir_Byte
movf Dato,0
movwf saltar
xorlw 0x01
btfss STATUS,Z
goto Ru112
incf PCLATH
incf Direccion
call Recibir_Byte
incf Direccion
Ru32 incf cont
call ROTO1
movf Dato,0
call Tabla1
movwf CARACTER ;W contains table data - put it in 15h
movwf 0x4E
incf Dato,1
movf CARACTER,0
xorlw 0x00
btfss STATUS,Z
goto Ru32
clrf PCLATH
decfsz fila1
goto Ru121
goto Cambiar

Ru112 incf Direccion


call Recibir_Byte
incf Direccion
movf Dato,0
xorlw 0x97
btfsc STATUS,Z
incf PCLATH
Ru312 incf cont
call ROTO1
movf Dato,0
call Tabla
movwf CARACTER ;W contains table data - put it in 15h
movwf 0x4E
incf Dato,1
movf CARACTER,0
clrf PCLATH
decfsz fila1,1
goto Ru121
goto Cambiar

A12 bsf STATUS,RP1 ;Pasamos al banco 2


movf EEADR,0 ;Siguiente dirección EEPROM
bcf STATUS,RP1
movwf cuanto
movlw 0x4E
movwf FSR
movlw 0x28
movwf RESTADOR
Aor1 clrf INDF
incf FSR,F
decfsz RESTADOR
goto Aor1

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

CLRF KeyRtn
CLRF ASCII
CLRF Nbytes
bsf INTCON,GIE
clrf PCLATH
clrf cont
A121 bsf STATUS,RP1
call EE_Read
bsf STATUS,RP1
movf EEDATA,0
bcf STATUS,RP1
xorlw 0xFF
,RP1
movf EEDATA,0
bcf STATUS,RP1
movwf CUENTAS
A32
call ROTO1
movf CUENTAS,0
call Tabla1
movwf CARACTER ;W contains table data - put it in 15h
movwf 0x4E
incf CUENTAS
movf CARACTER,0
xorlw 0x00
btfss STATUS,Z
goto A32
bsf STATUS,RP1 ;Pasamos al banco 2
incf EEADR,F ;Siguiente dirección EEPROM
bcf STATUS,RP1
clrf PCLATH
goto A121

escribir1 movf GIRAR1,0


xorlw 0x00
btfsc STATUS,Z
goto LIMPIAR2
movf fila1,0
xorlw 0x07
btfsc STATUS,Z
goto LIMPIAR2
incf fila1
goto SIGUE

escribir2 CLRF KeyRtn


CLRF ASCII
CLRF Nbytes
movlw 0xFF
bsf STATUS,RP1
movwf EEDATA

Z
goto escribir3
movf GIRAR,0
xorlw 0x04
btfsc STATUS,Z
clrf GIRAR
clrf GIRAR
clrf GIRAR1
movlw 0x4E
movwf FSR
movlw 0x28
movwf RESTADOR
Aor123 clrf INDF
incf FSR,F
decfsz RESTADOR
goto Aor123
goto LIMPIAR

escribir3
movlw 0x01
movwf GIRAR
clrf GIRAR1

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

movlw 0x4E
movwf FSR
movlw 0x28
movwf RESTADOR
Aor124 clrf INDF
incf FSR,F
decfsz RESTADOR
goto Aor124
goto LIMPIAR

lim1 CLRF KeyRtn


CLRF ASCII
CLRF Nbytes
clrf comp
bsf INTCON,GIE
goto muestra

escribir bcf INTCON,GIE


MOVF KeyRtn,W
xorwf comp
btfsc STATUS,Z
goto lim1
MOVF KeyRtn,W
movwf comp
MOVF KeyRtn,W
xorlw 0x76
btfsc STATUS,Z
goto INICIO
movf GIRAR1,0
xorlw 0x00
btfss STATUS,Z
goto escribir2
incf GIRAR1
movf cuanto,0
bsf STATUS,RP1 ;Pasamos al banco 2
movwf EEADR ;Siguiente dirección EEPROM
bcf STATUS,RP1
movlw 0x4E
movwf FSR
movlw 0x28
movwf RESTADOR
Aor12 clrf INDF
incf FSR,F
decfsz RESTADOR
goto Aor12
goto LIMPIAR2
Rn1
incf PCLATH
movf CUENTAS,0
bsf STATUS,RP1
movwf EEDATA
bcf STATUS,RP1
call EE_Write
bsf STATUS,RP1 ;Pasamos al banco 2
incf EEADR,F ;Siguiente dirección EEPROM
bcf STATUS,RP1

Rn3
call ROTO1
movf CUENTAS,0
call Tabla1
movwf CARACTER ;W contains table data - put it in 15h
movwf 0x4E
incf CUENTAS,1
movf CARACTER,0
xorlw 0x00
btfss STATUS,Z
goto Rn3
clrf PCLATH
goto LIMPIAR2

escribir21 bsf INTCON,GIE

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

movf GIRAR,0
xorlw 0x03
btfsc STATUS,Z
goto escribir31
movf GIRAR,0
xorlw 0x04
btfsc STATUS,Z
clrf GIRAR
clrf GIRAR
CLRF KeyRtn
CLRF ASCII
CLRF Nbytes
goto GIRATORIO1

escribir31 CLRF KeyRtn


CLRF ASCII
CLRF Nbytes
movlw 0x01
movwf GIRAR
goto repro1

lim CLRF KeyRtn


CLRF ASCII
CLRF Nbytes
clrf comp
bsf INTCON,GIE
goto muestra1

escr bcf INTCON,GIE


MOVF KeyRtn,W
xorwf comp
btfsc STATUS,Z
goto lim
MOVF KeyRtn,W
movf comp
MOVF KeyRtn,W
xorlw 0x76
btfsc STATUS,Z
goto INICIO
MOVF KeyRtn,W
xorlw 0x04
btfsc STATUS,Z
goto escribir21
MOVF KeyRtn,W
xorlw 0x0C
btfsc STATUS,Z
goto escribir
MOVF KeyRtn,W
xorlw 0x16
btfsc STATUS,Z
goto escr1
MOVF KeyRtn,W
xorlw 0x1E
btfsc STATUS,Z
goto escr1
MOVF KeyRtn,W
xorlw 0x26
btfsc STATUS,Z
goto escr1
MOVF KeyRtn,W
xorlw 0x25
btfsc STATUS,Z
goto escr1
CLRF KeyRtn
CLRF ASCII
CLRF Nbytes
goto muestra1
escr1 movf GIRAR,0
xorlw 0x03
btfsc STATUS,Z
goto fase10
goto fase20

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

muestra1 CLRWDT
clrf fila1
DECFSZ Nbytes,W
goto Bis4
goto escr
Bis4 clrf comp
movf GIRAR,0
xorlw 0x02
btfsc STATUS,Z
goto LAZO_LECTURA
movf GIRAR,0
xorlw 0x01
btfsc STATUS,Z
goto fase1
movf GIRAR,0
xorlw 0x00
btfsc STATUS,Z
goto fase2
Bis3 movlw 0x05
movwf retardo
movlw 0x10
movwf RESTADOR1
Bis2
movlw 0x23
movwf PORTA
movlw 0x28
movwf RESTADOR
movlw 0x75
movwf FSR
Bis1 rlf INDF,0
movwf PORTB
call RETARDO
decf FSR,F
decfsz RESTADOR,1
goto Bis1
decfsz RESTADOR1,1
goto Bis2
goto muestra1

muestra CLRWDT
DECFSZ Nbytes,W
goto Ais4
goto escribir
Ais4 movf GIRAR,0
xorlw 0x02
btfsc STATUS,Z
goto LAZO_LECTURA
movf GIRAR,0
xorlw 0x01
btfsc STATUS,Z
goto fase1
movf GIRAR,0
xorlw 0x00
btfsc STATUS,Z
goto fase2
Ais3 movlw 0x05
movwf retardo
movlw 0x10
movwf RESTADOR1
Ais2
movlw 0x23
movwf PORTA
movlw 0x28
movwf RESTADOR
movlw 0x75
movwf FSR
Ais1 rlf INDF,0
movwf PORTB
call RETARDO
decf FSR,F
decfsz RESTADOR,1
goto Ais1
decfsz RESTADOR1,1

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

goto Ais2
goto muestra

fase1 DECFSZ Nbytes,W


goto fase1
fase10 MOVF KeyRtn,W
xorlw 0x76
btfsc STATUS,Z
goto INICIO
MOVF KeyRtn,W
xorlw 0x16
btfsc STATUS,Z
goto fase11
MOVF KeyRtn,W
xorlw 0x1E
btfsc STATUS,Z
goto fase12
MOVF KeyRtn,W
xorlw 0x26
btfsc STATUS,Z
goto fase13
MOVF KeyRtn,W
xorlw 0x25
btfsc STATUS,Z
goto fase14
goto fase1

fase11 movlw 0x03


movwf GIRAR
movlw 0x00
movwf memoria
bsf STATUS,RP1
clrf EEADR
bcf STATUS,RP1
goto A12

fase12 movlw 0x03


movwf GIRAR
movlw 0x02
movwf memoria
movlw 0x08
bsf STATUS,RP1
movwf EEADR
bcf STATUS,RP1
goto A12

fase13 movlw 0x03


movwf GIRAR
movlw 0x04
movwf memoria
movlw 0x10
bsf STATUS,RP1
movwf EEADR
bcf STATUS,RP1
goto A12

fase14 movlw 0x03


movwf GIRAR
movlw 0x06
movwf memoria
movlw 0x18
bsf STATUS,RP1
movwf EEADR
bcf STATUS,RP1
goto A12

fase2 DECFSZ Nbytes,W


goto fase2
fase20 MOVF KeyRtn,W
xorlw 0x76
btfsc STATUS,Z
goto INICIO

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

MOVF KeyRtn,W
xorlw 0x16
btfsc STATUS,Z
goto fase21
MOVF KeyRtn,W
xorlw 0x1E
btfsc STATUS,Z
goto fase22
MOVF KeyRtn,W
xorlw 0x26
btfsc STATUS,Z
goto fase23
MOVF KeyRtn,W
xorlw 0x25
btfsc STATUS,Z
goto fase24
goto fase2

fase21 movlw 0x04


movwf GIRAR
movlw 0x08
movwf memoria
movlw 0x20
bsf STATUS,RP1
movwf EEADR
bcf STATUS,RP1
goto A12

fase22 movlw 0x04


movwf GIRAR
movlw 0x0A
movwf memoria
movlw 0x28
bsf STATUS,RP1
movwf EEADR
bcf STATUS,RP1
goto A12

fase23 movlw 0x04


movwf GIRAR
movlw 0x0C
movwf memoria
movlw 0x30
bsf STATUS,RP1
movwf EEADR
bcf STATUS,RP1
goto A12

fase24 movlw 0x04


movwf GIRAR
movlw 0x0E
movwf memoria
movlw 0x38
bsf STATUS,RP1
movwf EEADR
bcf STATUS,RP1
goto A12

LAZO_LECTURA

Vis CLRWDT
DECFSZ Nbytes,W
goto Vis4
goto SIGUE1
Vis4 movf GIRAR,0
xorlw 0x02
btfsc STATUS,Z
goto LAZO_LECTURA

Vis3 movlw 0x05


movwf retardo
movlw 0x10
movwf RESTADOR1

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

Vis1 rlf INDF,0


movwf PORTB
call RETARDO
decf FSR,F
decfsz RESTADOR,1
goto Vis1
decfsz RESTADOR1,1
goto Vis2
goto Vis

F1 movlw 0x09
addwf KeyRtn,1
return

F2 movlw 0x0C
addwf KeyRtn,1
return

F3 movlw 0x65
subwf KeyRtn,1
return

SIGUE1
bcf INTCON,GIE
MOVF KeyRtn,W
xorlw 0x04
btfsc STATUS,Z
call F2
MOVF KeyRtn,W
xorlw 0x76
btfsc STATUS,Z
call F3
MOVF KeyRtn,W
xorlw 0x05
btfsc STATUS,Z
call F1
MOVF KeyRtn,W
xorlw 0x06
btfsc STATUS,Z
call F1
MOVF KeyRtn,W
subwf SALTO
btfsc STATUS,Z
goto LIMPIAR1
MOVF KeyRtn,W
movwf SALTO
SUBLW 0x0d
BTFSC STATUS,C
goto LIMPIAR
MOVF KeyRtn,W
SUBLW 0x67
BTFSC STATUS,C
goto SIGUE
goto LIMPIAR
SIGUE
MOVLW 0x0e
subwf KeyRtn,0
BTFSC BANDERAS_CAPS
goto TBL_MAY
TBL_MIN

CALL TABLA0
movwf CUENTAS
xorlw 0xB7
btfsc STATUS,Z
xorlw 0x03
btfsc STATUS,Z
goto Rn1
movf GIRAR,0
xorlw 0x04
btfsc STATUS,Z

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

goto Rn1
goto FIN_TABLA
TBL_MAY
incf PCLATH
clrf BANDERAS
CALL TABLA1
movwf CUENTAS
xorlw 0x97
btfss STATUS,Z
clrf PCLATH
clrf saltar
movf CUENTAS,0
goto FIN_TABLA

retardo2 movlw 0xff


movwf Delay_Cont
call Delay_var ;Temporiza 1 segundo
return

retardo1
movlw 0x10
movwf Delay_Cont
call Delay_var ;Temporiza 1 segundo
return

Delay_var: bcf INTCON,T0IF ;Desconecta el flag de rebosamiento


movlw d'248' ;Complemento hex. de 195
movwf TMR0 ;carga el TMR0
Intervalo
btfss INTCON,T0IF ;Rebasamiento del TMR0 ??
goto Intervalo ;Todavía no
decfsz Delay_Cont,F ;Decrementa contador de intervalos
goto Delay_var ;Repite el intervalo de 50 mS
return

FIN_TABLA
movf CUENTAS,0
xorlw 0xA9
btfsc STATUS,Z
goto FIN_TABLA1
movf CUENTAS,0
xorlw 0x0A
btfsc STATUS,Z
goto ENTER
movf CUENTAS,0
xorlw 0xFC
btfsc STATUS,Z
goto ESCAPE
xorlw 0xFE
btfsc STATUS,Z
goto ejecutar
movf CUENTAS,0
xorlw 0xFF
btfsc STATUS,Z
goto ejecutar1
goto CARACTER_ASCII
FIN_TABLA1
comf BANDERAS,W
andlw 0x01
movwf BANDERAS
btfsc BANDERAS_CAPS
nop
btfsc BANDERAS_CAPS
goto LIMPIAR
nop
goto LIMPIAR

ESCAPE goto INICIO

ejecutar NOP
CLRF KeyRtn
CLRF ASCII
CLRF Nbytes

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

bsf INTCON,GIE
decf GIRAR
goto fase1

ejecutar1 NOP
CLRF KeyRtn
CLRF ASCII
CLRF Nbytes
bsf INTCON,GIE
clrf GIRAR
goto fase2

repro bsf INTCON,GIE


CLRF KeyRtn
CLRF ASCII
CLRF Nbytes
movf GIRAR,0
xorlw 0x00
btfsc STATUS,Z
goto ENTER
movf GIRAR,0
xorlw 0x04
btfsc STATUS,Z
goto GIRATORIO1
movf GIRAR,0
xorlw 0x03
btfsc STATUS,Z
goto repro1
movlw 0xFF
movwf Dato
call Enviar_Byte
call retardo1
incf Direccion
movlw 0xFF
movwf Dato
call Enviar_Byte
call retardo1
repro1
clrf Direccion
goto R12
Viss3 DECFSZ Nbytes,W
goto viss31
goto esc1
viss31 movlw 0x05
movwf retardo
movlw 0xFF
movwf RESTADOR1
Viss2
movlw 0x23
movwf PORTA
movlw 0x28
movwf RESTADOR
movlw 0x75
movwf FSR
Viss1 rlf INDF,0
movwf PORTB
call RETARDO
decf FSR,F
decfsz RESTADOR,1
goto Viss1
decfsz RESTADOR1,1
goto Viss2

call Recibir_Byte
movf Dato,0
xorlw 0xFF
btfss STATUS,Z
goto R12
movlw 0x03
movwf RESTADOR1
V1 call retardo2
decfsz RESTADOR1
goto V1

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

goto repro1

esc1 MOVF KeyRtn,W


xorlw 0x76
btfsc STATUS,Z
goto INICIO
goto viss31

Cambia incf Direccion


clrf RESTADOR
Cambia1 incf RESTADOR
movlw 0x02
subwf cont,1
btfsc STATUS,Z
goto Ca
btfsc STATUS,C
goto Cambia1

Ca
movf RESTADOR,0
sublw 0x14
btfss STATUS,C
goto Viss3
btfsc STATUS,Z
goto Viss3
movwf RESTADOR

Cambia2
call ROTO1
clrf 0x4E
decfsz RESTADOR
goto Cambia2
goto Viss3

R12 movlw 0x4E


movwf FSR
movlw 0x28
movwf RESTADOR
bor1 clrf INDF
incf FSR,F
decfsz RESTADOR
goto bor1
clrf PCLATH
clrf cont
R121 call Recibir_Byte
movf Dato,0
xorlw 0xFF
btfsc STATUS,Z
goto Cambia

,Z
goto R112
incf PCLATH
incf Direccion
call Recibir_Byte
incf Direccion
R32 incf cont
call ROTO1
movf Dato,0
call Tabla1
movwf CARACTER ;W contains table data - put it in 15h
movwf 0x4E
incf Dato,1
movf CARACTER,0
xorlw 0x00
btfss STATUS,Z
goto R32
clrf PCLATH
goto R121

R112 incf Direccion

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

call Recibir_Byte
incf Direccion
movf Dato,0
xorlw 0x97
btfsc STATUS,Z
incf PCLATH
R312 incf cont
call ROTO1
movf Dato,0
call Tabla
movwf CARACTER ;W contains table data - put it in 15h
movwf 0x4E
incf Dato,1
movf CARACTER,0
xorlw 0x00
btfss STATUS,Z
goto R312
clrf PCLATH
decfsz fila1,1
goto R121

ENTER
NOP
CLRF KeyRtn
CLRF ASCII
CLRF Nbytes
bsf INTCON,GIE
movlw 0xFF
movwf Dato
call Enviar_Byte
call retardo1
movf GIRAR,0
xorlw 0x00
btfsc STATUS,Z
goto GIRATORIO1
movf GIRAR,0
xorlw 0x01
btfsc STATUS,Z
goto ENTER1
goto LIMPIAR

ENTER1
incf Direccion
movf Direccion,0
movwf GIRAR1
movlw 0x4E
movwf FSR
movlw 0x28
movwf RESTADOR
borr1 clrf INDF
incf FSR,F
decfsz RESTADOR
goto borr1
clrf fila
goto LIMPIAR

BOR movf fila,0


xorlw 0x00
btfsc STATUS,Z
movlw 0x28
movwf RESTADOR
borr clrf INDF
incf FSR,F
decfsz RESTADOR
goto borr
clrf Direccion
goto LIMPIAR

BORRAR movf GIRAR,0


xorlw 0x01
btfsc STATUS,Z
goto BOR

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

movlw 0x09
movwf RESTADOR
clrf cont
movf Direccion,0
movwf valor
xorlw 0x02
btfsc STATUS,Z
goto BORRAR1
movf Direccion,0
movwf valor
xorlw 0x00
btfsc STATUS,Z
goto BORRAR1
BORRAR2 movlw 0x02
subwf valor,1
incf cont
movf valor,0
xorlw 0x00
btfsc STATUS,Z
goto BORRAR3

decfsz RESTADOR,1
goto BORRAR2
goto BORRAR3

BORRAR1 movlw 0x4E


movwf FSR
movlw 0x28
movwf RESTADOR
borrar1 clrf INDF
incf FSR,F
decfsz RESTADOR
goto borrar1
clrf Direccion
goto LIMPIAR

BORRAR3 decf cont,1


movlw 0x4E
movwf FSR
movlw 0x28
movwf RESTADOR
borrar3 clrf INDF
incf FSR,F
decfsz RESTADOR
goto borrar3
movf valor,0
movwf Direccion

Ru1 call Recibir_Byte


movf Dato,0
movwf saltar
xorlw 0x01
btfss STATUS,Z
goto Ru11
incf PCLATH
incf Direccion
call Recibir_Byte
incf Direccion
Ru3 call ROTO1
movf Dato,0
call Tabla1
movwf CARACTER ;W contains table data - put it in 15h
movwf 0x4E
incf Dato,1
movf CARACTER,0
xorlw 0x00
btfss STATUS,Z
goto Ru3
clrf PCLATH
decfsz cont,1
goto Ru1
goto LIMPIAR

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

Ru11 incf Direccion


call Recibir_Byte
incf Direccion
movf Dato,0
xorlw 0x97
btfsc STATUS,Z
incf PCLATH
Ru31 call ROTO1
movf Dato,0
call Tabla
movwf CARACTER ;W contains table data - put it in 15h
movwf 0x4E
incf Dato,1
movf CARACTER,0
xorlw 0x00
btfss STATUS,Z
goto Ru31
clrf PCLATH
decfsz cont,1
goto Ru1
goto LIMPIAR

CARACTER_ASCII
Run1 movf GIRAR,0
xorlw 0x04
btfsc STATUS,Z
goto LIMPIAR2
movf GIRAR,0
xorlw 0x03
btfsc STATUS,Z
goto LIMPIAR2
incf fila
movf saltar,0
call retardo1
incf Direccion
movf CUENTAS,0
movwf Dato
call Enviar_Byte
call retardo1
incf Direccion
movf GIRAR,0
xorlw 0x01
btfsc STATUS,Z
goto Ru12
Run3
call ROTO1
movf CUENTAS,0
call Tabla1
movwf CARACTER ;W contains table data - put it in 15h
movwf 0x4E
incf CUENTAS,1
movf CARACTER,0
xorlw 0x00
btfss STATUS,Z
goto Run3
clrf PCLATH
goto LIMPIAR

movf GIRAR,0
xorlw 0x01
btfsc STATUS,Z
goto Ru12
Run31
call ROTO1
movf CUENTAS,0
call Tabla
movwf CARACTER ;W contains table data - put it in 15h
movwf 0x4E
incf CUENTAS,1
movf CARACTER,0

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

xorlw 0x00
btfss STATUS,Z
goto Run31
goto LIMPIAR

ROTO1
movf 74h,0
movwf 75h
movf 73h,0
movwf 74h
movf 72h,0
movwf 73h
movf 71h,0
movwf 72h
movf 70h,0
movf 66h,0
movwf 67h
movf 65h,0
movwf 66h
movf 64h,0
movwf 65h
movf 63h,0
movwf 64h
movf 62h,0
movwf 63h
movf 61h,0
movwf 62h
movf 60h,0
movwf 61h
movf 5Fh,0
movwf 60h
movf 5Eh,0
movwf 5Fh
movf 5Dh,0
movwf 5Eh
movf 5Ch,0
movwf 5Dh
movf 5Bh,0
movwf 5Ch
movf 5Ah,0
movwf 5Bh
movf 59h,0
movwf 5Ah
movf 58h,0
movwf 59h
movf 57h,0
movwf 58h
movf 56h,0
movwf 57h
movf 55h,0
movwf 56h
movf 54h,0
movwf 55h
movf 53h,0
movwf 54h
movf 52h,0
movwf 53h
movf 51h,0
movwf 52h
movf 50h,0
movwf 51h
movf 4Fh,0
movwf 50h
movf 4Eh,0
movwf 4Fh
return

grabar movf 50h,0


movwf 51h
movf 4Fh,0
movwf 50h
movf 4Eh,0

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

movwf 4Fh
movf 4Dh,0
movwf 4Eh
return

restar CLRF KeyRtn


CLRF ASCII
CLRF Nbytes
decf fila
goto gira

sumar CLRF KeyRtn


CLRF ASCII
CLRF Nbytes
incf fila
goto gira

esc MOVF KeyRtn,W


xorlw 0x03
btfsc STATUS,Z
goto restar
MOVF KeyRtn,W
xorlw 0x0B
btfsc STATUS,Z
goto sumar
MOVF KeyRtn,W
xorlw 0x76
btfsc STATUS,Z
goto escapar
CLRF KeyRtn
CLRF ASCII
CLRF Nbytes
goto gira

escapar CLRF KeyRtn


CLRF ASCII
CLRF Nbytes
goto INICIO

GIRATORIO
goto LAZO_LECTURA
GIRATORIO1 movlw 0x020
movwf fila
movlw 0x05
movwf retardo
movlw 0x4E
movwf FSR
movlw 0x28
movwf RESTADOR
borrar2 clrf INDF
incf FSR,F
decfsz RESTADOR
goto borrar2
GIRATORIO3
clrf Direccion
GIRATORIO2
call Recibir_Byte
movf Dato,0
movwf saltar
xorlw 0xFF
btfsc STATUS,Z
goto fin
incf Direccion
call Recibir_Byte
movf saltar,0
xorlw 0x01
btfsc STATUS,Z
goto MIN
goto MAY

fin movlw 0x28


movwf saltar

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

fin1 call ROTO1


clrf 0x4E
call Cartel
decfsz saltar
goto fin1
goto GIRATORIO3

MIN incf PCLATH


movf Dato,0
xorlw 0xB7
btfsc STATUS,Z
incf PCLATH
MIN1 call ROTO1
movf Dato,0
call Tabla1
movwf CARACTER
movwf 0x4E
incf Dato
call Cartel
movf CARACTER,0
xorlw 0x00
btfss STATUS,Z
goto MIN1
clrf PCLATH
incf Direccion
goto GIRATORIO2

MAY movf Dato,0


xorlw 0x97
btfsc STATUS,Z
incf PCLATH
MAY1 call ROTO1
movf Dato,0
call Tabla
movwf CARACTER
movwf 0x4E
incf Dato
call Cartel
movf CARACTER,0
xorlw 0x00
btfss STATUS,Z
goto MAY1
clrf PCLATH
incf Direccion
goto GIRATORIO2

Cartel DECFSZ Nbytes,W


goto gira
goto esc
gira movlw 0x05
movwf retardo
movf fila,0
movwf RESTADOR1
Cartel2
movlw 0x23
movwf PORTA
movlw 0x28
movwf RESTADOR
movlw 0x75
movwf FSR
Cartel3 rlf INDF,0
movwf PORTB
call RETARDO
decf FSR,F
decfsz RESTADOR,1
goto Cartel3
decfsz RESTADOR1,1
goto Cartel2
return

RETARDO movlw 0x5F


movwf TIEMPO
RET decfsz TIEMPO,1

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

goto RET
decfsz retardo
goto RET2
call RET1
RET2 clrf PORTB
incf PORTA
return

RET1 clrf PORTB


movlw 0x0A
subwf PORTA
movlw 0x05
movwf retardo
return

LIMPIAR
NOP
clrf PCLATH
CLRF KeyRtn
CLRF ASCII
CLRF Nbytes
bsf INTCON,GIE
GOTO LAZO_LECTURA

LIMPIAR1
NOP
CLRF KeyRtn
CLRF ASCII
CLRF Nbytes
clrf SALTO
bsf INTCON,GIE
GOTO LAZO_LECTURA

LIMPIAR2
NOP
CLRF KeyRtn
CLRF ASCII
CLRF Nbytes
clrf SALTO
bsf INTCON,GIE
GOTO muestra

LEER_TECLADO
BTFSC KBD_DATO
GOTO KBD_ES1
BCF BIT_ACTUAL
GOTO SEGUIR
KBD_ES1
BSF BIT_ACTUAL
SEGUIR
INCF Nbits,F
DECFSZ Nbits,W
GOTO BIT_REAL
BTFSS BIT_ACTUAL
RETURN
GOTO CLEANUP
BIT_REAL
MOVF Nbits,W
XORLW 0x09
BTFSC STATUS,Z
goto ES_9NO_BIT
NO_ES_9NO_BIT
DECFSZ NO_ROTAR,W
RRF DATAIN,1
MOVF Nbits,W
XORLW 0x0B
BTFSC STATUS,Z
GOTO aceptar_byte
RETURN
ES_9NO_BIT
BTFSC BIT_ACTUAL
GOTO CLEANUP

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

MOVF DATAIN,W
BTFSC STATUS,Z
GOTO CLEANUP
MOVWF KeyRtn
MOVLW 0x01
MOVWF NO_ROTAR
RETURN
aceptar_byte
MOVLW 0x01
MOVWF Nbytes
CLRF NO_ROTAR
CLEANUP
CLRF Nbits
CLRF DATAIN
RETURN
;*************************************************************************

Recibir_Byte
clrf PIR1
call Send_Start ; Pone la condición de Inicio
movlw b'10100000' ; Prepara el Byte de control para la EEPROM
addwf memoria,0
call Send_Byte ; Envía el byte de control a la memoria serial
movf Direccion,w ; Envía la dirección donde se leerá la EEPROM
call Send_Byte
call Send_Stop
call Send_Start ; Pone la condición de re-inicio
movlw b'10100001' ; Se envía el byte de control indicando una lectura
addwf memoria,0
call Send_Byte
call Leer_Byte ; Se lee lo enviado por la EPROM
call Send_Stop ; Se envía la condición de STOP
return
;**********************************************************************

Enviar_Byte
clrf PIR1
call Send_Start ; Se pone la condición de inicio
movlw b'10100000' ; Se envía el byte de control
addwf memoria,0
call Send_Byte
movf Direccion,w ; Se envía la Dirección donde guardar el dato
call Send_Byte
movf Dato,w ; Se envía el Dato
call Send_Byte
call Send_Stop ; Condición de STOP
return
;**********************************************************************
Send_Start2

banco_1 ; Selecciona banco 1 de RAM


bsf SSPCON2,RSEN ; Activa secuencia RE-INICIO
banco_0 ; Regresa al banco cero de RAM
btfss PIR1,SSPIF ; Fin de secuencia de re-inicio ??
goto $-1 ; No, seguir esperar
bcf PIR1,SSPIF
return
;**********************************************************************
Send_Start

banco_1 ; Selecciona el banco 1 de RAM


bsf SSPCON2,SEN ; Activa secuencia de inicio
banco_0 ; Regresa al banco 0 de RAM
btfss PIR1,SSPIF ; Fin de secuencia de inicio ??
goto $-1 ; No, seguir esperar
bcf PIR1,SSPIF
return
;**********************************************************************
Send_Stop

banco_1 ; Pasa al banco 1


bsf SSPCON2,PEN ; Activa secuencia de stop
banco_0 ; Regresa al banco 0

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

btfss PIR1,SSPIF ; Fin de secuencia de Stop ??


goto $-1 ; No, seguir esperado
bcf PIR1,SSPIF
return
;**********************************************************************
Send_Byte

movwf SSPBUF ; Byte a transmitir pasa al buffer de salida


btfss PIR1,SSPIF ; Termino de Transmitir??
goto $-1 ; No, seguir esperando
bcf PIR1,SSPIF
banco_1 ; Selecciona el banco 0
btfsc SSPCON2,ACKSTAT ; Mira el estado del bit ACK
goto ERROR_I2C
banco_0 ; Regresa al banco 0

return
;**********************************************************************
Leer_Byte

banco_1 ; Selecciona página 1


bsf SSPCON2,RCEN ; Activa el modo receptor
banco_0 ; Selecciona página 0
btfss PIR1,SSPIF ; Recibidos los 8 bits ??
goto $-1 ; No, seguir esperado
bcf PIR1,SSPIF ; Borra la bandera del módulo MSSP
movf SSPBUF,w ; Mover los datos recibido
movwf Dato ; al registro Datos para usarlos luego
return
;**********************************************************************
ERROR_I2C ; Un ERROR grave ha ocurrido
banco_0 ; Abortar todo y colocar el bit 7 del puerto B
call Send_Stop ; en "1" para indicar el error.
nop
; PROGRAMA DETENIDO POR UN ERROR!!!!

EE_Write bsf STATUS,RP1


bsf STATUS,RP0 ;Pasamos al banco 3
bcf EECON1,EEPGD ;Seleccionamos la EEPROM de datos
bsf EECON1,WREN ;Permitimos la escritura de ésta
movlw 0x55
movwf EECON2
movlw 0xaa
movwf EECON2 ;Secuencia obligatoria
bsf EECON1,WR ;Empezamos la escritura
bcf STATUS,RP0
bcf STATUS,RP1 ;Volvemos al banco 0
ESPERA btfss PIR2,EEIF ;esperamos a que acabe la escritura
goto ESPERA
bcf PIR2,EEIF ;Reseteamos el flag de la EEPROM
return

;**************************************************************************************
;EE_Read: Leer un byte de la EEPROM. Se supone al registro EEADR cargado con la direc-
;ción a leer. En EEDATA aparecerá el dato leído.

EE_Read bsf STATUS,RP0


bsf STATUS,RP1 ;Pasamos al banco 3
bcf EECON1,EEPGD ;Seleccionamos la EEPROM de datos
bsf EECON1,RD ;Permitimos la lectura de ésta
bcf STATUS,RP1
bcf STATUS,RP0 ;Selección de banco 0
return

END

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

Diagrama de flujo

Inicialización de
variables

(Frase instantánea) F1 =1 Presionar F2=1 (Mensaje giratorio)


F1 o F2

Selecc. Memoria Selecc. Memoria


Tecla 1,2,3,4 Tecla 1,2,3,4

Visualiza nombre Visualiza nombre


Memoria selecc. Memoria selecc.

Presionar F3=1 (Ejecuta mensaje guardado) F3=1 Presionar


F3 o F4 F3 o F4

F4=1 (grabar nuevo mensaje) F4=1(grabar nuevo


mensaje)
Grabar nombre Grabar nombre
memoria selecc. memoria selecc.

Presionar F4 para Presionar F4 para


finalizar finalizar

Escribir renglón Escribir mensaje

Enter =0 Enter=0
F3=0 Presionar F3=1 Presionar F3=0
Enter o F3 F3

Enter=1 F3=1
F3=0
Siguiente
renglón

Visualizar
mensaje

Incrementar F5=1 Presionar F6=1 Decrementar


velocidad del F5 o F6 velocidad del
mensaje mensaje

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

Diagrama del Circuito


U21
10 7
7C 7B
11 6
6C 6B
12 5
5C 5B
13 4
4C 4B
14 3
3C 3B
15 2
2C 2B
16 1
1C 1B
9
COM
U13 U7
10 ULN2003A 7 7 5
7C 7B Y7 E3
11 6 9 4
6C 6B Y6 E2
12 5 10 6
5C 5B Y5 E1
13 4 11
4C 4B Y4
14 3 12
3C 3B Y3
15 2 13 3
2C 2B Y2 C
16 1 14 2
1C 1B Y1 B
9 15 1
COM Y0 A
U11 U6
10 ULN2003A 7 7 74HC238 5
7C 7B Y7 E3
11 6 9 4
6C 6B Y6 E2
12 5 10 6
5C 5B Y5 E1
13 4 11
4C 4B Y4
14 3 12
3C 3B Y3
15 2 13 3
2C 2B Y2 C
16 1 14 2
1C 1B Y1 B
9 15 1
COM Y0 A
U10 U5
10 ULN2003A 7 7 74HC238 5
7C 7B Y7 E3
11
6C 6B
6 9
Y6 E2
4 U12
12 5 10 6 7 5
5C 5B Y5 E1 Y7 E3
13 4 11 9 4
4C 4B Y4 Y6 E2
14 3 12 10 6
3C 3B Y3 Y5 E1
15 2 13 3 11
2C 2B Y2 C Y4
16 1 14 2 12
1C 1B Y1 B Y3
9 15 1 13 3
COM Y0 A Y2 C
U9 U4 14
Y1 B
2
10 ULN2003A 7 7 74HC238 5 15 1
7C 7B Y7 E3 Y0 A
11 6 9 4
6C 6B Y6 E2
12 5 10 6 74HC238
5C 5B Y5 E1
13 4 11
4C 4B Y4
14 3 12
3C 3B Y3
15 2 13 3
2C 2B Y2 C
16 1 14 2
1C 1B Y1 B
9 15 1
COM Y0 A
U8 U3
10 ULN2003A 7 7 74HC238 5
7C 7B Y7 E3
11 6 9 4
6C 6B Y6 E2
12 5 10 6
5C 5B Y5 E1
13 4 11
4C 4B Y4
14 3 12
3C 3B Y3
15 2 13 3
2C 2B Y2 C
16 1 14 2
1C 1B Y1 B
9 15 1
COM Y0 A

ULN2003A 74HC238

U14 U1
19
2OE 24LC16B
1
1OE
SCK
SDA
WP

3 17
2Y3 2A3 R1 R2
5 15
2Y2 2A2
7 13 10k 10k
1
3
5

2Y1 2A1
9 11
2Y0 2A0
12 8
1Y3 1A3
14 6
1Y2 1A2
16 4
1Y1 1A1
18 2
1Y0 1A0

74HC241

R5
10k
21
22
23
24
25
26
27
28

11
12
13
14
15
16
17
18

U2
RC6/T X/CK
RB0/INT

RB6/PGC
RB7/PGD

RC0/T 1OSO/T 1CKI


RB1
RB2

RB4
RB5

RC1/T 1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RB3/PGM

RC4/SDI/SDA
RC5/SDO

RC7/RX/DT
Conector PC-AT

PIC16F873
3
4 5
2
1

R4
RA3/AN3/VREF+
RA2/AN2/VREF-
MCLR/Vpp/T HV
OSC2/CLKOUT

10k
OSC1/CLKIN

RA5/AN4/SS
RA4/T 0CKI
RA0/AN0
RA1/AN1
9
10
1

2
3
4
5
6
7

C2

13pF
X1
CRYSTAL
C1

13pF

C3
R3
10k
1uF

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

Presentación del proyecto terminado

En la siguiente fotografía se ve como quedo terminado el trabajo:

Manejo del cartel electrónico:

Una vez conectado a la alimentación, aparecerá el ultimo mensaje que se ejecuto


antes de cortar la alimentación. Luego se debe presionar F1 si se desea ejecutar el
modo “frase instantánea” o F2 si desea “mensaje giratorio”:

Si selecciono F1:

1. Seleccionar memoria mediante las teclas 1,2,3,4.


2. Elegir si se va a ejecutar frase guardada con F3, o grabar nueva frase
mediante F4.
3. Si se eligió F3 se ejecutara la frase guardada, en cambio si se eligió F4, lo
primero que hay que hacer es darle un nombre al lugar de memoria y finalizar
con la tecla F4.
4. Una vez elegido el nombre se debe empezar a escribir la frase, una vez que
se termino de escribir el primer renglón, si desea pasar al siguiente renglón
presionar ENTER y así sucesivamente, pero si desea finalizar presione F3 y
comenzara a reproducir la frase.

Si selecciono F2:

1. Seleccionar memoria mediante las teclas 1,2,3,4.


2. Elegir si se va a ejecutar frase guardada con F3, o grabar nueva frase
mediante F4.

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

3. Si se eligió F3 se ejecutara la frase guardada, en cambio si se eligió F4, lo


primero que hay que hacer es darle un nombre al lugar de memoria y finalizar
con la tecla F4.
4. Una vez elegido el nombre se debe empezar a escribir el mensaje, cuando se
termino de escribir, para finalizar presionar F3 y comenzara a reproducir el
mensaje.
5. Si se desea variar la velocidad de reproducción del mensaje, si presiona la
tecla F5 aumentara la velocidad, y si se presiona F6 disminuirá la velocidad.

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

Problemas en la realización del proyecto

Los problemas que se me presentaron al realizar el proyecto no han sido muchos


pero es importante mencionarlos, en primer lugar puedo mencionar que se me hizo
un poco complicado poder desarrollar el ``software´´ que gobierna al
microcontrolador pic.

Otro de los problemas que se me ha presentado fue el problema de la corriente de


la que entregaba la fuente, al principio veía que no se iluminaban mucho las
matrices, después de hacer varias pruebas, lo solucione cambiando la fuente de
alimentación por una mas grande.

Al realizar otra prueba las matrices iluminaban poco, era porque las matrices
necesitan un pico de corriente de 140mA, ya que el puerto B del PIC no puede
entregar esa corriente, tuve que poner un amplificador de corriente.
Estos problemitas surgen por no leer antes las hojas de datos de los componentes.

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

Apéndice A

Teoría del teclado PC-AT

El teclado es un periférico bidireccional que se conecta al ordenador por medio de


un cable que contiene 4 hilos átiles: uno de alimentación, uno de tierra, uno para
datos y otro para reloj. Los conectores externos mas conocidos se muestran a
continuación:

Donde las líneas del reloj y de datos son bidireccionales de E/S con colector abierto
capaces de manejar una corriente de hasta de 300mA.

Identificación de la tecla pulsada:


Al pulsar una tecla se genera un único código, denominado también código de
rastreo, el cual identifica la tecla pulsada y la envía a través de su línea de data
serial. Al soltar la tecla, los teclados de AT generan dos códigos que se envían
consecutivamente (0F0h y después el mismo código que al pulsarla). Por ejemplo, si
se pulsa la tecla „A‟ aparecerá en la línea de dato serial del teclado el byte 1Ch, y al
soltar la „A‟ se genera un código F0h y luego 1Ch. La figura siguiente muestra el
teclado básico del PC-AT de 83/84 teclas y sus códigos de escaneo:

El teclado es libre de transmitir hacia el “host” mientras ambas líneas del reloj del
teclado y datos permanezcan en alto. En este momento la transmisión de datos
hacia el “host” se realiza a través de un protocolo de comunicación en serie que en
el AT consta de un marco de 11 bits, el primer bit de inicio, los 8 siguientes de datos
(el LSB primero), 1 bit de paridad impar y el último de fin o parada. En el siguiente
diagrama se representa un byte de datos transmitidos desde el teclado:

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

El teclado no cambia necesariamente el dato en la línea en el flanco de subida del


reloj como se muestra aquí, pero el dato en la línea debe ser siempre valido en el
flanco de bajada del reloj. Así, cada bit debe ser leído en el flanco de bajada de reloj.
Teniendo en cuenta que el bit menos significativo siempre es enviado primero. El
teclado genera la señal de reloj que por lo general esta entre 20Khz y 30Khz.

Comunicación con el Microcontrolador PIC:

El programa en este caso se debe encargar de detectar las interrupciones


generados por el teclado, determinar la tecla pulsada y hallar su valor equivalente
ASCII.

Este programa se limitara a recibir los códigos de las teclas pulsadas. Para ello se
debe leer el código binario producido en los flancos de bajado del reloj, se debe
colocar el reloj del teclado como la entrada de interrupción RB0, y cada vez que esta
se activa se lee en RC0 un bit del dato.
Como la línea de reloj y de dato del teclado son a colector abierto, hay que
configurar la entrada RB0 como “pull up”, y a la entrada RC0 hay que colocarle una
resistencia a Vcc.

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

Apéndice B
Matriz de 5x7 LEDs

El modelo de matriz de “leds” elegido para el proyecto es el 5x7 “Dot Matrix Display”
(red) del fabricante Para Light.
La identificación del elemento es: Part Number: C-5570E

Algunas de las características [20] generales que presenta son las siguientes:

Disposición interna de los “leds” de Cátodo Columna.


Tamaño del punto de 5mm.
2 pulgadas de altura (50 mm).
Baja corriente de operación.
Alto contraste de luz.
Compatibles con códigos EBCDIC y ASCII.
Horizontalmente escalable.
Fácil montaje en placas o sockets.
Punto de color blanco y carcasa de color gris.

Otras características pueden verse en la siguiente tabla y para más información ver
su datasheet.

La siguiente tabla muestra los rangos de valores absolutos.

Parámetro Valor
Potencia disipada 105 mW
Corriente continua 30 mA
Pico de corriente(1/10 Duty Cycle, 0,1ms) 140 mA
Voltaje 5V
Temperatura de Uso/almacenaje -400C hasta +85ºC
Temperatura de soldadura 260ºC durante 5 segundos

La siguiente imagen muestra las dimensiones de la matriz así como las dos posibles
disposiciones internas de sus “leds”.

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

Apéndice C
MEMORIA I2C EEPROM 24C16

Estos dispositivos se caracterizan por su tamaño reducido, normalmente


implementados en encapsulados de 8 pines, sin importar la capacidad de
almacenamiento. Los encapsulados típicos van desde montaje superficial hasta los
clásicos PDIP, útiles éstos para los prototipos en “protoboards”, apreciados por los
aficionados y estudiantes de electrónica. La etiqueta que las identifican comienza
con el número 24, acompañada del número que indica la capacidad de
almacenamiento en Kbits y el tipo de encapsulado.

La capacidad de almacenamiento implementada por los fabricantes de estos


dispositivos oscila desde 1Kbit hasta 1024Kbit, permitiendo una conexión en
cascada entre ellos; un dispositivo maestro como un microcontrolador de gama
media, puede manejar hasta 7 dispositivos de este tipo mediante el protocolo,
permitiendo un potencial de acceso de 8192Kbits de información (1MByte). Las
memorias EEPROM basadas en el protocolo SPI tienen una capacidad tope de
256Kbits en la actualidad, pero no permiten la posibilidad de conectarse en cascada,
al igual que las basadas en Microwire, las cuales solo tienen una capacidad máxima
de almacenamiento de 16Kbits.

Características:

Voltaje de operación bajo y estándar


– 5.0 (VCC = 4.5V to 5.5V)
– 2.7 (VCC = 2.7V to 5.5V)
– 2.5 (VCC = 2.5V to 5.5V)
– 1.8 (VCC = 1.8V to 5.5V)
Organizado internamente 2048 x 8 (16K)
Bus de interfaz serial, compatible con I2C
Transferencia de datos bidireccional
100 KHz (1.8V, 2.5V, 2.7V) y 400 KHz (5V)
Ciclo de escritura (10ms máximo)

La descripción funcional de los conectores:

1. Líneas de Dirección (A2 A1 A0): Indican el código de identificación del circuito


integrado, dentro de una red I2C. Un maestro puede comunicarse con 7 esclavos
dentro de esta red. Con la ayuda de “hubs”, repetidores y buffers, pueden
conectarse varias redes. ·

2. Líneas de Polarización (Vcc y Vss): Los dispositivos I2C, trabajan con voltajes de
alimentación (Vcc) entre 2.3 a 5.5VDC. El conector Vss conecta la tierra del circuito.
Existen circuitos convertidores de voltaje, para permitir la conexión de redes y
dispositivos que se polarizan con diferentes niveles de voltaje.

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

3. Línea de Protección de Código (WP): Permite ó no la modificación del contenido


de la memoria. Es la única opción de seguridad que tiene la memoria.

4. Línea de Datos (SDA): A través de ella se transmite y se recibe la información que


intercambia la memoria con otros dispositivos de la red. Es una salida de colector /
drenador abierto, lo cual requiere una resistencia de polarización “pull-up”, para
conectarla a una fuente de voltaje. La conexión de varias salidas de este tipo,
originan la conexión “AND alambrada”, en la cual el nivel lógico resultante es el
producto lógico de los niveles presentes en las salidas conectadas en ese nodo.

5. Línea de Reloj (SCL): Fija la sincronización de los datos que viajan entre maestro
y esclavos. Al igual que SDA, esta línea también es de colector / drenador abierto, lo
que también se debe conectar entre ella y la fuente de polarización la resistencia
“pull-up”. La frecuencias de operación que soporta el protocolo son: estándar
(100KHz), rápida (400KHz) y de “alta velocidad” (1MHz).

El procedimiento básico para la transmisión y recepción de datos entre el


microcontrolador y una memoria EEPROM I2C, depende de la operación a realizar
sobre ella, si es lectura ó escritura:

1. El maestro (microcontrolador) genera una condición de inicio (Start) al esclavo


(memoria), definida en el protocolo I2C así: SCL=1 y SDA=flanco descendente.

2. El maestro genera un byte de reconocimiento de dirección de esclavo, que tiene la


siguiente estructura: 1010 A2 A1 A0 [R/W]. Los primeros 4 bits corresponden a la
identificación que utiliza el protocolo de comunicación. Los bits A2 A1 A0
corresponden a la dirección del esclavo y el bit [R/W] indica el tipo de operación que
se va a realizar en la memoria. Si es 1, se realiza lectura y si es 0 escritura. Los
esclavos conectados en la misma red del maestro reciben esta trama, comparan la
dirección que reciben del maestro con la que tienen definida en sus líneas de
dirección y el esclavo seleccionado coloca un nivel BAJO (si se realiza la operación
de escritura) en la línea SDA. Esta acción se define en inglés con la palabra
“Acknowledge” (ACK). Si se realiza la operación de lectura, el esclavo coloca la línea
SDA en BAJO y espera a que el maestro genere el bit ACK, que en este caso es
ALTO.

3. El maestro genera el ó los bytes de la dirección de la celda. Al igual que el paso


anterior, los niveles de ACK para las operaciones de lectura y escritura se
comportan de la misma forma.

4. En escritura, el maestro envía el byte de datos a la celda seleccionada; en lectura


la memoria envía este byte al maestro. Luego de esto se genera el bit ACK
correspondiente.

5. Si se van a transmitir más datos entre el microcontrolador y la memoria, se repiten


los pasos 2 a 4.

6. El maestro genera la condición de parada (Stop) al esclavo, colocando un flanco


ascendente en SDA, cuando SCL=1. Se termina el enlace entre el microcontrolador
y la memoria.

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

Apéndice D
Microcontrolador PIC 16F873

El PIC16F873 es un microcontrolador FLASH de alto rendimiento que provee a


ingenieros con la más alta flexibilidad de diseño posible. Además de (4k) palabras de
memoria de programa FLASH, 192 bytes de memoria de datos, y 128 bytes de uso
RAM.
El PIC16F873 también tiene integrado un conversor Analógico-digital de 5-canales
de 10-bit. Incluye dos temporizadores de 8-bit, uno de 16-bit, un temporizador del
Perro guardián, “Brown-Out-Reset” o protección en para voltajes bajos (BOR),
“Programming”™ En-circuito-de serie, RS-485 tipo “UART” para las aplicaciones de
adquisición datos por goteo, y I2C™ o SPI™ que brinda capacidad para la
expansión periférica.
Se ha mejorado la precisión que controla interfaces a través de dos módulos de CCP
y dos módulos de PWM (modulación por ancho de pulsos). Los PIC16F873 también
gozan de un voltaje bajo de programación (Low voltage program), permitiéndole al
usuario programar en el circuito el dispositivo mientras esta operando bajo el voltaje
de funcionamiento. Las aplicaciones van de controles de máquinas programables,
mantenimiento de red, telefonía, automatización, informática, etc.
Este posee 22 I/O (puertos de entrada / salida) y está disponible en encapsulados
28 DIP (SP), y 28 SOIC (SO) para montaje en placa o superficial.

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

Distribución de puertos en el PIC16F873

El PIC16F873 posee 22 puertos de E / S disponibles: RA0_ RA5 (configurados como


salidas), RB0 (conf. Como entrada), RB1_RB7 (conf. como salidas), RC0_ RC7
(configurados como entradas).
Pero para este proyecto son necesarios 17 puertos distribuidos de la siguiente
manera:

2- Control del teclado PC-AT


6- Control de los decodificadores.
7- Manejo de la pantalla de “leds”
2- Memoria EEPROM

Para el manejo del teclado se utiliza el puerto RB0 configurado como una
interrupción conectada al reloj, y el puerto RC0 conectado al de datos.
Se utilizan para la pantalla de “leds” los bits RB1 a RB7 para las filas.
Para controlar de los decodificadores se utilizo puerta A del PIC.
Para la memoria EEPROM se utilizo el puerto RC3 (SCL) y RC4 (SDA) que son I2C.

Cingolani Ariel Jorge


TECNOLOGIA ELECTRONICA

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL VILLA MARIA

Conclusión
De este proyecto se pueden formular muchas conclusiones que en su totalidad son
productivas.
La propuesta de realizar un proyecto a libre elección fomenta el desarrollo de
proyectos ingeniosos y tal vez, por que no, útiles. Realmente cubre con todos los
aspectos de un trabajo de ingeniería.
Aprender a manejar un microcontrolador no es tan difícil como parece. Vale la pena
conocer a un dispositivo tan versátil, completo y eficiente.
Otra ventaja de este desafío es su carácter integrador. Para este proyecto se
utilizaron todos los conocimientos adquiridos tanto en el ámbito universitario como
en el ámbito personal. Es decir la experiencia de proyectos anteriores.
Muchos problemas y contratiempos se hicieron presentes pero todos ellos fueron
subsanados utilizando el ingenio y los conocimientos.

Cingolani Ariel Jorge

Você também pode gostar