Go Down

### Topic: how to rotate matrix scroll by 90 degrees in code (Read 5256 times)previous topic - next topic

#### Aaron_dyer

##### Dec 05, 2012, 08:44 pm
Hey guys...I have a 16 x 8 matrix scrolling and adding on 2 more 8 x 8 matrices to make a 32 x 8 matrix scroll.....however, the I have to physically rotate the matrices...how can you do it in code because its difficult for this to work with how the pinouts get placed.....my code is attached

#### Grumpy_Mike

#1
##### Dec 05, 2012, 08:54 pmLast Edit: Dec 05, 2012, 08:57 pm by Grumpy_Mike Reason: 1
Just rotate your character definitions.

Just write down the columns as rows.

#### Aaron_dyer

#2
##### Dec 05, 2012, 09:00 pm
could you look at my code and explain where I would do that though please

#### Grumpy_Mike

#3
##### Dec 05, 2012, 09:06 pm
I am on my iPad and it won't copy your code but I will try.
Code: [Select]
`B00110011;B11001111;B00111000;B01010101;B11011100;B11110000;B00000000;B00011100;`

Would be
B11010000;
B11000000;
And so on, each coloumn becomes a row. This rotates the pattern you se.

#### dhenry

#4
##### Dec 05, 2012, 09:17 pm
If you look at your code, it is using printLED(). In particular, it uses this line:

Code: [Select]
`   int c = font8x8[(number * 7) + a];      // Index into character table to get row data`

All you need to do is to rewrite that line.

#### Aaron_dyer

#5
##### Dec 05, 2012, 09:21 pm
I'm sorry I don't follow.....how would you rewrite it

#### dhenry

#6
##### Dec 05, 2012, 09:26 pm
Sure.

Code: [Select]
`   int c = (font8x8[(number * 7) + 0] & (1<<a))?0x80:0;      // Index into character table to get row data   c |= (font8x8[(number * 7) + 1] & (1<<a))?0x40:0;   c |= (font8x8[(number * 7) + 2] & (1<<a))?0x20:0;   c |= (font8x8[(number * 7) + 3] & (1<<a))?0x10:0;   c |= (font8x8[(number * 7) + 4] & (1<<a))?0x08:0;   c |= (font8x8[(number * 7) + 5] & (1<<a))?0x04:0;   c |= (font8x8[(number * 7) + 6] & (1<<a))?0x02:0;   c |= (font8x8[(number * 7) + 7] & (1<<a))?0x01:0;`

This rotates the display 90/270 degrees. Depending on your physical orientation, it may be right-side-left. In that case, switch 0x80 with 0x01; 0x40 with 0x02; ...

#### CrossRoads

#7
##### Dec 05, 2012, 09:55 pm
Sometimes its easier to just look at youyr hardware a different way and rewire it to match.
For example, here are two parts advertised as common cathode and common anode (from futurlec.com).
You can see that if you orient them so the common anodes are connected in rows going across and the common cathodes are connected in columns going up, they are the same functionally, with just different IO pins.
So you can use them interchangeably as long as you determine where the top left corner LED is for instance and connect your anode and cathode accordingly and follow suit for the rest of the pins.
For these parts for example:
common cathode, anode-pin9 and cathode-pin16 turns on the top left; common anode, anode-pin8 and cathode-pin9 turns on the top left.
Designing & building electrical circuits for over 25 years.  Screw Shield for Mega/Due/Uno,  Bobuino with ATMega1284P, & other '328P & '1284P creations & offerings at  my website.

#### Aaron_dyer

#8
##### Dec 07, 2012, 12:35 am
Hey crossroads.....how ya been.....so I'm working on a new 32x8, my first one worked ok, all the matrices showed the same letter as it scrolled each one individually ...that was with my mega2560......but now I've got a 16x8 scrolling perfect.....I did just rotate the matrices physically....however I add on two more to make it 32x8 and the 3and 4 matrix are blank while 1and 2 scroll across.....I have them cascaded, all caps and resistors in place.....I'm using a nano this time.......ill paste my code in the morning....

Go Up