Browse Source

reverse SS HIGH/LOW in Scanner_ShiftRegsPISOMultiRow::scan()

tags/v0.6.3
wolfv6 7 years ago
parent
commit
d9465be221

+ 1
- 0
doc/keybrd_library_user_guide.md View File

Development-environment items to check: Development-environment items to check:
* If the keyboard has an I/O expander, power cycle (replug the USB) after loading the HEX file. * If the keyboard has an I/O expander, power cycle (replug the USB) after loading the HEX file.
* Sometimes sketch will not loading properly if two instances of Arduino IDE are open.
* For compile error: * For compile error:
``` ```
'KEY_A' was not declared in this scope 'KEY_A' was not declared in this scope

+ 19
- 7
src/Scanner_ShiftRegsPISOMultiRow.cpp View File

*/ */
void Scanner_ShiftRegsPISOMultiRow::begin() void Scanner_ShiftRegsPISOMultiRow::begin()
{ {
digitalWrite(slaveSelect, HIGH); //initialize ??only needed for first scan
SPI.begin(); //todo move this to constructor or init() SPI.begin(); //todo move this to constructor or init()
} }


/* scan() strobes the row's strobePin and returns state of the shift register's input pins. /* scan() strobes the row's strobePin and returns state of the shift register's input pins.
strobePin is Arduino pin number connected to this row. strobePin is Arduino pin number connected to this row.
Bit patterns are 1 bit per key. Bit patterns are 1 bit per key.

Scanner_ShiftRegsPISOMultiRow class was tested on two sets of 74HC165 shift registers
and 74AHC1G126 tri-state buffer chips

74HC165 is not an SPI device.
The 74HC165 SH/LD polarity is the inverse of SPI slave-select convention.
Most SPI chips will high-Z their MISO pin when their slave select signal is high.
To use SPI-like protocol, 74HC*126 will high-Z the MISO pin when the slave select signal is low.

SPI.beginTransaction() and SPI.endTransaction() are not needed,
but would be needed if trackball uses interrupts.
*/ */
read_pins_t Scanner_ShiftRegsPISOMultiRow::scan(const uint8_t strobePin) read_pins_t Scanner_ShiftRegsPISOMultiRow::scan(const uint8_t strobePin)
{ {
read_pins_t readState = 0; //bits, 1 means key is pressed, 0 means released read_pins_t readState = 0; //bits, 1 means key is pressed, 0 means released


SPI.beginTransaction( SPISettings(5000000, MSBFIRST, SPI_MODE0) ); //control SPI bus, 5 MHz
digitalWrite(strobePin, strobeOn); //strobe on


digitalWrite(slaveSelect, LOW); //load parallel inputs to registers
//SPI.beginTransaction( SPISettings(5000000, MSBFIRST, SPI_MODE0) ); //control SPI bus, 5 MHz


digitalWrite(strobePin, strobeOn); //strobe on
delayMicroseconds(20); //photo-transistor at 3.3v needs 20 ms to stablize


delayMicroseconds(3); //time to stabilize photo-transistor todo need?
delayMicroseconds(50); //todo for sr2_LEDs_strobe.ino
digitalWrite(slaveSelect, HIGH); //shift the data toward a serial output
digitalWrite(slaveSelect, HIGH); //shift the data toward a serial output


digitalWrite(strobePin, strobeOff); //strobe off digitalWrite(strobePin, strobeOff); //strobe off


SPI.transfer(&readState, byte_count); SPI.transfer(&readState, byte_count);


SPI.endTransaction();
//SPI.endTransaction();

digitalWrite(slaveSelect, LOW); //load parallel inputs to registers


return readState; return readState;
} }

+ 1
- 1
src/Scanner_ShiftRegsPISOSingleRow.cpp View File

read_pins_t readState = 0; //bits, 1 means key is pressed, 0 means released read_pins_t readState = 0; //bits, 1 means key is pressed, 0 means released


//read all the column pins //read all the column pins
digitalWrite(slaveSelect, LOW); //load parallel inputs to the register
digitalWrite(slaveSelect, HIGH); //shift the data toward a serial output digitalWrite(slaveSelect, HIGH); //shift the data toward a serial output
SPI.transfer(&readState, byte_count); SPI.transfer(&readState, byte_count);
digitalWrite(slaveSelect, LOW); //load parallel inputs to the register


return readState; return readState;
} }