Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.42 KB | None | 0 0
  1. define MOSI 11 //MASTER OUT SLAVE IN
  2. #define MISO 12 //MASTER IN SLAVE OUT
  3. #define SPICLOCK 13 //MASTER CLOCK OUTPUT
  4. #define SLAVESELECTEEPROM1 10 // SLAVE SELECT CHIP EEPROM 1
  5.  
  6.  
  7. #define WREN 6 //Activare scriere pentru EEPROM
  8. #define WRDI 4 //Dezactivare scriere pentru EEPROM
  9. #define READ 3 //Operatie citire EEPROM
  10. #define WRITE 2 //Operatie scriere EEPROM
  11.  
  12. #define SSTRANSITIONDELAY 10
  13. #define WRITEDELAY 1000
  14.  
  15. //Variabile pentru datele de intrare/iesire EEPROM
  16. byte eeprom_output_data=0;
  17. byte eeprom_input_data=0;
  18.  
  19. //Adresa de scriere/citire
  20. int address=7;
  21.  
  22. //Valori pentru scriere
  23. char valEEPROM1=25;
  24.  
  25. String inputString = ""; // Variabila pentru stocarea comenzii
  26. boolean stringComplete = false; // Comanda finalizata
  27.  
  28. //Functie pentru transferul datelor
  29. char spi_transfer(volatile char data)
  30. {
  31. SPDR = data; // Incarcare date
  32. while (!(SPSR & (1<<SPIF))){} // Pooling pentru a asigura transferul complet al datelor
  33. return SPDR; // recuperarea datelor citite
  34. }
  35.  
  36. //Functie pentru citirea EEPROM1
  37. byte read_eeprom1(int EEPROM_address)
  38. {
  39.  
  40. int data; //Variabila temporara pentru stocarea datelor citite
  41. digitalWrite(SLAVESELECTEEPROM1,LOW); //Activare circuit EEPROM 1
  42. delay(SSTRANSITIONDELAY);
  43. spi_transfer(READ); //Transmisie comanda citire
  44. spi_transfer((char)(EEPROM_address>>8)); //Transmisie adresa MSB first
  45. spi_transfer((char)(EEPROM_address)); //Transmisie adresa
  46. data = spi_transfer(0xFF); //Receptie caracter
  47. delay(SSTRANSITIONDELAY);
  48. digitalWrite(SLAVESELECTEEPROM1,HIGH); //Dezactivare EEPROM 1
  49. return data;
  50. }
  51.  
  52. //Functie pentru receptionarea datelor pe interfata seriala
  53. void serialEvent() {
  54. while (Serial.available()) {
  55. // citire caracter cu caracter
  56. char inChar = (char)Serial.read();
  57. // add it to the inputString:
  58. inputString += inChar;
  59. //activare conditie procesare
  60. if (inChar == '\n') {
  61. stringComplete = true;
  62. }
  63. }
  64. }
  65.  
  66. void handleMemoryOperation(String data)
  67. {
  68. switch(data[0])
  69. {
  70. case '0':
  71. digitalWrite(SLAVESELECTEEPROM1,LOW); //enable device
  72. delay(SSTRANSITIONDELAY);
  73. spi_transfer(WREN); //write enable
  74. digitalWrite(SLAVESELECTEEPROM1,HIGH); //disable device
  75. delay(SSTRANSITIONDELAY);
  76. digitalWrite(SLAVESELECTEEPROM1,LOW); //enable device
  77. spi_transfer(WRITE); //write instruction
  78. spi_transfer((char)(address>>8)); //send MSByte address first
  79. spi_transfer((char)(address)); //send LSByte address
  80. spi_transfer((char)valEEPROM1); //write data byte
  81. digitalWrite(SLAVESELECTEEPROM1,HIGH); //disable device
  82. //wait for eeprom to finish writing
  83. delay(WRITEDELAY);
  84. digitalWrite(SLAVESELECTEEPROM1,LOW); //enable device
  85. delay(SSTRANSITIONDELAY);
  86. spi_transfer(WRDI); //write disable
  87. digitalWrite(SLAVESELECTEEPROM1,HIGH); //disable device
  88. Serial.println("Write done");
  89. break;
  90. case '1':
  91. eeprom_output_data = read_eeprom1(address);
  92. Serial.print("EEPROM1 data: ");
  93. Serial.println(eeprom_output_data,DEC);
  94. break;
  95. default:
  96. break;
  97. }
  98. }
  99.  
  100. //Inializarea sistemului
  101. void setup()
  102. {
  103. Serial.begin(9600); //Initializarea interfata seriala
  104. inputString.reserve(10); //Alocare date comanda
  105. pinMode(MOSI, OUTPUT); //Configurare pin iesire
  106. pinMode(MISO, INPUT); //Configurare pin intrare
  107. pinMode(SPICLOCK,OUTPUT); //Configurare pin iesire
  108. pinMode(SLAVESELECTEEPROM1,OUTPUT); //Configurare pin iesire
  109.  
  110.  
  111. digitalWrite(SLAVESELECTEEPROM1,HIGH); //Dezactivare EEPROM 1
  112. // SPCR = 01010000
  113. //interrupt disabled,spi enabled,msb 1st,master,clk low when idle,
  114. //sample on leading edge of clk,system clock/4 rate (fastest)
  115. SPCR = (1<<SPE)|(1<<MSTR);
  116. byte clr; //Variabila temporara pentru curatarea registrelor SPE si MSTR
  117. clr=SPSR; // "Curatarea" registrului SPSR
  118. clr=SPDR; // "Curatarea" registrului SPDR
  119.  
  120. }
  121.  
  122. void loop()
  123. {
  124. if (stringComplete) {
  125. Serial.print("Received command: ");
  126. Serial.println(inputString);
  127. //Alegere operatie
  128. handleMemoryOperation(inputString);
  129. // Resetare variabile globale
  130. inputString = "";
  131. stringComplete = false;
  132. }
  133.  
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement