- Code: Select all
rx_send_command(csn,0x20,0x7A); // Power up, be an xmitter
The comment on that line is misleading. The write to the config register is to clear the PRIM_RX bit. The PWR_UP bit is never cleared.
So, the PWR_UP bit is already set at this point in the code, except maybe on the first transmit. (I'll add a line of code to set PWR_UP bit and delay -- once, at startup)
I'm probing CE on the transceiver card, so yes, a bad solder joint on the module to transceiver pcb could be the issue. I'll try probing right on the module pin.
I started looking closely at a "good" card. One that works reliably at 20 usec CE pulse width. Turns out that it does not work reliably at some longer CE pulse widths. Really long (1200 usec), it is solid, but not at some intermediate CE pulse widths.
I wasn't not sure I believed this wierdness, but it was 100% repeatable on that module. Frustrated, I just went to bed.
If I can't find a bad solder joint through inspection/probing. I'm now going to see if it's repeatable across all modules by "shmooing" CE pulse width in code, with data packet having the CE pulse width. That way I can tell what pulse widths are problematic for each module.
As far as using your firmware--I have been reviewing it carefully. I just removed stuff I didn't think was necessary (as we discussed in other posts). Could be something is needed I'm omitting, but it sure seems straight forward for a simple transmit loop.
Thanks,
Dave Thomas