Smart-Home am Beispiel der Präsenzerkennung im Raum Projektarbeit Lennart Heimbs, Johannes Krug, Sebastian Dohle und Kevin Holzschuh bei Prof. Oliver Hofmann SS2019
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

eepromTest.ino 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. //Test extEEPROM library.
  2. //Writes the EEPROM full of 32-bit integers and reads them back to verify.
  3. //Wire a button from digital pin 6 to ground, this is used as a start button
  4. //so the sketch doesn't do unnecessary EEPROM writes every time it's reset.
  5. //Jack Christensen 09Jul2014
  6. //Paolo Paolucci 17Mar2016 (fix 28Jun2017)
  7. #include <extEEPROM.h> //https://github.com/PaoloP74/extEEPROM
  8. //One 24LC256 EEPROMs on the bus
  9. const uint32_t totalKBytes = 32; //for read and write test functions
  10. extEEPROM eep(kbits_256, 1, 64); //device size, number of devices, page size
  11. const uint8_t btnStart = 6; //start button
  12. void setup(void)
  13. {
  14. pinMode(btnStart, INPUT_PULLUP);
  15. Serial.begin(115200);
  16. uint8_t eepStatus = eep.begin(eep.twiClock400kHz); //go fast!
  17. if (eepStatus) {
  18. Serial.print(F("extEEPROM.begin() failed, status = "));
  19. Serial.println(eepStatus);
  20. while (1);
  21. }
  22. Serial.println(F("Press button to start..."));
  23. while (digitalRead(btnStart) == HIGH) {
  24. delay(10); //wait for button push
  25. }
  26. uint8_t chunkSize =
  27. 64; //this can be changed, but must be a multiple of 4 since we're writing 32-bit integers
  28. // eeErase(chunkSize, 0, totalKBytes * 1024 - 1);
  29. eeWrite(chunkSize);
  30. eeRead(chunkSize);
  31. dump(0, 32); //the first 32 bytes
  32. dump(32256, 64); //the last 64 bytes
  33. //dump(32512, 64); //across the device boundary
  34. //dump(65520, 16); //the last 16 bytes
  35. }
  36. void loop(void)
  37. {
  38. }
  39. //write test data (32-bit integers) to eeprom, "chunk" bytes at a time
  40. void eeWrite(uint8_t chunk)
  41. {
  42. chunk &= 0xFC; //force chunk to be a multiple of 4
  43. uint8_t data[chunk];
  44. uint32_t val = 0;
  45. Serial.println(F("Writing..."));
  46. uint32_t msStart = millis();
  47. for (uint32_t addr = 0; addr < totalKBytes * 1024; addr += chunk) {
  48. if ( (addr & 0xFFF) == 0 ) {
  49. Serial.println(addr);
  50. }
  51. for (uint8_t c = 0; c < chunk; c += 4) {
  52. data[c + 0] = val >> 24;
  53. data[c + 1] = val >> 16;
  54. data[c + 2] = val >> 8;
  55. data[c + 3] = val;
  56. ++val;
  57. }
  58. eep.write(addr, data, chunk);
  59. }
  60. uint32_t msLapse = millis() - msStart;
  61. Serial.print(F("Write lapse: "));
  62. Serial.print(msLapse);
  63. Serial.println(F(" ms"));
  64. }
  65. //read test data (32-bit integers) from eeprom, "chunk" bytes at a time
  66. void eeRead(uint8_t chunk)
  67. {
  68. chunk &= 0xFC; //force chunk to be a multiple of 4
  69. uint8_t data[chunk];
  70. uint32_t val = 0, testVal;
  71. Serial.println(F("Reading..."));
  72. uint32_t msStart = millis();
  73. for (uint32_t addr = 0; addr < totalKBytes * 1024; addr += chunk) {
  74. if ( (addr & 0xFFF) == 0 ) {
  75. Serial.println(addr);
  76. }
  77. eep.read(addr, data, chunk);
  78. for (uint8_t c = 0; c < chunk; c += 4) {
  79. testVal = ((uint32_t)data[c + 0] << 24) + ((uint32_t)data[c + 1] << 16) + ((
  80. uint32_t)data[c + 2] << 8) + (uint32_t)data[c + 3];
  81. if (testVal != val) {
  82. Serial.print(F("Error @ addr "));
  83. Serial.print(addr + c);
  84. Serial.print(F(" Expected "));
  85. Serial.print(val);
  86. Serial.print(F(" Read "));
  87. Serial.print(testVal);
  88. Serial.print(F(" 0x"));
  89. Serial.println(testVal, HEX);
  90. }
  91. ++val;
  92. }
  93. }
  94. uint32_t msLapse = millis() - msStart;
  95. Serial.print(F("Last value: "));
  96. Serial.print(val);
  97. Serial.print(F(" Read lapse: "));
  98. Serial.print(msLapse);
  99. Serial.println(F(" ms"));
  100. }
  101. //write 0xFF to eeprom, "chunk" bytes at a time
  102. void eeErase(uint8_t chunk, uint32_t startAddr, uint32_t endAddr)
  103. {
  104. chunk &= 0xFC; //force chunk to be a multiple of 4
  105. uint8_t data[chunk];
  106. Serial.println(F("Erasing..."));
  107. for (int i = 0; i < chunk; i++) {
  108. data[i] = 0xFF;
  109. }
  110. uint32_t msStart = millis();
  111. for (uint32_t a = startAddr; a <= endAddr; a += chunk) {
  112. if ( (a & 0xFFF) == 0 ) {
  113. Serial.println(a);
  114. }
  115. eep.write(a, data, chunk);
  116. }
  117. uint32_t msLapse = millis() - msStart;
  118. Serial.print(F("Erase lapse: "));
  119. Serial.print(msLapse);
  120. Serial.print(F(" ms"));
  121. }
  122. //dump eeprom contents, 16 bytes at a time.
  123. //always dumps a multiple of 16 bytes.
  124. void dump(uint32_t startAddr, uint32_t nBytes)
  125. {
  126. Serial.print(F("EEPROM DUMP 0x"));
  127. Serial.print(startAddr, HEX);
  128. Serial.print(F(" 0x"));
  129. Serial.print(nBytes, HEX);
  130. Serial.print(F(" "));
  131. Serial.print(startAddr);
  132. Serial.print(F(" "));
  133. Serial.println(nBytes);
  134. uint32_t nRows = (nBytes + 15) >> 4;
  135. uint8_t d[16];
  136. for (uint32_t r = 0; r < nRows; r++) {
  137. uint32_t a = startAddr + 16 * r;
  138. eep.read(a, d, 16);
  139. Serial.print(F("0x"));
  140. if ( a < 16 * 16 * 16 ) {
  141. Serial.print(F("0"));
  142. }
  143. if ( a < 16 * 16 ) {
  144. Serial.print(F("0"));
  145. }
  146. if ( a < 16 ) {
  147. Serial.print(F("0"));
  148. }
  149. Serial.print(a, HEX);
  150. Serial.print(F(" "));
  151. for ( int c = 0; c < 16; c++ ) {
  152. if ( d[c] < 16 ) {
  153. Serial.print(F("0"));
  154. Serial.print(d[c], HEX);
  155. Serial.print( c == 7 ? " " : " ");
  156. }
  157. }
  158. Serial.println(F(""));
  159. }
  160. }