"reversed_a = a REV 8 'reverse 8 bits of variable a in which I mirrored PORTA register"
B0 = portx
B1 = ^ B0 ' Reverse state of bits of B0
B0 = NCD B1
select case etc
Bruces would probably be the fastest way, I have an affliction for making thinks more complex than perhaps need be. Did not realise pins default high etc.
All the best
Last edited by sheepdog; - 7th October 2008 at 23:25. Reason: not needed after hit detection
Interesting, it would be fine if I was scanning from MSB to LSB, it is not the case.
Pin0 is the head
...
Pin4 is the right arm
Default porta is %xx111111
If Pin0 is activated we will have %xx111110
Reversed it will be %xx000001
It will tell me it is pin0, okay. What if there are two activated pins, example, reversed it would be %xx001001, it will tell me the activated pin is pin 3, which is true but as I have to scan starting from pin0, I will think the left arm was hit and use that info while the head was hit too, which is much worst (lethal) and the player will get some damage while a hit in the head would tag him out. See?
Uh, seems that things are not so easy...
This time I guess it is a hardware concern.
I put a pin (c2) high somewhere before the routine that reads the incoming signal and put it low after, just to have a visual estimation of the time it takes to complete the routine.
The pin is just a test pin that lights a 5V led.
If I don't connect the led to the pin, then the signal is invalid but if I connect the led, all incoming signals are good...
C2 is an output pin, default low (no external WPU or WPD resistor).
If I connect the pin to GND through a 10K resistor, it is better but sometimes the signal is missed. Connecting the led ensures the signal is collected fine...
It makes no sense.
1 hour later:
I noticed I left from previous test C0 as input, default high but not using an external WPU.
I changed it back to output, default low.
Still I would miss some signals.
Then adding a 10K WPD instead of a led on the OUTPUT pin C2 seems to fix the problem.
I wonder how a WPD on an OUTPUT pin acts on my code ???
You are right, bit shuffling and time wasting.
Following your advice I sticked to my previous code (the one with the TIMER1) and amazing enough, it works (there was a debugging LCDOUT with a PAUSE 2000 adding a delay such that the next signal coming 100ms later would never be recorded anyway). Now the test led lights up very shortly (meaning the code is executed very fast) and when sending a burst of 4 signals from the remote other PIC, one every 100ms, the receiver circuit records all 4 signals (even with WRITEs adding some extra delays). I feel so releived... Thank god, it took so many hours/nights to get it right, I can go on with the other features.
Thanks to all of you. Hope these posts might help others.
I know that some questions I ask sometimes sound like: "I'm stuck, what is the answer?".
I'm not asking for the solution but some ideas and some comments might guide me or show me an obvious mistake. I enjoy finding solutions myself but often, you guys help me a lot, either by a direct answer or by discussing about the stuff.
I wish some day I will be able to help other.
It's nice to have such places as this forum to brainstorm (I could not do that with Victoria, my almost 3 month old daugther who can anly say "agheu" and "pa"
Still, I guess it would have worked with the PULSIN, I probably wasn't using it right but I didn't discover yet wat mistake I was making. As soon as I'm finished with higher priority coding I will get back to this chunk of code and see why the PULSIN version was taking about 1s to collect the 16 bits...
"Also, what happens if none of the pins are hit? If more than one pin is hit?"
-> If none are hits? How could it be, the code is in the int handler so there must be a pin that went from default HIGH to low because the TSOP sensor-demod received an IR signal and triggered the pic pin connected to it. There will always be one pin activated.
What if more than one pin? Well, as I'm scanning the pins from pin 0 to pin 4 I will stop at the first pin that changed (as they are all default HIGH) and use that pin and deliberately ignore the other pins. As in real life, you can't be hit at the head AND at the leg with the same bullet, right? I check the most lethal area first, if the guy is hit in the head, who cares about a bullet hitting the arm...
You know, Xnihilo - it's such a pleasure to see someone working themselves through a problem with the help of the guys on this Forum - and solving it
But, that's what the forum it's all about, isnt it?
YesI just wish I can help other one day as much as I could be helped.
Bookmarks