Anda di halaman 1dari 17

Paso a Paso: Mi primer proyecto Hardware-Software.

Panel Led para mostrar el uso de la CPU

Manual Paso a Paso


Mi primer Proyecto Hardware-Software
PANEL LED PARA MOSTRAR EL USO DE LA CPU

versin 01.01
Autor: Julio Snchez Berro
Dos Hermanas (Sevilla)
19 de enero de 2011

1 De 17

Paso a Paso: Mi primer proyecto Hardware-Software. Panel Led para mostrar el uso de la CPU

ndice del usuario


Agradecimientos..................................................................................................................................3
Objetivo...............................................................................................................................................3
El Software..........................................................................................................................................3
Acceso al puerto paralelo....................................................................................................................3
Disco-Ram...........................................................................................................................................3
Teora:..................................................................................................................................................4
Uso de led, calculo de resistencia para no quemarlos....................................................................4
Diodos:...........................................................................................................................................5
Esquema elctrico...............................................................................................................................6
Esquema del programa........................................................................................................................7
Cdigo Fuente.....................................................................................................................................9
Mdulo discoram............................................................................................................................9
Fmain:.............................................................................................................................................9
Capturas de pantalla:.........................................................................................................................14
Panel led en funcionamiento con el 100% de uso de la CPU...........................................................14
Ficha de materiales............................................................................................................................15
Indice Alfabtico...............................................................................................................................16
Bibliografia / Enlaces de consulta.....................................................................................................17

En memoria de mi sobrino Jos Miguel Galisteo Snchez

2 De 17

Paso a Paso: Mi primer proyecto Hardware-Software. Panel Led para mostrar el uso de la CPU

Agradecimientos
A Pablo Mileti, por su articulo en la revista TuxInfo n 9, sobre el uso del puerto paralelo en
gambas.
A andres_5,(http://foro.elhacker.net/profiles/andres5-u243480.html), que gracias a l pude hacer la
parte del hardware.
A la pgina web http://quierolinux.blogspot.com/
A linuxware.es, (http://www.linuxware.es/manuales/ramdisk.html), por su articulo sobre disco-ram
Y a los foros http://www.gambas-es.org/ y http://foro.elhacker.net/electronica-b31.0/

Objetivo
Despus de ver un vdeo de youtube donde se mostraba como controlar varios leds desde el puerto
paralelo y con gambas2 (proyecto de andres_5), me gusto mucho y quise hacer algo parecido, y
darle una utilidad, y se me ocurri hacer un panel de leds que mostrara el estado del uso de la cpu.
Y me puse manos a la obra....

El Software
Para el clculo del uso de la cpu, consulte la pagina web:
http://quierolinux.blogspot.com/2008/10/clculo-del-uso-de-cpu-en-linux.html
Donde explican como calcularlo, sin necesidad de usar el comando top.

Acceso al puerto paralelo


Adapte el cdigo de andres_5, a mis necesidades, ya que haba aumentado en n de led (de 6 a 8),
algo muy simple de hacer... ;) ..

Disco-Ram
Probando la aplicacin me di cuenta del uso excesivo del disco duro, me acorde de los tiempos del
ms-dos, de una aplicacin que tenia para crear discos-ram o ramdisk, y me pregunte si en linux
habra algo parecido... pues si.... lo hay:
http://www.linuxware.es/manuales/ramdisk.html
Con esto se consigue que se escriba en una parte de la memoria usada como un disco (grabo y leo
un archivo de datos), siendo mucho ms rpido que el uso del disco duro.

3 De 17

Paso a Paso: Mi primer proyecto Hardware-Software. Panel Led para mostrar el uso de la CPU

Teora:
Uso de led: clculo de resistencia para no quemarlos

Clculo de resistencia para el led :


Rrojo=(5-1,8)/0,01=320
Ramarillo=(5-2,1)/0,01=290
Rverde=(5-2)/0,01=300
Razul=(5-3,5)/0,01=150
Nota:
Cuando compre el material no sabia calcularlas y las compre todas iguales y de 430,
por eso alumbran tan poco... !!!

4 De 17

Paso a Paso: Mi primer proyecto Hardware-Software. Panel Led para mostrar el uso de la CPU

Diodos:
Un diodo (del griego: dos caminos) es un dispositivo semiconductor que permite el paso de la
corriente elctrica en una nica direccin con caractersticas similares a un interruptor. De forma
simplificada, la curva caracterstica de un diodo (I-V) consta de dos regiones: por debajo de cierta
diferencia de potencial, se comporta como un circuito abierto (no conduce), y por encima de ella
como un circuito cerrado con una resistencia elctrica muy pequea.
Debido a este comportamiento, se les suele denominar rectificadores, ya que son dispositivos
capaces de suprimir la parte negativa de cualquier seal, como paso inicial para convertir una
corriente alterna en corriente continua.

nodo

Ctodo

En nuestro caso, se usa para evitar que la corriente entre por donde no debe, y as no daar
ni al puerto paralelo ni al propio ordenador.
Y use la que aconsejaba Andres_5, la 1N4148, que es por otro lado el ms comn en el mercado.

5 De 17

Paso a Paso: Mi primer proyecto Hardware-Software. Panel Led para mostrar el uso de la CPU

Esquema elctrico

Nota:
Para el montaje lo hice con una placa de prueba (Placa breadboard). Evita hacer soldaduras , y
ademas todo el material se puede desmontar para aprovecharlo en otro proyecto.

6 De 17

Paso a Paso: Mi primer proyecto Hardware-Software. Panel Led para mostrar el uso de la CPU

Esquema del programa


Inicio del Programa:

Form_Open

Creo disco Ram


discoram.formatear()
Redimensiono valores iniciales del estado cpu
numeroa.resize(4)
Inicio puerto paralelo:
iniciarpuertoparalelo()
Apago todos los led:
usoled(0)
Barra de progressbar1 a 0%:
usoProgressBar1(0)

Cada cierto tiempo (0,25 seg) se produce un evento:


Timer1_timer()
Produce un evento MouseDown en el Picturebox1

Produce un evento MouseDown en el Picturebox1


Leo la cpu y hasta que no obtenga valores sigo leyendola:
While cadena=
cadena=lecturacpu()
wend
De cadena saco los valores que me interesan para calcular
la carga de la cpu
el tiempo de inactividad
el uso de la cpu
Con lo cual calculo el uso
Una vez calculado el uso, le mando la informacion
tanto a los led como a la barra de progressbar1
usoled(uso)
usoProgressbar1(uso)

7 De 17

Paso a Paso: Mi primer proyecto Hardware-Software. Panel Led para mostrar el uso de la CPU

Subrutina
usoled(valor)

Dependiendo del valor que me pasen,


doy valores a las variables:
led1,led2,led3,led4,led5,led6,led7,led8
Los sumo (on2) y envio al puerto #H378,
el valor de la suma en formato byte (salida)

Subrutina
usoprogressbar1(valor)

Para dibujar la barra de progreso


Paso valor/100 a la propiedad value
progressbar1.value=n/100

Funcin
lecturacpu(valor)

Con la orden Shell ejecuto la orden de la consola de comandos:


head -n -1 /proc/stat
Grabando su resultado en un archivo llamado ruta
> & ruta
Leo el archivo ruta
File.load(ruta)
y lo devuelvo como el valor de la funcin

8 De 17

Paso a Paso: Mi primer proyecto Hardware-Software. Panel Led para mostrar el uso de la CPU

Cdigo Fuente
Importante: para tener acceso al puerto paralelo hay que ejecutar el programa como
administrador (root)
Mdulo discoram
PUBLIC SUB formatear()
DIM comando AS String
'formateardiscoram
comando = "sudo mkfs.ext4 /dev/ram0"
SHELL comando
WAIT 2
'crear punto de montaje en /media
comando = "sudo mkdir /media/ramdisk"
SHELL comando
WAIT 0.5
'montar disco ram en /media
comando = "sudo mount /dev/ram0 /media/ramdisk"
SHELL comando
FMain.rutatrabajo = "/media/ramdisk"
WAIT 0.1
END

Fmain:
' Gambas class file
PUBLIC on2 AS Integer
PUBLIC led1 AS Integer
PUBLIC led2 AS Integer
PUBLIC led3 AS Integer
PUBLIC led4 AS Integer
PUBLIC led5 AS Integer
PUBLIC led6 AS Integer
PUBLIC led7 AS Integer
PUBLIC led8 AS Integer
PUBLIC puerto AS File
PUBLIC salida AS Byte
PUBLIC hproc AS Process
PUBLIC numeroa AS NEW Float[] 'poner siempre New cuando definiamos un [] array
PUBLIC cargacpu0 AS Float
PUBLIC usocpu0 AS Float
PUBLIC PuertoEstado AS File
PUBLIC Entrada AS Byte
PUBLIC rutatrabajo AS String
PUBLIC SUB _new()
END
PUBLIC SUB Form_Open()
'crear disco ram para trabajar mas rpido y sin desgaste del disco duro fisico:
discoram.formatear()
numeroa.resize(4) 'Resize es una funcion, usar parentesis....
FMain.Text = "CPU"
iniciarpuertoparalelo()
usoled(0)

9 De 17

Paso a Paso: Mi primer proyecto Hardware-Software. Panel Led para mostrar el uso de la CPU

usoProgressBar1(0)
'lectura del comando top, para ver % de uso de la cpu...
END
PUBLIC SUB usoled(n AS Float)
' 100/8=12.5
'Tabla de encendido de leds
' 12,5.......... 1
' 25 .......... 2
' 37,5 ......... 3
' 50 ......... 4
' 62,5 ......... 5
' 75 ......... 6
' 87,5 ......... 7
' 100 ......... 8
salida = 0
led8 = 0
led7 = 0
led6 = 0
led5 = 0
led4 = 0
led3 = 0
led2 = 0
led1 = 0
SELECT CASE n
CASE 0.001 TO 12.5
led8 = 0
led7 = 0
led6 = 0
led5 = 0
led4 = 0
led3 = 0
led2 = 0
led1 = 1
CASE 12.5 TO 25
led8 = 0
led7 = 0
led6 = 0
led5 = 0
led4 = 0
led3 = 0
led2 = 2
led1 = 1
CASE 25 TO 37.5
led8 = 0
led7 = 0
led6 = 0
led5 = 0
led4 = 0
led3 = 4
led2 = 2
led1 = 1
CASE 37.5 TO 50
led8 = 0

10 De 17

Paso a Paso: Mi primer proyecto Hardware-Software. Panel Led para mostrar el uso de la CPU

led7 = 0
led6 = 0
led5 = 0
led4 = 8
led3 = 4
led2 = 2
led1 = 1
CASE 50 TO 62.5
led8 = 0
led7 = 0
led6 = 0
led5 = 16
led4 = 8
led3 = 4
led2 = 2
led1 = 1
CASE 62.5 TO 75
led8 = 0
led7 = 0
led6 = 32
led5 = 16
led4 = 8
led3 = 4
led2 = 2
led1 = 1
CASE 75 TO 87.5
led8 = 0
led7 = 64
led6 = 32
led5 = 16
led4 = 8
led3 = 4
led2 = 2
led1 = 1
CASE 87.5 TO 100
led8 = 128
led7 = 64
led6 = 32
led5 = 16
led4 = 8
led3 = 4
led2 = 2
led1 = 1
END SELECT
'escribo valores de leds...
on2 = led1 + led2 + led3 + led4 + led5 + led6 + led7 + led8
SEEK #puerto, &H378
salida = on2
WRITE #puerto, salida
END
PUBLIC SUB iniciarpuertoparalelo()
TRY puerto = OPEN "/dev/port" FOR WRITE
IF ERROR THEN

11 De 17

Paso a Paso: Mi primer proyecto Hardware-Software. Panel Led para mostrar el uso de la CPU

Message.Error("No se puede ejecutar este programa, si no eres administrador (root)")


ME.close()
ELSE
SEEK #puerto, &H378
salida = 0
WRITE #puerto, salida
ENDIF
END
PUBLIC SUB PictureBox1_MouseDown()
DIM cadena AS String
DIM array_cadenas AS String[]
DIM uso AS Float
DIM cargacpu1 AS Float
DIM usocpu1 AS Float
FMain.Text = "CPU"
'informacion obtenida del blog:
'http://quierolinux.blogspot.com/2008/10/clculo-del-uso-de-cpu-en-linux.html
'abro el archivo /proc/stat
WHILE cadena = ""
cadena = lecturacpu()
WEND
'ahora puedo calcular el uso de la cpu:
'100 * ((carga de cpu T1 - carga de cpu T0) / (uso de cpu total T1 - uso de cpu total T0))
'donde "carga de cpu" es la suma de los 3 primeros campos,
'y
' "uso de cpu total" es la "carga de cpu" sumada al tiempo de inactividad(4 campo).
'saco los 4 numero, y calculo los 2 numero
'obtener numeros
array_cadenas = Split(cadena, " ")
'"carga de cpu" es la suma de los 3 primeros campos,
'y
'"uso de cpu total" es la "carga de cpu" sumada al tiempo de inactividad (4 campo).
'ahora puedo calcular el uso de la cpu:
'100 * ((carga de cpu T1 - carga de cpu T0) / (uso de cpu total T1 - uso de cpu total T0))
'donde "carga de cpu" es la suma de los 3 primeros campos,
'y
' "uso de cpu total" es la "carga de cpu" sumada al tiempo de inactividad(4 campo).
numeroa[0] = Val(array_cadenas[2])
numeroa[1] = Val(array_cadenas[3])
numeroa[2] = Val(array_cadenas[4])
numeroa[3] = Val(array_cadenas[5])
'ahora puedo calcular el uso de la cpu:
'100 * ((carga de cpu T1 - carga de cpu T0) / (uso de cpu total T1 - uso de cpu total T0))
'donde "carga de cpu" es la suma de los 3 primeros campos,
'y
' "uso de cpu total" es la "carga de cpu" sumada al tiempo de inactividad(4 campo).
cargacpu1 = numeroa[0] + numeroa[1] + numeroa[2]
usocpu1 = cargacpu1 + numeroa[3]
IF (usocpu1 - usocpu0) <> 0 THEN
uso = 100 * ((cargacpu1 - cargacpu0) / (usocpu1 - usocpu0))
usocpu0 = usocpu1
cargacpu0 = cargacpu1
cadena = lecturacpu()

12 De 17

Paso a Paso: Mi primer proyecto Hardware-Software. Panel Led para mostrar el uso de la CPU

'PRINT "Cadena1:"; cadena


'PRINT "Uso:"; uso
usoled(uso)
usoProgressBar1(uso)
ENDIF
END
PUBLIC FUNCTION lecturacpu() AS String
DIM cadena AS String
DIM ruta AS String
ruta = rutatrabajo & "/datos.cpu"
cadena = "head -n 1 /proc/stat >" & ruta
SHELL cadena
WAIT 0.01
cadena = File.LOAD(ruta)
RETURN cadena
END
PUBLIC SUB Timer1_Timer()
IF FMain.text = "CPU" THEN
PictureBox1_MouseDown()
ELSE
ENDIF
END
PUBLIC SUB Form_Close()
usoled(-1)
END
PUBLIC SUB usoProgressBar1(n AS Float)
' 100/8=12.5
'Tabla de encendido de leds
' 12,5.......... 1
' 25 .......... 2
' 37,5 ......... 3
' 50 ......... 4
' 62,5 ......... 5
' 75 ......... 6
' 87,5 ......... 7
' 100 ......... 8
ProgressBar1.value = n / 100
END

13 De 17

Paso a Paso: Mi primer proyecto Hardware-Software. Panel Led para mostrar el uso de la CPU

Capturas de pantalla:

Panel led en funcionamiento con el 100% de uso de la CPU.

14 De 17

Paso a Paso: Mi primer proyecto Hardware-Software. Panel Led para mostrar el uso de la CPU

Ficha de materiales
Cantidad

Material

Observaciones

Precio

Led, de color rojo

Led, de color amarillo

0.40x2

Led, de color verde

0.40x2

Led, de color azul

0.40x2

Resistencias

Diodos 1N4148

Rollo de de cable
pequeo

Placa breadboard

http://www.sebyc.com/reess/componentes/led.htm

Las compre de 430, pero es demasiado, hay que


hacer el clculo para que los led alumbren ms
(revisar apartado de teoria)

0.40x2

0,0212x8

0,0071x8

1,00x1

Placa de pruebas

5,60x1

Coste : 10,03 euros


Nota:
No he usado ninguna soldadura, y todo el material es reutilizable para otros montajes !!!

15 De 17

Paso a Paso: Mi primer proyecto Hardware-Software. Panel Led para mostrar el uso de la CPU

Indice Alfabtico

ndice alfabtico
1N4148..........................................................................................................................................5, 15
administrador.......................................................................................................................................9
andres_5..............................................................................................................................................3
nodo .................................................................................................................................................5
Clculo de resistencia para el led .......................................................................................................4
Ctodo.................................................................................................................................................5
diodo....................................................................................................................................................5
discos-ram...........................................................................................................................................3
formatear.............................................................................................................................................9
iniciarpuertoparalelo()...................................................................................................................9, 11
lecturacpu.......................................................................................................................................12 s.
leds.......................................................................................................................................3, 10 s., 13
Pablo Mileti.........................................................................................................................................3
Placa breadboard...........................................................................................................................6, 15
Placa de pruebas................................................................................................................................15
puerto paralelo.................................................................................................................................3, 9
ramdisk......................................................................................................................................3, 9, 17
rectificadores.......................................................................................................................................5
root................................................................................................................................................9, 12
TuxInfo................................................................................................................................................3
uso de la cpu............................................................................................................................3, 10, 12
usoled.........................................................................................................................................9 s., 13
usoProgressBar1..........................................................................................................................10, 13

16 De 17

Paso a Paso: Mi primer proyecto Hardware-Software. Panel Led para mostrar el uso de la CPU

Bibliografia / Enlaces de consulta


http://quierolinux.blogspot.com/2008/10/clculo-del-uso-de-cpu-en-linux.html
http://es.wikipedia.org/wiki/Placa_de_pruebas
http://www.linuxware.es/manuales/ramdisk.html

http://foro.elhacker.net/profiles/andres5-u243480.html
http://www.linuxware.es/manuales/ramdisk.html
http://www.gambas-es.org/
http://foro.elhacker.net/electronica-b31.0/

17 De 17

Anda mungkin juga menyukai