Raspberry PI and Arduino Tutorials
| KBS - Home |
|---|
| microcontrollers |
| LED |
| Button |
| RPI Camera |
| LCD Display (16x2) |
| LED Matrix (8x8) |
| 7-segment Display |
| RFID RC522 |
The following wiring information is for 2-digit common anode display available here
| No | Segment | GPIO | Pin | Bread Board |
|---|---|---|---|---|
| 1 | E1 | |||
| 2 | D1 | |||
| 3 | C1 | |||
| 4 | DP1 | |||
| 5 | E2 | |||
| 6 | D2 | |||
| 7 | G2 | |||
| 8 | C2 | |||
| 9 | DP2 | |||
| 10 | B2 | |||
| 11 | A2 | |||
| 12 | F2 | |||
| 13 | GND1 | - | ||
| 14 | GND2 | - | ||
| 15 | B1 | |||
| 16 | A1 | |||
| 17 | G1 | |||
| 18 | F1 |
Install RPIO library:
sudo easy_install RPIO
or from the repository:
cd ~
git clone https://github.com/metachris/RPIO.git --branch v2 --single-branch
cd RPIO
sudo python setup.py install
Examle for counting from 0 to 99:
from time import sleep
from RPIO import PWM
PWM.setup()
PWM.set_loglevel(PWM.LOG_LEVEL_ERRORS)
PWM.init_channel(0)
# Dictionary translating numbers to segments byte
num = {
0:(1,1,1,1,1,1,0),
1:(0,1,1,0,0,0,0),
2:(1,1,0,1,1,0,1),
3:(1,1,1,1,0,0,1),
4:(0,1,1,0,0,1,1),
5:(1,0,1,1,0,1,1),
6:(1,0,1,1,1,1,1),
7:(1,1,1,0,0,0,0),
8:(1,1,1,1,1,1,1),
9:(1,1,1,1,0,1,1)}
# Pulse off and on (minimum of 4 for off state = 40 uS)
pulse = {
0:4,
1:999}
# Start alternating 10k uS pulses for the cathodes
PWM.add_channel_pulse(0, 20, 0, 999)
PWM.add_channel_pulse(0, 21, 1000, 999)
# Pin arrangement (A, B, C, D, E, F, G, DP)
pins = []
def SetDual7Seg( value ):
# Split passed value into separate digit integer list
digits = map(int, "%02d" % value)
# Set pulses for segments A-G (both digits)
for i in range(7):
pin = pins[i]
PWM.add_channel_pulse(0, pin, 0, pulse[num[digits[0]][i]])
PWM.add_channel_pulse(0, pin, 1000, pulse[num[digits[1]][i]])
for i in range(100):
SetDual7Seg(i)
sleep(1)
# Stop PWM for channel 0
PWM.clear_channel(0)
# Shutdown all PWM and DMA activity
PWM.cleanup()