Jump to content
PLC Forum


Lorenzo Ruscitti

RAM 23k256

Recommended Posts

Lorenzo Ruscitti
#include <SPI.h>

//SRAM Status Register opcodes
#define BYTE_MODE B00000000                    // 0     dec
#define PAGE_MODE B10000000                    // 128   dec
#define SEQUENTIAL_MODE B01000000              // 64    dec

//SRAM Status Register opcodes disabling HOLD pin
#define BYTE_MODE_NO_HW_HOLD B00000001         // 1     dec
#define PAGE_MODE_NO_HW_HOLD B10000001         // 129   dec
#define SEQUENTIAL_MODE_NO_HW_HOLD B01000001   // 65    dec

//SRAM opcodes
#define READ_STATUS_REGISTER B00000101         // 5     dec
#define WRITE_STATUS_REGISTER B00000001        // 1     dec
#define READ B00000011                         // 3     dec
#define WRITE B00000010                        // 2     dec

#define ZERO ((uint8_t) 0x00)                  // 0     dec
#define MAX_VALUE ((uint8_t) 0xFF)             // 255   dec
#define MAX_ADDR ((uint16_t) 0x7FFF)           // 32767 dec
#define MAX_PAGE ((uint8_t) 0x0400)            // 1024  dec
#define MAX_WORD_PER_PAGE ((uint8_t) 0x20)     // 32    dec

#define SET_SS_LOW() (PORTB &= ~(1<<PORTB2)) //set SPI_SS low
#define SET_SS_HIGH() (PORTB |= (1<<PORTB2)) //set SPI_SS high

uint8_t SpiRAMReadStatusRegister() {
  uint8_t read_status;
 
  //SET_SS_LOW();
  digitalWrite(53, LOW);
  SPI.transfer(READ_STATUS_REGISTER);
  read_status = SPI.transfer(0xFF);
  //SET_SS_HIGH();
  digitalWrite(53, HIGH);
 
  return read_status;
}


void SpiRAMWriteStatusRegister(uint8_t command) {

  digitalWrite(53, LOW);
  //SET_SS_LOW();
  SPI.transfer(WRITE_STATUS_REGISTER);
  SPI.transfer(command);
  //SET_SS_HIGH();
  digitalWrite(53, HIGH);
 
}

byte SpiRAMReadByte(uint16_t address) {

  Serial.println("*********** FASE DI LETTURA ***************");
 
  byte read_byte;

  digitalWrite(53, LOW);
 
  SPI.transfer(READ);
  SPI.transfer((char) (address >> 8));
  SPI.transfer((char) address);
  read_byte = SPI.transfer(0xFF);

  Serial.print("INDIRIZZO DI LETTURA = ");
  Serial.println(address, DEC);

  delay(200);
 
  Serial.print("VALORE LETTO = ");
  Serial.println(read_byte, DEC);
 
  digitalWrite(53, HIGH);

 
 
  return read_byte;
}



void SpiRAMWriteByte(uint16_t address, byte data_byte) {

  Serial.println("*********** FASE DI SCRITTURA ***************");
 
  digitalWrite(53, LOW);
 
  SPI.transfer(WRITE);
  SPI.transfer((char) (address >> 8));
  SPI.transfer((char) address);
  SPI.transfer(data_byte);

  Serial.print("INDIRIZZO DI SCRITTURA = ");
  Serial.println(address, DEC);

  delay(200);
 
  Serial.print("DATO SCRITTO = ");
  Serial.println(data_byte, DEC);
 
  digitalWrite(53, HIGH);
}

byte x = 1;

void setup() {
 
  Serial.begin(9600);
  SPI.begin();

  pinMode(53, OUTPUT); // pin CS
 
  SpiRAMWriteStatusRegister(BYTE_MODE);
 
  if(SpiRAMReadStatusRegister() != BYTE_MODE) {
    Serial.println("Errory while setting status register (byte operative mode)!");
  }
  else {
    Serial.println("Byte operative mode correctly set!");
  }
 
}




void loop() {
 
  SpiRAMWriteByte(0, x);

  delay(2000);
 
  if(SpiRAMReadByte(0) <= 10) {

    delay(8000);
   
    x = x + 1;

  }
  else {

    Serial.println("FINITO");
  }


 
  //delay(10);

 

Ciao a tutti e buona pasqua

volevo chiedervi una domanda riguardante la memoria RAM 23k256.

Ho scritto il codice che vi ho inserito.
L'ho scritto in quel modo perché volevo verificare se avessi potuto sovrascrivere il valore di una locazione fissa della RAM e poi incrementarlo fino a quando avevo interesse, ovviamente incrementarlo fino ad un numero massimo che possa essere espresso con 8 bit. Dico quest'ultima cosa poiché io uso la scrittura e lettura di un byte.

Quello che vi chiedo è perché nella immagini 1 e 2 in allegato ottengo quei risultati cerchiati in rosso.

Fino alla scrittura del quarto valore tutto ok poi scrivo il valore 5 ma leggo il valore 6, poi scrivo il valore 9 ma legge il 10, e qui sarebbe dovuta comparire la scritta finito, invece compare quando scrivo il 10 e legge il 12.

Mi potete aiutare ?

Vi ringrazio.

 

1.png

2.png

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...