SlideShare a Scribd company logo
1 of 31
Download to read offline
Universidad Cat´olica
“Nuestra Se˜nora de la Asunci´on”
Sede Regional Asunci´on
Facultad de Ciencias y Tecnolog´ıa
Departamento de Ingenier´ıa
Electr´onica e Inform´atica
Carrera de Ingenier´ıa Electr´onica
Microprocesadores I
Ing. Vicente Gonz´alez PhD.
G´omez de la Fuente, Alberto <delafuente986@gmail.com>
Ram´ırez, Pedro <pedroramirez22@gmail.com>
Matriz de leds 1 · 0 c
2 de diciembre de 2011
ii
´Indice general
1. Especificaciones del Proyecto 1
1.1. Descripci´on General . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1. Diagrama de Bloques del Sistema . . . . . . . . . . . . . . 2
1.1.2. Procedimiento de Utilizaci´on . . . . . . . . . . . . . . . . 2
1.1.3. Software de Aplicaci´on . . . . . . . . . . . . . . . . . . . . 3
2. Dise˜no del tablero de leds 5
2.1. Dise˜no del Hardware . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2. Dise˜no L´ogico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3. Funcionamiento de la matriz de LEDs . . . . . . . . . . . . . . 7
2.4. Software controlador . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4.1. Algoritmo implementado . . . . . . . . . . . . . . . . . . 9
3. Manejo del Puerto Serie 11
3.1. Introducci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2. Puerto serie y Linux . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2.1. Descripci´on . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2.2. Explicaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.3. Codificaci´on de la informaci´on . . . . . . . . . . . . . . . . . . . 15
4. Manejo de la memoria EEPROM 17
4.1. Introducci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.2. Mapa de memoria . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.3. Programaci´on de la EEPROM . . . . . . . . . . . . . . . . . . . 19
4.3.1. Lectura . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.4. Implementaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
iii
iv ´INDICE GENERAL
´Indice de figuras
2.1. Diagrama l´ogico del registro de desplazamiento . . . . . . . . . . 6
2.2. Esquem´atico del matriz de leds dise˜nado . . . . . . . . . . . . . . 7
2.3. Conexiones de puertos del Hcs12 con la Matriz de Leds. . . . . . 10
4.1. Mapa de memoria de la Flash . . . . . . . . . . . . . . . . . . . . 18
v
vi ´INDICE DE FIGURAS
´Indice de cuadros
3.1. Dispositivos del puerto serie en Linux . . . . . . . . . . . . . . . 11
3.2. Matriz de un bloque de dibujo con valores binarios . . . . . . . . 15
4.1. Configuraci´on del espacio de la flash . . . . . . . . . . . . . . . . 19
4.2. Tiempos de programaci´on de la memoria EEPROM . . . . . . . 20
vii
viii ´INDICE DE CUADROS
Introducci´on
El siguiente trabajo se trata sobre el desarrollo de una matriz de leds, m´as
conocido como Tablero Electr´onico o Publik, existen varios m´odulos del cual
consta, primeramente el dise˜no del hardware, el cual b´asicamente consiste en
una matriz de p´ıxeles similar a los de la pantalla de un ordenador. Luego de esto,
se dise˜na el software que podr´a manejar la matriz desde el ordenador, se ha de-
sarrollado en GTK+, adem´as se utiliza el puerto RS232 para la comunicaci´on
con el dispositivo microcontrolador utilizado el cual es el HCS12 de Motorola.
Cabe destacar que el desarrollo del entorno gr´afico y por ende el manejo del
puerto serial, se han hecho en Linux por la simplicidad que presenta, ya que
se maneja al puerto como un simple archivo, adem´as GTK+ presenta varias
funciones que ayudan a la portabilidad del software desarrollado.
ix
x ´INDICE DE CUADROS
1 Especificaciones del Proyecto
1.1 Descripci´on General
El cartel luminoso cumple con las siguientes especificaciones:
1. El cartel muestra hasta 3 letras en alg´un momento de su desplazamiento.
2. Se conecta a una computadora para ingresar los mensajes. Para lo cual
posee una interfase de usuario.
3. Los mensajes quedan guardados en memoria no vol´atil.
4. El Panel posee efectos tales como: Correr de izquierda a derecha y vicev-
ersa. Correr de arriba abajo y viceversa, efecto de parpadeo de los LEDs, efecto
negrita.
5. La velocidad con que se muestra los mensajes es apto para poder leer los
mensajes.
6. El hardware posee un bot´on que permite cambiar de mensaje. Para ello
se deber´a guardar m´ultiples mensajes.
1
2 CAP´ITULO 1. ESPECIFICACIONES DEL PROYECTO
1.1.1. Diagrama de Bloques del Sistema
1.1.2. Procedimiento de Utilizaci´on
En esta secci´on se enlistan los pasos a seguir para la utilizaci´on del Cartel
Luminoso T.E.L.
1. Se conecta el Microcontrolador HCS12 a una Fuente de 5V.
2. Se conecta el cable serial a la PC y al Microcontrolador HCS12.
3. Se enciende la PC.
4. Se ingresa al Software LEDs.
5. Se pueden ingresar hasta 10 mensajes.
6. Una ves ingresados los mensajes deseados se puede desconectar el cable
serial.
7. Apagar la PC y la Fuente de tensi´on.
8. Volver a encender la fuente de alimentaci´on.
8. Ya que el dispositivo almacena todos los mensajes ingresados, con el bot´on
pulsador uno puede ir cambiando los mensajes.
3
1.1.3. Software de Aplicaci´on
En esta imagen se puede apreciar la interfase de usuario. El sistema esmuy
amigable. Permite ingresar hasta 10 mensajes, elegir sus animaciones. Tambi´en
tiene la opci´on de prender con 1 ´o con 0.
4 CAP´ITULO 1. ESPECIFICACIONES DEL PROYECTO
2 Dise˜no del tablero de leds
2.1 Dise˜no del Hardware
El hardware que se quiere construir es un cartel luminoso. Para el dise˜no
inicial se utilizo una matriz de tal manera que se tendr´a el control sobre 112
leds. El montaje final queda por tanto con 16 columnas y 7 filas. El control
de los leds es multiplexado, de forma que cada elemento de la matriz(1 led) se
controla por un comando de filas y columnas.
2.2 Dise˜no L´ogico
Teniendo en cuenta las restricciones anteriores se comienza el dise˜no l´ogico
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 112 “leds”, pero para ello ser´ıan necesarias 23 se˜nales de control, una por
cada columna (16) y uno por cada fila (7). El n´umero es excesivo(m´as a´un si se
desease expandir la cantidad de columnas), as´ı que se tendr´a que plantear otro
esquema de control. Se plantearon dos soluciones, codificar las columnas o las
filas, de forma que en un momento dado s´olo por una columna o por una fila
pudiera pasar corriente, permitiendo as´ı el control individual de los “leds” de la
fila o columna por la que pasar´a corriente.
Otro esquema est´a en el multiplexado, esta t´ecnica permite utilizar unos
pocos pines de E/S del microcontrolador para manejar una serie de circuitos
integrados que se encarguen de excitar los LEDs. Hay varias maneras, y mu-
chos modelos diferentes de circuitos para hacer esto. Pueden usarse un tipo de
integrado digital llamado “LATCH”. De esta manera, usando varios latches
podr´ıamos encender los LEDs por turnos, r´apidamente para que no se note el
parpadeo, y de esa manera formar una palabra en el cartel. Otra forma es uti-
lizar un registro de desplazamiento. Y de hecho, es de esta forma c´omo vamos
a dise˜nar nuestro cartel. En un registro de desplazamiento tenemos “0” y “1”,
lo bueno es que para “meter” datos (“0”s y “1”s) en ´el solo hacen falta tres
5
6 CAP´ITULO 2. DISE ˜NO DEL TABLERO DE LEDS
pines del microcontrolador, independientemente de lo largo que sea. Estos pines
se encargan de tres tareas: Uno de ellos, al que denominaremos “DATOS” es
el encargado de decirle al registro de desplazamiento que lo que introduciremos
es un “0” o un “1”. El segundo se encarga de avisar al registro que el dato ya
est´a listo para ser ingresado, y lo llamaremos “CLOCK”. Y el ultimo, que no
es indispensable, es el “RESET”, que se encarga de “vaciar” la fila escribiendo
“0‘”s en todas las salidas del registro.
Para desarrollar nuestro ejemplo utilizaremos el circuito integrado 74HC164N,
que es un registro de desplazamiento de 8 bits. Para construir un cartel de 16
columnas, necesitar´ıamos utilizar 2 de estos integrados, uno a continuaci´on del
otro.
En la figura podemos ver la funci´on de cada uno de los pines del 74HC164N
y en la figura el dise˜no hacho y de que forma podemos conectar uno a contin-
uaci´on del otro para obtener un registro de desplazamiento de cualquier longitud.
SN74LS164
LOGIC DIAGRAM
Q6 Q7
A
B
Q0 Q1 Q3Q2 Q5Q4
MR
CP
D Q
CD
D Q
CD
D Q
CD
D Q
CD
D Q
CD
D Q
CD
D Q
CD
D Q
CD
63 4 5 11 1210 13VCC = PIN 14
GND = PIN 7
= PIN NUMBERS
1
2
8
9
FUNCTIONAL DESCRIPTION
The LS164 is an edge-triggered 8-bit shift register with
serial data entry and an output from each of the eight stages.
Data is entered serially through one of two inputs (A or B);
either of these inputs can be used as an active HIGH Enable
for data entry through the other input. An unused input must
be tied HIGH, or both inputs connected together.
Each LOW-to-HIGH transition on the Clock (CP) input
shiftsdataoneplacetotherightandentersintoQ0 thelogical
AND of the two data inputs (A•B) that existed before the
rising clock edge. A LOW level on the Master Reset (MR)
input overrides all other inputs and clears the register
asynchronously, forcing all Q outputs LOW.
MODE SELECT — TRUTH TABLE
OPERATING
MODE
INPUTS OUTPUTS
MODE
MR A B Q0 Q1–Q7
Reset (Clear) L X X L L – L
H I I L q0 – q6
Shift H I h L q0 – q6
H h I L q0 – q6
H h h H q0 – q6
L (l) = LOW Voltage Levels
H (h) = HIGH Voltage Levels
X = Don’t Care
qn = Lower case letters indicate the state of the referenced input or output one
qn = set-up time prior to the LOW to HIGH clock transition.
Figura 2.1: Diagrama l´ogico del registro de desplazamiento
Bien, con el esquema explicado podemos encender los LEDs que queramos
de una fila de 16 bits de largo. Si en el registro de desplazamiento introduci-
mos “1111. . .111”, los 16 LEDs estar´an encendidos. Si queremos encender uno
por medio, escribiremos “10101. . .01”. cuando lleguemos a la parte de la pro-
gramaci´on veremos c´omo se ingresan uno a uno los “0” y “1” en el registro.
Adem´as se aprovecha un “defecto” del ojo humano, que mantiene la imagen
vista durante unos 20 o 30 milisegundos, para “dibujar” una fila a la vez, pero
muy r´apidamente, de forma que todo el cartel parezca estar encendido a la vez.
7
5
5
4
4
3
3
2
2
1
1
D D
C C
B B
A A
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0
VCC
VCC
VCC
VCC
VCC
VCC
VCC
0
VCC
SELECTORFILAS
ENTRADA SERIAL
ALIMENTACION
MATRIZ DE LED'S DE 7*16
CLOCK
RESET
DATA
VCC
GND
D27
LED
D27
LED
D4
LED
D4
LED
D107
LED
D107
LED
D46
LED
D46
LED
R7
2.2k
R7
2.2k
Q11
Q2N2222
Q11
Q2N2222
D55
LED
D55
LED
D92
LED
D92
LED
D21
LED
D21
LED
D101
LED
D101
LED
D40
LED
D40
LED
D49
LED
D49
LED
R6
2.2k
R6
2.2k
D16
LED
D16
LED
Q18
Q2N2222
Q18
Q2N2222
D77
LED
D77
LED
R27
220
R27
220
D86
LED
D86
LED
D34
LED
D34
LED
R5
2.2k
R5
2.2k
R19
2.2k
R19
2.2k
Q7
Q2N2222
Q7
Q2N2222
D62
LED
D62
LED
D71
LED
D71
LED
Q22
Q2N2222
Q22
Q2N2222
D5
LED
D5
LED
J1
CON7
J1
CON7
1
2
3
4
5
6
7
D28
LED
D28
LED
D108
LED
D108
LED
D47
LED
D47
LED
R4
2.2k
R4
2.2k
R22
2.2k
R22
2.2k
D56
LED
D56
LED
D65
LED
D65
LED
Q14
Q2N2222
Q14
Q2N2222
R16
2.2k
R16
2.2k
D93
LED
D93
LED
D22
LED
D22
LED
D41
LED
D41
LED
R3
2.2k
R3
2.2k
D102
LED
D102
LED
D50
LED
D50
LED
Q3
Q2N2222
Q3
Q2N2222
D78
LED
D78
LED
R15
2.2k
R15
2.2k
D87
LED
D87
LED
R2
2.2k
R2
2.2k
D35
LED
D35
LED
D11
LED
D11
LED
D63
LED
D63
LED
D72
LED
D72
LED
R14
2.2k
R14
2.2k
Q10
Q2N2222
Q10
Q2N2222
D81
LED
D81
LED
D6
LED
D6
LED
R26
220
R26
220
D29
LED
D29
LED
R1
2.2k
R1
2.2k
D109
LED
D109
LED
D48
LED
D48
LED
D57
LED
D57
LED
Q19
Q2N2222
Q19
Q2N2222
R13
2.2k
R13
2.2k
D66
LED
D66
LED
D1
LED
D1
LED
Q1
Q2N2222
Q1
Q2N2222
D94
LED
D94
LED
D23
LED
D23
LED
D103
LED
D103
LED
D42
LED
D42
LED
D51
LED
D51
LED
U1
74HC164
U1
74HC164
A1
B2
CLK8
QA3
QB4
QC5
QD6
QE10
QF11
QG12
QH13
CLR 9
R12
2.2k
R12
2.2k
J3
CON2
J3
CON2
1
2
D79
LED
D79
LED
Q6
Q2N2222
Q6
Q2N2222
Q23
Q2N2222
Q23
Q2N2222
D88
LED
D88
LED
D17
LED
D17
LED
J2
CON3
J2
CON3
1
2
3
D97
LED
D97
LED
D36
LED
D36
LED
R17
2.2k
R17
2.2k
D12
LED
D12
LED
R11
2.2k
R11
2.2k
D64
LED
D64
LED
D73
LED
D73
LED
R30
220
R30
220
Q13
Q2N2222
Q13
Q2N2222
D82
LED
D82
LED
D7
LED
D7
LED
R20
2.2k
R20
2.2k
D30
LED
D30
LED
D110
LED
D110
LED
D58
LED
D58
LED
R10
2.2k
R10
2.2k
D67
LED
D67
LED
R23
2.2k
R23
2.2k
D24
LED
D24
LED
D95
LED
D95
LED
D104
LED
D104
LED
D43
LED
D43
LED
D52
LED
D52
LED
R9
2.2k
R9
2.2k
R25
220
R25
220
D80
LED
D80
LED
Q9
Q2N2222
Q9
Q2N2222
D89
LED
D89
LED
D18
LED
D18
LED
D98
LED
D98
LED
D37
LED
D37
LED
R8
2.2k
R8
2.2k
D13
LED
D13
LED
Q20
Q2N2222
Q20
Q2N2222
D74
LED
D74
LED
D83
LED
D83
LED
D8
LED
D8
LED
D31
LED
D31
LED
Q16
Q2N2222
Q16
Q2N2222
D111
LED
D111
LED
D59
LED
D59
LED
D68
LED
D68
LED
R29
220
R29
220
D96
LED
D96
LED
D25
LED
D25
LED
D2
LED
D2
LED
Q5
Q2N2222
Q5
Q2N2222
D105
LED
D105
LED
D44
LED
D44
LED
D53
LED
D53
LED
D90
LED
D90
LED
D19
LED
D19
LED
Q12
Q2N2222
Q12
Q2N2222
D99
LED
D99
LED
D38
LED
D38
LED
Q2
Q2N2222
Q2
Q2N2222
D14
LED
D14
LED
D75
LED
D75
LED
U2
74HC164
U2
74HC164
A1
B2
CLK8
QA3
QB4
QC5
QD6
QE10
QF11
QG12
QH13
CLR 9
D84
LED
D84
LED
R18
2.2k
R18
2.2k
D9
LED
D9
LED
D32
LED
D32
LED
R24
220
R24
220
D112
LED
D112
LED
Q17
Q2N2222
Q17
Q2N2222
D60
LED
D60
LED
R21
2.2k
R21
2.2k
D69
LED
D69
LED
D26
LED
D26
LED
D3
LED
D3
LED
D106
LED
D106
LED
D45
LED
D45
LED
Q8
Q2N2222
Q8
Q2N2222
D54
LED
D54
LED
R28
220
R28
220
Q21
Q2N2222
Q21
Q2N2222
D91
LED
D91
LED
D20
LED
D20
LED
D100
LED
D100
LED
D39
LED
D39
LED
Q15
Q2N2222
Q15
Q2N2222
D15
LED
D15
LED
D76
LED
D76
LED
D85
LED
D85
LED
D10
LED
D10
LED
D33
LED
D33
LED
Q4
Q2N2222
Q4
Q2N2222
D61
LED
D61
LED
D70
LED
D70
LED
Figura 2.2: Esquem´atico del matriz de leds dise˜nado
2.3 Funcionamiento de la matriz de LEDs
Como dijimos antes, la pantalla est´a formada por una serie de filas y colum-
nas. La intersecci´on entre ambas contiene un LED. Para que este encienda, tiene
que recibir simult´aneamente un “1” en la fila, y un “1” en la columna. Cuando
se dan estas condiciones, la electr´onica de la placa se encarga del encendido del
LED en cuesti´on. La forma de generar un mensaje sobre el display es relativa-
mente sencilla, si nos atenemos al siguiente algoritmo:
1. Apagar todas las filas.
2. Escribir los valores correspondientes a la primer fila en el registro de de-
splazamiento, teniendo en cuenta que el primer digito binario colocado
corresponde al primer LED de la fila, y el ´ultimo en poner al de la ´ultima
columna.
3. Encenderla primer fila, esperar un tiempo, y volver a apagarla.
4. Repetir los pasos 2 y 3 para las filas restantes.
El tiempo de la demora debe ser tal que permita una visualizaci´on correc-
ta, sin molestos parpadeos y con los LEDS brillantes. Ssi utilizamos tiempos
8 CAP´ITULO 2. DISE ˜NO DEL TABLERO DE LEDS
mayores para el encendido de cada fila, el brillo de los LEDS ser´a mayor, pero
tambi´en aumentar´a el parpadeo.
Un punto tenido en cuenta es la intensidad del brillo que puede propor-
cionarnos el tipo de LED que utilizamos. En caso de un t´ıpico cartel de 7 filas
como el dise˜nado, a pesar de que las veremos encendidas al mismo tiempo, cada
LED solo estar´a encendido la s´eptima parte del tiempo, por lo que su brillo
ser´a siete veces inferior al normal, y nuestro cartel apenas ser´a visible.
2.4 Software controlador
Ahora nos toca abordar la programaci´on del hardware propuesto. El car-
tel del LEDs que estamos construyendo puede adoptar diferentes tama˜nos de
acuerdo a las especificaciones del trabajo.
Debemos pensar en un programa que nos permita mostrar p´ıxeles individ-
uales representados sobre la pantalla de nuestro cartel de 16 columnas y 7 filas
de altura, recordando que todo lo que expliquemos puede ser adecuado para
carteles de otro tama˜no.
Lo primero que necesitamos saber es que el “barrido” del cartel debe hacerse
por filas. Es decir, mostraremos el contenido de la primera fila, esperamos un
tiempo determinado (unos pocos milisegundos), mostramos el de la segunda fila,
esperamos nuevamente, y as´ı hasta llegar a la ´ultima fila, tal como se expresa
en el algoritmo visto mas arriba.
El motivo de no emplear las columnas para realizar el barrido es que como
son m´as numerosas, el tiempo total que se necesita para “escribir” por filas es
mucho menor que el necesario para escribir por columnas, y en la pr´actica eso
significa que el brillo de nuestro cartel ser´a mucho mayor si lo hacemos por filas,
ya que cada LED permanecer´a encendido 1/7 del tiempo. Si lo hici´esemos por
columnas, cada LED estar´ıa encendido solo 1/16 del tiempo, por lo que su brillo
seria unas 2 veces menor.
Ahora bien, el primer problema a resolver es ¿C´omo escribo los datos de una
fila del cartel? Esto tiene una soluci´on m´as que simple: solo debemos introducir
en el registro de desplazamiento los “0” y “1” necesarios para que los LEDs que
queremos est´en encendidos en esa fila tengan +V en sus ´anodos. Por supuesto,
mientras hacemos esto todos los pines del microcontrolador que controlan las
filas deber´an estar apagadas, para que no se perciba una d´ebil luminosidad en
todos los LEDs de la fila que estamos escribiendo a medida que pasan los datos
a trav´es del registro.
9
El primer valor que se debe “meter” en el registro de desplazamiento es el
que corresponder´a a la ´ultima columna. A medida que vamos ingresando los
siguientes, se van desplazando hacia el final del cartel. Cuando hayamos intro-
ducido el valor 16 (que corresponder´a a la primera columna) el primer valor que
metimos habr´a llegado a su posici´on.
En ese momento tenemos todo el registro escrito, y ya podemos activar la sal-
ida del microcontrolador(pin) que corresponde a esa fila en particular. El tiempo
que debe estar encendida la fila se puede determinar emp´ıricamente, pero por lo
generan unos 10 milisegundos es suficiente. Si tenemos 7 filas, 10 milisegundos
de demora permitir´ıan escribir todo el cartel en unos 70 milisegundos.
2.4.1. Algoritmo implementado
La programaci´on fue desarrollada en lenguaje C. Para el dise˜no del algoritmo
primeramente fue necesario entender el hardware que utilizamos. El cual hemos
descrito anteriormente.
Los mensajes son enviados a trav´es del puerto serial. El microprocesador
Hcs12 recibe dichos datos y almacena en una matriz.
Todas las animaciones tienen los mismos fundamentos, los cuales explicare-
mos a continuaci´on. Los menajes constan de N caracteres, los cuales son alma-
cenados en una matriz que llamamos bits, el primer mensaje en la primera fila,
el segundo mensaje en la segunda fila, y as´ı sucesivamente hasta completar 10
filas. Cada car´acter de los mensajes consta de 7 bytes para ser representados en
la pantalla de leds. Estos bytes son almacenados en memoria de manera consec-
utiva, lo cual permite al acceso con mayor facilidad.
mask.x = 1;
mask.x <<= (BLOQUE - 1);
for(j3 = 0; j3 < CANT_FILA; j3++){
PORTA = 0;
fila[j3].x2 <<= 1;
if ((bits[SmsActual][j3 + k + FRAME].x & mask.x)){
fila[j3].x2= fila[j3].x2 + 1;
}else{
fila[j3].x2= fila[j3].x2 + 0;
}
mask2.y = 1;
mask2.y <<= (CANT_COL - 1);
for(j2 = 0; j2 < CANT_COL; j2++){
if(fila[j3].x2 & mask2.y){
10 CAP´ITULO 2. DISE ˜NO DEL TABLERO DE LEDS
PORTB_BIT0 = (bits[SmsActual][1].x - ’0’);
}else{
PORTB_BIT0 = ~(bits[SmsActual][1].x - ’0’);
}
PORTB_BIT1 = 0;
PORTB_BIT1 = 1;
mask2.y >>= 1;
}
Para acceder a dichos bytes utilizamos los campos de bits que el lenguaje c
nos permite manejar. Utilizamos dos mascaras, una de 8 bits, y la otra de 16
bits. La m´ascara de 8 bits se encarga de recorrer cada byte de cada car´acter,
realizando la operaci´on AND, los resultados de dichas operaciones son almace-
nadas en el vector fila de N elementos. Este vector fila se encarga de guardar
cada cambio que se realiza en el mismo. Existen 7 vectores filas los cuales cor-
responden a cada rengl´on de la pantalla de leds.
La m´ascara de 16 bits se encarga de desplegar en pantalla el contenido del
vector fila para cada momento dado. Primeramente consta de un bit alto en la
posici´on m´as significativo y el resto cero, de manera tal a realizar la operaci´on
AND y desplazar a la derecha, el resultado se guarda en el registro de cor-
rimiento del hardware, as´ı tambi´en como en el vector fila correspondiente, este
proceso se realiza 16 veces, luego se env´ıa un bit alto en el puerto que controla
el encendido de las filas, y de esta manera encender la fila en cuesti´on.
Figura 2.3: Conexiones de puertos del Hcs12 con la Matriz de Leds.
3 Manejo del Puerto Serie
3.1 Introducci´on
Este es un breve tutorial sobre c´omo manejar el puerto serie desde Linux
sacado de la siguiente p´agina LINK. Esto se utiliza para comunicarse con mi-
crocontroladores externos como es el caso de nuestro trabajo.
3.2 Puerto serie y Linux
Los nombres que se dan en Linux a los dispositivos serie son:
Nombre del dispositivo Descripci´on
/dev/ttyS0 Primer puerto serie nativo. (Equivalente a COM1)
/dev/ttyS1 Segundo puerto serie nativo. (Equivalente a COM2)
/dev/ttySnn n-´esimo puerto serie nativo
Cuadro 3.1: Dispositivos del puerto serie en Linux
La forma de acceder al puerto serie es la misma que para trabajar con
cualquier otro fichero. Se usan las llamadas read() y write() para leer y es-
cribir respectivamente. Pero a diferencia de los archivos normales, antes de usar
el puerto serie es necesario configurarlo, estableciendo la velocidad de trabajo y
su modo de funcionamiento.
3.2.1. Descripci´on
Se configura el modo de funcionamiento serie a 8N1(8 bits de datos, 1 bit de
stop y sin paridad). La velocidad es la indicada por el usuario en el par´ametro
baud, es una constante que puede valer: B9600, B19200, etc. Se puede encontrar
m´as informaci´on sobre todos los valores posibles en la p´agina de manual de
termios (man termios).
11
12 CAP´ITULO 3. MANEJO DEL PUERTO SERIE
Esta funci´on devuelve el descriptor del puerto serie (0 -1 si ha ocurrido un
error), que ser´a necesario para realizar las lecturas y escrituras.
int serial_open(char *serial_name, speed_t baud)
{
struct termios newtermios;
int fd;
fd = open(serial_name,O_RDWR | O_NOCTTY);
newtermios.c_cflag= CBAUD | CS8 | CLOCAL | CREAD;
newtermios.c_iflag=IGNPAR;
newtermios.c_oflag=0;
newtermios.c_lflag=0;
newtermios.c_cc[VMIN]=1;
newtermios.c_cc[VTIME]=0;
cfsetospeed(&newtermios,baud);
cfsetispeed(&newtermios,baud);
if (tcflush(fd,TCIFLUSH)==-1) return -1;
if (tcflush(fd,TCOFLUSH)==-1) return -1;
if (tcsetattr(fd,TCSANOW,&newtermios)==-1) return -1;
return fd;
}
La funci´on serial send() env´ıa una cadena de bytes por el puerto serie. Lo
´unico que hace es invocar la llamada al sistema write(). Como par´ametros se
pasa el descriptor serie del puerto serie (serial fd), devuelto por la funci´on seri-
al open(), el array con los datos a enviar (data) y su tama˜no (size).
void serial_send(int serial_fd, char *data, int size)
{
write(serial_fd, data, size);
}
La funci´on serial read() se usa para leer datos del puerto serie. Se le pasan
como par´ametros el descriptor del puerto serie (serial fd), el array donde alma-
cenar los datos recibidos (data), el tama˜no m´aximo de bytes a recibir (size, para
no desbordar el array) y el tiempo m´aximo para recibir los datos (timeout usec).
Si transcurre un tiempo igual a timeout usec y no se han recibido datos, la fun-
ci´on retornar´a y devolver´a el control a la que la invoc´o.
13
Para realizar las lecturas no bloqueantes, se usa la llamada al sistema se-
lect(). En este caso devuelve 1 si hay datos esperando a ser le´ıdos y 0 si ha
ocurrido un timeout. A continuaci´on se invoca a read() para leer estos datos. El
proceso se repite para garantizar que es posible recibir datos de tama˜no size.
Se devuelve el n´umero de bytes le´ıdos ( 0 si ha ocurrido un timeout).
int serial_read(int serial_fd, char *data, int size, int timeout_usec)
{
fd_set fds;
struct timeval timeout;
int count=0;
int ret;
int n;
do {
FD_ZERO(&fds);
FD_SET (serial_fd, &fds);
timeout.tv_sec = 0;
timeout.tv_usec = timeout_usec;
ret=select (FD_SETSIZE,&fds, NULL, NULL,&timeout);
if (ret==1) {
n=read (serial_fd, &data[count], size-count);
count+=n;
data[count]=0;
}
} while (count<size && ret==1);
return count;
}
La ´ultima funci´on es serial close(), que simplemente invoca a close() para
cerrar el puerto serie.
void serial_close(int fd)
{
close(fd);
}
14 CAP´ITULO 3. MANEJO DEL PUERTO SERIE
3.2.2. Explicaci´on
S´olo se explicar´an algunos fragmentos del c´odigo. Primero se abre el puerto
serie, a la velocidad de 9600 baudios invocando la funci´on serial open(). Se
pasa como argumento el nombre del dispositivo serie obtenido de la l´ınea de
comandos. Se indica si ha ocurrido un error al abrirlo (por ejemplo si se especifica
un dispositivo serie incorrecto):
serial_fd=serial_open(argv[1],B9600);
if (serial_fd==-1) {
printf ("Error opening the serial device: %sn",argv[1]);
perror("OPEN");
exit(0);
}
Luego se env´ıa la cadena definida en la constante CMD y se espera recibir
la misma
serial_send(serial_fd, CMD, CMD_LEN);
printf ("String sent------> %sn",CMD);
n=serial_read(serial_fd,data,CMD_LEN,TIMEOUT);
La variable n contiene el n´umero de bytes recibidos. Si n es 0 es porque
habr´a ocurrido un timeout. En caso contrario se imprimen en pantalla la cadena
recibida.
Por ´ultimo se cierra el puerto serie:
serial_close(serial_fd);
15
3.3 Codificaci´on de la informaci´on
En esta secci´on se describe brevemente la forma de codificar cada caracter a
ser enviado por el puerto serie, es decir los datos que van a ser desplegados luego
en la matriz de LEDs, b´asicamente cada caracter introducido por el usuario es
transformado en una matriz de 7 filas * 8 columnas, a esto se le llamamos un
bloque de dibujo, en el cual cada fila corresponde a un char(8 bits), si el
valor introducido equivalente es visto desde el punto de vista de la numeraci´on
binaria los “1” corresponder´an a los LEDs que ser´an encendidos, y los “0” a
los que estar´an apagados, la matriz completa es enviada en forma serial de la
primera a la septima fila en forma secuencial ordenada, un ejemplo de ello para
la letra a ser´ıa:
0 0 1 1 1 1 0 0
0 1 1 1 1 1 1 0
0 1 1 0 0 1 1 0
0 1 1 1 1 1 1 0
0 1 1 1 1 1 1 0
0 1 1 0 0 1 1 0
0 1 1 0 0 1 1 0
Cuadro 3.2: Matriz de un bloque de dibujo con valores binarios
Ahora si todos los “1” son pintados para ver el efecto que ser´ıa lo mismo en
la matriz de LEDs, dando la ilusi´on de una palabra, se pueden hacer infinitas
configuraciones de cuadro de dibujos, s´olo basta un poco de imaginaci´on.
0 0 1 1 1 1 0 0
0 1 1 1 1 1 1 0
0 1 1 0 0 1 1 0
0 1 1 1 1 1 1 0
0 1 1 1 1 1 1 0
0 1 1 0 0 1 1 0
0 1 1 0 0 1 1 0
As´ı, para enviar una cadena solo basta tener una funci´on que transforme para
cada caracter una codificaci´on y ponerlo en el puerto serial para su transferencia
al MCU, de esta manera se tiene una gran efectividad en el uso de la capacidad
de memoria del microcontrolador, porque el algoritmo aqu´ı s´olo se dedica a colo-
car en memoria no vol´atil el dato recibido para luego dedicarse exclusivamente
a desplegar una secuencia de bits puros encendiendo o apagando los LEDs en
sus correspondientes lugares(secuencia de 1 y 0), el cual fue codificado y tiene
un significado(palabras, emoticones, caracteres especiales, numeraci´on, etc.), el
cual en su conjunto da significado a la secuencia.
16 CAP´ITULO 3. MANEJO DEL PUERTO SERIE
4 Manejo de la memoria EEPROM
4.1 Introducci´on
En el microcontrolador utilizado se encuentra un recurso interno bastante
´util a la hora de buscar un sistema aut´onomo barato y sencillo. La memoria
EEPROM, con lo cual se ahorra la expansi´on externa de memoria. Esto que
suena tan bien tiene el inconveniente de la limitada capacidad de la EEPROM.
Oscila entre 16kbytes y 128kbytes seg´un el modelo, para nuestro caso tenemos
a nuestra disposici´on 32 Kbyte Flash Module(S12FTS32KV1).
La EEPROM es una memoria que mantiene los datos a´un desconectando la
alimentaci´on del sistema (memoria no vol´atil). Su ciclo de lectura es equivalente
al de la ROM interna pero en escritura es m´as lenta. Es como una EPROM con
la salvedad de que se borra el´ectricamente; de esta forma se facilita su uso.
La memoria Flash contiene una capacidad de 32 Kbytes organizado en 512
filas de 64 bytes con un tama˜no de sector de borrado de ocho filas (512 bytes).
La matriz del Flash puede ser le´ıdo, ya sea como bytes, es decir alineados,
o palabras mal alineadas. El tiempo de acceso para la lectura es, un ciclo de
bus para un byte y palabra alineados, y dos ciclos de bus para las palabras mal
alineadas.
4.2 Mapa de memoria
El mapa de memoria de la memoria se puede ver en la figura 4.1. La arqui-
tectura HCS12 est´a organizada en lugares de la matriz del Flash en direcciones
entre 0x4000 y 0xFFFF, que corresponde a tres p´aginas de 16 Kbyte. El registro
FPROT se puede configurar para proteger globalmente el conjunto completo de
Flash. Tiene tres ´areas separadas, una a partir de la direcci´on de arranque(called
lower); una en la direcci´on final (called higher), y el resto de las direcciones
pueden ser activados para la protecci´on. En la figura exibe las direcciones cu-
biertas por estas regiones de protecci´on. La direcci´on superior est´a destinada
17
18 CAP´ITULO 4. MANEJO DE LA MEMORIA EEPROM
principalmente para mantener el c´odigo del gestor de arranque. La direcci´on de
zona baja se puede utilizar para la emulaci´on de EEPROM en un MCU sin un
m´odulo de memoria EEPROM, ya que se puede dejar sin protecci´on, mientras
que el resto de direcciones est´an protegidos. Ajustes por omisi´on de protecci´on,
as´ı como informaci´on de seguridad que permite que el MCU restringa el acceso
al m´odulo de Flash se describe en la Tabla 4.1.
Chapter 18 32 Kbyte Flash Module (S12FTS32KV1)
506 MC9S12C-Family / MC9S12GC-Family Freescale Semiconductor
Rev 01.24
Figure 18-2. Flash Memory Map
Flash Registers
MODULE BASE + 0x0000
0xFF00–0xFF0F (Flash Configuration Field)
MODULE BASE + 0x000F
0x8000
Flash Protected Low Sectors
512 bytes, 1, 2, 4 Kbytes
FLASH_START = 0x4000
0x4800
0x4200
0x5000
16K PAGED
MEMORY
0x3E
003E 0x3F
Note: 0x3E–0x3F correspond to the PPAGE register content
FLASH_END = 0xFFFF
0xF800
0xF000
0xC000
0xE000 Flash Protected High Sectors
2, 4, 8, 16 Kbytes0x3F
0x4400
Flash Array
16 bytes
Figura 4.1: Mapa de memoria de la Flash
19
Flash Address Size (bytes) Description
0xFF00–0xFF07 8 Backdoor Key to unlock security
0xFF08–0xFF0C 5 Reserved
0xFF0D 1 Flash Protection byte
0xFF0E 1 Reserved
0xFF0F 1 Flash Security/Options byte
Cuadro 4.1: Configuraci´on del espacio de la flash
4.3 Programaci´on de la EEPROM
La programaci´on de la EEPROM se realiza por medio del registro PPROG.
Antes de ver las rutinas de control hay que estudiar el funcionamiento de la
EEPROM, aunque s´olo de manera superficial, lo m´ınimo para que se entiendan
luego las rutinas de control.
En una EEPROM el estado de un byte borrado o en su caso “no progra-
mado” tiene un valor de $FF, es decir sus bits a nivel alto. La programaci´on
permite pasar a “0” ( nivel bajo) los bits que est´an a “1” (nivel alto), pero no
al rev´es, si se quiere poner un bit a uno (estando previamente a cero) hay que
borrar todo el byte primero. Si por el contrario se quiere pasar de “1” a “0” no
hace falta borrar todo el byte primero. En resumen, siempre que hay que grabar
un “1” en una celda EEPROM que previamente estaba a “0” hay que borrarla
primero.
La programaci´on requiere una sobrecarga de tensi´on, aunque no hay que
preocuparse de esto puesto que la proporciona el microcontrolador de forma
transparente al usuario. Lo que si que hay que tener en cuenta es que la veloci-
dad de programaci´on es m´as lenta que la velocidad de lectura, por lo tanto entre
programaci´on y programaci´on hay que introducir unos retardos. Estos retardos
son variables y dependen de la velocidad de reloj E.
Cuanto menor sea el valor de E ( frecuencia de reloj ) la efectividad de la
sobrecarga disminuye 1
. Por esa raz´on el micro incorpora un peque˜no oscilador
RC interno que puede generar los tiempos de programaci´on necesarios indepen-
dientemente del reloj externo (E).
Motorola recomienda que cuando se trabaje con E < 1MHz activar el os-
cilador RC para programar la EEPROM. Para activar ese oscilador hay que
actuar sobre el bit CSEL del registro OPTION2
. En la siguiente tabla se pre-
1La eficiencia de la sobrecarga disminuye con el incremento de tiempo necesario para borrar
y grabar la posici´on de eeprom.
2Cuando se activa el bit CSEL hay que esperar 10ms hasta que se estabilice el circuito.
20 CAP´ITULO 4. MANEJO DE LA MEMORIA EEPROM
senta un esquema sobre los tiempos de programaci´on.
E = 2MHz Tiempo de escritura / borrado de 10ms
1MHz < E < 2MHz Tiempo de escritura / borrado entre (10ms − 20ms)
E < 1MHz Activar oscilador interno y mantener tiempo de 20ms
Cuadro 4.2: Tiempos de programaci´on de la memoria EEPROM
4.3.1. Lectura
Para leer la EEPROM el bit EELAT del registro PPROG debe estar a
cero. Cuando este bit est´a a cero el resto de bits del registro dejan de tener sig-
nificado o efecto. La lectura de la EEPROM se realiza como la de una memoria
ROM normal.
Al realizar un RESET sobre el microcontrolador el estado de este bit es cero,
la EEPROM queda configurada para lectura.
4.4 Implementaci´on
Para la implementaci´on se llevaron a cabo varias pruebas la mayor´ıa sin exi-
to alguno, en ´este proceso se ha encontrado una application note hecho por
freescale para el uso en un hcs12, llevando a cabo algunas modificaciones, se
pudo realizar este m´odulo, el manual de ayuda se puede encontrar el siguiente
LINK, donde explica detalladamente los registros a ser configurados y funciones
que lo realizan; con lo le´ıdo anteriormente se puede entender c´omo se hace el
proceso de programaci´on de la EEPROM.
Una vez que haya pasado ese tiempo podemos realizar operaciones sobre la EEPROM.
Bibliograf´ıa
[1] Ucontrol, Electr´onica en General Pics en Particu-
lar,www.ucontrol.com.arrevista0003ucontrol revista 0003.pdf
Electr´onica en General Pics en Particular Ed. Mayo 2008
Consultado el 7 de setiembre de 2011
[2] Programaci´on de Microcontroladores
http://www.neoteo.com/tutorial-programacion-de-microcontroladores-3260
Consultado el 10 de setiembre de 2011
[3] Tutorial:Puerto serie en Linux
http://www.iearobotics.com/wiki/index.php?title=Tutorial:Puerto serie en Linux
Consultado el 20 de setiembre de 2011
[4] Manual de Referencia
HCS12 Microcontrollers
MC9S12C Family MC9S12GC Family
21

More Related Content

What's hot

⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN C RESUELTA 1er PARCIAL (2019 2do ...
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN C RESUELTA 1er PARCIAL (2019 2do ...⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN C RESUELTA 1er PARCIAL (2019 2do ...
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN C RESUELTA 1er PARCIAL (2019 2do ...Victor Asanza
 
R1 e _copy_
R1 e _copy_R1 e _copy_
R1 e _copy_Natt-N
 
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN A RESUELTA 1er PARCIAL (2019 2do ...
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN A RESUELTA 1er PARCIAL (2019 2do ...⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN A RESUELTA 1er PARCIAL (2019 2do ...
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN A RESUELTA 1er PARCIAL (2019 2do ...Victor Asanza
 
⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, CAPÍTULO 2
⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, CAPÍTULO 2⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, CAPÍTULO 2
⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, CAPÍTULO 2Victor Asanza
 
Arquitectura de computadores[1]
Arquitectura de computadores[1]Arquitectura de computadores[1]
Arquitectura de computadores[1]jfcorreaquiroz
 
Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550 Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550 Alejandra Ruiz
 
⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, END DEVICE + Free RTOS (2020 PAO 1)
⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, END DEVICE + Free RTOS (2020 PAO 1)⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, END DEVICE + Free RTOS (2020 PAO 1)
⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, END DEVICE + Free RTOS (2020 PAO 1)Victor Asanza
 
Datasheet
DatasheetDatasheet
Datasheetaxni
 
Tecnicas de programacion.8951
Tecnicas de programacion.8951Tecnicas de programacion.8951
Tecnicas de programacion.8951Ruderocker Billy
 
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, EXAMEN RESUELTO 3ra EVALUACIÓN (2019 1er ...
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, EXAMEN RESUELTO 3ra EVALUACIÓN (2019 1er ...⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, EXAMEN RESUELTO 3ra EVALUACIÓN (2019 1er ...
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, EXAMEN RESUELTO 3ra EVALUACIÓN (2019 1er ...Victor Asanza
 
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN B RESUELTA 1er PARCIAL (2019 2do ...
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN B RESUELTA 1er PARCIAL (2019 2do ...⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN B RESUELTA 1er PARCIAL (2019 2do ...
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN B RESUELTA 1er PARCIAL (2019 2do ...Victor Asanza
 
Microprocesadores y microcontroladores_itn
Microprocesadores y microcontroladores_itnMicroprocesadores y microcontroladores_itn
Microprocesadores y microcontroladores_itnddarioooo
 
⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, EJERCICIOS PROPUESTOS #1, 1er PARCIAL (2020 1er Tér...
⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, EJERCICIOS PROPUESTOS #1, 1er PARCIAL (2020 1er Tér...⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, EJERCICIOS PROPUESTOS #1, 1er PARCIAL (2020 1er Tér...
⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, EJERCICIOS PROPUESTOS #1, 1er PARCIAL (2020 1er Tér...Victor Asanza
 
Introducción al microcontrolador MSP430
Introducción al microcontrolador MSP430Introducción al microcontrolador MSP430
Introducción al microcontrolador MSP430Julio Jornet Monteverde
 
Arquitectura del computador
Arquitectura del computadorArquitectura del computador
Arquitectura del computadorcesarjmm1
 

What's hot (20)

⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN C RESUELTA 1er PARCIAL (2019 2do ...
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN C RESUELTA 1er PARCIAL (2019 2do ...⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN C RESUELTA 1er PARCIAL (2019 2do ...
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN C RESUELTA 1er PARCIAL (2019 2do ...
 
R1 e _copy_
R1 e _copy_R1 e _copy_
R1 e _copy_
 
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN A RESUELTA 1er PARCIAL (2019 2do ...
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN A RESUELTA 1er PARCIAL (2019 2do ...⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN A RESUELTA 1er PARCIAL (2019 2do ...
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN A RESUELTA 1er PARCIAL (2019 2do ...
 
⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, CAPÍTULO 2
⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, CAPÍTULO 2⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, CAPÍTULO 2
⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, CAPÍTULO 2
 
Timers 2
Timers 2Timers 2
Timers 2
 
Arquitectura de computadores[1]
Arquitectura de computadores[1]Arquitectura de computadores[1]
Arquitectura de computadores[1]
 
Mm card 7
Mm card 7Mm card 7
Mm card 7
 
Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550 Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550
 
⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, END DEVICE + Free RTOS (2020 PAO 1)
⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, END DEVICE + Free RTOS (2020 PAO 1)⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, END DEVICE + Free RTOS (2020 PAO 1)
⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, END DEVICE + Free RTOS (2020 PAO 1)
 
Proyecto1
Proyecto1Proyecto1
Proyecto1
 
Datasheet
DatasheetDatasheet
Datasheet
 
Tecnicas de programacion.8951
Tecnicas de programacion.8951Tecnicas de programacion.8951
Tecnicas de programacion.8951
 
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, EXAMEN RESUELTO 3ra EVALUACIÓN (2019 1er ...
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, EXAMEN RESUELTO 3ra EVALUACIÓN (2019 1er ...⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, EXAMEN RESUELTO 3ra EVALUACIÓN (2019 1er ...
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, EXAMEN RESUELTO 3ra EVALUACIÓN (2019 1er ...
 
Pic 16 F84 A
Pic 16 F84 APic 16 F84 A
Pic 16 F84 A
 
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN B RESUELTA 1er PARCIAL (2019 2do ...
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN B RESUELTA 1er PARCIAL (2019 2do ...⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN B RESUELTA 1er PARCIAL (2019 2do ...
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, LECCIÓN B RESUELTA 1er PARCIAL (2019 2do ...
 
Microprocesadores y microcontroladores_itn
Microprocesadores y microcontroladores_itnMicroprocesadores y microcontroladores_itn
Microprocesadores y microcontroladores_itn
 
⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, EJERCICIOS PROPUESTOS #1, 1er PARCIAL (2020 1er Tér...
⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, EJERCICIOS PROPUESTOS #1, 1er PARCIAL (2020 1er Tér...⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, EJERCICIOS PROPUESTOS #1, 1er PARCIAL (2020 1er Tér...
⭐⭐⭐⭐⭐ SISTEMAS EMBEBIDOS, EJERCICIOS PROPUESTOS #1, 1er PARCIAL (2020 1er Tér...
 
Introducción al microcontrolador MSP430
Introducción al microcontrolador MSP430Introducción al microcontrolador MSP430
Introducción al microcontrolador MSP430
 
Arquitectura de computadores
Arquitectura de computadoresArquitectura de computadores
Arquitectura de computadores
 
Arquitectura del computador
Arquitectura del computadorArquitectura del computador
Arquitectura del computador
 

Similar to Matriz de LEDs + Interfaz Grafica con GTK en Linux

Curso de microcontrolador MCS51
Curso de microcontrolador MCS51Curso de microcontrolador MCS51
Curso de microcontrolador MCS51Rubén Loredo
 
Trabajo de informatica
Trabajo de informaticaTrabajo de informatica
Trabajo de informaticatefadianis
 
Trabajo de informatica
Trabajo de informaticaTrabajo de informatica
Trabajo de informaticatefadianis
 
Informe practica ecuaciones # 6
Informe practica ecuaciones # 6Informe practica ecuaciones # 6
Informe practica ecuaciones # 6Freddy Cuasapaz
 
Manual Ensamblaje PCS-ACTIVIDAD 2_Microprocesador
 Manual Ensamblaje PCS-ACTIVIDAD 2_Microprocesador Manual Ensamblaje PCS-ACTIVIDAD 2_Microprocesador
Manual Ensamblaje PCS-ACTIVIDAD 2_MicroprocesadorJohn Nelson Rojas
 
Trabajo microprocesador
Trabajo microprocesadorTrabajo microprocesador
Trabajo microprocesadoranyely-brayan
 
Trabajo microprocesador
Trabajo microprocesadorTrabajo microprocesador
Trabajo microprocesadoranyely-brayan
 
Trabajo microprocesador
Trabajo microprocesadorTrabajo microprocesador
Trabajo microprocesadoranyely-brayan
 
Trabajo microprocesador
Trabajo microprocesadorTrabajo microprocesador
Trabajo microprocesadoranyely-brayan
 
Trabajo microprocesador
Trabajo microprocesadorTrabajo microprocesador
Trabajo microprocesadoranyely-brayan
 
Trabajo microprocesador
Trabajo microprocesadorTrabajo microprocesador
Trabajo microprocesadoranyely-brayan
 
El trabajo del microprocesador
El trabajo del microprocesadorEl trabajo del microprocesador
El trabajo del microprocesadoranyely-brayan
 
04 procesadores y microcontroladores
04 procesadores y microcontroladores04 procesadores y microcontroladores
04 procesadores y microcontroladoresMario Ramirez
 

Similar to Matriz de LEDs + Interfaz Grafica con GTK en Linux (20)

El microcontrolador PIC16F877
El microcontrolador PIC16F877El microcontrolador PIC16F877
El microcontrolador PIC16F877
 
Pic16 f877
Pic16 f877Pic16 f877
Pic16 f877
 
Curso de microcontrolador MCS51
Curso de microcontrolador MCS51Curso de microcontrolador MCS51
Curso de microcontrolador MCS51
 
Curso-de-PLC.pdf
Curso-de-PLC.pdfCurso-de-PLC.pdf
Curso-de-PLC.pdf
 
Libro basico pic
Libro basico picLibro basico pic
Libro basico pic
 
Trabajo de informatca
Trabajo de informatcaTrabajo de informatca
Trabajo de informatca
 
Trabajo de informatica
Trabajo de informaticaTrabajo de informatica
Trabajo de informatica
 
Trabajo de informatica
Trabajo de informaticaTrabajo de informatica
Trabajo de informatica
 
Informe practica ecuaciones # 6
Informe practica ecuaciones # 6Informe practica ecuaciones # 6
Informe practica ecuaciones # 6
 
Manual Ensamblaje PCS-ACTIVIDAD 2_Microprocesador
 Manual Ensamblaje PCS-ACTIVIDAD 2_Microprocesador Manual Ensamblaje PCS-ACTIVIDAD 2_Microprocesador
Manual Ensamblaje PCS-ACTIVIDAD 2_Microprocesador
 
Trabajo de informatica
Trabajo de informaticaTrabajo de informatica
Trabajo de informatica
 
Trabajo microprocesador
Trabajo microprocesadorTrabajo microprocesador
Trabajo microprocesador
 
Trabajo microprocesador
Trabajo microprocesadorTrabajo microprocesador
Trabajo microprocesador
 
Trabajo microprocesador
Trabajo microprocesadorTrabajo microprocesador
Trabajo microprocesador
 
Trabajo microprocesador
Trabajo microprocesadorTrabajo microprocesador
Trabajo microprocesador
 
Trabajo microprocesador
Trabajo microprocesadorTrabajo microprocesador
Trabajo microprocesador
 
Trabajo microprocesador
Trabajo microprocesadorTrabajo microprocesador
Trabajo microprocesador
 
El trabajo del microprocesador
El trabajo del microprocesadorEl trabajo del microprocesador
El trabajo del microprocesador
 
04 procesadores y microcontroladores
04 procesadores y microcontroladores04 procesadores y microcontroladores
04 procesadores y microcontroladores
 
Micro1.ppt
Micro1.pptMicro1.ppt
Micro1.ppt
 

More from SNPP

RR00X_RESUMEN.pdf
RR00X_RESUMEN.pdfRR00X_RESUMEN.pdf
RR00X_RESUMEN.pdfSNPP
 
RR_TAYI.pdf
RR_TAYI.pdfRR_TAYI.pdf
RR_TAYI.pdfSNPP
 
1. panel de le ds
1. panel de le ds1. panel de le ds
1. panel de le dsSNPP
 
7. incubadora de huevos
7. incubadora de huevos7. incubadora de huevos
7. incubadora de huevosSNPP
 
6. visualizacion remota de consumo de agua en tiempo real
6. visualizacion remota de consumo de agua en tiempo real6. visualizacion remota de consumo de agua en tiempo real
6. visualizacion remota de consumo de agua en tiempo realSNPP
 
5. alimentador de animales domesticos smart feeder
5. alimentador de animales domesticos smart feeder5. alimentador de animales domesticos smart feeder
5. alimentador de animales domesticos smart feederSNPP
 
3. radar medidor de velocidad
3. radar medidor de velocidad3. radar medidor de velocidad
3. radar medidor de velocidadSNPP
 
2. soft starter monofasico
2. soft starter monofasico2. soft starter monofasico
2. soft starter monofasicoSNPP
 
Operadores y expresiones
Operadores y expresionesOperadores y expresiones
Operadores y expresionesSNPP
 
6.2 cadenas de caracteres
6.2 cadenas de caracteres6.2 cadenas de caracteres
6.2 cadenas de caracteresSNPP
 
6.1 vectores
6.1 vectores6.1 vectores
6.1 vectoresSNPP
 
5.5 instruccion for
5.5 instruccion for5.5 instruccion for
5.5 instruccion forSNPP
 
5.4 instruccion do-while
5.4 instruccion do-while5.4 instruccion do-while
5.4 instruccion do-whileSNPP
 
5.3 instruccion while
5.3 instruccion while5.3 instruccion while
5.3 instruccion whileSNPP
 
5.2 instruccion switch
5.2  instruccion switch5.2  instruccion switch
5.2 instruccion switchSNPP
 
5.1 instruccion if-else
5.1 instruccion if-else5.1 instruccion if-else
5.1 instruccion if-elseSNPP
 
4. entrada y salida de datos
4. entrada y salida de datos4. entrada y salida de datos
4. entrada y salida de datosSNPP
 
3.6 funciones de biblioteca
3.6 funciones de biblioteca3.6 funciones de biblioteca
3.6 funciones de bibliotecaSNPP
 
3.5 operador condicional
3.5 operador condicional3.5 operador condicional
3.5 operador condicionalSNPP
 
2.10 entrada y salida
2.10 entrada y salida2.10 entrada y salida
2.10 entrada y salidaSNPP
 

More from SNPP (20)

RR00X_RESUMEN.pdf
RR00X_RESUMEN.pdfRR00X_RESUMEN.pdf
RR00X_RESUMEN.pdf
 
RR_TAYI.pdf
RR_TAYI.pdfRR_TAYI.pdf
RR_TAYI.pdf
 
1. panel de le ds
1. panel de le ds1. panel de le ds
1. panel de le ds
 
7. incubadora de huevos
7. incubadora de huevos7. incubadora de huevos
7. incubadora de huevos
 
6. visualizacion remota de consumo de agua en tiempo real
6. visualizacion remota de consumo de agua en tiempo real6. visualizacion remota de consumo de agua en tiempo real
6. visualizacion remota de consumo de agua en tiempo real
 
5. alimentador de animales domesticos smart feeder
5. alimentador de animales domesticos smart feeder5. alimentador de animales domesticos smart feeder
5. alimentador de animales domesticos smart feeder
 
3. radar medidor de velocidad
3. radar medidor de velocidad3. radar medidor de velocidad
3. radar medidor de velocidad
 
2. soft starter monofasico
2. soft starter monofasico2. soft starter monofasico
2. soft starter monofasico
 
Operadores y expresiones
Operadores y expresionesOperadores y expresiones
Operadores y expresiones
 
6.2 cadenas de caracteres
6.2 cadenas de caracteres6.2 cadenas de caracteres
6.2 cadenas de caracteres
 
6.1 vectores
6.1 vectores6.1 vectores
6.1 vectores
 
5.5 instruccion for
5.5 instruccion for5.5 instruccion for
5.5 instruccion for
 
5.4 instruccion do-while
5.4 instruccion do-while5.4 instruccion do-while
5.4 instruccion do-while
 
5.3 instruccion while
5.3 instruccion while5.3 instruccion while
5.3 instruccion while
 
5.2 instruccion switch
5.2  instruccion switch5.2  instruccion switch
5.2 instruccion switch
 
5.1 instruccion if-else
5.1 instruccion if-else5.1 instruccion if-else
5.1 instruccion if-else
 
4. entrada y salida de datos
4. entrada y salida de datos4. entrada y salida de datos
4. entrada y salida de datos
 
3.6 funciones de biblioteca
3.6 funciones de biblioteca3.6 funciones de biblioteca
3.6 funciones de biblioteca
 
3.5 operador condicional
3.5 operador condicional3.5 operador condicional
3.5 operador condicional
 
2.10 entrada y salida
2.10 entrada y salida2.10 entrada y salida
2.10 entrada y salida
 

Recently uploaded

Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxEduardoSnchezHernnde5
 
Residente de obra y sus funciones que realiza .pdf
Residente de obra y sus funciones que realiza  .pdfResidente de obra y sus funciones que realiza  .pdf
Residente de obra y sus funciones que realiza .pdfevin1703e
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)ssuser563c56
 
Reporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacaReporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacajeremiasnifla
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfedsonzav8
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdfvictoralejandroayala2
 
presentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctricopresentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctricoalexcala5
 
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023RonaldoPaucarMontes
 
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptaCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptCRISTOFERSERGIOCANAL
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfMikkaelNicolae
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfKEVINYOICIAQUINOSORI
 
Calavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfCalavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfyoseka196
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónXimenaFallaLecca1
 
Seleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSeleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSaulSantiago25
 
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASTEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASfranzEmersonMAMANIOC
 
Magnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMagnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMarceloQuisbert6
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALKATHIAMILAGRITOSSANC
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxJuanPablo452634
 
Condensadores de la rama de electricidad y magnetismo
Condensadores de la rama de electricidad y magnetismoCondensadores de la rama de electricidad y magnetismo
Condensadores de la rama de electricidad y magnetismosaultorressep
 
Clase 2 Revoluciones Industriales y .pptx
Clase 2 Revoluciones Industriales y .pptxClase 2 Revoluciones Industriales y .pptx
Clase 2 Revoluciones Industriales y .pptxChristopherOlave2
 

Recently uploaded (20)

Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptx
 
Residente de obra y sus funciones que realiza .pdf
Residente de obra y sus funciones que realiza  .pdfResidente de obra y sus funciones que realiza  .pdf
Residente de obra y sus funciones que realiza .pdf
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
 
Reporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacaReporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpaca
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdf
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdf
 
presentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctricopresentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctrico
 
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
 
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptaCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdf
 
Calavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfCalavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdf
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcción
 
Seleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSeleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusibles
 
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASTEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
 
Magnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMagnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principios
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
 
Condensadores de la rama de electricidad y magnetismo
Condensadores de la rama de electricidad y magnetismoCondensadores de la rama de electricidad y magnetismo
Condensadores de la rama de electricidad y magnetismo
 
Clase 2 Revoluciones Industriales y .pptx
Clase 2 Revoluciones Industriales y .pptxClase 2 Revoluciones Industriales y .pptx
Clase 2 Revoluciones Industriales y .pptx
 

Matriz de LEDs + Interfaz Grafica con GTK en Linux

  • 1. Universidad Cat´olica “Nuestra Se˜nora de la Asunci´on” Sede Regional Asunci´on Facultad de Ciencias y Tecnolog´ıa Departamento de Ingenier´ıa Electr´onica e Inform´atica Carrera de Ingenier´ıa Electr´onica Microprocesadores I Ing. Vicente Gonz´alez PhD. G´omez de la Fuente, Alberto <delafuente986@gmail.com> Ram´ırez, Pedro <pedroramirez22@gmail.com> Matriz de leds 1 · 0 c 2 de diciembre de 2011
  • 2. ii
  • 3. ´Indice general 1. Especificaciones del Proyecto 1 1.1. Descripci´on General . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.1. Diagrama de Bloques del Sistema . . . . . . . . . . . . . . 2 1.1.2. Procedimiento de Utilizaci´on . . . . . . . . . . . . . . . . 2 1.1.3. Software de Aplicaci´on . . . . . . . . . . . . . . . . . . . . 3 2. Dise˜no del tablero de leds 5 2.1. Dise˜no del Hardware . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2. Dise˜no L´ogico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3. Funcionamiento de la matriz de LEDs . . . . . . . . . . . . . . 7 2.4. Software controlador . . . . . . . . . . . . . . . . . . . . . . . . 8 2.4.1. Algoritmo implementado . . . . . . . . . . . . . . . . . . 9 3. Manejo del Puerto Serie 11 3.1. Introducci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2. Puerto serie y Linux . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2.1. Descripci´on . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2.2. Explicaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.3. Codificaci´on de la informaci´on . . . . . . . . . . . . . . . . . . . 15 4. Manejo de la memoria EEPROM 17 4.1. Introducci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.2. Mapa de memoria . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.3. Programaci´on de la EEPROM . . . . . . . . . . . . . . . . . . . 19 4.3.1. Lectura . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.4. Implementaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 iii
  • 5. ´Indice de figuras 2.1. Diagrama l´ogico del registro de desplazamiento . . . . . . . . . . 6 2.2. Esquem´atico del matriz de leds dise˜nado . . . . . . . . . . . . . . 7 2.3. Conexiones de puertos del Hcs12 con la Matriz de Leds. . . . . . 10 4.1. Mapa de memoria de la Flash . . . . . . . . . . . . . . . . . . . . 18 v
  • 6. vi ´INDICE DE FIGURAS
  • 7. ´Indice de cuadros 3.1. Dispositivos del puerto serie en Linux . . . . . . . . . . . . . . . 11 3.2. Matriz de un bloque de dibujo con valores binarios . . . . . . . . 15 4.1. Configuraci´on del espacio de la flash . . . . . . . . . . . . . . . . 19 4.2. Tiempos de programaci´on de la memoria EEPROM . . . . . . . 20 vii
  • 9. Introducci´on El siguiente trabajo se trata sobre el desarrollo de una matriz de leds, m´as conocido como Tablero Electr´onico o Publik, existen varios m´odulos del cual consta, primeramente el dise˜no del hardware, el cual b´asicamente consiste en una matriz de p´ıxeles similar a los de la pantalla de un ordenador. Luego de esto, se dise˜na el software que podr´a manejar la matriz desde el ordenador, se ha de- sarrollado en GTK+, adem´as se utiliza el puerto RS232 para la comunicaci´on con el dispositivo microcontrolador utilizado el cual es el HCS12 de Motorola. Cabe destacar que el desarrollo del entorno gr´afico y por ende el manejo del puerto serial, se han hecho en Linux por la simplicidad que presenta, ya que se maneja al puerto como un simple archivo, adem´as GTK+ presenta varias funciones que ayudan a la portabilidad del software desarrollado. ix
  • 10. x ´INDICE DE CUADROS
  • 11. 1 Especificaciones del Proyecto 1.1 Descripci´on General El cartel luminoso cumple con las siguientes especificaciones: 1. El cartel muestra hasta 3 letras en alg´un momento de su desplazamiento. 2. Se conecta a una computadora para ingresar los mensajes. Para lo cual posee una interfase de usuario. 3. Los mensajes quedan guardados en memoria no vol´atil. 4. El Panel posee efectos tales como: Correr de izquierda a derecha y vicev- ersa. Correr de arriba abajo y viceversa, efecto de parpadeo de los LEDs, efecto negrita. 5. La velocidad con que se muestra los mensajes es apto para poder leer los mensajes. 6. El hardware posee un bot´on que permite cambiar de mensaje. Para ello se deber´a guardar m´ultiples mensajes. 1
  • 12. 2 CAP´ITULO 1. ESPECIFICACIONES DEL PROYECTO 1.1.1. Diagrama de Bloques del Sistema 1.1.2. Procedimiento de Utilizaci´on En esta secci´on se enlistan los pasos a seguir para la utilizaci´on del Cartel Luminoso T.E.L. 1. Se conecta el Microcontrolador HCS12 a una Fuente de 5V. 2. Se conecta el cable serial a la PC y al Microcontrolador HCS12. 3. Se enciende la PC. 4. Se ingresa al Software LEDs. 5. Se pueden ingresar hasta 10 mensajes. 6. Una ves ingresados los mensajes deseados se puede desconectar el cable serial. 7. Apagar la PC y la Fuente de tensi´on. 8. Volver a encender la fuente de alimentaci´on. 8. Ya que el dispositivo almacena todos los mensajes ingresados, con el bot´on pulsador uno puede ir cambiando los mensajes.
  • 13. 3 1.1.3. Software de Aplicaci´on En esta imagen se puede apreciar la interfase de usuario. El sistema esmuy amigable. Permite ingresar hasta 10 mensajes, elegir sus animaciones. Tambi´en tiene la opci´on de prender con 1 ´o con 0.
  • 14. 4 CAP´ITULO 1. ESPECIFICACIONES DEL PROYECTO
  • 15. 2 Dise˜no del tablero de leds 2.1 Dise˜no del Hardware El hardware que se quiere construir es un cartel luminoso. Para el dise˜no inicial se utilizo una matriz de tal manera que se tendr´a el control sobre 112 leds. El montaje final queda por tanto con 16 columnas y 7 filas. El control de los leds es multiplexado, de forma que cada elemento de la matriz(1 led) se controla por un comando de filas y columnas. 2.2 Dise˜no L´ogico Teniendo en cuenta las restricciones anteriores se comienza el dise˜no l´ogico 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 112 “leds”, pero para ello ser´ıan necesarias 23 se˜nales de control, una por cada columna (16) y uno por cada fila (7). El n´umero es excesivo(m´as a´un si se desease expandir la cantidad de columnas), as´ı que se tendr´a que plantear otro esquema de control. Se plantearon dos soluciones, codificar las columnas o las filas, de forma que en un momento dado s´olo por una columna o por una fila pudiera pasar corriente, permitiendo as´ı el control individual de los “leds” de la fila o columna por la que pasar´a corriente. Otro esquema est´a en el multiplexado, esta t´ecnica permite utilizar unos pocos pines de E/S del microcontrolador para manejar una serie de circuitos integrados que se encarguen de excitar los LEDs. Hay varias maneras, y mu- chos modelos diferentes de circuitos para hacer esto. Pueden usarse un tipo de integrado digital llamado “LATCH”. De esta manera, usando varios latches podr´ıamos encender los LEDs por turnos, r´apidamente para que no se note el parpadeo, y de esa manera formar una palabra en el cartel. Otra forma es uti- lizar un registro de desplazamiento. Y de hecho, es de esta forma c´omo vamos a dise˜nar nuestro cartel. En un registro de desplazamiento tenemos “0” y “1”, lo bueno es que para “meter” datos (“0”s y “1”s) en ´el solo hacen falta tres 5
  • 16. 6 CAP´ITULO 2. DISE ˜NO DEL TABLERO DE LEDS pines del microcontrolador, independientemente de lo largo que sea. Estos pines se encargan de tres tareas: Uno de ellos, al que denominaremos “DATOS” es el encargado de decirle al registro de desplazamiento que lo que introduciremos es un “0” o un “1”. El segundo se encarga de avisar al registro que el dato ya est´a listo para ser ingresado, y lo llamaremos “CLOCK”. Y el ultimo, que no es indispensable, es el “RESET”, que se encarga de “vaciar” la fila escribiendo “0‘”s en todas las salidas del registro. Para desarrollar nuestro ejemplo utilizaremos el circuito integrado 74HC164N, que es un registro de desplazamiento de 8 bits. Para construir un cartel de 16 columnas, necesitar´ıamos utilizar 2 de estos integrados, uno a continuaci´on del otro. En la figura podemos ver la funci´on de cada uno de los pines del 74HC164N y en la figura el dise˜no hacho y de que forma podemos conectar uno a contin- uaci´on del otro para obtener un registro de desplazamiento de cualquier longitud. SN74LS164 LOGIC DIAGRAM Q6 Q7 A B Q0 Q1 Q3Q2 Q5Q4 MR CP D Q CD D Q CD D Q CD D Q CD D Q CD D Q CD D Q CD D Q CD 63 4 5 11 1210 13VCC = PIN 14 GND = PIN 7 = PIN NUMBERS 1 2 8 9 FUNCTIONAL DESCRIPTION The LS164 is an edge-triggered 8-bit shift register with serial data entry and an output from each of the eight stages. Data is entered serially through one of two inputs (A or B); either of these inputs can be used as an active HIGH Enable for data entry through the other input. An unused input must be tied HIGH, or both inputs connected together. Each LOW-to-HIGH transition on the Clock (CP) input shiftsdataoneplacetotherightandentersintoQ0 thelogical AND of the two data inputs (A•B) that existed before the rising clock edge. A LOW level on the Master Reset (MR) input overrides all other inputs and clears the register asynchronously, forcing all Q outputs LOW. MODE SELECT — TRUTH TABLE OPERATING MODE INPUTS OUTPUTS MODE MR A B Q0 Q1–Q7 Reset (Clear) L X X L L – L H I I L q0 – q6 Shift H I h L q0 – q6 H h I L q0 – q6 H h h H q0 – q6 L (l) = LOW Voltage Levels H (h) = HIGH Voltage Levels X = Don’t Care qn = Lower case letters indicate the state of the referenced input or output one qn = set-up time prior to the LOW to HIGH clock transition. Figura 2.1: Diagrama l´ogico del registro de desplazamiento Bien, con el esquema explicado podemos encender los LEDs que queramos de una fila de 16 bits de largo. Si en el registro de desplazamiento introduci- mos “1111. . .111”, los 16 LEDs estar´an encendidos. Si queremos encender uno por medio, escribiremos “10101. . .01”. cuando lleguemos a la parte de la pro- gramaci´on veremos c´omo se ingresan uno a uno los “0” y “1” en el registro. Adem´as se aprovecha un “defecto” del ojo humano, que mantiene la imagen vista durante unos 20 o 30 milisegundos, para “dibujar” una fila a la vez, pero muy r´apidamente, de forma que todo el cartel parezca estar encendido a la vez.
  • 17. 7 5 5 4 4 3 3 2 2 1 1 D D C C B B A A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 VCC VCC VCC VCC VCC VCC VCC 0 VCC SELECTORFILAS ENTRADA SERIAL ALIMENTACION MATRIZ DE LED'S DE 7*16 CLOCK RESET DATA VCC GND D27 LED D27 LED D4 LED D4 LED D107 LED D107 LED D46 LED D46 LED R7 2.2k R7 2.2k Q11 Q2N2222 Q11 Q2N2222 D55 LED D55 LED D92 LED D92 LED D21 LED D21 LED D101 LED D101 LED D40 LED D40 LED D49 LED D49 LED R6 2.2k R6 2.2k D16 LED D16 LED Q18 Q2N2222 Q18 Q2N2222 D77 LED D77 LED R27 220 R27 220 D86 LED D86 LED D34 LED D34 LED R5 2.2k R5 2.2k R19 2.2k R19 2.2k Q7 Q2N2222 Q7 Q2N2222 D62 LED D62 LED D71 LED D71 LED Q22 Q2N2222 Q22 Q2N2222 D5 LED D5 LED J1 CON7 J1 CON7 1 2 3 4 5 6 7 D28 LED D28 LED D108 LED D108 LED D47 LED D47 LED R4 2.2k R4 2.2k R22 2.2k R22 2.2k D56 LED D56 LED D65 LED D65 LED Q14 Q2N2222 Q14 Q2N2222 R16 2.2k R16 2.2k D93 LED D93 LED D22 LED D22 LED D41 LED D41 LED R3 2.2k R3 2.2k D102 LED D102 LED D50 LED D50 LED Q3 Q2N2222 Q3 Q2N2222 D78 LED D78 LED R15 2.2k R15 2.2k D87 LED D87 LED R2 2.2k R2 2.2k D35 LED D35 LED D11 LED D11 LED D63 LED D63 LED D72 LED D72 LED R14 2.2k R14 2.2k Q10 Q2N2222 Q10 Q2N2222 D81 LED D81 LED D6 LED D6 LED R26 220 R26 220 D29 LED D29 LED R1 2.2k R1 2.2k D109 LED D109 LED D48 LED D48 LED D57 LED D57 LED Q19 Q2N2222 Q19 Q2N2222 R13 2.2k R13 2.2k D66 LED D66 LED D1 LED D1 LED Q1 Q2N2222 Q1 Q2N2222 D94 LED D94 LED D23 LED D23 LED D103 LED D103 LED D42 LED D42 LED D51 LED D51 LED U1 74HC164 U1 74HC164 A1 B2 CLK8 QA3 QB4 QC5 QD6 QE10 QF11 QG12 QH13 CLR 9 R12 2.2k R12 2.2k J3 CON2 J3 CON2 1 2 D79 LED D79 LED Q6 Q2N2222 Q6 Q2N2222 Q23 Q2N2222 Q23 Q2N2222 D88 LED D88 LED D17 LED D17 LED J2 CON3 J2 CON3 1 2 3 D97 LED D97 LED D36 LED D36 LED R17 2.2k R17 2.2k D12 LED D12 LED R11 2.2k R11 2.2k D64 LED D64 LED D73 LED D73 LED R30 220 R30 220 Q13 Q2N2222 Q13 Q2N2222 D82 LED D82 LED D7 LED D7 LED R20 2.2k R20 2.2k D30 LED D30 LED D110 LED D110 LED D58 LED D58 LED R10 2.2k R10 2.2k D67 LED D67 LED R23 2.2k R23 2.2k D24 LED D24 LED D95 LED D95 LED D104 LED D104 LED D43 LED D43 LED D52 LED D52 LED R9 2.2k R9 2.2k R25 220 R25 220 D80 LED D80 LED Q9 Q2N2222 Q9 Q2N2222 D89 LED D89 LED D18 LED D18 LED D98 LED D98 LED D37 LED D37 LED R8 2.2k R8 2.2k D13 LED D13 LED Q20 Q2N2222 Q20 Q2N2222 D74 LED D74 LED D83 LED D83 LED D8 LED D8 LED D31 LED D31 LED Q16 Q2N2222 Q16 Q2N2222 D111 LED D111 LED D59 LED D59 LED D68 LED D68 LED R29 220 R29 220 D96 LED D96 LED D25 LED D25 LED D2 LED D2 LED Q5 Q2N2222 Q5 Q2N2222 D105 LED D105 LED D44 LED D44 LED D53 LED D53 LED D90 LED D90 LED D19 LED D19 LED Q12 Q2N2222 Q12 Q2N2222 D99 LED D99 LED D38 LED D38 LED Q2 Q2N2222 Q2 Q2N2222 D14 LED D14 LED D75 LED D75 LED U2 74HC164 U2 74HC164 A1 B2 CLK8 QA3 QB4 QC5 QD6 QE10 QF11 QG12 QH13 CLR 9 D84 LED D84 LED R18 2.2k R18 2.2k D9 LED D9 LED D32 LED D32 LED R24 220 R24 220 D112 LED D112 LED Q17 Q2N2222 Q17 Q2N2222 D60 LED D60 LED R21 2.2k R21 2.2k D69 LED D69 LED D26 LED D26 LED D3 LED D3 LED D106 LED D106 LED D45 LED D45 LED Q8 Q2N2222 Q8 Q2N2222 D54 LED D54 LED R28 220 R28 220 Q21 Q2N2222 Q21 Q2N2222 D91 LED D91 LED D20 LED D20 LED D100 LED D100 LED D39 LED D39 LED Q15 Q2N2222 Q15 Q2N2222 D15 LED D15 LED D76 LED D76 LED D85 LED D85 LED D10 LED D10 LED D33 LED D33 LED Q4 Q2N2222 Q4 Q2N2222 D61 LED D61 LED D70 LED D70 LED Figura 2.2: Esquem´atico del matriz de leds dise˜nado 2.3 Funcionamiento de la matriz de LEDs Como dijimos antes, la pantalla est´a formada por una serie de filas y colum- nas. La intersecci´on entre ambas contiene un LED. Para que este encienda, tiene que recibir simult´aneamente un “1” en la fila, y un “1” en la columna. Cuando se dan estas condiciones, la electr´onica de la placa se encarga del encendido del LED en cuesti´on. La forma de generar un mensaje sobre el display es relativa- mente sencilla, si nos atenemos al siguiente algoritmo: 1. Apagar todas las filas. 2. Escribir los valores correspondientes a la primer fila en el registro de de- splazamiento, teniendo en cuenta que el primer digito binario colocado corresponde al primer LED de la fila, y el ´ultimo en poner al de la ´ultima columna. 3. Encenderla primer fila, esperar un tiempo, y volver a apagarla. 4. Repetir los pasos 2 y 3 para las filas restantes. El tiempo de la demora debe ser tal que permita una visualizaci´on correc- ta, sin molestos parpadeos y con los LEDS brillantes. Ssi utilizamos tiempos
  • 18. 8 CAP´ITULO 2. DISE ˜NO DEL TABLERO DE LEDS mayores para el encendido de cada fila, el brillo de los LEDS ser´a mayor, pero tambi´en aumentar´a el parpadeo. Un punto tenido en cuenta es la intensidad del brillo que puede propor- cionarnos el tipo de LED que utilizamos. En caso de un t´ıpico cartel de 7 filas como el dise˜nado, a pesar de que las veremos encendidas al mismo tiempo, cada LED solo estar´a encendido la s´eptima parte del tiempo, por lo que su brillo ser´a siete veces inferior al normal, y nuestro cartel apenas ser´a visible. 2.4 Software controlador Ahora nos toca abordar la programaci´on del hardware propuesto. El car- tel del LEDs que estamos construyendo puede adoptar diferentes tama˜nos de acuerdo a las especificaciones del trabajo. Debemos pensar en un programa que nos permita mostrar p´ıxeles individ- uales representados sobre la pantalla de nuestro cartel de 16 columnas y 7 filas de altura, recordando que todo lo que expliquemos puede ser adecuado para carteles de otro tama˜no. Lo primero que necesitamos saber es que el “barrido” del cartel debe hacerse por filas. Es decir, mostraremos el contenido de la primera fila, esperamos un tiempo determinado (unos pocos milisegundos), mostramos el de la segunda fila, esperamos nuevamente, y as´ı hasta llegar a la ´ultima fila, tal como se expresa en el algoritmo visto mas arriba. El motivo de no emplear las columnas para realizar el barrido es que como son m´as numerosas, el tiempo total que se necesita para “escribir” por filas es mucho menor que el necesario para escribir por columnas, y en la pr´actica eso significa que el brillo de nuestro cartel ser´a mucho mayor si lo hacemos por filas, ya que cada LED permanecer´a encendido 1/7 del tiempo. Si lo hici´esemos por columnas, cada LED estar´ıa encendido solo 1/16 del tiempo, por lo que su brillo seria unas 2 veces menor. Ahora bien, el primer problema a resolver es ¿C´omo escribo los datos de una fila del cartel? Esto tiene una soluci´on m´as que simple: solo debemos introducir en el registro de desplazamiento los “0” y “1” necesarios para que los LEDs que queremos est´en encendidos en esa fila tengan +V en sus ´anodos. Por supuesto, mientras hacemos esto todos los pines del microcontrolador que controlan las filas deber´an estar apagadas, para que no se perciba una d´ebil luminosidad en todos los LEDs de la fila que estamos escribiendo a medida que pasan los datos a trav´es del registro.
  • 19. 9 El primer valor que se debe “meter” en el registro de desplazamiento es el que corresponder´a a la ´ultima columna. A medida que vamos ingresando los siguientes, se van desplazando hacia el final del cartel. Cuando hayamos intro- ducido el valor 16 (que corresponder´a a la primera columna) el primer valor que metimos habr´a llegado a su posici´on. En ese momento tenemos todo el registro escrito, y ya podemos activar la sal- ida del microcontrolador(pin) que corresponde a esa fila en particular. El tiempo que debe estar encendida la fila se puede determinar emp´ıricamente, pero por lo generan unos 10 milisegundos es suficiente. Si tenemos 7 filas, 10 milisegundos de demora permitir´ıan escribir todo el cartel en unos 70 milisegundos. 2.4.1. Algoritmo implementado La programaci´on fue desarrollada en lenguaje C. Para el dise˜no del algoritmo primeramente fue necesario entender el hardware que utilizamos. El cual hemos descrito anteriormente. Los mensajes son enviados a trav´es del puerto serial. El microprocesador Hcs12 recibe dichos datos y almacena en una matriz. Todas las animaciones tienen los mismos fundamentos, los cuales explicare- mos a continuaci´on. Los menajes constan de N caracteres, los cuales son alma- cenados en una matriz que llamamos bits, el primer mensaje en la primera fila, el segundo mensaje en la segunda fila, y as´ı sucesivamente hasta completar 10 filas. Cada car´acter de los mensajes consta de 7 bytes para ser representados en la pantalla de leds. Estos bytes son almacenados en memoria de manera consec- utiva, lo cual permite al acceso con mayor facilidad. mask.x = 1; mask.x <<= (BLOQUE - 1); for(j3 = 0; j3 < CANT_FILA; j3++){ PORTA = 0; fila[j3].x2 <<= 1; if ((bits[SmsActual][j3 + k + FRAME].x & mask.x)){ fila[j3].x2= fila[j3].x2 + 1; }else{ fila[j3].x2= fila[j3].x2 + 0; } mask2.y = 1; mask2.y <<= (CANT_COL - 1); for(j2 = 0; j2 < CANT_COL; j2++){ if(fila[j3].x2 & mask2.y){
  • 20. 10 CAP´ITULO 2. DISE ˜NO DEL TABLERO DE LEDS PORTB_BIT0 = (bits[SmsActual][1].x - ’0’); }else{ PORTB_BIT0 = ~(bits[SmsActual][1].x - ’0’); } PORTB_BIT1 = 0; PORTB_BIT1 = 1; mask2.y >>= 1; } Para acceder a dichos bytes utilizamos los campos de bits que el lenguaje c nos permite manejar. Utilizamos dos mascaras, una de 8 bits, y la otra de 16 bits. La m´ascara de 8 bits se encarga de recorrer cada byte de cada car´acter, realizando la operaci´on AND, los resultados de dichas operaciones son almace- nadas en el vector fila de N elementos. Este vector fila se encarga de guardar cada cambio que se realiza en el mismo. Existen 7 vectores filas los cuales cor- responden a cada rengl´on de la pantalla de leds. La m´ascara de 16 bits se encarga de desplegar en pantalla el contenido del vector fila para cada momento dado. Primeramente consta de un bit alto en la posici´on m´as significativo y el resto cero, de manera tal a realizar la operaci´on AND y desplazar a la derecha, el resultado se guarda en el registro de cor- rimiento del hardware, as´ı tambi´en como en el vector fila correspondiente, este proceso se realiza 16 veces, luego se env´ıa un bit alto en el puerto que controla el encendido de las filas, y de esta manera encender la fila en cuesti´on. Figura 2.3: Conexiones de puertos del Hcs12 con la Matriz de Leds.
  • 21. 3 Manejo del Puerto Serie 3.1 Introducci´on Este es un breve tutorial sobre c´omo manejar el puerto serie desde Linux sacado de la siguiente p´agina LINK. Esto se utiliza para comunicarse con mi- crocontroladores externos como es el caso de nuestro trabajo. 3.2 Puerto serie y Linux Los nombres que se dan en Linux a los dispositivos serie son: Nombre del dispositivo Descripci´on /dev/ttyS0 Primer puerto serie nativo. (Equivalente a COM1) /dev/ttyS1 Segundo puerto serie nativo. (Equivalente a COM2) /dev/ttySnn n-´esimo puerto serie nativo Cuadro 3.1: Dispositivos del puerto serie en Linux La forma de acceder al puerto serie es la misma que para trabajar con cualquier otro fichero. Se usan las llamadas read() y write() para leer y es- cribir respectivamente. Pero a diferencia de los archivos normales, antes de usar el puerto serie es necesario configurarlo, estableciendo la velocidad de trabajo y su modo de funcionamiento. 3.2.1. Descripci´on Se configura el modo de funcionamiento serie a 8N1(8 bits de datos, 1 bit de stop y sin paridad). La velocidad es la indicada por el usuario en el par´ametro baud, es una constante que puede valer: B9600, B19200, etc. Se puede encontrar m´as informaci´on sobre todos los valores posibles en la p´agina de manual de termios (man termios). 11
  • 22. 12 CAP´ITULO 3. MANEJO DEL PUERTO SERIE Esta funci´on devuelve el descriptor del puerto serie (0 -1 si ha ocurrido un error), que ser´a necesario para realizar las lecturas y escrituras. int serial_open(char *serial_name, speed_t baud) { struct termios newtermios; int fd; fd = open(serial_name,O_RDWR | O_NOCTTY); newtermios.c_cflag= CBAUD | CS8 | CLOCAL | CREAD; newtermios.c_iflag=IGNPAR; newtermios.c_oflag=0; newtermios.c_lflag=0; newtermios.c_cc[VMIN]=1; newtermios.c_cc[VTIME]=0; cfsetospeed(&newtermios,baud); cfsetispeed(&newtermios,baud); if (tcflush(fd,TCIFLUSH)==-1) return -1; if (tcflush(fd,TCOFLUSH)==-1) return -1; if (tcsetattr(fd,TCSANOW,&newtermios)==-1) return -1; return fd; } La funci´on serial send() env´ıa una cadena de bytes por el puerto serie. Lo ´unico que hace es invocar la llamada al sistema write(). Como par´ametros se pasa el descriptor serie del puerto serie (serial fd), devuelto por la funci´on seri- al open(), el array con los datos a enviar (data) y su tama˜no (size). void serial_send(int serial_fd, char *data, int size) { write(serial_fd, data, size); } La funci´on serial read() se usa para leer datos del puerto serie. Se le pasan como par´ametros el descriptor del puerto serie (serial fd), el array donde alma- cenar los datos recibidos (data), el tama˜no m´aximo de bytes a recibir (size, para no desbordar el array) y el tiempo m´aximo para recibir los datos (timeout usec). Si transcurre un tiempo igual a timeout usec y no se han recibido datos, la fun- ci´on retornar´a y devolver´a el control a la que la invoc´o.
  • 23. 13 Para realizar las lecturas no bloqueantes, se usa la llamada al sistema se- lect(). En este caso devuelve 1 si hay datos esperando a ser le´ıdos y 0 si ha ocurrido un timeout. A continuaci´on se invoca a read() para leer estos datos. El proceso se repite para garantizar que es posible recibir datos de tama˜no size. Se devuelve el n´umero de bytes le´ıdos ( 0 si ha ocurrido un timeout). int serial_read(int serial_fd, char *data, int size, int timeout_usec) { fd_set fds; struct timeval timeout; int count=0; int ret; int n; do { FD_ZERO(&fds); FD_SET (serial_fd, &fds); timeout.tv_sec = 0; timeout.tv_usec = timeout_usec; ret=select (FD_SETSIZE,&fds, NULL, NULL,&timeout); if (ret==1) { n=read (serial_fd, &data[count], size-count); count+=n; data[count]=0; } } while (count<size && ret==1); return count; } La ´ultima funci´on es serial close(), que simplemente invoca a close() para cerrar el puerto serie. void serial_close(int fd) { close(fd); }
  • 24. 14 CAP´ITULO 3. MANEJO DEL PUERTO SERIE 3.2.2. Explicaci´on S´olo se explicar´an algunos fragmentos del c´odigo. Primero se abre el puerto serie, a la velocidad de 9600 baudios invocando la funci´on serial open(). Se pasa como argumento el nombre del dispositivo serie obtenido de la l´ınea de comandos. Se indica si ha ocurrido un error al abrirlo (por ejemplo si se especifica un dispositivo serie incorrecto): serial_fd=serial_open(argv[1],B9600); if (serial_fd==-1) { printf ("Error opening the serial device: %sn",argv[1]); perror("OPEN"); exit(0); } Luego se env´ıa la cadena definida en la constante CMD y se espera recibir la misma serial_send(serial_fd, CMD, CMD_LEN); printf ("String sent------> %sn",CMD); n=serial_read(serial_fd,data,CMD_LEN,TIMEOUT); La variable n contiene el n´umero de bytes recibidos. Si n es 0 es porque habr´a ocurrido un timeout. En caso contrario se imprimen en pantalla la cadena recibida. Por ´ultimo se cierra el puerto serie: serial_close(serial_fd);
  • 25. 15 3.3 Codificaci´on de la informaci´on En esta secci´on se describe brevemente la forma de codificar cada caracter a ser enviado por el puerto serie, es decir los datos que van a ser desplegados luego en la matriz de LEDs, b´asicamente cada caracter introducido por el usuario es transformado en una matriz de 7 filas * 8 columnas, a esto se le llamamos un bloque de dibujo, en el cual cada fila corresponde a un char(8 bits), si el valor introducido equivalente es visto desde el punto de vista de la numeraci´on binaria los “1” corresponder´an a los LEDs que ser´an encendidos, y los “0” a los que estar´an apagados, la matriz completa es enviada en forma serial de la primera a la septima fila en forma secuencial ordenada, un ejemplo de ello para la letra a ser´ıa: 0 0 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 Cuadro 3.2: Matriz de un bloque de dibujo con valores binarios Ahora si todos los “1” son pintados para ver el efecto que ser´ıa lo mismo en la matriz de LEDs, dando la ilusi´on de una palabra, se pueden hacer infinitas configuraciones de cuadro de dibujos, s´olo basta un poco de imaginaci´on. 0 0 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 As´ı, para enviar una cadena solo basta tener una funci´on que transforme para cada caracter una codificaci´on y ponerlo en el puerto serial para su transferencia al MCU, de esta manera se tiene una gran efectividad en el uso de la capacidad de memoria del microcontrolador, porque el algoritmo aqu´ı s´olo se dedica a colo- car en memoria no vol´atil el dato recibido para luego dedicarse exclusivamente a desplegar una secuencia de bits puros encendiendo o apagando los LEDs en sus correspondientes lugares(secuencia de 1 y 0), el cual fue codificado y tiene un significado(palabras, emoticones, caracteres especiales, numeraci´on, etc.), el cual en su conjunto da significado a la secuencia.
  • 26. 16 CAP´ITULO 3. MANEJO DEL PUERTO SERIE
  • 27. 4 Manejo de la memoria EEPROM 4.1 Introducci´on En el microcontrolador utilizado se encuentra un recurso interno bastante ´util a la hora de buscar un sistema aut´onomo barato y sencillo. La memoria EEPROM, con lo cual se ahorra la expansi´on externa de memoria. Esto que suena tan bien tiene el inconveniente de la limitada capacidad de la EEPROM. Oscila entre 16kbytes y 128kbytes seg´un el modelo, para nuestro caso tenemos a nuestra disposici´on 32 Kbyte Flash Module(S12FTS32KV1). La EEPROM es una memoria que mantiene los datos a´un desconectando la alimentaci´on del sistema (memoria no vol´atil). Su ciclo de lectura es equivalente al de la ROM interna pero en escritura es m´as lenta. Es como una EPROM con la salvedad de que se borra el´ectricamente; de esta forma se facilita su uso. La memoria Flash contiene una capacidad de 32 Kbytes organizado en 512 filas de 64 bytes con un tama˜no de sector de borrado de ocho filas (512 bytes). La matriz del Flash puede ser le´ıdo, ya sea como bytes, es decir alineados, o palabras mal alineadas. El tiempo de acceso para la lectura es, un ciclo de bus para un byte y palabra alineados, y dos ciclos de bus para las palabras mal alineadas. 4.2 Mapa de memoria El mapa de memoria de la memoria se puede ver en la figura 4.1. La arqui- tectura HCS12 est´a organizada en lugares de la matriz del Flash en direcciones entre 0x4000 y 0xFFFF, que corresponde a tres p´aginas de 16 Kbyte. El registro FPROT se puede configurar para proteger globalmente el conjunto completo de Flash. Tiene tres ´areas separadas, una a partir de la direcci´on de arranque(called lower); una en la direcci´on final (called higher), y el resto de las direcciones pueden ser activados para la protecci´on. En la figura exibe las direcciones cu- biertas por estas regiones de protecci´on. La direcci´on superior est´a destinada 17
  • 28. 18 CAP´ITULO 4. MANEJO DE LA MEMORIA EEPROM principalmente para mantener el c´odigo del gestor de arranque. La direcci´on de zona baja se puede utilizar para la emulaci´on de EEPROM en un MCU sin un m´odulo de memoria EEPROM, ya que se puede dejar sin protecci´on, mientras que el resto de direcciones est´an protegidos. Ajustes por omisi´on de protecci´on, as´ı como informaci´on de seguridad que permite que el MCU restringa el acceso al m´odulo de Flash se describe en la Tabla 4.1. Chapter 18 32 Kbyte Flash Module (S12FTS32KV1) 506 MC9S12C-Family / MC9S12GC-Family Freescale Semiconductor Rev 01.24 Figure 18-2. Flash Memory Map Flash Registers MODULE BASE + 0x0000 0xFF00–0xFF0F (Flash Configuration Field) MODULE BASE + 0x000F 0x8000 Flash Protected Low Sectors 512 bytes, 1, 2, 4 Kbytes FLASH_START = 0x4000 0x4800 0x4200 0x5000 16K PAGED MEMORY 0x3E 003E 0x3F Note: 0x3E–0x3F correspond to the PPAGE register content FLASH_END = 0xFFFF 0xF800 0xF000 0xC000 0xE000 Flash Protected High Sectors 2, 4, 8, 16 Kbytes0x3F 0x4400 Flash Array 16 bytes Figura 4.1: Mapa de memoria de la Flash
  • 29. 19 Flash Address Size (bytes) Description 0xFF00–0xFF07 8 Backdoor Key to unlock security 0xFF08–0xFF0C 5 Reserved 0xFF0D 1 Flash Protection byte 0xFF0E 1 Reserved 0xFF0F 1 Flash Security/Options byte Cuadro 4.1: Configuraci´on del espacio de la flash 4.3 Programaci´on de la EEPROM La programaci´on de la EEPROM se realiza por medio del registro PPROG. Antes de ver las rutinas de control hay que estudiar el funcionamiento de la EEPROM, aunque s´olo de manera superficial, lo m´ınimo para que se entiendan luego las rutinas de control. En una EEPROM el estado de un byte borrado o en su caso “no progra- mado” tiene un valor de $FF, es decir sus bits a nivel alto. La programaci´on permite pasar a “0” ( nivel bajo) los bits que est´an a “1” (nivel alto), pero no al rev´es, si se quiere poner un bit a uno (estando previamente a cero) hay que borrar todo el byte primero. Si por el contrario se quiere pasar de “1” a “0” no hace falta borrar todo el byte primero. En resumen, siempre que hay que grabar un “1” en una celda EEPROM que previamente estaba a “0” hay que borrarla primero. La programaci´on requiere una sobrecarga de tensi´on, aunque no hay que preocuparse de esto puesto que la proporciona el microcontrolador de forma transparente al usuario. Lo que si que hay que tener en cuenta es que la veloci- dad de programaci´on es m´as lenta que la velocidad de lectura, por lo tanto entre programaci´on y programaci´on hay que introducir unos retardos. Estos retardos son variables y dependen de la velocidad de reloj E. Cuanto menor sea el valor de E ( frecuencia de reloj ) la efectividad de la sobrecarga disminuye 1 . Por esa raz´on el micro incorpora un peque˜no oscilador RC interno que puede generar los tiempos de programaci´on necesarios indepen- dientemente del reloj externo (E). Motorola recomienda que cuando se trabaje con E < 1MHz activar el os- cilador RC para programar la EEPROM. Para activar ese oscilador hay que actuar sobre el bit CSEL del registro OPTION2 . En la siguiente tabla se pre- 1La eficiencia de la sobrecarga disminuye con el incremento de tiempo necesario para borrar y grabar la posici´on de eeprom. 2Cuando se activa el bit CSEL hay que esperar 10ms hasta que se estabilice el circuito.
  • 30. 20 CAP´ITULO 4. MANEJO DE LA MEMORIA EEPROM senta un esquema sobre los tiempos de programaci´on. E = 2MHz Tiempo de escritura / borrado de 10ms 1MHz < E < 2MHz Tiempo de escritura / borrado entre (10ms − 20ms) E < 1MHz Activar oscilador interno y mantener tiempo de 20ms Cuadro 4.2: Tiempos de programaci´on de la memoria EEPROM 4.3.1. Lectura Para leer la EEPROM el bit EELAT del registro PPROG debe estar a cero. Cuando este bit est´a a cero el resto de bits del registro dejan de tener sig- nificado o efecto. La lectura de la EEPROM se realiza como la de una memoria ROM normal. Al realizar un RESET sobre el microcontrolador el estado de este bit es cero, la EEPROM queda configurada para lectura. 4.4 Implementaci´on Para la implementaci´on se llevaron a cabo varias pruebas la mayor´ıa sin exi- to alguno, en ´este proceso se ha encontrado una application note hecho por freescale para el uso en un hcs12, llevando a cabo algunas modificaciones, se pudo realizar este m´odulo, el manual de ayuda se puede encontrar el siguiente LINK, donde explica detalladamente los registros a ser configurados y funciones que lo realizan; con lo le´ıdo anteriormente se puede entender c´omo se hace el proceso de programaci´on de la EEPROM. Una vez que haya pasado ese tiempo podemos realizar operaciones sobre la EEPROM.
  • 31. Bibliograf´ıa [1] Ucontrol, Electr´onica en General Pics en Particu- lar,www.ucontrol.com.arrevista0003ucontrol revista 0003.pdf Electr´onica en General Pics en Particular Ed. Mayo 2008 Consultado el 7 de setiembre de 2011 [2] Programaci´on de Microcontroladores http://www.neoteo.com/tutorial-programacion-de-microcontroladores-3260 Consultado el 10 de setiembre de 2011 [3] Tutorial:Puerto serie en Linux http://www.iearobotics.com/wiki/index.php?title=Tutorial:Puerto serie en Linux Consultado el 20 de setiembre de 2011 [4] Manual de Referencia HCS12 Microcontrollers MC9S12C Family MC9S12GC Family 21