Signal Generator

Dependencies:   IniManager RA8875 Watchdog mbed-rtos mbed

Fork of speaker_demo_Analog by jim hamblen

Committer:
WiredHome
Date:
Sun Jan 15 03:11:22 2017 +0000
Revision:
2:8f71b71fce1b
Parent:
1:dd07e1deec6c
Child:
3:d22f3e52d06a
Almost live update to the waveform while adjusting.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
WiredHome 1:dd07e1deec6c 1
4180_1 0:1c8118ee4106 2 #include "mbed.h"
WiredHome 1:dd07e1deec6c 3 #include "RA8875.h"
WiredHome 1:dd07e1deec6c 4 #include "Watchdog.h" // ver 2
WiredHome 1:dd07e1deec6c 5 #include "IniManager.h" // v19
WiredHome 1:dd07e1deec6c 6
WiredHome 2:8f71b71fce1b 7 #include "SignalGenDisplay.h"
WiredHome 2:8f71b71fce1b 8 #include "SignalGenDAC.h"
WiredHome 2:8f71b71fce1b 9
WiredHome 1:dd07e1deec6c 10 const char * PROG_MANF = "Smartware Computing";
WiredHome 1:dd07e1deec6c 11 const char * PROG_NAME = "Signal Generator";
WiredHome 1:dd07e1deec6c 12 const char * PROG_VERS = "0.01";
WiredHome 1:dd07e1deec6c 13 const char * BUILD_DATE = __DATE__ " " __TIME__;
WiredHome 1:dd07e1deec6c 14
WiredHome 1:dd07e1deec6c 15 RA8875 lcd(p5,p6,p7,p12, NC, "tft"); // SPI:{MOSI,MISO,SCK,/ChipSelect,/reset}, name
WiredHome 1:dd07e1deec6c 16 INI ini;
WiredHome 2:8f71b71fce1b 17 SignalGenDAC g_signal(p18);
WiredHome 1:dd07e1deec6c 18
WiredHome 1:dd07e1deec6c 19 SignalGenDisplay ui(&lcd, &g_signal, PROG_NAME, PROG_MANF, PROG_VERS, BUILD_DATE);
WiredHome 1:dd07e1deec6c 20
WiredHome 1:dd07e1deec6c 21 RawSerial pc(USBTX, USBRX);
WiredHome 1:dd07e1deec6c 22 LocalFileSystem local("local");
WiredHome 1:dd07e1deec6c 23 Watchdog wd;
WiredHome 1:dd07e1deec6c 24
WiredHome 1:dd07e1deec6c 25 /* CPU Available indicator
WiredHome 1:dd07e1deec6c 26 */
WiredHome 1:dd07e1deec6c 27 DigitalOut g_availableLed(LED1); //<! Led used to indicate the program is alive
WiredHome 1:dd07e1deec6c 28 void AvailableLedIndicator(); //<! Ticker callback
WiredHome 1:dd07e1deec6c 29 Ticker g_available;
WiredHome 1:dd07e1deec6c 30
4180_1 0:1c8118ee4106 31
WiredHome 1:dd07e1deec6c 32 // Calibrate the resistive touch screen, and store the data on the
WiredHome 1:dd07e1deec6c 33 // local file system.
WiredHome 1:dd07e1deec6c 34 //
WiredHome 1:dd07e1deec6c 35 void CalibrateTS(void)
4180_1 0:1c8118ee4106 36 {
WiredHome 1:dd07e1deec6c 37 FILE * fh;
WiredHome 1:dd07e1deec6c 38 tpMatrix_t matrix;
WiredHome 1:dd07e1deec6c 39 RetCode_t r;
WiredHome 1:dd07e1deec6c 40 Timer testperiod;
WiredHome 1:dd07e1deec6c 41
WiredHome 1:dd07e1deec6c 42 r = lcd.TouchPanelCalibrate("Calibrate the touch panel", &matrix);
WiredHome 1:dd07e1deec6c 43 if (r == noerror) {
WiredHome 1:dd07e1deec6c 44 fh = fopen("/local/tpcal.cfg", "wb");
WiredHome 1:dd07e1deec6c 45 if (fh) {
WiredHome 1:dd07e1deec6c 46 fwrite(&matrix, sizeof(tpMatrix_t), 1, fh);
WiredHome 1:dd07e1deec6c 47 fclose(fh);
WiredHome 1:dd07e1deec6c 48 printf(" tp cal written.\r\n");
WiredHome 1:dd07e1deec6c 49 lcd.cls();
WiredHome 1:dd07e1deec6c 50 } else {
WiredHome 1:dd07e1deec6c 51 printf(" couldn't open tpcal file.\r\n");
WiredHome 1:dd07e1deec6c 52 }
WiredHome 1:dd07e1deec6c 53 } else {
WiredHome 1:dd07e1deec6c 54 printf("error return: %d\r\n", r);
WiredHome 1:dd07e1deec6c 55 }
WiredHome 1:dd07e1deec6c 56 lcd.cls();
WiredHome 1:dd07e1deec6c 57 }
WiredHome 1:dd07e1deec6c 58
WiredHome 1:dd07e1deec6c 59 // Try to load a previous resistive touch screen calibration from storage. If it
WiredHome 1:dd07e1deec6c 60 // doesn't exist, activate the touch screen calibration process.
WiredHome 1:dd07e1deec6c 61 //
WiredHome 1:dd07e1deec6c 62 void InitTS(void)
WiredHome 1:dd07e1deec6c 63 {
WiredHome 1:dd07e1deec6c 64 FILE * fh;
WiredHome 1:dd07e1deec6c 65 tpMatrix_t matrix;
WiredHome 1:dd07e1deec6c 66
WiredHome 1:dd07e1deec6c 67 fh = fopen("/local/tpcal.cfg", "rb");
WiredHome 1:dd07e1deec6c 68 if (fh) {
WiredHome 1:dd07e1deec6c 69 fread(&matrix, sizeof(tpMatrix_t), 1, fh);
WiredHome 1:dd07e1deec6c 70 fclose(fh);
WiredHome 1:dd07e1deec6c 71 lcd.TouchPanelSetMatrix(&matrix);
WiredHome 1:dd07e1deec6c 72 printf(" tp cal loaded.\r\n");
WiredHome 1:dd07e1deec6c 73 } else {
WiredHome 1:dd07e1deec6c 74 CalibrateTS();
4180_1 0:1c8118ee4106 75 }
4180_1 0:1c8118ee4106 76 }
WiredHome 1:dd07e1deec6c 77
WiredHome 1:dd07e1deec6c 78
WiredHome 1:dd07e1deec6c 79
WiredHome 1:dd07e1deec6c 80 /* Program Entry Point
WiredHome 1:dd07e1deec6c 81 */
WiredHome 1:dd07e1deec6c 82 int main() {
WiredHome 1:dd07e1deec6c 83 pc.baud(460800);
WiredHome 1:dd07e1deec6c 84 pc.printf("\r\n%s %s\r\n", PROG_NAME, BUILD_DATE);
WiredHome 1:dd07e1deec6c 85
WiredHome 1:dd07e1deec6c 86 if (wd.WatchdogCausedReset()) {
WiredHome 1:dd07e1deec6c 87 pc.printf("**** Watchdog Event caused reset ****\r\n");
WiredHome 1:dd07e1deec6c 88 }
WiredHome 1:dd07e1deec6c 89 // Set very long timeout because the <PrintScreen> function is incredibly slow with local filesystem...
WiredHome 1:dd07e1deec6c 90 // wd.Configure(120.0); // This is forever for real-time embedded, but for a casual network appliance...
WiredHome 1:dd07e1deec6c 91 ini.SetFile("/local/SigGen.ini", 2);
WiredHome 1:dd07e1deec6c 92
WiredHome 1:dd07e1deec6c 93 // Bring the LCD online
WiredHome 1:dd07e1deec6c 94 lcd.frequency(2000000);
WiredHome 1:dd07e1deec6c 95 lcd.init(480,272,16, true, true, true);
WiredHome 1:dd07e1deec6c 96 lcd.TouchPanelInit();
WiredHome 1:dd07e1deec6c 97 InitTS();
WiredHome 1:dd07e1deec6c 98
WiredHome 1:dd07e1deec6c 99 // Bring the signal generator online
WiredHome 2:8f71b71fce1b 100 ui.Refresh();
WiredHome 1:dd07e1deec6c 101
WiredHome 1:dd07e1deec6c 102 wait(1); // Needed after startup
WiredHome 1:dd07e1deec6c 103
WiredHome 1:dd07e1deec6c 104 ui.ShowMenu();
WiredHome 1:dd07e1deec6c 105 // Start infinite loop
WiredHome 1:dd07e1deec6c 106 while(true)
WiredHome 1:dd07e1deec6c 107 {
WiredHome 1:dd07e1deec6c 108 // wd.Service();
WiredHome 1:dd07e1deec6c 109 if (pc.readable()) {
WiredHome 1:dd07e1deec6c 110 int c = pc.getc();
WiredHome 1:dd07e1deec6c 111 ui.Poll(c);
WiredHome 1:dd07e1deec6c 112 } else {
WiredHome 1:dd07e1deec6c 113 ui.Poll();
WiredHome 1:dd07e1deec6c 114 }
WiredHome 1:dd07e1deec6c 115 } // End of 'while' statement
WiredHome 1:dd07e1deec6c 116 } // End of main program
WiredHome 1:dd07e1deec6c 117
WiredHome 2:8f71b71fce1b 118