USB CPU and Memory Monitor
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.
What Do You 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.
The Circuit
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.
Programming
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.
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