Test application to demonstrate MCP4xxxx_SPI library
Dependencies: DebugLibrary MCP4xxxx_SPI mbed
main.cpp@3:7dbac45b8fd3, 2013-01-29 (annotated)
- Committer:
- Yann
- Date:
- Tue Jan 29 15:02:41 2013 +0000
- Revision:
- 3:7dbac45b8fd3
- Parent:
- 1:a463807bf483
Add /CS supported by the MCP4xxxx_SPI library
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Yann | 0:62020bd58748 | 1 | #include <string> |
Yann | 0:62020bd58748 | 2 | #include <iostream> |
Yann | 0:62020bd58748 | 3 | #include <iomanip> |
Yann | 0:62020bd58748 | 4 | |
Yann | 3:7dbac45b8fd3 | 5 | /** |
Yann | 3:7dbac45b8fd3 | 6 | * Tests were done with schema proposed here: DS11195C-page 11 FIGURE 2-25: Potentiometer Divider Non-Linearity Error Test Circuit (DNL, INL) |
Yann | 3:7dbac45b8fd3 | 7 | */ |
Yann | 0:62020bd58748 | 8 | #include "MCP4xxxx_SPI.h" |
Yann | 0:62020bd58748 | 9 | |
Yann | 0:62020bd58748 | 10 | struct UserChoice { |
Yann | 0:62020bd58748 | 11 | char choice; |
Yann | 0:62020bd58748 | 12 | unsigned char moduleId; |
Yann | 0:62020bd58748 | 13 | }; |
Yann | 0:62020bd58748 | 14 | |
Yann | 0:62020bd58748 | 15 | /* |
Yann | 0:62020bd58748 | 16 | * Declare functions |
Yann | 0:62020bd58748 | 17 | */ |
Yann | 0:62020bd58748 | 18 | void AvailableIndicator(); // LED1 flashing for program while program is alive |
Yann | 0:62020bd58748 | 19 | UserChoice DisplayMenuAndGetChoice(); // Display and get the user choice |
Yann | 0:62020bd58748 | 20 | |
Yann | 0:62020bd58748 | 21 | /* |
Yann | 0:62020bd58748 | 22 | * Declare statics |
Yann | 0:62020bd58748 | 23 | */ |
Yann | 0:62020bd58748 | 24 | DigitalOut g_availableLed(LED1); // To verify if program in running |
Yann | 0:62020bd58748 | 25 | Ticker g_available; // LED1 will flash with a period of 2s |
Yann | 3:7dbac45b8fd3 | 26 | #define __MANAGE_CS__ // /CS managed by application |
Yann | 3:7dbac45b8fd3 | 27 | #undef __MANAGE_CS__ // /CS managed by library |
Yann | 3:7dbac45b8fd3 | 28 | #if defined(__MANAGE_CS__) |
Yann | 0:62020bd58748 | 29 | DigitalOut g_chipSelect(p8); // /CS to select MCP4xxxx device |
Yann | 3:7dbac45b8fd3 | 30 | CMCP4xxxx_SPI g_digitalPot(p5, p6, p7, NC, NC, NC); // Create an instance of the class CMCP4xxxx_SPI, p5/p6/p7: SPI#1, /CS managed by application, /RESET input not connected, , /SHDN input not connected |
Yann | 3:7dbac45b8fd3 | 31 | #else // __MANAGE_CS__ |
Yann | 3:7dbac45b8fd3 | 32 | CMCP4xxxx_SPI g_digitalPot(p5, p6, p7, p8, NC, NC); // Create an instance of the class CMCP4xxxx_SPI, p5/p6/p7: SPI#1, /CS managed by library, /RESET input not connected, , /SHDN input not connected |
Yann | 3:7dbac45b8fd3 | 33 | #endif // __MANAGE_CS__ |
Yann | 0:62020bd58748 | 34 | UserChoice g_userChoice; // Used to store user choice from displayed menu |
Yann | 0:62020bd58748 | 35 | |
Yann | 0:62020bd58748 | 36 | int main() { |
Yann | 0:62020bd58748 | 37 | |
Yann | 0:62020bd58748 | 38 | unsigned char potLevel = 0x80; // Initial digital potentiometer value |
Yann | 0:62020bd58748 | 39 | |
Yann | 3:7dbac45b8fd3 | 40 | #if defined(__MANAGE_CS__) |
Yann | 3:7dbac45b8fd3 | 41 | g_chipSelect.write(1); // Disable chip |
Yann | 3:7dbac45b8fd3 | 42 | #endif // __MANAGE_CS__ |
Yann | 0:62020bd58748 | 43 | |
Yann | 0:62020bd58748 | 44 | // Launch available indicator |
Yann | 0:62020bd58748 | 45 | g_available.attach(&AvailableIndicator, 2.0); |
Yann | 0:62020bd58748 | 46 | |
Yann | 0:62020bd58748 | 47 | while (true) { |
Yann | 0:62020bd58748 | 48 | |
Yann | 0:62020bd58748 | 49 | g_userChoice = DisplayMenuAndGetChoice(); // Retrieve the user selection |
Yann | 0:62020bd58748 | 50 | switch (g_userChoice.choice) { |
Yann | 0:62020bd58748 | 51 | case 'a': |
Yann | 0:62020bd58748 | 52 | potLevel += 1; |
Yann | 3:7dbac45b8fd3 | 53 | #if defined(__MANAGE_CS__) |
Yann | 0:62020bd58748 | 54 | g_chipSelect.write(0); |
Yann | 3:7dbac45b8fd3 | 55 | #endif // __MANAGE_CS__ |
Yann | 0:62020bd58748 | 56 | g_digitalPot.Write(CMCP4xxxx_SPI::WriteToPot1, potLevel); |
Yann | 3:7dbac45b8fd3 | 57 | #if defined(__MANAGE_CS__) |
Yann | 0:62020bd58748 | 58 | g_chipSelect.write(1); |
Yann | 3:7dbac45b8fd3 | 59 | #endif // __MANAGE_CS__ |
Yann | 0:62020bd58748 | 60 | break; |
Yann | 0:62020bd58748 | 61 | case 'b': |
Yann | 0:62020bd58748 | 62 | potLevel += 1; |
Yann | 3:7dbac45b8fd3 | 63 | #if defined(__MANAGE_CS__) |
Yann | 0:62020bd58748 | 64 | g_chipSelect.write(0); |
Yann | 3:7dbac45b8fd3 | 65 | #endif // __MANAGE_CS__ |
Yann | 0:62020bd58748 | 66 | g_digitalPot.Write(CMCP4xxxx_SPI::WriteToPot2, potLevel); |
Yann | 3:7dbac45b8fd3 | 67 | #if defined(__MANAGE_CS__) |
Yann | 0:62020bd58748 | 68 | g_chipSelect.write(1); |
Yann | 3:7dbac45b8fd3 | 69 | #endif // __MANAGE_CS__ |
Yann | 0:62020bd58748 | 70 | break; |
Yann | 0:62020bd58748 | 71 | case 'c': |
Yann | 0:62020bd58748 | 72 | potLevel -= 1; |
Yann | 3:7dbac45b8fd3 | 73 | #if defined(__MANAGE_CS__) |
Yann | 0:62020bd58748 | 74 | g_chipSelect.write(0); |
Yann | 3:7dbac45b8fd3 | 75 | #endif // __MANAGE_CS__ |
Yann | 0:62020bd58748 | 76 | g_digitalPot.Write(CMCP4xxxx_SPI::WriteToPot1, potLevel); |
Yann | 3:7dbac45b8fd3 | 77 | #if defined(__MANAGE_CS__) |
Yann | 0:62020bd58748 | 78 | g_chipSelect.write(1); |
Yann | 3:7dbac45b8fd3 | 79 | #endif // __MANAGE_CS__ |
Yann | 0:62020bd58748 | 80 | break; |
Yann | 0:62020bd58748 | 81 | case 'd': |
Yann | 0:62020bd58748 | 82 | potLevel -= 1; |
Yann | 3:7dbac45b8fd3 | 83 | #if defined(__MANAGE_CS__) |
Yann | 0:62020bd58748 | 84 | g_chipSelect.write(0); |
Yann | 3:7dbac45b8fd3 | 85 | #endif // __MANAGE_CS__ |
Yann | 0:62020bd58748 | 86 | g_digitalPot.Write(CMCP4xxxx_SPI::WriteToPot2, potLevel); |
Yann | 3:7dbac45b8fd3 | 87 | #if defined(__MANAGE_CS__) |
Yann | 0:62020bd58748 | 88 | g_chipSelect.write(1); |
Yann | 3:7dbac45b8fd3 | 89 | #endif // __MANAGE_CS__ |
Yann | 0:62020bd58748 | 90 | break; |
Yann | 1:a463807bf483 | 91 | case 'e': |
Yann | 1:a463807bf483 | 92 | potLevel -= 1; |
Yann | 3:7dbac45b8fd3 | 93 | #if defined(__MANAGE_CS__) |
Yann | 1:a463807bf483 | 94 | g_chipSelect.write(0); |
Yann | 3:7dbac45b8fd3 | 95 | #endif // __MANAGE_CS__ |
Yann | 1:a463807bf483 | 96 | g_digitalPot.Write(CMCP4xxxx_SPI::ShutdownPot1); |
Yann | 3:7dbac45b8fd3 | 97 | #if defined(__MANAGE_CS__) |
Yann | 1:a463807bf483 | 98 | g_chipSelect.write(1); |
Yann | 3:7dbac45b8fd3 | 99 | #endif // __MANAGE_CS__ |
Yann | 1:a463807bf483 | 100 | break; |
Yann | 1:a463807bf483 | 101 | case 'f': |
Yann | 1:a463807bf483 | 102 | potLevel -= 1; |
Yann | 3:7dbac45b8fd3 | 103 | #if defined(__MANAGE_CS__) |
Yann | 1:a463807bf483 | 104 | g_chipSelect.write(0); |
Yann | 3:7dbac45b8fd3 | 105 | #endif // __MANAGE_CS__ |
Yann | 1:a463807bf483 | 106 | g_digitalPot.Write(CMCP4xxxx_SPI::ShutdownPot2); |
Yann | 3:7dbac45b8fd3 | 107 | #if defined(__MANAGE_CS__) |
Yann | 1:a463807bf483 | 108 | g_chipSelect.write(1); |
Yann | 3:7dbac45b8fd3 | 109 | #endif // __MANAGE_CS__ |
Yann | 1:a463807bf483 | 110 | break; |
Yann | 1:a463807bf483 | 111 | case 'r': |
Yann | 1:a463807bf483 | 112 | g_digitalPot.Reset(); |
Yann | 1:a463807bf483 | 113 | break; |
Yann | 0:62020bd58748 | 114 | default: |
Yann | 0:62020bd58748 | 115 | std::cout << "Invalid user choice\r" << std::endl; |
Yann | 0:62020bd58748 | 116 | break; |
Yann | 0:62020bd58748 | 117 | } // End of 'switch' statement |
Yann | 0:62020bd58748 | 118 | |
Yann | 0:62020bd58748 | 119 | } // End of 'while' statement |
Yann | 0:62020bd58748 | 120 | } // End of program - nerver reached |
Yann | 0:62020bd58748 | 121 | |
Yann | 0:62020bd58748 | 122 | void AvailableIndicator() { |
Yann | 0:62020bd58748 | 123 | g_availableLed = !g_availableLed; |
Yann | 0:62020bd58748 | 124 | } // End of AvailableIndicator |
Yann | 0:62020bd58748 | 125 | |
Yann | 0:62020bd58748 | 126 | UserChoice DisplayMenuAndGetChoice() { |
Yann | 0:62020bd58748 | 127 | static UserChoice userChoice; |
Yann | 0:62020bd58748 | 128 | |
Yann | 0:62020bd58748 | 129 | // Display the title |
Yann | 0:62020bd58748 | 130 | std::cout << "\r" << std::endl << "MCP4xxxx_SPI v0.1\r" << std::endl; |
Yann | 0:62020bd58748 | 131 | |
Yann | 0:62020bd58748 | 132 | // Display the menu |
Yann | 0:62020bd58748 | 133 | std::cout << "\tIncrease level on pot #1:\t\t\ta\r" << std::endl; |
Yann | 0:62020bd58748 | 134 | std::cout << "\tIncrease level on pot #2:\t\t\tb\r" << std::endl; |
Yann | 0:62020bd58748 | 135 | std::cout << "\tDecrease level on pot #1:\t\t\tc\r" << std::endl; |
Yann | 0:62020bd58748 | 136 | std::cout << "\tDecrease level on pot #2:\t\t\td\r" << std::endl; |
Yann | 1:a463807bf483 | 137 | std::cout << "\tShutdown pot #1 :\t\t\te\r" << std::endl; |
Yann | 1:a463807bf483 | 138 | std::cout << "\tShutdown pot #2 :\t\t\tf\r" << std::endl; |
Yann | 1:a463807bf483 | 139 | std::cout << "\tReset MCP4xxxx :\t\t\tr\r" << std::endl; |
Yann | 0:62020bd58748 | 140 | std::cout << "Enter your choice: " << std::flush; |
Yann | 0:62020bd58748 | 141 | userChoice.choice = getchar(); |
Yann | 0:62020bd58748 | 142 | // Display the menu |
Yann | 0:62020bd58748 | 143 | std::cout << "\r" << std::endl << std::flush; |
Yann | 0:62020bd58748 | 144 | return userChoice; |
Yann | 0:62020bd58748 | 145 | } |