[HH] Seeking help on Programming I2C bus in python on Raspberry Pi

Greg London email at greglondon.com
Thu Nov 15 18:17:26 EST 2012


> *and I tried just setting a to various numbers 1,2,3,4,5,6,7,8,9 and
> the led seem to light up in no understandable pattern, sometimes
> individually and sometimes multiple LEDs go on.. *

Sounds like you need to learn about binary, decimal, and hexadecimal
number formats. And be able to convert from one to another.

http://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html

The LED's are controlled by an 8 bit register.
This would hold decimal numbers from 0 to 255.
which would be 0 to FF hex
and 0 to 1111_1111 binary.

What you will have to do is think in binary.
each bit of the binary value will control a single LED.

if you write decimal numbers in sequence like 1, 2, 3, 4, 5,
then you will get the following binary pattern:

0000_0001
0000_0010
0000_0011
0000_0100
0000_0101

Every bit is wired to an LED, and every bit that is a "1"
will turn that LED on (or maybe its the zeroes that turn it
on, depending on how your schematic is wired)

So, you'll need to think in terms of binary all the time to
figure out which LEDs to turn on.





> Thank you Tom, Jon, and Greg,
>
> I am grateful for all the help while I go through this challenge.
>
> Tom, I have previously responded to Jon and Greg privately trying to avoid
> too many emails to the group.
>
> But yes, your tracking of my progress of the project is right, I basically
> have proof of concept with hardware, circuits and now it is just the
> software programming..
>
> Following the code in the previously mentioned example, I am trying to
> adapt it to working with the Bar LED..
>
> I have isolated the critical piece of code is
>
>
>    for x in range(0,8):
>      a = 1 << x
>      set_led(a,0)
>      time.sleep(delay)
>    set_led(0,0)
>
>
> in code :  set_led(x,y) x is the data and y is the bank.
>
> so I am confused on x or data piece of the parameter..
>
>
>
> in the above code set_led(a,0)
>
> *a= 1 << x what does this statement do?*
>
> *and I tried just setting a to various numbers 1,2,3,4,5,6,7,8,9 and
> the led seem to light up in no understandable pattern, sometimes
> individually and sometimes multiple LEDs go on.. *
>
>
> So basically, once I get to know how to control the leds on the bar
> graph, then I can start deciphering the code for letters and words
>
>
> Thanks to the group
>
>
> Ming
>
>
>
> On Thu, Nov 15, 2012 at 2:36 PM, Tom Metro
> <tmetro+hhacking at gmail.com>wrote:
>
>> Ming kuo wrote:
>> > Hi Guys, I was recently introduced to this group, so here is my first
>> post.
>>
>> Welcome to the group.
>>
>>
>> > I figured out the wiring to get the bar to light up using the same
>> codes
>> > as above.
>>
>> Sounds like you've got the hard part done. If you've gotten that much to
>> work, then you've proven the hardware works, and the basic software
>> works. Now you just need to tweak the behavior.
>>
>>
>> > I am stuck...on the python code to control the I2C.
>> > This is my immediate challenge to figure out how to program the
>> > I2C for the LED bar...
>>
>> Can you clarify?
>>
>> You said above that you succeeded in getting the bar to light up using
>> the same setup as the article you referenced. That implies you have a
>> working I2C driver and some Python code using it.
>>
>>
>> > ...I need to program a python code to POV display the messages which
>> > i can imaging that it get pretty challenging given how to form a
>> > character with LED while timing the rotation.
>>
>> So POV is persistence of vision? You're looking to build something like:
>> http://www.youtube.com/watch?v=fJBYOU-Y-ZU
>>
>> How do you plan to move the display?
>>
>> To build on what Jon Evans said in his reply, it sounds like what you
>> have left to do is less hardware hacking and more basic Python coding.
>> Looking at the sample code:
>> http://www.skpang.co.uk/blog/wp-content/uploads/2012/06/ledchaser.py
>>
>> they provide a set_led() function, so you'll need to remove the two
>> chunks of code used to strobe the LEDs ("# Move led left " and "# Move
>> led right") and replace them with your character generating code.
>>
>> Not trivial but given that POV displays seem to be popular, likely you
>> can find some existing code for the character generator. If not, you'll
>> need to dig up a library or lookup table that maps characters to dot
>> patterns. Basically a dot matrix font. Then build a function that when
>> given a character, translates that into the equivalent array of dots.
>>
>> I'd be inclined to use an architecture where rows of dots are pushed
>> onto a stack, and then some background process is responsible for
>> pulling a row from the stack and lighting up the LEDs on a steady clock
>> rate. (I'm not sure if that's easy to accomplish in Python.)
>>
>> I'm guessing that with most of these POV displays, there isn't any real
>> synchronization between the display motion and the strobing. The builder
>> simply tunes the strobe rate until it works most of the time for
>> whatever RPM their display ends up running at.
>>
>>
>> > So any help through email or in person would be greatly appreciated.
>>
>> Post some follow up questions as you get stuck and we'll see what we can
>> do.
>>
>>  -Tom
>>
> _______________________________________________
> Hardwarehacking mailing list
> Hardwarehacking at blu.org
> http://lists.blu.org/mailman/listinfo/hardwarehacking
>


-- 





More information about the Hardwarehacking mailing list