USB CPU and Memory Monitor

23,705

137

22

About: I'm mainly interested in music, food and electronics but I like to read and learn about a lot more than that.

Intro: USB CPU and Memory Monitor

This little device shows you the CPU-load, how much physical and virtual memory is used. It shows this data per 10% on 3 ledbars. To do so it uses a VCP (Virtual COM Port), so that it can be connected to a PC via a USB connection to receive the data. Collecting the data and sending it to the device is done by a Python script.

By building my own onboard UART to USB converter and using SMD, I was able to make a relatively small device.

As always, comments and constructive criticisme are very much appreciated.



Step 1: What Do You Need?

To build this device, you will need:
  • An attiny2313 (datasheet)
  • A FT232RL Uart to USB converter (datasheet)
  • A Mini USB B connector
  • 3 x Kingbright DC-10EWA Ledbar(datasheet)
  • 10 x 150Ohm resistor
  • A ferrite bead
  • 2 x 100nF capacitor
  • A 10nF capacitor
  • A 4.7uF capacitor
  • A 6pin female header
  • Materials to make a PCB or some veroboard
  • A Programmer and compiler of your choice

To run the python script on your pc, you will need:

As always, you can use thru-hole components instead of smd parts.

Step 2: The Circuit

The circuit for this project is fairly easy. The USB part of the schematic can be found in the datasheet of the FT232RL as a USB-powered device with a microcontroller.

There are 2 connections from the FT232RL to the attiny2313: RX and TX (actually we need only The TX of the FT2313RL to the RX of attiny but connecting both lines makes debugging the microcontroller a lot easier).

The 3 ledbars are multiplexed. Their cathodes are connected to Port B, PortD.5 and PortD.6. The anodes are connected to Portd.2 - 4.

Miso, Mosi, SCK and Reset are connected to the header for programming together with VCC and GND.

Step 3: Programming

Once everything is soldered together and tested, you can load the actual code.

My code is written in BascomAVR so I added the original .bas-file here for other Bascom users and the code in a .txt-file as reference for C-programmers. I also added a .hex-file so that you can use it immediately.

The code receives the data via the USB and and multiplexes it into the 3 ledbars. The first one is the CPU-load, the second one is the physical memory and the last one is the virtual memory.

Step 4: The Python Script

'And now for something completely different...'

Indeed, a bit of Python.

I wrote the script in Python 2.7 while using PySerial and Psutil. You´ll need to download those 2 modules (links can be found in Step 1).

The script collects the CPU and Memory data via the Psutil-module and sends them over the virtual COM-port to the device.

_____________________________________________________________________________________________________________

import sys
import serial
import psutil
ser = serial.Serial(2)   #Change this according to your own COM-port. Remeber that the value you should add is one less than the      
                                     number of your COM-port.
while True:

q = psutil.cpu_percent(interval=1)
q = q/10
cpuload = '%.0f'%(q)
cpuload = 'a'+ cpuload
print cpuload
ser.write(cpuload)
q = psutil.phymem_usage()
mem = '%.0f'%(q.percent/10)
mem = 'b'+mem
print mem
ser.write(mem)
q = psutil.virtmem_usage()
virtmem = '%.0f'%(q.percent/10)
virtmem = 'c'+virtmem
print virtmem
ser.write(virtmem)
ser.close


 

Share

    Recommendations

    • Plastics Contest

      Plastics Contest
    • Electronics Tips & Tricks Challenge

      Electronics Tips & Tricks Challenge
    • Optics Contest

      Optics Contest

    22 Discussions

    0
    None
    janwAJC894

    Reply 6 years ago on Introduction

    It is possible but you would need a totally different circuit. This ledbars have a connection for each led so the microcontroller chooses a led to light up according to the data. To drive analog gauges, you would need a digital to analog converter to drive the gauges.

    0
    None
    MRedu

    6 years ago on Introduction

    This looks like a really cool gadget but it would be even cooler if it were bluetooth making it wireless. Is that possible?

    1 reply
    0
    None
    janwMRedu

    Reply 6 years ago on Introduction

    All kinds of wireless communication are possible but an USB cable is one of the easiest ways to communicate.

    0
    None
    shabaki

    7 years ago on Introduction

    It would be awesome if you could make something like this to show the available/used memory on like an external hardrive

    0
    None
    BodenM

    7 years ago on Introduction

    When you say "ferrite beads", do you mean this sort of thing: http://lairdtech.thomasnet.com/viewitems/ferrite-beads-on-wire/axial-lead-beads-power-filtering?forward=1

    0
    None
    BodenM

    7 years ago on Introduction

    I'm looking at building this, so I have to ask if it is possible to have 2 cores showing independently, and just the free physical memory, instead of the setup shown here? And if so, could you please show me the changes I need to make (I'm a Python newbie)?

    2 replies
    0
    None
    janwBodenM

    Reply 7 years ago on Introduction

    I wrote you a code for the dual core setup. If you use this code with the same hex-file loaded in the microcontroller then the first bar is core1, the second is core2 and the last is your physical memory.

    Good luck with your project.

    0
    None
    stan4

    7 years ago on Introduction

    Awesome work buddy.

    You just inspired me, I was looking for something pretty to put on my computer, and be able to call it "mod".

    3 replies
    0
    None
    stan4janw

    Reply 7 years ago on Introduction

    I read through everything in detail, also the documentation for psutil, I couldn't spot a "function" to read the GPU usage, can you give me a few tips? perhaps another library, thanks in advance.

    0
    None
    janwstan4

    Reply 7 years ago on Introduction

    There are indeed no functions to readout the graphic processing unit. Psutil workks only for CPU, memory and disks.

    0
    None
    Megrathea69

    7 years ago on Introduction

    was thinking,maybe you could add another 2 led bars onto it for Hard Driv(C drive) temperature and fan speed readings as well.

    2 replies
    0
    None
    janwMegrathea69

    Reply 7 years ago on Introduction

    I is very easy to do indeed as there are still 2 free I/O pins on the Attiny. It can also be reprogrammed so that it gives the CPU-load of the 2 separate cores instead of the total CPU-load.

    0
    None
    mathman47

    7 years ago on Introduction

    Interesting application. I use several Widgets on a 2 monitor setup to monitor system activity so I don't really need this, but I'm glad you showed how to do it. It reminds me of why people climb mountains - because they are there. In this case, it is because you can. Great job. Exposure to the code is enough for me.

    3 replies
    0
    None
    janwmathman47

    Reply 7 years ago on Introduction

    Great to see that there are people who understand that 'because I can' is a great motivation to build stuff. Most of my projects are not really original or pretty but build to see whether I can build it and to learn from it.

    0
    None
    janwbertus52x11

    Reply 7 years ago on Introduction

    I learned these skills by building stuff like this and learning from it but you will never hear me say that I mastered them. Every day I learn new things and for me thats the main drive to keep building these little projects.