Confused about memory

I'm doing something with LED matrices, and so I have a large two dimensional array of bytes which defines characters for display. I'd like to get this out of SRAM, but I'm a little confused on the use of PROGMEM.

I understand I can put something into progmem like this:

static const byte ascii[95][10]  PROGMEM = {

But I'm not at all sure of the easiest way to get it out again.

This is the line of code where I reference my 'ascii' table:

ht1632_senddata(chipno, (startLocation+i) % 64, ascii[lett][i]);

So you can see that the bit I need to change is the last part of the ht1633_senddata function where I've got ascii[lett][i]

What do I need to change that to, and is the F() function any use to me here?

What do I need to change that to

Have you looked at the PROGMEM page? There are pgm_read_ functions that you need to use to get the data from PROGMEM. Which one depends on the kind of data - byte, int, char, long, float, etc.

CowJam:
But I'm not at all sure of the easiest way to get it out again.

AVR Atmega - Data in Program Space

PaulS:
Have you looked at the PROGMEM page? There are pgm_read_ functions that you need to use to get the data from PROGMEM. Which one depends on the kind of data - byte, int, char, long, float, etc.

I did, and it confused me. I was hoping someone would tell me how to read a two dimensional byte array. :-[

jurs:
AVR Atmega - Data in Program Space

Awesome, thanks.

Edit: The new code is:

ht1632_senddata(chipno, (startLocation+i) % 64, pgm_read_byte(&(ascii[lett][i])));

so addressing the variable is the same, but you need the relevant function pgm_read_byte and then an amersand for addressing.