Test application to demonstrate MCP4xxxx_SPI library
Dependencies: DebugLibrary MCP4xxxx_SPI mbed
main.cpp
- Committer:
- Yann
- Date:
- 2013-01-29
- Revision:
- 3:7dbac45b8fd3
- Parent:
- 1:a463807bf483
File content as of revision 3:7dbac45b8fd3:
#include <string> #include <iostream> #include <iomanip> /** * Tests were done with schema proposed here: DS11195C-page 11 FIGURE 2-25: Potentiometer Divider Non-Linearity Error Test Circuit (DNL, INL) */ #include "MCP4xxxx_SPI.h" struct UserChoice { char choice; unsigned char moduleId; }; /* * Declare functions */ void AvailableIndicator(); // LED1 flashing for program while program is alive UserChoice DisplayMenuAndGetChoice(); // Display and get the user choice /* * Declare statics */ DigitalOut g_availableLed(LED1); // To verify if program in running Ticker g_available; // LED1 will flash with a period of 2s #define __MANAGE_CS__ // /CS managed by application #undef __MANAGE_CS__ // /CS managed by library #if defined(__MANAGE_CS__) DigitalOut g_chipSelect(p8); // /CS to select MCP4xxxx device 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 #else // __MANAGE_CS__ 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 #endif // __MANAGE_CS__ UserChoice g_userChoice; // Used to store user choice from displayed menu int main() { unsigned char potLevel = 0x80; // Initial digital potentiometer value #if defined(__MANAGE_CS__) g_chipSelect.write(1); // Disable chip #endif // __MANAGE_CS__ // Launch available indicator g_available.attach(&AvailableIndicator, 2.0); while (true) { g_userChoice = DisplayMenuAndGetChoice(); // Retrieve the user selection switch (g_userChoice.choice) { case 'a': potLevel += 1; #if defined(__MANAGE_CS__) g_chipSelect.write(0); #endif // __MANAGE_CS__ g_digitalPot.Write(CMCP4xxxx_SPI::WriteToPot1, potLevel); #if defined(__MANAGE_CS__) g_chipSelect.write(1); #endif // __MANAGE_CS__ break; case 'b': potLevel += 1; #if defined(__MANAGE_CS__) g_chipSelect.write(0); #endif // __MANAGE_CS__ g_digitalPot.Write(CMCP4xxxx_SPI::WriteToPot2, potLevel); #if defined(__MANAGE_CS__) g_chipSelect.write(1); #endif // __MANAGE_CS__ break; case 'c': potLevel -= 1; #if defined(__MANAGE_CS__) g_chipSelect.write(0); #endif // __MANAGE_CS__ g_digitalPot.Write(CMCP4xxxx_SPI::WriteToPot1, potLevel); #if defined(__MANAGE_CS__) g_chipSelect.write(1); #endif // __MANAGE_CS__ break; case 'd': potLevel -= 1; #if defined(__MANAGE_CS__) g_chipSelect.write(0); #endif // __MANAGE_CS__ g_digitalPot.Write(CMCP4xxxx_SPI::WriteToPot2, potLevel); #if defined(__MANAGE_CS__) g_chipSelect.write(1); #endif // __MANAGE_CS__ break; case 'e': potLevel -= 1; #if defined(__MANAGE_CS__) g_chipSelect.write(0); #endif // __MANAGE_CS__ g_digitalPot.Write(CMCP4xxxx_SPI::ShutdownPot1); #if defined(__MANAGE_CS__) g_chipSelect.write(1); #endif // __MANAGE_CS__ break; case 'f': potLevel -= 1; #if defined(__MANAGE_CS__) g_chipSelect.write(0); #endif // __MANAGE_CS__ g_digitalPot.Write(CMCP4xxxx_SPI::ShutdownPot2); #if defined(__MANAGE_CS__) g_chipSelect.write(1); #endif // __MANAGE_CS__ break; case 'r': g_digitalPot.Reset(); break; default: std::cout << "Invalid user choice\r" << std::endl; break; } // End of 'switch' statement } // End of 'while' statement } // End of program - nerver reached void AvailableIndicator() { g_availableLed = !g_availableLed; } // End of AvailableIndicator UserChoice DisplayMenuAndGetChoice() { static UserChoice userChoice; // Display the title std::cout << "\r" << std::endl << "MCP4xxxx_SPI v0.1\r" << std::endl; // Display the menu std::cout << "\tIncrease level on pot #1:\t\t\ta\r" << std::endl; std::cout << "\tIncrease level on pot #2:\t\t\tb\r" << std::endl; std::cout << "\tDecrease level on pot #1:\t\t\tc\r" << std::endl; std::cout << "\tDecrease level on pot #2:\t\t\td\r" << std::endl; std::cout << "\tShutdown pot #1 :\t\t\te\r" << std::endl; std::cout << "\tShutdown pot #2 :\t\t\tf\r" << std::endl; std::cout << "\tReset MCP4xxxx :\t\t\tr\r" << std::endl; std::cout << "Enter your choice: " << std::flush; userChoice.choice = getchar(); // Display the menu std::cout << "\r" << std::endl << std::flush; return userChoice; }