Lab that has to do with basic IO on mbed.

Dependencies:   DebounceIn mbed PinDetect

Committer:
Jesse Baker
Date:
Sun Jan 24 16:45:15 2016 -0500
Revision:
53:1c8235c49b70
Parent:
51:e12b3635afae
JB is about to test expansion

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jesse Baker 53:1c8235c49b70 1
Jesse Baker 51:e12b3635afae 2 // A simple IO demo using the MCP23S17 library
Jesse Baker 51:e12b3635afae 3 //
Jesse Baker 51:e12b3635afae 4 // MCP23S17 Library Copyright (c) 2010 Romilly Cocking
Jesse Baker 51:e12b3635afae 5 // Released under the MIT License: http://mbed.org/license/mit
Jesse Baker 51:e12b3635afae 6 //
Jesse Baker 51:e12b3635afae 7 // See http://mbed.org/users/romilly/notebook/mcp23s17-addressable-16-bit-io-expander-with-spi/
Jesse Baker 51:e12b3635afae 8 //
Jesse Baker 51:e12b3635afae 9 //
Jesse Baker 51:e12b3635afae 10 // MCP23S17 datasheet http://ww1.microchip.com/downloads/en/DeviceDoc/21952b.pdf
Jesse Baker 51:e12b3635afae 11 // uses MCP23S17 library version 0.4
Jesse Baker 51:e12b3635afae 12
Jesse Baker 51:e12b3635afae 13 #include "mbed.h"
Jesse Baker 51:e12b3635afae 14 #include "MCP23S17.h"
Jesse Baker 51:e12b3635afae 15 // Create SPI bus
Jesse Baker 51:e12b3635afae 16 SPI spi(p5, p6, p7);
Jesse Baker 51:e12b3635afae 17 //
Jesse Baker 51:e12b3635afae 18 // Wiring Connections:
Jesse Baker 51:e12b3635afae 19 // mbed p5,p6,p7 are tied to MCP23S17 SI, SO, SCK pins
Jesse Baker 51:e12b3635afae 20 // mbed p20 to MCP23S17 CS
Jesse Baker 51:e12b3635afae 21 // MCP23S17 reset pin pulled high
Jesse Baker 51:e12b3635afae 22 // MCP23S17 GPA0 connected to GPB0 for loopback test
Jesse Baker 51:e12b3635afae 23 // A0, A1, A2 of the MCP23S17 are tied to ground on the breadboard, so the 8-bit address for writes is 0x40
Jesse Baker 51:e12b3635afae 24 // This is referred to as the opcode in the device datasheet
Jesse Baker 51:e12b3635afae 25 char Opcode = 0x40;
Jesse Baker 51:e12b3635afae 26
Jesse Baker 51:e12b3635afae 27 // Next create a MCP23S17
Jesse Baker 51:e12b3635afae 28 // mbed p20 is connected to ~chipSelect on the MCP23S17
Jesse Baker 51:e12b3635afae 29 MCP23S17 chip = MCP23S17(spi, p20, Opcode);
Jesse Baker 51:e12b3635afae 30
Jesse Baker 51:e12b3635afae 31 // Optional software reset - mbed p14 to MCP23S17 reset pin
Jesse Baker 51:e12b3635afae 32 // DigitalOut reset(p14);
Jesse Baker 51:e12b3635afae 33
Jesse Baker 51:e12b3635afae 34 DigitalOut led1(LED1); // mbed LED1 is used for test status display
Jesse Baker 51:e12b3635afae 35
Jesse Baker 51:e12b3635afae 36 int main() {
Jesse Baker 51:e12b3635afae 37 // The MCP23S17 reset pin can just be pulled high, since it has a power on reset circuit.
Jesse Baker 51:e12b3635afae 38 // The reset pin can be used for a software forced reset by pulling it low with an mbed GPIO pin.
Jesse Baker 51:e12b3635afae 39 // But just leave it pulled high for this simple demo code.
Jesse Baker 51:e12b3635afae 40 // After a power on reset, both IO ports default to input mode
Jesse Baker 51:e12b3635afae 41 //
Jesse Baker 51:e12b3635afae 42 // Here is the optional code for a software reset
Jesse Baker 51:e12b3635afae 43 // reset = 0;
Jesse Baker 51:e12b3635afae 44 // wait_us(1);
Jesse Baker 51:e12b3635afae 45 // reset = 1;
Jesse Baker 51:e12b3635afae 46 //
Jesse Baker 51:e12b3635afae 47 // Set all 8 Port A bits to output direction
Jesse Baker 51:e12b3635afae 48 chip.direction(PORT_A, 0x00);
Jesse Baker 51:e12b3635afae 49 // Set all 8 Port B bits to input direction
Jesse Baker 51:e12b3635afae 50 chip.direction(PORT_B, 0xFF);
Jesse Baker 51:e12b3635afae 51 led1=0;
Jesse Baker 51:e12b3635afae 52 // Start Loopback test sending out and reading back values
Jesse Baker 51:e12b3635afae 53 // loopback test uses A0 and B0 pins - so use a wire to jumper those two pins on MCP23S17 together
Jesse Baker 51:e12b3635afae 54 while (1) {
Jesse Baker 51:e12b3635afae 55 // write 0xAA to MCP23S17 Port A
Jesse Baker 51:e12b3635afae 56 chip.write(PORT_A, 0xAA);
Jesse Baker 51:e12b3635afae 57 wait(.5);
Jesse Baker 51:e12b3635afae 58 // read back value from MCP23S17 Port B and display B0 on mbed led1
Jesse Baker 51:e12b3635afae 59 led1 = chip.read(PORT_B)& 0x01;
Jesse Baker 51:e12b3635afae 60 // write 0x55 to MCP23S17 Port A
Jesse Baker 51:e12b3635afae 61 chip.write(PORT_A, 0x55);
Jesse Baker 51:e12b3635afae 62 wait(.5);
Jesse Baker 51:e12b3635afae 63 // read back value from MCP23S17 Port B and display B0 on mbed led1
Jesse Baker 51:e12b3635afae 64 led1 = chip.read(PORT_B)& 0x01;
Jesse Baker 51:e12b3635afae 65 // led1 should blink slowly when it is all working
Jesse Baker 51:e12b3635afae 66 }
Jesse Baker 51:e12b3635afae 67 }
Jesse Baker 51:e12b3635afae 68 // */