|
|
View previous topic :: View next topic |
Author |
Message |
kikoou
Joined: 25 Oct 2011 Posts: 10
|
control 8x8 matrix with 74HC595 |
Posted: Sun Feb 12, 2012 4:36 am |
|
|
hi everybody im new in this forum and i like to know how can i programm 8x8 led matrix with pic16F877 ,shift register 74HC595
but the first thing taht i need t know is how can i send data from the SDO pin(like 0x3F) to the SD of 74HC595 and how can i control the SH_CP,ST_CP(input of 74HC595) from the pic specially im using the picC compiler |
|
|
Lemosek
Joined: 15 Oct 2011 Posts: 36
|
|
Posted: Sun Feb 12, 2012 4:46 am |
|
|
Hello,
This is a simple diagram how you must connect led matrix to uk.
Best regards
R.L. |
|
|
kikoou
Joined: 25 Oct 2011 Posts: 10
|
|
Posted: Sun Feb 12, 2012 4:57 am |
|
|
thank you for reply
but the problem that i can't make a clear programm its so difficult and im beginner on PICC compiler i want to creat for exemple the diferent number on this led matrix but i can't send my data for exemple i need to send on the(SDO(pic)to (data)74hC595)like(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char Espace
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char Espace
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char Espace
0x00, 0x00, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00, // Code pour char !
0x00, 0x24, 0x7E, 0x24, 0x24, 0x7E, 0x24, 0x00, // Code pour char #
0x00, 0x26, 0x49, 0x49, 0xFF, 0x49, 0x32, 0x00, // Code pour char $
0x00, 0x46, 0x26, 0x10, 0x08, 0x64, 0x62, 0x00, // Code pour char %
0x00, 0x70, 0x8E, 0x89, 0x99, 0x76, 0xC0, 0x00, // Code pour char &
0x00, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char '
0x00, 0x7E, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char (
0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x7E, 0x00, // Code pour char )
0x00, 0x00, 0x0A, 0x04, 0x0A, 0x00, 0x00, 0x00, // Code pour char *
0x00, 0x10, 0x10, 0x7C, 0x10, 0x10, 0x00, 0x00, // Code pour char +
0x00, 0x00, 0x00, 0x80, 0x60, 0x00, 0x00, 0x00, // Code pour char ,
0x00, 0x00, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, // Code pour char -
0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, // Code pour char .
0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, // Code pour char /
0x00, 0x7E, 0xC1, 0xB1, 0x8D, 0x83, 0x7E, 0x00, // Code pour char 0
0x00, 0x04, 0x02, 0x01, 0xFF, 0x00, 0x00, 0x00, // Code pour char 1
0x00, 0xE6, 0x91, 0x91, 0x89, 0x89, 0x86, 0x00, // Code pour char 2
0x00, 0x42, 0x81, 0x89, 0x89, 0x89, 0x76, 0x00, // Code pour char 3
0x00, 0x30, 0x28, 0x24, 0x22, 0xFF, 0x20, 0x00, // Code pour char 4
0x00, 0x4F, 0x89, 0x89, 0x89, 0x89, 0x71, 0x00, // Code pour char 5
0x00, 0x7E, 0x89, 0x89, 0x89, 0x89, 0x72, 0x00, // Code pour char 6
0x00, 0x01, 0x01, 0xF1, 0x09, 0x05, 0x03, 0x00, // Code pour char 7
0x00, 0x76, 0x89, 0x89, 0x89, 0x89, 0x76, 0x00, // Code pour char 8
0x00, 0x4E, 0x91, 0x91, 0x91, 0x91, 0x7E, 0x00, // Code pour char 9
0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, // Code pour char :
0x00, 0x00, 0x80, 0x68, 0x00, 0x00, 0x00, 0x00, // Code pour char ;
0x00, 0x00, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, // Code pour char <
0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, // Code pour char =
0x00, 0x00, 0x00, 0x44, 0x28, 0x10, 0x00, 0x00, // Code pour char >
0x00, 0x06, 0x01, 0xB1, 0x09, 0x09, 0x06, 0x00, // Code pour char ?
0x00, 0x7E, 0x99, 0xA5, 0xA5, 0xB9, 0x5E, 0x00, // Code pour char @
0x00, 0xE0, 0x1C, 0x13, 0x13, 0x1C, 0xE0, 0x00, // Code pour char A
0x00, 0xFF, 0x89, 0x89, 0x89, 0x8E, 0x70, 0x00, // Code pour char B
0x00, 0x7E, 0x81, 0x81, 0x81, 0x81, 0x42, 0x00, // Code pour char C
0x00, 0xFF, 0x81, 0x81, 0x81, 0x42, 0x3C, 0x00, // Code pour char D
0x00, 0xFF, 0x89, 0x89, 0x89, 0x81, 0x81, 0x00, // Code pour char E
0x00, 0xFF, 0x09, 0x09, 0x09, 0x01, 0x01, 0x00, // Code pour char F) |
|
|
kikoou
Joined: 25 Oct 2011 Posts: 10
|
|
Posted: Sun Feb 12, 2012 5:20 am |
|
|
all that im asking you is helping me to know how can i write just one number and evrything gone be clear in mind it depend only in one number no more
and thank you again for helping me Lemosek
and now im using the ULN2804 |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9221 Location: Greensville,Ontario
|
|
Posted: Sun Feb 12, 2012 6:48 am |
|
|
I suggest you start with the '595 example that CCS kindly supplies in the Examples folder that you got with the compiler. By experimenting with it, you'll quickly see the code required to control the '595.
Sending data to the '2803 is a simple byte transfer
Taking what you learn from both and merging the two programs will give you what you to do. |
|
|
Lemosek
Joined: 15 Oct 2011 Posts: 36
|
|
Posted: Sun Feb 12, 2012 9:13 am |
|
|
Hello I also suggest to see EX_EXPIO.c in PICC/Example folder.
If it help you, I have some code for gcc compiler, so You can transfer this to CCS.
Code: |
void writeOutputs()
{
uint8_t j;
ClrGPIOBit(EXP_OUT_CLOCK_PORT, EXP_OUT_CLOCK_BIT);
ClrGPIOBit(EXP_OUT_ENABLE_PORT, EXP_OUT_ENABLE_BIT);
for(j=1;j<=NUMBER_OF_74595*8;++j)
{
if(OUT.Outputs[j]==1)
{
SetGPIOBit(EXP_OUT_DO_PORT,EXP_OUT_DO_BIT);
}
if(OUT.Outputs[j]==0)
{
ClrGPIOBit(EXP_OUT_DO_PORT,EXP_OUT_DO_BIT);
}
SetGPIOBit(EXP_OUT_CLOCK_PORT,EXP_OUT_CLOCK_BIT);
ClrGPIOBit(EXP_OUT_CLOCK_PORT,EXP_OUT_CLOCK_BIT);
}
SetGPIOBit(EXP_OUT_ENABLE_PORT, EXP_OUT_ENABLE_BIT);
}
void Set74Bit(uint8_t BitNumber, uint8_t State)
{
OUT.Outputs[BitNumber] = State;
writeOutputs();
}
void Set74Byte(int ByteNumber, unsigned char Value)
{
OUT.Outputs[ByteNumber*8+1] = ((Value & 0x01) ? 1 : 0);
OUT.Outputs[ByteNumber*8+2] = ((Value & 0x02) ? 1 : 0);
OUT.Outputs[ByteNumber*8+3] = ((Value & 0x04) ? 1 : 0);
OUT.Outputs[ByteNumber*8+4] = ((Value & 0x08) ? 1 : 0);
OUT.Outputs[ByteNumber*8+5] = ((Value & 0x10) ? 1 : 0);
OUT.Outputs[ByteNumber*8+6] = ((Value & 0x20) ? 1 : 0);
OUT.Outputs[ByteNumber*8+7] = ((Value & 0x40) ? 1 : 0);
OUT.Outputs[ByteNumber*8+8] = ((Value & 0x80) ? 1 : 0);
writeOutputs();
} |
Best regards
R.L. |
|
|
kikoou
Joined: 25 Oct 2011 Posts: 10
|
|
Posted: Sun Feb 12, 2012 10:09 am |
|
|
plz somebody help me to find this code because we are beginner in programing on PICC and i need to know how can i program things like that. |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9221 Location: Greensville,Ontario
|
|
Posted: Sun Feb 12, 2012 12:25 pm |
|
|
You've got to crawl before you can run let alone walk.
Please, you must try the examples for the 595 that CCS supplies.Get familiar with the style of coding, and create your own programs, simple stuff like turning on specific LEDS using the 595 driver that CCS supplies.
Most everyone here is happy to help but you have to show effort to try it on your own, especially the basics like 'blinking LED' programs. |
|
|
Mike Walne
Joined: 19 Feb 2004 Posts: 1785 Location: Boston Spa UK
|
Make it simpler |
Posted: Mon Feb 13, 2012 8:10 am |
|
|
If you want to make things a lot simpler, throw out the peripheral chips and drive the LED matrix directly from two PIC ports.
Say drive the anodes from port D and cathodes from port C. Don't forget to include sufficiently large value resistors in series with the anodes as shown in Lemosec's schematic.
The display may be rather dim, but you should not run the risk of burning out your LEDs. LED matrix driving has been discussed many times, and at length, on this forum.
Like temtronic says you must do some work yourself, then people are willing to help you.
Mike |
|
|
kikoou
Joined: 25 Oct 2011 Posts: 10
|
|
Posted: Mon Feb 13, 2012 11:49 am |
|
|
I don't know how can i put my schematics on ccsinfo. And it will be better if you can see my schematics because thats make you feeling how much I'm good on electronics. But my problem is that I'm beginner on PICC compiler. Just all that i need is the right code because thats help me to know how can i do things right.
For your attention I did it with 20 8x8 matrix and without 16f877 but now i like to control it with 16f877. |
|
|
kikoou
Joined: 25 Oct 2011 Posts: 10
|
|
Posted: Mon Feb 13, 2012 12:56 pm |
|
|
plz at least help me to create just one number because i tried really so hard but i can't find the way to accomplish my desire just to give you some information about my schematic
pic 16f877:
pin_C5==data 74HC595
pin_C6==clk74HC595
pin_C3==RCLK74HC595
all what can i do to create M is:
Code: |
#include <16F877.h>
#use delay(clock=40000000)
#define DATA pin_c5
#define CLOK pin_c3
#define RCLOK pin_c6
void main()
{
int i,const byte DIG[]={ 0x7F,0x7F, 0x02, 0x04, 0x02, 0x7F,0x7F } // M
for(i=0;i<8;i++)
{
output_c(i)
}
|
I know that I'm wrong but just i need some help to make things right.
Thanks in advance for helping me to accomplish what I'm doing. |
|
|
Mike Walne
Joined: 19 Feb 2004 Posts: 1785 Location: Boston Spa UK
|
Start from simple beginnings |
Posted: Mon Feb 13, 2012 3:09 pm |
|
|
I'm suggesting you connect your matrix as:-
Port D driving anodes.
Port C driving cathodes via current limiting resistors.
Code: |
-----------------
RD7 -------------------| o o o o o o o o |
RD6 -------------------| o o o o o o o o |
RD5 -------------------| o o o o o o o o |
RD4 -------------------| o o o o o o o o |
RD3 -------------------| o o o o o o o o |
RD2 -------------------| o o o o o o o o |
RD1 -------------------| o o o o o o o o |
RD0 -------------------| o o o o o o 0 0 |
-----------------
| | | | | | | |
RC7 -------WWW----------- | | | | | | |
RC6 -------WWW------------- | | | | | |
RC5 -------WWW--------------- | | | | |
RC4 -------WWW----------------- | | | |
RC3 -------WWW------------------- | | |
RC2 -------WWW--------------------- | |
RC1 -------WWW----------------------- |
RC0 -------WWW-------------------------
|
The CCS example EX_LED.C shows how to drive 2 seven segment LEDs.
This arrangement is the same expanded to 8.
Like temtronic says start by flashing one LED and grow from there.
You can control individual LEDs with statements like output_high(PINxx) and output_low(PINxx).
Then move on to driving complete ports all at one go, and finally the entire matrix of 8 columns in sequence.
You say you've driven 20 8*8 devices before. So you must know about multiplexing.
It's all there in the CCS example. You've got 8 LED columns instead of the two separate seven segment displays. You simply expand on their sample.
Mike. |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9221 Location: Greensville,Ontario
|
|
Posted: Mon Feb 13, 2012 3:14 pm |
|
|
I like using 'W's for resistors instead of '_/\/\/\_' !! |
|
|
Mike Walne
Joined: 19 Feb 2004 Posts: 1785 Location: Boston Spa UK
|
|
Posted: Mon Feb 13, 2012 3:22 pm |
|
|
Thanks
Mike |
|
|
Mike Walne
Joined: 19 Feb 2004 Posts: 1785 Location: Boston Spa UK
|
To kikoou |
Posted: Mon Feb 13, 2012 4:21 pm |
|
|
You keep asking for complete compilable code to drive your matrix.
The reasons we're not doing it include:-
(1) A lot of us charge $$$$$ or ££££ for that kind of work.
(2) You will learn nothing.
(3) You'll come back to us again the next time you have any sort of problem, and expect another freebie .
Do a search on "matrix" on this forum. There are loads of discussions on how to do your job. Don't expect complete code.
Mike |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|