Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- define MOSI 11 //MASTER OUT SLAVE IN
- #define MISO 12 //MASTER IN SLAVE OUT
- #define SPICLOCK 13 //MASTER CLOCK OUTPUT
- #define SLAVESELECTEEPROM1 10 // SLAVE SELECT CHIP EEPROM 1
- #define WREN 6 //Activare scriere pentru EEPROM
- #define WRDI 4 //Dezactivare scriere pentru EEPROM
- #define READ 3 //Operatie citire EEPROM
- #define WRITE 2 //Operatie scriere EEPROM
- #define SSTRANSITIONDELAY 10
- #define WRITEDELAY 1000
- //Variabile pentru datele de intrare/iesire EEPROM
- byte eeprom_output_data=0;
- byte eeprom_input_data=0;
- //Adresa de scriere/citire
- int address=7;
- //Valori pentru scriere
- char valEEPROM1=25;
- String inputString = ""; // Variabila pentru stocarea comenzii
- boolean stringComplete = false; // Comanda finalizata
- //Functie pentru transferul datelor
- char spi_transfer(volatile char data)
- {
- SPDR = data; // Incarcare date
- while (!(SPSR & (1<<SPIF))){} // Pooling pentru a asigura transferul complet al datelor
- return SPDR; // recuperarea datelor citite
- }
- //Functie pentru citirea EEPROM1
- byte read_eeprom1(int EEPROM_address)
- {
- int data; //Variabila temporara pentru stocarea datelor citite
- digitalWrite(SLAVESELECTEEPROM1,LOW); //Activare circuit EEPROM 1
- delay(SSTRANSITIONDELAY);
- spi_transfer(READ); //Transmisie comanda citire
- spi_transfer((char)(EEPROM_address>>8)); //Transmisie adresa MSB first
- spi_transfer((char)(EEPROM_address)); //Transmisie adresa
- data = spi_transfer(0xFF); //Receptie caracter
- delay(SSTRANSITIONDELAY);
- digitalWrite(SLAVESELECTEEPROM1,HIGH); //Dezactivare EEPROM 1
- return data;
- }
- //Functie pentru receptionarea datelor pe interfata seriala
- void serialEvent() {
- while (Serial.available()) {
- // citire caracter cu caracter
- char inChar = (char)Serial.read();
- // add it to the inputString:
- inputString += inChar;
- //activare conditie procesare
- if (inChar == '\n') {
- stringComplete = true;
- }
- }
- }
- void handleMemoryOperation(String data)
- {
- switch(data[0])
- {
- case '0':
- digitalWrite(SLAVESELECTEEPROM1,LOW); //enable device
- delay(SSTRANSITIONDELAY);
- spi_transfer(WREN); //write enable
- digitalWrite(SLAVESELECTEEPROM1,HIGH); //disable device
- delay(SSTRANSITIONDELAY);
- digitalWrite(SLAVESELECTEEPROM1,LOW); //enable device
- spi_transfer(WRITE); //write instruction
- spi_transfer((char)(address>>8)); //send MSByte address first
- spi_transfer((char)(address)); //send LSByte address
- spi_transfer((char)valEEPROM1); //write data byte
- digitalWrite(SLAVESELECTEEPROM1,HIGH); //disable device
- //wait for eeprom to finish writing
- delay(WRITEDELAY);
- digitalWrite(SLAVESELECTEEPROM1,LOW); //enable device
- delay(SSTRANSITIONDELAY);
- spi_transfer(WRDI); //write disable
- digitalWrite(SLAVESELECTEEPROM1,HIGH); //disable device
- Serial.println("Write done");
- break;
- case '1':
- eeprom_output_data = read_eeprom1(address);
- Serial.print("EEPROM1 data: ");
- Serial.println(eeprom_output_data,DEC);
- break;
- default:
- break;
- }
- }
- //Inializarea sistemului
- void setup()
- {
- Serial.begin(9600); //Initializarea interfata seriala
- inputString.reserve(10); //Alocare date comanda
- pinMode(MOSI, OUTPUT); //Configurare pin iesire
- pinMode(MISO, INPUT); //Configurare pin intrare
- pinMode(SPICLOCK,OUTPUT); //Configurare pin iesire
- pinMode(SLAVESELECTEEPROM1,OUTPUT); //Configurare pin iesire
- digitalWrite(SLAVESELECTEEPROM1,HIGH); //Dezactivare EEPROM 1
- // SPCR = 01010000
- //interrupt disabled,spi enabled,msb 1st,master,clk low when idle,
- //sample on leading edge of clk,system clock/4 rate (fastest)
- SPCR = (1<<SPE)|(1<<MSTR);
- byte clr; //Variabila temporara pentru curatarea registrelor SPE si MSTR
- clr=SPSR; // "Curatarea" registrului SPSR
- clr=SPDR; // "Curatarea" registrului SPDR
- }
- void loop()
- {
- if (stringComplete) {
- Serial.print("Received command: ");
- Serial.println(inputString);
- //Alegere operatie
- handleMemoryOperation(inputString);
- // Resetare variabile globale
- inputString = "";
- stringComplete = false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement