View previous topic :: View next topic |
Author |
Message |
misperry
Joined: 03 Mar 2009 Posts: 40
|
Shift Registers |
Posted: Sun Aug 23, 2009 2:23 pm |
|
|
Hello all,
It has been a while since I have posted. However, I was wondering if there is anyone knew of how to code shift registers with ccs c code using a pic 16f886?
I have a system that uses magnetic locks and all I need to do is to trigger, using 5volts, certain magnets on and off. Don't worry about the load I have already taken care of it with mosfets between the pic and the magnets. I just need a way of turning them on and off serially since I would need 13 pins for the magnets and I would like to just use shift registers to serialize it so I can use only two pins instead of 13.
So if anyone has any example code or knows of a good place to get the code would be a great help.
thanks to all! |
|
|
Ttelmah Guest
|
|
Posted: Sun Aug 23, 2009 3:02 pm |
|
|
You would really need to use three pins, rather than two.
Clock.
Serial data.
Load.
The problem is that if you just use a shift register, the solenoids will get operated, as the data is shifted in....
Hence what you need is a shift register, and a separate output latch. You simply send the data bit at a time to the register, pulsing the clock for each bit (look at any of the software SPI examples, which do exactly the same thing), and then operate one line, to load the register output, onto an output latch.
However, why not use something like the Microchip MCP23S17 I/O expander?. This, and other members of the same family, offer 16 I/O pins, directly accessible using SPI (or I2C for other versions).
Best Wishes |
|
|
dyeatman
Joined: 06 Sep 2003 Posts: 1934 Location: Norman, OK
|
|
Posted: Sun Aug 23, 2009 3:53 pm |
|
|
TTelmah is correct, it would require three pins for a serial shift register with a latch. A 74C595/74HC595 shift register would do the trick and there's a 74595 driver in the PICC/Driver directory. You can also daisy chain these for as many bits as you need. _________________ Google and Forum Search are some of your best tools!!!!
Last edited by dyeatman on Sun Aug 23, 2009 7:32 pm; edited 1 time in total |
|
|
SherpaDoug
Joined: 07 Sep 2003 Posts: 1640 Location: Cape Cod Mass USA
|
|
Posted: Sun Aug 23, 2009 6:32 pm |
|
|
If you REALLY only have two pins to use you could just shift real fast, faster than the magnets can respond. Maybe sit with all zeros shifted out, then quickly shift out the required pattern, then pause while the magnets respond, then shift out another batch of zeros. But that is a messy solution. _________________ The search for better is endless. Instead simply find very good and get the job done. |
|
|
misperry
Joined: 03 Mar 2009 Posts: 40
|
|
Posted: Sat Aug 29, 2009 10:53 am |
|
|
thanks all.
I have found that you need a latch also. Well I am using a mc74hc595a by ON Semiconductor. I was just wondering if there was a way to use the rs-232 command in in the pic library or if I was going to have to create my own clock signal and data forwarding pins with code? |
|
|
John P
Joined: 17 Sep 2003 Posts: 331
|
|
Posted: Sat Aug 29, 2009 11:45 am |
|
|
If you think you can do it using RS-232, I'm afraid you have a sad misconception about how serial data transmission works.
But on a chip with built-in SPI, which the 16f886 seems to have, you can indeed use the port to operate external shift registers. You just have to provide an extra pin to strobe the output latch of the '595 chip(s), when all your data has been sent. |
|
|
Ttelmah Guest
|
|
Posted: Sat Aug 29, 2009 1:07 pm |
|
|
And (of course), worth realising, that even without the hardware SPI, or on pins without this function, on the later compilers, there is the software SPI library available to do the shifting, and clocking for you, even supporting clocking word lengths other than 8bits....
Best Wishes |
|
|
misperry
Joined: 03 Mar 2009 Posts: 40
|
|
Posted: Mon Aug 31, 2009 7:56 am |
|
|
cool! thanks you guys for all the info. You have been a great help! |
|
|
|