Problem accessing large PROGMEM structure

OK, I did some research, wrote my own code, and it works!
It´s a simple example of using Arduino to talk to the MAX6960

#define DATAOUT 11//MOSI
#define DATAIN  12//MISO 
#define SPICLOCK  13//sck
#define SLAVESELECT 10//ss
#define RESET 9 //reset

byte clr;

void setup()
{
  pinMode(DATAOUT, OUTPUT);
  pinMode(DATAIN, INPUT);
  pinMode(SPICLOCK,OUTPUT);
  pinMode(SLAVESELECT,OUTPUT);
  pinMode(RESET,OUTPUT);

  // 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);
  clr=SPSR;
  clr=SPDR;
  delay(10); 

  digitalWrite(SLAVESELECT,HIGH);  
  digitalWrite(RESET,HIGH); 
  delay(5);  
  digitalWrite(RESET,LOW);
  delay(5);
  digitalWrite(RESET,HIGH);
  delay(200);


//Panel Configuration Register
  digitalWrite(SLAVESELECT,LOW);
  spi_transfer(0x0d);
  spi_transfer(0x01);  
  digitalWrite(SLAVESELECT,HIGH);
    
//Panel Intensity Register    
  digitalWrite(SLAVESELECT,LOW);
  spi_transfer(0x02);
  spi_transfer(0x30);  
  digitalWrite(SLAVESELECT,HIGH);
  
//Number of Cascaded Devices Register  
  digitalWrite(SLAVESELECT,LOW);
  spi_transfer(0x0e);
  spi_transfer(0x03);  
  digitalWrite(SLAVESELECT,HIGH);
 
//Number of Display Rows Register  
  digitalWrite(SLAVESELECT,LOW);
  spi_transfer(0x0f);
  spi_transfer(0x01);  
  digitalWrite(SLAVESELECT,HIGH);

  delay (500);

  digitalWrite(SLAVESELECT,LOW);
  spi_transfer(0x00);
  spi_transfer(0x00);
  spi_transfer(0x88);  
  digitalWrite(SLAVESELECT,HIGH);
while (1)
  {
  };
}

char spi_transfer(volatile char data)
{
  SPDR = data;                    // Start the transmission
  while (!(SPSR & (1<<SPIF)))     // Wait for the end of the transmission
  {
  };
  return SPDR;                    // return the received byte
}

void loop()
{
while (1);
  {
  };
}