11u24 Eeprom utility.

Dependencies:   TextLCD mbed

Committer:
kstech
Date:
Fri Sep 26 09:22:57 2014 +0000
Revision:
0:e2b0ee19db2b
11u24 Eeprom utility

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kstech 0:e2b0ee19db2b 1
kstech 0:e2b0ee19db2b 2
kstech 0:e2b0ee19db2b 3 #include "mbed.h"
kstech 0:e2b0ee19db2b 4 #include "IAP.h"
kstech 0:e2b0ee19db2b 5 #include "TextLCD.h"
kstech 0:e2b0ee19db2b 6 #include "stdlib.h"
kstech 0:e2b0ee19db2b 7 #include <stdio.h>
kstech 0:e2b0ee19db2b 8
kstech 0:e2b0ee19db2b 9 #define FLOAT_SIZE 4
kstech 0:e2b0ee19db2b 10 #define TARGET_ADDRESS 64
kstech 0:e2b0ee19db2b 11 #define NEXT_PLACE 1
kstech 0:e2b0ee19db2b 12 #define PLACE 0
kstech 0:e2b0ee19db2b 13
kstech 0:e2b0ee19db2b 14 IAP iap;
kstech 0:e2b0ee19db2b 15 float getEepromFloat(int place);
kstech 0:e2b0ee19db2b 16 void teletype(char* text, int row);
kstech 0:e2b0ee19db2b 17
kstech 0:e2b0ee19db2b 18 typedef char * string;
kstech 0:e2b0ee19db2b 19
kstech 0:e2b0ee19db2b 20 // ====== Pins =========
kstech 0:e2b0ee19db2b 21
kstech 0:e2b0ee19db2b 22 DigitalOut gLED(P1_18);
kstech 0:e2b0ee19db2b 23 DigitalOut rLED(P1_24);
kstech 0:e2b0ee19db2b 24
kstech 0:e2b0ee19db2b 25
kstech 0:e2b0ee19db2b 26 TextLCD lcd(P1_22, P1_14, P0_9, P0_8, P1_21, P1_2); // rs, e, d4-d7
kstech 0:e2b0ee19db2b 27
kstech 0:e2b0ee19db2b 28
kstech 0:e2b0ee19db2b 29 //Tie unused analogue pins LOW
kstech 0:e2b0ee19db2b 30
kstech 0:e2b0ee19db2b 31 DigitalOut a1(P0_15);
kstech 0:e2b0ee19db2b 32 DigitalOut a2(P0_16);
kstech 0:e2b0ee19db2b 33 DigitalOut a3(P0_22);
kstech 0:e2b0ee19db2b 34 DigitalOut a4(P0_23);
kstech 0:e2b0ee19db2b 35
kstech 0:e2b0ee19db2b 36 // ====== Variables =========
kstech 0:e2b0ee19db2b 37
kstech 0:e2b0ee19db2b 38 float test_float = 12.5;
kstech 0:e2b0ee19db2b 39 float display_float = 0.0;
kstech 0:e2b0ee19db2b 40
kstech 0:e2b0ee19db2b 41 int twodp =0;
kstech 0:e2b0ee19db2b 42
kstech 0:e2b0ee19db2b 43 float _ON;
kstech 0:e2b0ee19db2b 44 float _OFF;
kstech 0:e2b0ee19db2b 45
kstech 0:e2b0ee19db2b 46 float calib;
kstech 0:e2b0ee19db2b 47 float voltage;
kstech 0:e2b0ee19db2b 48 float displayVoltage;
kstech 0:e2b0ee19db2b 49 float displaySet;
kstech 0:e2b0ee19db2b 50
kstech 0:e2b0ee19db2b 51 float difference = 0;
kstech 0:e2b0ee19db2b 52 float calibrate=0.0;
kstech 0:e2b0ee19db2b 53
kstech 0:e2b0ee19db2b 54
kstech 0:e2b0ee19db2b 55
kstech 0:e2b0ee19db2b 56
kstech 0:e2b0ee19db2b 57 // ====== CODE BEGINS=========
kstech 0:e2b0ee19db2b 58
kstech 0:e2b0ee19db2b 59 typedef union _data {
kstech 0:e2b0ee19db2b 60 float f;
kstech 0:e2b0ee19db2b 61 char s[4];
kstech 0:e2b0ee19db2b 62 } myData;
kstech 0:e2b0ee19db2b 63
kstech 0:e2b0ee19db2b 64
kstech 0:e2b0ee19db2b 65 float getEepromFloat(int place)
kstech 0:e2b0ee19db2b 66 {
kstech 0:e2b0ee19db2b 67 myData returnedFloat;
kstech 0:e2b0ee19db2b 68 char someBytes[4];
kstech 0:e2b0ee19db2b 69
kstech 0:e2b0ee19db2b 70 iap.read_eeprom( (char*)(TARGET_ADDRESS+(place*4)), someBytes, FLOAT_SIZE );
kstech 0:e2b0ee19db2b 71
kstech 0:e2b0ee19db2b 72 returnedFloat.s[0] = someBytes[0];
kstech 0:e2b0ee19db2b 73 returnedFloat.s[1] = someBytes[1];
kstech 0:e2b0ee19db2b 74 returnedFloat.s[2] = someBytes[2];
kstech 0:e2b0ee19db2b 75 returnedFloat.s[3] = someBytes[3];
kstech 0:e2b0ee19db2b 76 return returnedFloat.f;
kstech 0:e2b0ee19db2b 77
kstech 0:e2b0ee19db2b 78 }
kstech 0:e2b0ee19db2b 79
kstech 0:e2b0ee19db2b 80 void setEepromFloat(int place, float incomingFloat)
kstech 0:e2b0ee19db2b 81 {
kstech 0:e2b0ee19db2b 82 char theBytes[4];
kstech 0:e2b0ee19db2b 83 myData aFloat;
kstech 0:e2b0ee19db2b 84
kstech 0:e2b0ee19db2b 85 aFloat.f = incomingFloat;
kstech 0:e2b0ee19db2b 86
kstech 0:e2b0ee19db2b 87 theBytes[0] = aFloat.s[0];
kstech 0:e2b0ee19db2b 88 theBytes[1] = aFloat.s[1];
kstech 0:e2b0ee19db2b 89 theBytes[2] = aFloat.s[2];
kstech 0:e2b0ee19db2b 90 theBytes[3] = aFloat.s[3];
kstech 0:e2b0ee19db2b 91
kstech 0:e2b0ee19db2b 92 iap.write_eeprom( theBytes, (char*) (TARGET_ADDRESS+(place*4)), FLOAT_SIZE );
kstech 0:e2b0ee19db2b 93
kstech 0:e2b0ee19db2b 94 }
kstech 0:e2b0ee19db2b 95
kstech 0:e2b0ee19db2b 96
kstech 0:e2b0ee19db2b 97 int main()
kstech 0:e2b0ee19db2b 98 {
kstech 0:e2b0ee19db2b 99
kstech 0:e2b0ee19db2b 100 teletype("Hello", 0);
kstech 0:e2b0ee19db2b 101 float aValue=0.0;
kstech 0:e2b0ee19db2b 102 float theReturned=99.99;
kstech 0:e2b0ee19db2b 103
kstech 0:e2b0ee19db2b 104 while (1) {
kstech 0:e2b0ee19db2b 105 wait(2.0);
kstech 0:e2b0ee19db2b 106
kstech 0:e2b0ee19db2b 107 aValue++; // increment it
kstech 0:e2b0ee19db2b 108
kstech 0:e2b0ee19db2b 109 setEepromFloat(PLACE,aValue); //put it in place 0 (Global variable)
kstech 0:e2b0ee19db2b 110
kstech 0:e2b0ee19db2b 111 theReturned = getEepromFloat(PLACE); //get it back
kstech 0:e2b0ee19db2b 112
kstech 0:e2b0ee19db2b 113 lcd.cls();
kstech 0:e2b0ee19db2b 114 teletype("Value: %f", theReturned); //output it to the screen
kstech 0:e2b0ee19db2b 115
kstech 0:e2b0ee19db2b 116
kstech 0:e2b0ee19db2b 117 };
kstech 0:e2b0ee19db2b 118 }
kstech 0:e2b0ee19db2b 119
kstech 0:e2b0ee19db2b 120
kstech 0:e2b0ee19db2b 121
kstech 0:e2b0ee19db2b 122
kstech 0:e2b0ee19db2b 123 char* left(string Source,int NewLen)
kstech 0:e2b0ee19db2b 124 {
kstech 0:e2b0ee19db2b 125
kstech 0:e2b0ee19db2b 126 char* result;
kstech 0:e2b0ee19db2b 127 char* temp;
kstech 0:e2b0ee19db2b 128 if (NewLen <=0)
kstech 0:e2b0ee19db2b 129 NewLen =1; /* Minimum length */
kstech 0:e2b0ee19db2b 130
kstech 0:e2b0ee19db2b 131 result = (char*)malloc(NewLen + 1); /* +1 = DFTTZ! */
kstech 0:e2b0ee19db2b 132 *result=' '; /* default for unassigned strings */
kstech 0:e2b0ee19db2b 133 temp=result;
kstech 0:e2b0ee19db2b 134 if (Source && *Source) { /* don't copy an empty string */
kstech 0:e2b0ee19db2b 135 while (NewLen-- >0)
kstech 0:e2b0ee19db2b 136 *temp++=*Source++;
kstech 0:e2b0ee19db2b 137 } else temp++;
kstech 0:e2b0ee19db2b 138 *temp='\0';
kstech 0:e2b0ee19db2b 139 return result;
kstech 0:e2b0ee19db2b 140 }
kstech 0:e2b0ee19db2b 141
kstech 0:e2b0ee19db2b 142 void teletype(char* text, int row)
kstech 0:e2b0ee19db2b 143 {
kstech 0:e2b0ee19db2b 144 lcd.locate(0,row);
kstech 0:e2b0ee19db2b 145 lcd.printf(" ");
kstech 0:e2b0ee19db2b 146
kstech 0:e2b0ee19db2b 147 int whole=strlen(text);
kstech 0:e2b0ee19db2b 148
kstech 0:e2b0ee19db2b 149 for (int i=1; i<=whole; i++) {
kstech 0:e2b0ee19db2b 150 lcd.locate(0,row);
kstech 0:e2b0ee19db2b 151 lcd.printf(left(text,i));
kstech 0:e2b0ee19db2b 152 wait(0.15);
kstech 0:e2b0ee19db2b 153 }
kstech 0:e2b0ee19db2b 154 }
kstech 0:e2b0ee19db2b 155
kstech 0:e2b0ee19db2b 156