Professional Documents
Culture Documents
..
..
..
..
Prctica 1
Programacin de
la E/S del PC.
.
.
Control de un display de
7 segmentos desde
el puerto paralelo.
Copyright 2006 David Jurado Gonzlez. Se concede permiso para copiar, distribuir y/o modificar este documento bajo los
trminos de la Licencia de Documentacin Libre de GNU, Versin 1.2 o cualquier otra versin posterior publicada por la Free
Software Foundation; sin Secciones Invariantes ni Textos de Cubierta Delantera ni Textos de Cubierta Trasera. Una copia de la
licencia est incluida en la seccin titulada GNU Free Documentation License.
Objetivo
Esta prctica tiene como doble objetivo conocer una de las posibilidades de acceso a
dispositivos electrnicos bsicos desde el PC, y por otro lado retomar el desarrollo de programas en
C/C++ bajo Windows. Con esto se persigue presentar una introduccin al control de dispositivos
electrnicos sencillos a travs del ordenador personal.
Ms concretamente se deber realizar el control de un display de 7 segmentos desde un
programa de Windows a travs del puerto paralelo del PC.
Vcc
b
f
Vcc
b
g
g
e
e
c
pd
pd
Las patillas no tienen por qu coincidir de un fabricante a otro por lo que es fundamental
identificarlas correctamente antes de hacer cualquier montaje.
En el caso de tratarse de un display en el que los LEDs estn configurados en modo de nodo
comn, el esquema elctrico interno es el siguiente:
Vcc
pd
Dpto Automtica
Para excitarlos es necesario aplicar una tensin inferior a Vcc en los ctodos correspondientes a
cada segmento.
La tensin V tpica est comprendida entre 1 y 1,5 V, por tanto, si hacemos Vcc = 5V, para que
luzca un LED, tendremos que aplicarle entre 3,5V y 4V a su ctodo. Para que no luzcan, habra que
aplicarles Vcc, o bien dejarlos en alta impedancia.
Ya qua la intensidad de funcionamiento est comprendida entre 10mA y 15mA, la resistencia
que se acople en serie debe ser aproximadamente de 330 . Con esto podremos encender los LEDs
llevando uno de los terminales de la resistencia a masa. La siguiente figura muestra el circuito necesario
para que el display muestre el nmero 7:
Vcc
pd
330
330
Vcc
quedara:
Si el display fuera de ctodo comn la excitacin se realizara usando lgica positiva y el circuito
Vcc
Vcc
Vcc
330
330
pd
La excitacin de los LEDs la realizaremos directamente desde los terminales de datos del puerto
paralelo del PC, en el que tambin estn presentes varias lneas de masa. Lamentablemente no se puede
obtener directamente la tensin Vcc de ninguna de las lneas del cable, lo que obliga a tener que usar la
configuracin del display en ctodo comn si no contamos con fuente de alimentacin externa. Como
nica medida de limitacin de intensidad, usaremos 8 resistencias de 330 en serie con los LEDs tal como
aparecen en las figuras.
Prctica 2
Acceso a dispositivos
Byte de datos
13
12
25
S7
11
24
S6
10
23
S5
D7
D6
D5
D4
D3
D2
D1
D0
22
S4
21
20
19
18
17
16
15
14
S3
Byte de estado
C3
C2
C1
C0
Byte de control
Vista de la base del interfaz paralelo centronics desde el conector hembra del PC.
Para mayor comodidad contaremos con un cable plano extensor del puerto que podremos
conectar directamente a una placa entrenadora de circuitos electrnicos a travs de un conector de
insercin de zcalo DIP. La topologa del cable es la siguiente:
Byte de datos
D0
D1
D2
D3
D4
D5
D6
D7
14
15
16
17
18
19
20
21
10
22
11
23
12
24
13
25
Hilo
Rojo
Masa
14 15
16 17
18 19
20 21
22
23
24 25
10
11 12
13
Datos
Vista de la base del interfaz paralelo centronics desde el conector macho del cable.
Dpto Automtica
Prctica 2
Acceso a dispositivos
Para esta prctica vamos a ver un sencillo IDE llamado Dev-C++ compuesto principalmente
por editor de textos, compilador, y depurador que nos permitir compilar programas de una forma rpida
y cmoda.
El editor presenta coloreado de la sintaxis y funciones de autocompletar entre otras.
La versin actual del compilador es gcc 3.2 para x86 al que se le ha incorporado una gran
cantidad de funciones de biblioteca. Su objetivo ltimo es traducir programas escritos en C/C++ a cdigo
mquina ejecutable.
La depuracin que consiste en eliminar fallos de software se realiza mediante el programa gdb
acrnimo de GNU debugger, que es el ms usado en entornos GNU. Se trata de un depurador avanzado,
que toma un programa ejecutable y ofrece un amplio abanico de posibilidades para controlar y supervisar
su ejecucin. Entre las posibilidades que ofrece, se encuentra la de depuracin a nivel de cdigo fuente,
con la que se nos permite tener sesiones de depuracin en las que contamos con el mismo cdigo que
utilizamos en la elaboracin del programa. Esta es una caracterstica bsica de los depuradores modernos.
La interaccin con gcc y gdb que se realizara tradicionalmente con la lnea de comandos queda
oculta por Dev-C++, con el que interactuamos a travs de una cmoda interfaz grfica.
Normalmente el nico puerto paralelo que se incluye se sita en la posicin 0x0378. Cada
entrada de puerto paralelo estndar consta de 3 bytes consecutivos: Datos, Estado, y Control, de los que slo
nos interesa el byte de Datos. El sistema tampoco nos dar acceso al puerto directamente por lo que es
necesario hacer llamadas directamente al driver del puerto paralelo, o bien utilizar alguna utilidad que pase
por alto esta limitacin. La documentacin para acceder directamente al driver est en Kit de Desarrollo de
Laboratorio de Informtica Industrial II
Dpto Automtica
Drivers (DDK) de Windows, que es complicado de usar. Sin embargo tenemos otra opcin que nos
brindan algunos programas de uso libre basadoas en eliminar la proteccin de Windows haciendo uso de
ciertas llamadas al sistema no documentadas. Tal es el caso de WinIO que permite que una aplicacin
pueda acceder selectivamente a los recursos que necesite.
Nota: Aunque WinIO soluciona un problema comn para el programador de bajo nivel en Windows, se
desaconseja su uso en aplicaciones comerciales ya que entraa cierto peligro de corrupcin de datos para otras aplicaciones que
intenten acceder a los mismos recursos. En tales casos sera necesario ceirse a llamadas a la funcin DeviceIOControl de
acceso a dispositivos en Win32.
Guardarlo dentro de una carpeta creada con igual nombre dentro de Mis documentos.
Se crear un archivo similar al siguiente al que habr que comentar o eliminar la primera lnea,
que slo tendra utilidad en la programacin en C++.
//#include <iostream>
#include <stdlib.h>
int main(int argc, char *argv[])
{
system("PAUSE");
return 0;
}
Prctica 2
Acceso a dispositivos
Dpto Automtica
Depuracin en Dev-C++
Como ejemplo vamos a realizar una sesin de depuracin con este programa. Para ello es
necesario indicarle al enlazador (linker) que incorpore al ejecutable informacin adicional con los datos
necesarios para el depurador consistentes principalmente en tablas de smbolos con equivalencias entre
nombres lgicos y direcciones ms offsets. Tambin se aade al ejecutable el cdigo fuente de los archivos
que han intervenido en la compilacin del programa oal menos una referencia a los mismos.
Para habilitar el depurador abrimos el dilogo ProyectoOpciones de proyectoConfiguracin y
seleccionamos Yes en la opcin de Generar Informacin de Debug
Estrategias de depuracin
Los depuradores suelen implementar un conjunto de funcionalidades bsicas:
Prctica 2
Ejecucin paso a paso.- Permite ejecutar el cdigo lnea a lnea de tal forma que
podamos comprobar la correcta marcha del programa. Existen tres posibilidades bsicas
de ejecucin paso a paso:
o Paso a paso continuando por subrutinas.- Ejecuta paso a paso normalmente.
Cuando nos encontremos sobre la llamada a una subrutina de la que
disponemos de su cdigo fuente, entraremos en la misma para seguir
ejecutando sus lneas de cdigo.
o Paso a paso sin entrar en subrutinas.- Ejecuta paso a paso normalmente pero al
llegar a una llamada a subrutina, no la ejecuta internamente paso a paso, sino
que lo hace de una vez.
o Salir de subrutina.- Ejecuta el cdigo hasta salir de la subrutina actual.
9
Acceso a dispositivos
Mostrar el contenido de la pila, por el que podremos avanzar y retroceder para conocer
cul ha sido la secuencia de llamadas hasta el punto actual.
10
Dpto Automtica
Proceso de desarrollo
1. Identificar los terminales del display as como los del cable plano suministrado alargador del puerto
paralelo (mirar en la figura).
2. Realizar el montaje del circuito completo. Procurar que todas las resistencias y el CI tengan la misma
orientacin de lectura.
3. Realizar un programa bsico en C que ofrezca combinaciones de tensin por los pines de datos del
puerto paralelo (se puede usar el de ejemplo). Comprobar que aparecen en el otro extremo del cable
plano.
4. Realizar un programa en C para que aparezca en el display la siguiente secuencia:
a. Una cuenta de 0 a 9 con un intervalo entre valor y valor de 250 ms.
b. Una ruleta que de 20 vueltas y encienda los LEDs del dgito 0 uno a uno segn el sentido
horario con un intervalo entre valor y valor de 100 ms.
c. Una ruleta que de 20 vueltas y encienda los LEDs del dgito 0 uno a uno segn el sentido
antihorario con un intervalo entre valor y valor de 100 ms.
d. Una cuenta de 9 a 0 con un intervalo entre valor y valor de 250 ms.
5. Conectar el circuito completo y hacer pruebas con el programa C definitivo (hallar previamente las
combinaciones de segmentos para dar los smbolos requeridos).
Evaluacin de la prctica
Para el desarrollo de la prctica se tiene 2 semanas. Se entregar funcionando a la 3.
Se mostrar la el circuito controlado por el PC. En el display debern aparecer los 10 dgitos
decimales.
El programa en C ha de estar correctamente realizado con las lneas alineadas y con los
comentarios necesarios. Hacerlo LO MS COMPACTO POSIBLE. Utilizando arrays y bucles segn sean
necesarios.
Para esta primera prctica no se pide memoria.
8 Resistencias de 330 .
Prctica 2
11
Acceso a dispositivos