Upload
ramiro-ramirez
View
43
Download
3
Embed Size (px)
Citation preview
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
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
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
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
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
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
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)
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
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
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, salidaEND
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 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
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
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 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
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
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