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: mbed BufferedSerial Servo2 PCT2075 I2CEeprom FastPWM
Diff: i2c_2020_06.cpp
- Revision:
- 3:43cb067ecd00
diff -r 8e7b51353f32 -r 43cb067ecd00 i2c_2020_06.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/i2c_2020_06.cpp Mon Jul 27 08:44:59 2020 +0000
@@ -0,0 +1,112 @@
+#include "mbed.h"
+#include "Alternator.h"
+#include "I2CEeprom.h"
+
+const int settings_ee_addr = eeprom_page * eeprom_page_size;
+
+/*struct sldandt {
+ const uint32_t min, max, de_fault; // min, max, default
+ const char * txt; // description
+ char val;
+} ;
+*/
+const char tabletext[] = "User Table entry 0 to 100";
+extern const int numof_op_modes;
+
+struct sldandt option_list[] = {
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 0
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 1
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 2
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 3
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 4
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 5
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 6
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 7
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 8
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 9
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 10
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 11
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 12
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 13
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 14
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 15
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 16
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 17
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 18
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 19
+ {0, 100, 0, tabletext}, // Field Current Limit User Entry Table position 20
+ {0, 120, 3, "Engine warn-up delay seconds"},
+ {0, 100, 20, "Warmup servo position percent"},
+ {0, numof_op_modes - 1, 0, "Operating Mode - 0=Engine Only test, 1=Const Voltage, 2=Var Voltage, 3=Current feedback"},
+ {20, 100, 50, "Engine speed control 'P' adjust"},
+ {0, 1, 0, "0 Servo normal, 1 reverse"},
+ {0, 100, 0, "Future 26"},
+ {0, 100, 0, "Future 27"},
+ {0, 100, 0, "Future 28"},
+ {0, 100, 0, "Future 29"},
+ {0, 100, 0, "Future 30"},
+ {0, 100, 0, "Future 31"},
+} ;
+
+/*enum {TABL0, TABL1, TABL2, TABL3, TABL4, TABL5, TABL6, TABL7, TABL8, TABL9, TABL10, TABL11, TABL12, TABL13, TABL14, TABL15, TABL16,
+ TABL17, TABL18, TABL19, TABL20,
+ WARM_UP_DELAY, WARMUP_SERVO_POS, OP_MODE, SPEED_CTRL_P, SERVO_DIR, FUT30, FUT31 } ;
+*/
+const int numof_eeprom_options = sizeof(option_list) / sizeof (struct sldandt);
+
+
+//I2CEeprom eeprom (SDA_PIN, SCL_PIN, 0xa0, eeprom_page_size, 8192, 100000);
+extern I2CEeprom eeprom; // (SDA_PIN, SCL_PIN, 0xa0, eeprom_page_size, 8192, 100000);
+
+/*
+class ee_settings_2020 {
+ char new_settings[eeprom_page_size + 2];
+public:
+ ee_settings_2020 () ; // Constructor
+ int load () ;
+ int save () ;
+ char rd (uint32_t i) ;
+ bool wr (char c, uint32_t i) ; // Write one setup char value to private buffer 'settings'
+} ;
+*/
+ ee_settings_2020::ee_settings_2020 () {
+// load (); // Can't use this here, causes core dump
+ }
+
+int ee_settings_2020::load () {
+ return eeprom.read (settings_ee_addr, new_settings, eeprom_page_size);
+}
+
+int ee_settings_2020::save () { // Write to eeprom only those that need changing
+ int count = 0;
+ char tmp[eeprom_page_size + 2];
+ int n = eeprom.read (settings_ee_addr, tmp, eeprom_page_size);
+ for (int i = 0; i < eeprom_page_size; i++) {
+ if (new_settings[i] != tmp[i]) {
+ count++;
+ eeprom.write (settings_ee_addr + i, new_settings[i]);
+ }
+ }
+ return count;
+}
+
+char ee_settings_2020::rd (uint32_t i) {
+ return new_settings[i];
+}
+
+
+bool ee_settings_2020::wr (char c, uint32_t i) { // Write one setup char value to private buffer 'settings'
+ if (i >= eeprom_page_size)
+ return false;
+ new_settings[i] = c;
+ return true;
+}
+
+sldandt * ee_settings_2020::inform (uint32_t which) {
+ if (which >= numof_eeprom_options)
+ return NULL;
+ return &option_list[which];
+}
+
+
+