Nope The Same
The part that is slow is going from SUB1 to SUB2 not the looping through them 4096 times
I just tried taking out the GOSUB's and still the same thing
There are couple of workarounds available:
1) changed crystal to 20MHz
2) If Shiftout command is too slow
then don't use it. Do it other way (e.g code below).Code:<code><font color="#000000"> <b>SHIFTOUT </b>dpin,clk,1,[Dat] </code>
This will run much faster but consume more code space. Trade-off that you have to live with.Code:<code><font color="#000000"> dpin = Dat.0(7) : clk = 1 : clk = 0 dpin = Dat.0(6) : clk = 1 : clk = 0 dpin = Dat.0(5) : clk = 1 : clk = 0 dpin = Dat.0(4) : clk = 1 : clk = 0 dpin = Dat.0(3) : clk = 1 : clk = 0 dpin = Dat.0(2) : clk = 1 : clk = 0 dpin = Dat.0(1) : clk = 1 : clk = 0 dpin = Dat.0(0) : clk = 1 : clk = 0 </code>
BTW, DATA is reserved word so therefore I changed it to Dat
BR,
-Gusse-
Last edited by Gusse; - 8th May 2010 at 09:05. Reason: Crystal comment added
Nope the same.
20 MHz Clock will still be too slow with SHIFTOUT.
I am assuming your code has something to do with accessing per bit in the word sized Dat variable. So if I wanted to access the 11th bit I would do this Dat.1(2) right?
Would anyone have a faster way in Assembly I could do this?
Also Does anyone know how many clock pulses SHIFTOUT uses?
Last edited by wolwil; - 8th May 2010 at 17:16.
In your 1st post you are saying that you are running @16MHz. 20MHz is 25% faster than you present system.
Code does exactly the same as SHIFTOUT but just little bit faster.
If this didn't help then SHIFTOUT is not the bottleneck.
Keep looking other solutions.
11th bit would be Dat.0(10).
Example below (remember MSBFIRST).
EDIT: If you or anybody know faster SHIFTOUT workaround with PBP, I would be interested.Code:<code><font color="#000000"> Dat VAR BYTE [2] dpin = Dat.0(7) : clk = 1 : clk = 0 dpin = Dat.0(6) : clk = 1 : clk = 0 dpin = Dat.0(5) : clk = 1 : clk = 0 dpin = Dat.0(4) : clk = 1 : clk = 0 dpin = Dat.0(3) : clk = 1 : clk = 0 dpin = Dat.0(2) : clk = 1 : clk = 0 dpin = Dat.0(1) : clk = 1 : clk = 0 dpin = Dat.0(0) : clk = 1 : clk = 0 dpin = Dat.0(15) : clk = 1 : clk = 0 dpin = Dat.0(14) : clk = 1 : clk = 0 dpin = Dat.0(13) : clk = 1 : clk = 0 dpin = Dat.0(12) : clk = 1 : clk = 0 dpin = Dat.0(11) : clk = 1 : clk = 0 dpin = Dat.0(10) : clk = 1 : clk = 0 <font color="#000080"><i>'<- 11th </i></font>dpin = Dat.0(9) : clk = 1 : clk = 0 dpin = Dat.0(8) : clk = 1 : clk = 0 </code>
BR,
-Gusse-
Last edited by Gusse; - 8th May 2010 at 18:16. Reason: EDIT
Well I have come to the realization that it is not the SHIFTOUT slowing me down but the pulsing of PORTA.3 for 4096 times. I need to get this to be faster.
For better help on this I am going to add on to an older post that deals with the chip I am using so I don't create multiples on here.
Thanks everyone for your help.
Use a 16 bit counter in assembly to count to 0FFF.
In that loop, use the instruction -
btg LATA.3
You can't get much quicker than that.
I haven't counted exactly, but it looks to be under 14 cycles. At 40Mhz, that is
1.4uSEC = 714 Khz.
Charles Linquist
Bookmarks