Mi Primer Proyecto Hardware-software[1]

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

Transcript of Mi Primer Proyecto Hardware-software[1]

Page 1: 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 Paso

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

versión 01.01

Autor: Julio Sánchez BerroDos Hermanas (Sevilla)

19 de enero de 2011

1 De 17

Page 2: Mi Primer Proyecto Hardware-software[1]

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

Índice del usuarioAgradecimientos..................................................................................................................................3Objetivo...............................................................................................................................................3El Software..........................................................................................................................................3Acceso al puerto paralelo....................................................................................................................3Disco-Ram...........................................................................................................................................3Teoría:..................................................................................................................................................4

Uso de led, calculo de resistencia para no quemarlos....................................................................4Diodos:...........................................................................................................................................5

Esquema eléctrico...............................................................................................................................6Esquema del programa........................................................................................................................7Código Fuente.....................................................................................................................................9

Módulo discoram............................................................................................................................9Fmain:.............................................................................................................................................9

Capturas de pantalla:.........................................................................................................................14Panel led en funcionamiento con el 100% de uso de la CPU...........................................................14Ficha de materiales............................................................................................................................15Indice Alfabético...............................................................................................................................16Bibliografia / Enlaces de consulta.....................................................................................................17

En memoria de mi sobrino José Miguel Galisteo Sánchez

2 De 17

Page 3: Mi Primer Proyecto Hardware-software[1]

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 página web http://quierolinux.blogspot.com/A linuxware.es, (http://www.linuxware.es/manuales/ ramdisk .html ), por su articulo sobre disco-ramY a los foros http://www.gambas-es.org/ y http://foro.elhacker.net/electronica-b31.0/

ObjetivoDespués de ver un vídeo 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 cálculo del uso de la cpu, consulte la pagina web:http://quierolinux.blogspot.com/2008/10/clculo-del-uso-de-cpu-en-linux.htmlDonde explican como calcularlo, sin necesidad de usar el comando “top”.

Acceso al puerto paraleloAdapte el código de andres_5, a mis necesidades, ya que había aumentado en nº de led (de 6 a 8), algo muy simple de hacer... ;) ..

Disco-RamProbando la aplicación me di cuenta del uso excesivo del disco duro, me acorde de los tiempos del ms-dos, de una aplicación que tenia para crear “discos-ram” o ramdisk, y me pregunte si en linux habría 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 más rápido que el uso del disco duro.

3 De 17

Page 4: Mi Primer Proyecto Hardware-software[1]

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

Teoría:Uso de led: cálculo de resistencia para no quemarlos

Cálculo 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

Page 5: Mi Primer Proyecto Hardware-software[1]

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 eléctrica en una única dirección con características similares a un interruptor. De forma simplificada, la curva característica 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 eléctrica muy pequeña.

Debido a este comportamiento, se les suele denominar rectificadores, ya que son dispositivos capaces de suprimir la parte negativa de cualquier señal, como paso inicial para convertir una corriente alterna en corriente continua.

Ánodo Cátodo

En nuestro caso, se usa para evitar que la corriente entre por donde no debe, y así no dañar ni al puerto paralelo ni al propio ordenador.

Y use la que aconsejaba Andres_5, la 1N4148, que es por otro lado el más común en el mercado.

5 De 17

Page 6: Mi Primer Proyecto Hardware-software[1]

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

Esquema eléctrico

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

Page 7: Mi Primer Proyecto Hardware-software[1]

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

Esquema del programa

Inicio del Programa:

7 De 17

Form_Open

Creo disco Ramdiscoram.formatear()

Redimensiono valores iniciales del estado cpunumeroa.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)

Page 8: Mi Primer Proyecto Hardware-software[1]

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

8 De 17

Subrutinausoled(valor)

Dependiendo del valor que me pasen, doy valores a las variables:

led1,led2,led3,led4,led5,led6,led7,led8Los sumo (on2) y envio al puerto #H378,

el valor de la suma en formato byte (salida)

Subrutinausoprogressbar1(valor)

Para dibujar la barra de progresoPaso valor/100 a la propiedad value

progressbar1.value=n/100

Funciónlecturacpu(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 función

Page 9: Mi Primer Proyecto Hardware-software[1]

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

Código FuenteImportante: para tener acceso al puerto paralelo hay que ejecutar el programa como administrador (root)Módulo 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.1END

Fmain:' Gambas class filePUBLIC on2 AS IntegerPUBLIC led1 AS IntegerPUBLIC led2 AS IntegerPUBLIC led3 AS IntegerPUBLIC led4 AS IntegerPUBLIC led5 AS IntegerPUBLIC led6 AS IntegerPUBLIC led7 AS IntegerPUBLIC led8 AS IntegerPUBLIC puerto AS FilePUBLIC salida AS BytePUBLIC hproc AS ProcessPUBLIC numeroa AS NEW Float[] 'poner siempre New cuando definiamos un [] arrayPUBLIC cargacpu0 AS FloatPUBLIC usocpu0 AS FloatPUBLIC PuertoEstado AS FilePUBLIC Entrada AS BytePUBLIC rutatrabajo AS String

PUBLIC SUB _new()END

PUBLIC SUB Form_Open() 'crear disco ram para trabajar mas rápido 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

Page 10: Mi Primer Proyecto Hardware-software[1]

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

Page 11: Mi Primer Proyecto Hardware-software[1]

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, salidaEND

PUBLIC SUB iniciarpuertoparalelo() TRY puerto = OPEN "/dev/port" FOR WRITE IF ERROR THEN

11 De 17

Page 12: Mi Primer Proyecto Hardware-software[1]

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 ENDIFEND

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

Page 13: Mi Primer Proyecto Hardware-software[1]

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 ENDIFEND

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 / 100END

13 De 17

Page 14: Mi Primer Proyecto Hardware-software[1]

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

Page 15: Mi Primer Proyecto Hardware-software[1]

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

Ficha de materialesCantidad Material Observaciones Precio

2 Led, de color rojo http://www.sebyc.com/reess/componentes/led.htm 0.40x2

2 Led, de color amarillo 0.40x2

2 Led, de color verde 0.40x2

2 Led, de color azul 0.40x2

8 Resistencias Las compre de 430, pero es demasiado, hay que hacer el cálculo para que los led alumbren más(revisar apartado de teoria)

0,0212x8

8 Diodos 1N4148 0,0071x8

1 Rollo de de cable pequeño

1,00x1

1 Placa breadboard Placa de pruebas 5,60x1

Coste : 10,03 eurosNota:¡¡¡ No he usado ninguna soldadura, y todo el material es reutilizable para otros montajes !!!

15 De 17

Page 16: Mi Primer Proyecto Hardware-software[1]

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

Indice Alfabético

Índice alfabético1N4148..........................................................................................................................................5, 15administrador.......................................................................................................................................9andres_5..............................................................................................................................................3Ánodo .................................................................................................................................................5Cálculo de resistencia para el led .......................................................................................................4Cátodo.................................................................................................................................................5diodo....................................................................................................................................................5discos-ram...........................................................................................................................................3formatear.............................................................................................................................................9iniciarpuertoparalelo()...................................................................................................................9, 11lecturacpu.......................................................................................................................................12 s.leds.......................................................................................................................................3, 10 s., 13Pablo Mileti.........................................................................................................................................3Placa breadboard...........................................................................................................................6, 15Placa de pruebas................................................................................................................................15puerto paralelo.................................................................................................................................3, 9ramdisk......................................................................................................................................3, 9, 17rectificadores.......................................................................................................................................5root................................................................................................................................................9, 12TuxInfo................................................................................................................................................3uso de la cpu............................................................................................................................3, 10, 12usoled.........................................................................................................................................9 s., 13usoProgressBar1..........................................................................................................................10, 13

16 De 17

Page 17: Mi Primer Proyecto Hardware-software[1]

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