Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: QEI DRV8830 PID ADT7410 TextLCD Frq_cuntr_Nucleo-F746ZG RingBuffer
Fork of Frequency_Counter_w_GPS_1PPS by
Diff: hw_tst.h
- Revision:
- 13:1041596c416c
- Child:
- 14:ba6ea409ab05
diff -r 05098414599b -r 1041596c416c hw_tst.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hw_tst.h Wed Nov 23 07:35:20 2016 +0000
@@ -0,0 +1,428 @@
+/*
+ * mbed Application program / HARDWARE TEST mode program
+ *
+ * Copyright (c) 2016 Kenji Arai / JH1PJL
+ * http://www.page.sannet.ne.jp/kenjia/index.html
+ * http://mbed.org/users/kenjiArai/
+ * Created: Novemeber 8th, 2016
+ * Revised: Novemeber 23rd, 2016
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Include --------------------------------------------------------------------
+
+// Definition -----------------------------------------------------------------
+#define GETC(x) pc.getc(x)
+#define PUTC(x) pc.putc(x)
+#define PRINTF(...) pc.printf(__VA_ARGS__)
+#define READABLE(x) pc.readable(x)
+
+// Object ---------------------------------------------------------------------
+extern Serial pc;
+extern Serial gps;
+extern DigitalIn gps_rx;
+extern Ticker irq_action;
+extern DigitalOut led_R_gps1pps;
+extern DigitalOut led_G_temp_ok;
+extern DigitalOut led_B_recipro;
+extern DigitalOut led_W_prescaler;
+extern DigitalOut led_R_rotary;
+extern DigitalOut led_G_rotary;
+extern DigitalOut led_B_rotary;
+extern TextLCD lcd;
+
+// RAM ------------------------------------------------------------------------
+char linebuf[64];
+int buf_size = sizeof(linebuf);
+
+// Function prototypes --------------------------------------------------------
+extern int iGPS_getc(void);
+extern double read_temperature(uint8_t n);
+extern void temp_control(void const *args);
+extern void select_input_div_1or10or20(uint8_t mode);
+
+void msg_hlp(void);
+void put_rn(void);
+void put_r(void);
+void put_lin(void);
+void put_spc(uint8_t n);
+int xatoi(char **str, int32_t *res);
+void get_line(char *buff, int len);
+
+// ROM / Constant data --------------------------------------------------------
+char *const test_msg0 = "F746ZG Frequency Counter Hardware Test on mbed";
+char *const test_msg1 = " system, created on UTC: "__DATE__"("__TIME__")";
+
+//------------------------------------------------------------------------------
+// Control Program
+//------------------------------------------------------------------------------
+void hardware_test(void)
+{
+ char *ptr;
+ char c;
+ uint32_t n;
+
+ put_rn();
+ put_rn();
+ msg_hlp();
+ for (;;) {
+ put_r();
+ PUTC('>');
+ ptr = linebuf;
+ get_line(ptr, sizeof(linebuf));
+ switch (*ptr++) {
+ //------------------------------------------------------------------
+ // LED
+ //------------------------------------------------------------------
+ case 'l' :
+ put_r();
+ PRINTF("If you want to stop, please het any key.");
+ put_rn();
+ while (true){
+ led_R_gps1pps = 1;
+ wait(0.4);
+ led_R_gps1pps = 0;
+ led_G_temp_ok = 1;
+ wait(0.4);
+ led_G_temp_ok = 0;
+ led_B_recipro = 1;
+ wait(0.4);
+ led_B_recipro = 0;
+ led_W_prescaler = 1;
+ wait(0.4);
+ led_W_prescaler = 0;
+ led_R_rotary = 1;
+ wait(0.4);
+ led_R_rotary = 0;
+ led_G_rotary = 1;
+ wait(0.4);
+ led_G_rotary = 0;
+ led_B_rotary = 1;
+ wait(0.4);
+ led_B_rotary = 0;
+ if (READABLE()){ break;}
+ }
+ c = GETC(); // read as dummy
+ put_r();
+ break;
+ //------------------------------------------------------------------
+ // LCD Display
+ //------------------------------------------------------------------
+ case 'd' :
+ put_r();
+ lcd.locate(0, 0);
+ for(char i = 'z';'*' < i; i--){
+ lcd.putc(i);
+ }
+ lcd.locate(0, 0);
+ wait(2.0);
+ for(char i = '.';'~' > i; i++){
+ lcd.putc(i);
+ }
+ PRINTF("Please adjust Contrast Volue.");
+ put_rn();
+ PRINTF("Hit any key to clear screan.");
+ put_rn();
+ while (READABLE()){;}
+ c = GETC(); // read as dummy
+ lcd.locate(0, 0);
+ for (uint8_t x =0 ;100 > x; x++){
+ lcd.putc(' ');
+ }
+ break;
+ //------------------------------------------------------------------
+ // Frequency
+ //------------------------------------------------------------------
+ case 'f' :
+ put_r();
+ select_input_div_1or10or20(0);
+ PRINTF("50MHz Clock for Timer2:");
+ PRINTF(" Input clock for Timer8+4:");
+ put_rn();
+ while (true){
+ n = fc.read_base_clock_frequency(1.0f);
+ PRINTF(" %u ", n);
+ n = fc.read_input_frequency(1.0f);
+ PRINTF("%u", n);
+ put_rn();
+ if (READABLE()){ break;}
+ }
+ c = GETC(); // read as dummy
+ break;
+ //------------------------------------------------------------------
+ // Input select
+ //------------------------------------------------------------------
+ case 'i' :
+ put_r();
+ select_input_div_1or10or20(0);
+ PRINTF("Start BNC connecter input (none-prescaler)");
+ put_rn();
+ PRINTF("Input freq. (data is not accurate enough");
+ put_rn();
+ PRINTF("Hit any key to go next input");
+ put_rn();
+ while (true){
+ n = fc.read_input_frequency(1.0f);
+ PRINTF("f = %u [Hz]", n);
+ put_rn();
+ if (READABLE()){ break;}
+ }
+ c = GETC(); // read as dummy
+ select_input_div_1or10or20(1);
+ PRINTF("Start SMA connecter input (prescaler 1/10)");
+ put_rn();
+ PRINTF("Hit any key to go next input");
+ put_rn();
+ while (true){
+ n = fc.read_input_frequency(1.0f);
+ PRINTF("f = %u [Hz] x 10 = (your expected freq.)", n);
+ put_rn();
+ if (READABLE()){ break;}
+ }
+ c = GETC(); // read as dummy
+ select_input_div_1or10or20(2);
+ PRINTF("Start SMA connecter input (prescaler 1/20)");
+ put_rn();
+ PRINTF("Hit any key to go next input");
+ put_rn();
+ while (true){
+ n = fc.read_input_frequency(1.0f);
+ PRINTF("f = %u [Hz] x 20 = (your expected freq.)", n);
+ put_rn();
+ if (READABLE()){ break;}
+ }
+ c = GETC(); // read as dummy
+ break;
+ //------------------------------------------------------------------
+ // GPS signal
+ //------------------------------------------------------------------
+ case 'g' :
+ put_r();
+ PRINTF("Start GPS checking.");
+ put_rn();
+ PRINTF("If you want to stop, please het any key");
+ put_rn();
+ // Wait long interval (every 1sec)
+ for (uint32_t i = 0; i < 100000; i++){
+ if (gps_rx == 0){
+ i = 0;
+ }
+ }
+ // Clear PD_2 GPS RX line errors(over run)
+ CLEAR_PD_2_RX_LINE();
+ n = 0;
+ while (true){
+ pc.putc(gps.getc());
+ led_R_gps1pps = !led_R_gps1pps;
+ if (!(++n % 100)){
+ led_R_gps1pps = !led_R_gps1pps;
+ }
+ if (READABLE()){ break;}
+ }
+ c = GETC(); // read as dummy
+ led_R_gps1pps = 0;
+ put_rn();
+ PRINTF("Finish GPS part.\r\n");
+ break;
+ //------------------------------------------------------------------
+ // Temperature
+ //------------------------------------------------------------------
+ case 't' :
+ put_r();
+ read_temperature(0);
+ while (true){
+ PRINTF("Temperature: %+6.3f", read_temperature(1));
+ put_rn();
+ if (READABLE()){ break;}
+ wait(1.0);
+ }
+ c = GETC(); // read as dummy
+ break;
+ //------------------------------------------------------------------
+ // Special command defined by you
+ //------------------------------------------------------------------
+ case 'x' :
+ while (true){
+
+ put_rn();
+ if (READABLE()){ break;}
+ wait(1.0);
+ }
+ c = GETC(); // read as dummy
+ break;
+ //------------------------------------------------------------------
+ // Oven Temperature Control
+ //------------------------------------------------------------------
+ case 'o' :
+ put_r();
+ PRINTF("Please check Temp. sensor ('t' comand )");
+ PRINTF(" before enter this test.");
+ put_rn();
+ PRINTF("Are you sure? Yes, the enter 'y'.");
+ put_rn();
+ c = GETC();
+ if (c != 'y'){ break;}
+ PRINTF("If you want to exit, please enter ALT+B.");
+ put_rn();
+ temp_control(NULL);
+ break;
+ //------------------------------------------------------------------
+ // help
+ //------------------------------------------------------------------
+ case '?' :
+ put_r();
+ msg_hlp();
+ break;
+ //------------------------------------------------------------------
+ // no support
+ //------------------------------------------------------------------
+ default:
+ put_r();
+ PUTC('?');
+ put_rn();
+ break;
+ }
+ }
+}
+
+void msg_hlp (void)
+{
+ PRINTF(test_msg0);
+ PRINTF(test_msg1);
+ PRINTF(" [Help:'?']");
+ put_rn();
+ put_rn();
+ PRINTF("l - ChecK LED's");
+ put_rn();
+ PRINTF("d - Show display (on LCD)");
+ put_rn();
+ PRINTF("f - Check frequency Base:50MHz & Unknown Freq.");
+ put_rn();
+ PRINTF("i - Check Input select function");
+ put_rn();
+ PRINTF("g - Check GPS signal");
+ put_rn();
+ PRINTF("t - Check Temperature (I2C temp sensor)");
+ put_rn();
+ PRINTF("o - Run Oven Temperature Control");
+ put_rn();
+ PRINTF("return from 'o' mode, enter ALT+B then the system restart");
+ put_rn();
+}
+
+// Put \r\n
+void put_rn ( void )
+{
+ PUTC('\r');
+ PUTC('\n');
+}
+
+// Put \r
+void put_r ( void )
+{
+ PUTC('\r');
+}
+
+// Put ", "
+void put_lin ( void )
+{
+ PRINTF(", ");
+}
+
+// Put space n
+void put_spc( uint8_t n)
+{
+ for(; n > 0; n--) {
+ PUTC(' ');
+ }
+}
+
+// Change string -> integer
+//int xatoi (char **str, unsigned long *res){
+int xatoi (char **str, int32_t *res)
+{
+ unsigned long val;
+ unsigned char c, radix, s = 0;
+
+ while ((c = **str) == ' ') (*str)++;
+ if (c == '-') {
+ s = 1;
+ c = *(++(*str));
+ }
+ if (c == '0') {
+ c = *(++(*str));
+ if (c <= ' ') {
+ *res = 0;
+ return 1;
+ }
+ if (c == 'x') {
+ radix = 16;
+ c = *(++(*str));
+ } else {
+ if (c == 'b') {
+ radix = 2;
+ c = *(++(*str));
+ } else {
+ if ((c >= '0')&&(c <= '9')) {
+ radix = 8;
+ } else {
+ return 0;
+ }
+ }
+ }
+ } else {
+ if ((c < '1')||(c > '9')) {
+ return 0;
+ }
+ radix = 10;
+ }
+ val = 0;
+ while (c > ' ') {
+ if (c >= 'a') c -= 0x20;
+ c -= '0';
+ if (c >= 17) {
+ c -= 7;
+ if (c <= 9) return 0;
+ }
+ if (c >= radix) return 0;
+ val = val * radix + c;
+ c = *(++(*str));
+ }
+ if (s) val = -val;
+ *res = val;
+ return 1;
+}
+
+// Get key input data
+void get_line (char *buff, int len)
+{
+ char c;
+ int idx = 0;
+
+ for (;;) {
+ c = GETC();
+ if (c == '\r') {
+ buff[idx++] = c;
+ break;
+ }
+ if ((c == '\b') && idx) {
+ idx--;
+ PUTC(c);
+ PUTC(' ');
+ PUTC(c);
+ }
+ if (((uint8_t)c >= ' ') && (idx < len - 1)) {
+ buff[idx++] = c;
+ PUTC(c);
+ }
+ }
+ buff[idx] = 0;
+ PUTC('\n');
+}
