Advertisement
anticlown

arduino test firmware

Apr 8th, 2024
774
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define MEM_E 12  // E or chip select or crystal select
  2. #define MEM_D 19  // input data to memory
  3. #define MEM_W 4   // write
  4. #define MEM_Q 5   // output data from memory
  5.  
  6. #define MEM_A0 11
  7. #define MEM_A1 10
  8. #define MEM_A2 9
  9. #define MEM_A3 8
  10.  
  11. #define MEM_A4 13
  12. #define MEM_A5 14
  13. #define MEM_A6 15
  14. #define MEM_A9 16
  15. #define MEM_A8 17
  16. #define MEM_A7 18
  17.  
  18. #define MEM_A11 6
  19. #define MEM_A10 7
  20.  
  21. /*    
  22.       User functions
  23.   */
  24. void setAddress(const unsigned offset) {
  25.   bool result;
  26.   result = (offset & 0b00000000000000000000000000000001) != 0;
  27.   digitalWrite(MEM_A0, result);
  28.   result = (offset & 0b00000000000000000000000000000010) != 0;
  29.   digitalWrite(MEM_A1, result);
  30.   result = (offset & 0b00000000000000000000000000000100) != 0;
  31.   digitalWrite(MEM_A2, result);
  32.   result = (offset & 0b00000000000000000000000000001000) != 0;
  33.   digitalWrite(MEM_A3, result);
  34.   result = (offset & 0b00000000000000000000000000010000) != 0;
  35.   digitalWrite(MEM_A4, result);
  36.   result = (offset & 0b00000000000000000000000000100000) != 0;
  37.   digitalWrite(MEM_A5, result);
  38.   result = (offset & 0b00000000000000000000000001000000) != 0;
  39.   digitalWrite(MEM_A6, result);
  40.   result = (offset & 0b00000000000000000000000010000000) != 0;
  41.   digitalWrite(MEM_A7, result);
  42.   result = (offset & 0b00000000000000000000000100000000) != 0;
  43.   digitalWrite(MEM_A8, result);
  44.   result = (offset & 0b00000000000000000000001000000000) != 0;
  45.   digitalWrite(MEM_A9, result);
  46.   result = (offset & 0b00000000000000000000010000000000) != 0;
  47.   digitalWrite(MEM_A10, result);
  48.   result = (offset & 0b00000000000000000000100000000000) != 0;
  49.   digitalWrite(MEM_A11, result);
  50. }
  51.  
  52. void writeCycle(const bool value, const int diapasonStart, const int diapasonEnd) {
  53.   int dataOffset = diapasonStart;
  54.  
  55.   digitalWrite(MEM_W, 1);
  56.  
  57.   while (dataOffset <= diapasonEnd) {
  58.     digitalWrite(MEM_E, 1);
  59.     setAddress(dataOffset);
  60.     digitalWrite(MEM_E, 0);
  61.     digitalWrite(MEM_D, value);
  62.     digitalWrite(MEM_W, 0);
  63.     digitalWrite(MEM_W, 1);
  64.     dataOffset++;
  65.   }
  66. }
  67.  
  68. void earlyWriteCycle(const bool value, const unsigned diapasonStart, const unsigned diapasonEnd) {
  69.   unsigned dataOffset = diapasonStart;
  70.  
  71.   digitalWrite(MEM_W, 0);
  72.  
  73.   while (dataOffset <= diapasonEnd) {
  74.     digitalWrite(MEM_E, 1);
  75.     setAddress(dataOffset);
  76.     digitalWrite(MEM_D, value);
  77.     digitalWrite(MEM_E, 0);
  78.     dataOffset++;
  79.   }
  80. }
  81.  
  82. void checkCycle(const bool value, const unsigned diapasonStart, const unsigned diapasonEnd) {
  83.   unsigned dataOffset = diapasonStart;
  84.   unsigned errorCounter = 0;
  85.  
  86.   digitalWrite(MEM_W, 1);
  87.  
  88.   while (dataOffset <= diapasonEnd) {
  89.     setAddress(dataOffset);
  90.     digitalWrite(MEM_E, 0);
  91.  
  92.     if (digitalRead(MEM_Q) == value) {
  93.     } else {
  94.       errorCounter++;
  95.     }
  96.  
  97.     digitalWrite(MEM_E, 1);
  98.     dataOffset++;
  99.   }
  100.  
  101.   Serial.print("Total number of errors - ");
  102.   Serial.println(errorCounter);  //вывод количества ошибок
  103. }
  104.  
  105.  
  106. /*    
  107.       Tests
  108.   */
  109.  
  110. void Test_MATS_PLUS() {
  111.   //первый шаг теста, пишем 0 во все ячейки
  112.   writeCycle(0, 0, 4095);
  113.  
  114.   //второй шаг теста, в каждой ячейке проверям на 0 и затем пишем 1
  115.   unsigned errorCounter = 0;
  116.   for (int i = 0; i < 4096; i++) {
  117.     //проверка на 0
  118.     digitalWrite(MEM_W, 1);
  119.     digitalWrite(MEM_E, 1);
  120.     setAddress(i);
  121.     digitalWrite(MEM_E, 0);
  122.     if (digitalRead(MEM_Q) == 0) {
  123.       //если в ячейке памяти 0, то ничего не делаем
  124.     } else {           //если в ячейке 1, то это ошибка
  125.       errorCounter++;  //увеличиваем количество ошибок на 1
  126.     }
  127.     digitalWrite(MEM_E, 1);
  128.  
  129.     //запись 1
  130.     //закомментирован late write cycle
  131.     // digitalWrite(MEM_W, 1);
  132.     // digitalWrite(MEM_E, 1);
  133.     // setMemPorts(i);
  134.     // digitalWrite(MEM_E, 0);
  135.     // digitalWrite(MEM_D, 1);
  136.     // digitalWrite(MEM_W, 0);
  137.     // digitalWrite(MEM_W, 1);
  138.  
  139.     //используется early write cycle
  140.     digitalWrite(MEM_W, 0);
  141.     digitalWrite(MEM_E, 1);
  142.     setAddress(i);
  143.     digitalWrite(MEM_D, 1);//из-за этого конфликт
  144.     digitalWrite(MEM_E, 0);
  145.   }
  146.  
  147.   Serial.print("Total number of errors after (r0+w1) - ");
  148.   Serial.println(errorCounter);  //вывод количества ошибок
  149. }
  150.  
  151.  
  152. /*    
  153.       Program entry point
  154.   */
  155. void setup() {
  156.   Serial.begin(9600);
  157.   pinMode(MEM_A0, OUTPUT);
  158.   pinMode(MEM_A1, OUTPUT);
  159.   pinMode(MEM_A2, OUTPUT);
  160.   pinMode(MEM_A3, OUTPUT);
  161.   pinMode(MEM_A4, OUTPUT);
  162.   pinMode(MEM_A5, OUTPUT);
  163.   pinMode(MEM_A6, OUTPUT);
  164.   pinMode(MEM_A7, OUTPUT);
  165.   pinMode(MEM_A8, OUTPUT);
  166.   pinMode(MEM_A9, OUTPUT);
  167.   pinMode(MEM_A10, OUTPUT);
  168.   pinMode(MEM_A11, OUTPUT);
  169.   pinMode(MEM_E, OUTPUT);
  170.   pinMode(MEM_D, OUTPUT);
  171.   pinMode(MEM_W, OUTPUT);
  172.   pinMode(MEM_Q, INPUT);         //input port
  173.   pinMode(LED_BUILTIN, OUTPUT);  //led activation
  174.  
  175.   //запуск теста
  176.   Test_MATS_PLUS();
  177. }
  178.  
  179. void loop() {
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement