PWM mit Gnublin

Autor: Hubert Högl <Hubert.Hoegl@hs-augsburg.de>
Datum: 2012-01-25

URL: XXX

Vorkenntnisse:

Siehe Python-Modul prog/pwm.py:

"""
PWM Demo fuer Gnublin LPC3131

root@armv5te:~# modprobe lpc313x_pwm
[lpc313x pwm] pwm frequency: 1464 Hz
[lpc313x pwm] driver loaded with major 253
[lpc313x pwm] >> $ mknod /dev/lpc313x_pwm c 253 0

Der 12-Bit PWM Wert wird als Folge von zwei Byte geschickt:

root@armv5te:~# echo <lowbyte> <highbyte> > /dev/lpc313x_pwm

Der Treiber ist hier beschrieben:

  http://www.mikrocontroller.net/topic/237277

H. Hoegl, 25. Januar 2012
"""
import time

def d2s(v):
    ''' v is between 0 and 4095 '''
    b0 = v & 0xff
    b1 = (v & 0xfff) >> 8
    return chr(b0) + chr(b1)

def pwm_raw(v):
    if v < 0 or v > 4095:
        print "v is out of range"
        return
    p = open("/dev/lpc313x_pwm", "wb")
    s = d2s(v)
    p.write(s)
    p.flush()
    p.close()

def pwm(r):
   '''Set PWM output to 0.0% <= r <= 100.0%'''
   v = int( r/100.0 * 4095 )
   pwm_raw(v)

if __name__ == "__main__":
    pwm(50)

Auf dem Gnublin Shell Prompt nun folgende Eingaben machen:

root@armv5te:~# modprobe lpc313x_pwm
[lpc313x pwm] pwm frequency: 1464 Hz
[lpc313x pwm] driver loaded with major 253
[lpc313x pwm] >> $ mknod /dev/lpc313x_pwm c 253 0
root@armv5te:~# python
Python 2.6.6 (r266:84292, May 20 2011, 22:44:14)
[GCC 4.5.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pwm
>>> pwm.pwm_raw(1000)
[lpc313x pwm debug message] pwm to 1000 (24%)
pwm-img/TEK0000.JPG
>>> pwm.pwm(50)
[lpc313x pwm debug message] pwm to 2047 (49%)
pwm-img/TEK0001.JPG
>>> pwm.pwm(1)
[lpc313x pwm debug message] pwm to 40 (0%)
pwm-img/TEK0002.JPG
>>> pwm.pwm(99)
[lpc313x pwm debug message] pwm to 4054 (98%)
pwm-img/TEK0003.JPG
root@armv5te:~# rmmod lpc313x_pwm
[lpc313x pwm] cleanup