Mi Primer Proyecto Hardware-software[1]

of 17 /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 versión 01.01 Autor: Julio Sánchez Berro Dos Hermanas (Sevilla) 19 de enero de 2011 1 De 17

Embed Size (px)

Transcript of Mi Primer Proyecto Hardware-software[1]

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

Manual Paso a PasoMi 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 usuarioAgradecimientos..................................................................................................................................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

AgradecimientosA 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/

ObjetivoDespus 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 SoftwarePara 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 paraleloAdapte 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-RamProbando 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 programaInicio del Programa: 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)

Form_Open

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 discoramPUBLIC 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 materialesCantidad2 2 2 2

MaterialLed, de color rojo Led, de color amarillo Led, de color verde Led, de color azul

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

Precio0.40x2 0.40x2 0.40x2 0.40x2

8

Resistencias

Las compre de 430, pero es demasiado, hay que hacer el clculo para que los led alumbren ms (revisar apartado de teoria)

0,0212x8

8

Diodos 1N4148

0,0071x8

1 1

Rollo de de cable pequeo Placa breadboard

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 alfabtico1N4148..........................................................................................................................................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 consultahttp://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.htmlhttp://www.gambas-es.org/ http://foro.elhacker.net/electronica-b31.0/

17 De 17