Archived
1
0

add refPortWrite.begin(strobeOn) to Scanner_IOE::begin(), update unit tests

This commit is contained in:
wolfv6 2016-09-23 14:52:09 -06:00
parent 59565dacb4
commit f24ea7aa76
6 changed files with 18 additions and 31 deletions

View File

@ -22,6 +22,9 @@ strobeOn is logic level of strobe on, HIGH or LOW
MCP23S17 SPI interface is 10 MHz max. MCP23S17 SPI interface is 10 MHz max.
The electrical limitation to bus speed is bus capacitance and the length of the wires involved. The electrical limitation to bus speed is bus capacitance and the length of the wires involved.
Longer wires require lower clock speeds. Longer wires require lower clock speeds.
begin() is called from Scanner_IOE::begin() twice, once each for refPortWrite and refPortRead.
The first 4 lines only need to be called once, but seem to work OK if called a second time.
*/ */
void PortMCP23S17::begin(const uint8_t strobeOn) void PortMCP23S17::begin(const uint8_t strobeOn)
{ {
@ -41,10 +44,6 @@ void PortMCP23S17::begin(const uint8_t strobeOn)
{ {
pullUp = 0; pullUp = 0;
} }
//todo
Keyboard.print(" strobeOn="); Keyboard.print(strobeOn);
Keyboard.print(" readPins="); Keyboard.print(readPins, BIN);
Keyboard.print(" pullUp="); Keyboard.println(pullUp, BIN);
transfer(port.DEVICE_ADDR << 1, port.num, readPins); //configure IODIR transfer(port.DEVICE_ADDR << 1, port.num, readPins); //configure IODIR
transfer(port.DEVICE_ADDR << 1, port.num + 0x0C, pullUp); //configure GPPU transfer(port.DEVICE_ADDR << 1, port.num + 0x0C, pullUp); //configure GPPU
@ -65,13 +64,6 @@ void PortMCP23S17::write(const uint8_t pin, const bool logicLevel)
{ {
port.outputVal |= pin; //set pin output to high port.outputVal |= pin; //set pin output to high
} }
//todo
//Keyboard.print(" readPins="); Keyboard.print(readPins, BIN);
Keyboard.print(" pin="); Keyboard.print(pin, BIN);
Keyboard.print(" logicLevel="); Keyboard.print(logicLevel);
Keyboard.print(" outputVal="); Keyboard.println(port.outputVal, BIN);
//Keyboard.print(" ="); Keyboard.print();
//delay(200);
transfer(port.DEVICE_ADDR << 1, port.num + 0x12, port.outputVal); //set GPIO port to outputVal transfer(port.DEVICE_ADDR << 1, port.num + 0x12, port.outputVal); //set GPIO port to outputVal
} }

View File

@ -13,6 +13,7 @@ Initiates communication protocal and configs ports.
void Scanner_IOE::begin() void Scanner_IOE::begin()
{ {
refPortRead.begin(strobeOn); refPortRead.begin(strobeOn);
refPortWrite.begin(strobeOn);
} }
/* scan() is called on every iteration of sketch loop(). /* scan() is called on every iteration of sketch loop().
@ -23,13 +24,10 @@ read_pins_t Scanner_IOE::scan(const uint8_t strobePin)
{ {
uint8_t readState; //bits, 1 means key is pressed, 0 means released uint8_t readState; //bits, 1 means key is pressed, 0 means released
delay(2000);//todo
//strobe on //strobe on
refPortWrite.write(strobePin, strobeOn); refPortWrite.write(strobePin, strobeOn);
delayMicroseconds(3); //time to stabilize voltage delayMicroseconds(3); //time to stabilize voltage
//delayMicroseconds(300); //todo
delay(2000);
//read the port pins //read the port pins
readState = refPortRead.read(); readState = refPortRead.read();

View File

Before

Width:  |  Height:  |  Size: 165 KiB

After

Width:  |  Height:  |  Size: 165 KiB

View File

@ -1,5 +1,5 @@
/* unit test for PortRead_MCP23S17 /* unit test for PortMCP23S17
Picture of hardware is in unit_tests/PortRead_MCP23S17/PortRead_MCP23S17_bb.JPG Picture of hardware is in unit_tests/PortMCP23S17_read/PortMCP23S17_bb.JPG
The setup is an MCP23S17 I/O expander on a Teensy LC controller. The setup is an MCP23S17 I/O expander on a Teensy LC controller.
MCP23S17 port-B pins are alternately grounded and energized. MCP23S17 port-B pins are alternately grounded and energized.
portBState is a bitwise reading of port B. portBState is a bitwise reading of port B.
@ -7,20 +7,19 @@ output is: 10101010
*/ */
#include "PortIOE.h" #include "PortIOE.h"
#include "PortRead_MCP23S17.h" #include "PortMCP23S17.h"
#include "Scanner_IOE.h"
const uint8_t PortIOE::DEVICE_ADDR = 0x20; //MCP23S17 address, all 3 ADDR pins are grounded const uint8_t PortIOE::DEVICE_ADDR = 0x20; //MCP23S17 address, all 3 ADDR pins are grounded
PortIOE portB(1, 0); PortIOE portB(1);
PortRead_MCP23S17 portBRead(portB, ~0); PortMCP23S17 portBRead(portB, ~0);
void setup() void setup()
{ {
uint8_t portBState; //bit pattern uint8_t portBState; //bit pattern
delay(6000); delay(6000);
portBRead.begin(LOW); portBRead.begin(HIGH); //HIGH or LOW, not matter
portBState = portBRead.read(); portBState = portBRead.read();
Keyboard.print("portBState = "); Keyboard.print("portBState = ");

View File

@ -1,29 +1,27 @@
/* unit test for PortWrite_MCP23S17 /* unit test for PortMCP23S17
Picture of hardware is in unit_tests/PortRead_MCP23S17/PortRead_MCP23S17_bb.JPG Picture of hardware is in unit_tests/PortMCP23S17_read/PortMCP23S17_bb.JPG
The setup is an MCP23S17 I/O expander on a Teensy LC controller. The setup is an MCP23S17 I/O expander on a Teensy LC controller.
MCP23S17 port-A GPIO pins are not connected to anything. MCP23S17 port-A GPIO pins are not connected to anything.
Port-A GPIO-pin ouputs alternate between 0 and 3.3 volts. Port-A GPIO-pin ouputs alternate between 0 and 3.3 volts.
Use a volt meter to measure port-A GPIO-pin outputs. Use a volt meter to measure port-A GPIO-pin outputs.
MCP23S17 on 3.3v does not output enough power to reliable light LEDs OR low-voltage LED, with forward voltage less than 2 volts.
LED lights w/o resistor
LED not light with 56 ohm resistor
*/ */
#include "PortIOE.h" #include "PortIOE.h"
#include "PortWrite_MCP23S17.h" #include "PortMCP23S17.h"
const uint8_t PortIOE::DEVICE_ADDR = 0x20; //MCP23S17 address, all 3 ADDR pins are grounded const uint8_t PortIOE::DEVICE_ADDR = 0x20; //MCP23S17 address, all 3 ADDR pins are grounded
PortIOE portA(0, 0); PortIOE portA(0);
PortWrite_MCP23S17 portAWrite(portA); //PortAWrite needed for begin() PortMCP23S17 portAWrite(portA, 0); //PortAWrite needed for begin()
//const uint8_t GPIOA = 0x12; //LEDs are on port A //const uint8_t GPIOA = 0x12; //LEDs are on port A
void setup() void setup()
{ {
delay(6000); delay(6000);
portAWrite.begin(); portAWrite.begin(LOW); //HIGH or LOW, not matter if readPins=0
//Keyboard.print("start blinking"); Keyboard.print("start writing");
} }
void loop() void loop()