Skip to main content

setting up pwm

There's always an obstacle..

I implemented the pwm module as described in the link in the previous post, but oddly enough, it didn't work.

The error I received:

AttributeError: 'module' object has no attribute 'PWM'

After some time scratching my head, I came to the realization that somehow my python was running an older version of the RPi.GPIO library, as PWM control was a pretty recent addition to the library. 

And indeed it was. 

Not really sure what's happening in detail, but it seems that there are two different... entities? that manage libraries for Python. One is through the usual "apt-get" command and the other is "pip." It appears that Python looks at "pip" first, and it currently linked RPi.GPIO to a really old version of the library. 

Uninstalling that older version ("pip uninstall RPi.GPIO") and using the version I obtained through apt-get ("apt-get install python-rpi.gpio") solved this. 

Now, a less-hacky implementation of PWM. 

Note that the PWM offered in this library is a software-driven PWM, meaning that the cycles it counts are based on the cycle count of the process (program). This can be inaccurate because programs can be put "on hold" by the operating system during heavy load, and during this time on hold, it stops counting. Because PWM relies on timing, this could cause "jitters" in the devices that read the signal. A better implementation is a hardware-driven PWM, which uses the clock cycles in the physical board to count. 

For now, I think the software-driven PWM will be fine.

Time's up for working on this today; I'll change messages into JSON next time, I guess.

Comments

Popular posts from this blog

quick recollection on setting things up

If I can swear that the password is correct, then it's possible that I'm getting the ID wrong. Hadn't logged into the web server in a couple of months and was unable to SSH into it. After an hour or so, I ended up deleting the instance and recreating a clean instance (read: erasing everything). I then realized I'd been putting the wrong ID.   apt-get install sudo apt-get install Anyways, some links I visited when setting things up (pretty much a dump of whatever I copy-pasted to notes) : Raspberry Pi http://www.makeuseof.com/tag/optimize-the-power-of-your-raspberry-pi-with-raspbian/ Logging http://docs.python.org/2/howto/logging-cookbook.html Tornado - Python webserver that supports Websocket http://stackoverflow.com/questions/2924991/what-popular-webservers-have-support-for-html5-websocket http://lowpowerlab.com/blog/2013/01/17/raspberrypi-websockets-with-python-tornado/ http://stackoverflow.com/questions/11695375/tornado-identify-tra...

warming up

I still don't have all the parts I need to do what I need to do, but I started working with what I had around. I had a 4-digit 7-segment led which I had ordered previously, but for the longest time I had thought I needed additional parts to make it work. It was only today that I realized that that was not the case. Getting some help from this site , I was able to get the digits fired up: This method uses way more wires than this guy  (which uses a serial communications protocol called I^2C), but it's good to see it work. I still do want to try the less-wire led setup, as I would like to try playing around with I^2C. In addition, I had recently purchased an Arduino Pro Mini , which contains all the capabilities of the above Arduino Uno but requires pins/connections to be soldered into the board. I had attempted to solder one part of it (the serial/USB connections) a few days ago (note that this was my first attempt ever at soldering), and the USB-to-Serial interface...

chunk update: most parts printed and assembled

currently: stuff that happened are: wired the fingers added screws to necessary assemblies witnessed first failed print during this: servos haven't come yet, but once they do, we can start installing them into the hand/forearm. as always, credit to the Inmoov project.