Pages: [1]   Go Down
Author Topic: max7219 expert needed 8x64 matrix  (Read 1264 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

okay so i need help with my code i was able to extend my code onto 8 matrices but i can figure out how to stop it from scrolling i just want it to display a stationary word across the matrices i originally got the code from http://arduino.cc/forum/index.php/topic,22305.0.html and built from there can some one help me understand how to fix this code to a stationary display here is my code for an 8 x 64 matrix and my font library.

Code:
//We always have to include the library
#include "LedControl.h"
#include "font.h"
#include <avr/pgmspace.h>

/*
 Now we need a LedControl to work with.
 ***** These pin numbers will probably not work with your hardware *****
 pin 12 is connected to the DataIn
 pin 11 is connected to the CLK
 pin 10 is connected to LOAD
 We have only a single MAX72XX.
 */
LedControl lc=LedControl(12,11,10,8);

void setup() {
  //we have already set the number of devices when we created the LedControl
  int devices=lc.getDeviceCount();
  //we have to init all devices in a loop
  for(int address=0;address<devices;address++) {
    /*The MAX72XX is in power-saving mode on startup*/
    lc.shutdown(address,false);
    /* Set the brightness to a medium values */
    lc.setIntensity(address,8);
    /* and clear the display */
    lc.clearDisplay(address);
  }



}

// Change these values to adjust scroll speeds and animation iterations

#define TEXT_SCROLL_SPEED 1     // how fast to scrill the text (wait)

#define REPEAT_TEXT 1              // how often to repeat the text if in cycling mode

// How to add a new message:
// * add the new message (only upper case, see font.h)
// * adjust MAX_MESSAGES
// * add the new message to messages
// NOTE: messages may not be longer than 255 chars.
// http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1193587488
// Since 0012, PGM_P is broken. Fortunately there's a workaround

char message_00[] PROGMEM = "ABCDEFGHIJ";
char message_01[] PROGMEM = "";
char message_02[] PROGMEM = "";

#define MAX_MESSAGES 1
//PGM_P PROGMEM messages[] = {
PROGMEM const char *messages[] = { 
    message_00
//    ,message_01
//    ,message_02
};

uint8_t screen_mem[64];                  // screen memory
uint8_t active_row=1;                  // active row
uint8_t message_ptr = 0;                 // points to the active char in the message
uint8_t message_displayed = 0;           // how often has the message been displayed?
uint8_t active_char = 0;                 // stores the active char
uint8_t message_length = 0;              // stores the length of the active message
uint8_t char_ptr = 0;                    // points to the active col in the char
uint8_t char_length = 0;                 // stores the length of the active char
/*
 * copy screen_mem[] to LED Matrix 8x8
 */
void writeArduinoOnMatrix() {
  /* here is the data for the characters */
  int i;
  for (i=0; i<8; i++){
    lc.setColumn(7,i,screen_mem[i+56]);
    lc.setColumn(6,i,screen_mem[i+48]);
    lc.setColumn(5,i,screen_mem[i+40]);
    lc.setColumn(4,i,screen_mem[i+32]);
    lc.setColumn(3,i,screen_mem[i+24]);
    lc.setColumn(2,i,screen_mem[i+16]); 
    lc.setColumn(1,i,screen_mem[i+8]);
    lc.setColumn(0,i,screen_mem[i]) ;
}
}
/*
 * show_char
 * Displays the actual message.
 * Scrolls the screen to the left and draws new pixels on the right.
 * char stop bit is bit.7
 */
void show_char(const prog_uint8_t string[]) {
  uint8_t i;
  uint8_t b;

 // shift the screen to the left
  for (i = 0; i < 63; i++) {
    screen_mem[i] = screen_mem[i+1];
 }
  // advance a char if needed
  if (char_length == 0x80) {

   char_length =0;      //reset stop bit

    //read next char from progmem
    memcpy_P(&active_char,&string[message_ptr],1);
    //this is an alternativ PROGMEM access:
    //active_char =  pgm_read_byte_near(string + message_ptr);
    message_ptr++;

    //string stop byte 0x00
    if (active_char == 0) {
      message_ptr = 0;
      message_displayed++;
      char_length =0x80; // immediately read next char
    }

    active_char -= CHAR_OFFSET;
    char_ptr = 0;

    // this makes the space between two chars
    screen_mem[63]=0;
    return;
  }

  // read pixels for current column of char
  b = pgm_read_byte(&font[active_char * 5 + char_ptr]);
  char_ptr++;
  //char_length= (b & 0x01);
  //b = (b >> 1);
  char_length= (b & 0x80);
  b = (b & 0x7F);
  // write pixels into screen memory
  screen_mem[63] =b;
  Serial.print((uint16_t)active_char); Serial.print(" / "); Serial.println(char_ptr, HEX);
}


/*
 * copy_to_buffer
 * Copies the given sprite from PROGMEM to 8x8 LED RAM.
 */
void copy_to_buffer(const prog_uint8_t sprite[8]) {
  memcpy_P(screen_mem, sprite, 8);
}




void loop() {
 
  int devices=lc.getDeviceCount();
  int8_t i,j,k;

  while (1) {
 
   
   
      writeArduinoOnMatrix();
      delay(TEXT_SCROLL_SPEED);
   

   

    //6
    for (i = 0; i < MAX_MESSAGES; i++) {
      message_displayed = 0;
      while (message_displayed < REPEAT_TEXT) {
        show_char((uint8_t*)pgm_read_word(&(messages)));  //show_char((prog_uint8_t*)pgm_read_word(&(messages[i])));
        writeArduinoOnMatrix();
        delay(TEXT_SCROLL_SPEED);
      }
    }



  }

}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

here is the library
Code:
#include <avr/io.h>
#include <avr/pgmspace.h>

#ifndef FONT_H_
#define FONT_H_

#define MAX_CHARS 95
#define CHAR_OFFSET 0x20

const uint8_t font[] PROGMEM = {
  // 5 chars bitmap, stop bit is bit.7
0x00,0x00,0x00,0x00,0x80,      // 0x20, 32, '
0x00,0x30,0x7D,0x30,0x80,      // 0x21, 33, !
0x70,0x60,0x00,0x70,0xE0,      // 0x22, 34, "
0x12,0x3F,0x12,0x3F,0x92,      // 0x23, 35, #
0x12,0x6A,0x2B,0xA4,0x80,      // 0x24, 36, $
0x63,0x64,0x08,0x13,0xE3,      // 0x25, 37, %
0x36,0x49,0x35,0x02,0x85,      // 0x26, 38, &
0x00,0x70,0x60,0x80,0x80,      // 0x27, 39, '
0x00,0x3E,0x41,0x80,0x80,      // 0x28, 40, (
0x00,0x41,0x3E,0x80,0x80,      // 0x29, 41, )
0x08,0x3E,0x1C,0x3E,0x88,      // 0x2A, 42, *
0x08,0x08,0x3E,0x08,0x88,      // 0x2B, 43, +
0x00,0x03,0x03,0x80,0x80,      // 0x2C, 44, ,
0x08,0x08,0x08,0x08,0x88,      // 0x2D, 45, -
0x00,0x03,0x03,0x80,0x80,      // 0x2E, 46, .
0x02,0x04,0x08,0x10,0xA0,      // 0x2F, 47, /
0x3E,0x45,0x49,0x51,0xBE,      // 0x30, 48, 0
0x00,0x21,0x7F,0x81,0x80,      // 0x31, 49, 1
0x23,0x45,0x49,0x49,0xB1,      // 0x32, 50, 2
0x22,0x49,0x49,0x49,0xB6,      // 0x33, 51, 3
0xC,0x14,0x24,0x7F,0x84,       // 0x34, 52, 4
0x7A,0x49,0x49,0x49,0xC6,      // 0x35, 53, 5
0x1E,0x29,0x49,0x49,0x86,      // 0x36, 54, 6
0x40,0x47,0x48,0x50,0xE0,      // 0x37, 55, 7
0x36,0x49,0x49,0x49,0xB6,      // 0x38, 56, 8
0x30,0x49,0x49,0x4A,0xBC,      // 0x39, 57, 9
0x00,0x1B,0x1B,0x80,0x80,      // 0x3A, 58, :
0x00,0x1B,0x1B,0x80,0x80,      // 0x3B, 59, ;
0x08,0x14,0x22,0xC1,0x80,      // 0x3C, 60, <
0x12,0x12,0x12,0x12,0x92,      // 0x3D, 61, =
0x00,0x41,0x22,0x14,0x88,      // 0x3E, 62, >
0x20,0x40,0x4D,0x48,0xB0,      // 0x3F, 63, ?
0x3E,0x41,0x5D,0x55,0xBC,      // 0x40, 64, @
0x3F,0x44,0x44,0x44,0xBF,      // 0x41, 65, A
0x7F,0x49,0x49,0x49,0xB6,      // 0x42, 66, B
0x3E,0x41,0x41,0x41,0xA2,      // 0x43, 67, C
0x7F,0x41,0x41,0x41,0xBE,      // 0x44, 68, D
0x7F,0x49,0x49,0x49,0xC1,      // 0x45, 69, E
0x7F,0x48,0x48,0x48,0xC0,      // 0x46, 70, F
0x3E,0x41,0x49,0x49,0xAF,      // 0x47, 71, G
0x7F,0x08,0x08,0x08,0xFF,      // 0x48, 72, H
0x00,0x41,0x7F,0xC1,0x80,      // 0x49, 73, I
0x06,0x01,0x01,0x01,0xFE,      // 0x4A, 74, J
0x7F,0x08,0x14,0x22,0xC1,      // 0x4B, 75, K
0x7F,0x01,0x01,0x01,0x81,      // 0x4C, 76, L
0x7F,0x20,0x10,0x20,0xFF,      // 0x4D, 77, M
0x7F,0x20,0x10,0x08,0xFF,      // 0x4E, 78, N
0x3E,0x41,0x41,0x41,0xBE,      // 0x4F, 79, O
0x7F,0x48,0x48,0x48,0xB0,      // 0x50, 80, P
0x3E,0x41,0x45,0x42,0xBD,      // 0x51, 81, Q
0x7F,0x48,0x48,0x4C,0xB3,      // 0x52, 82, R
0x32,0x49,0x49,0x49,0xA6,      // 0x53, 83, S
0x40,0x40,0x7F,0x40,0xC0,      // 0x54, 84, T
0x7E,0x01,0x01,0x01,0xFE,      // 0x55, 85, U
0x7C,0x02,0x01,0x02,0xFC,      // 0x56, 86, V
0x7E,0x01,0x1E,0x01,0xFE,      // 0x57, 87, W
0x63,0x14,0x08,0x14,0xE3,      // 0x58, 88, X
0x70,0x08,0x07,0x08,0xF0,      // 0x59, 89, Y
0x47,0x49,0x51,0xE1,0x80,      // 0x5A, 90, Z
0x00,0x7F,0x41,0x41,0x80,     //0x5B, 91,
0x20,0x10,0x08,0x04,0x82,     //0x5C, 92,
0x00,0x00,0x41,0x7F,0x80,     //0x5D, 93,
0x00,0x20,0x40,0x20,0x80,     //0x5E, 94,^
0x01,0x01,0x01,0x01,0x81,     //0x5F, 95,_
0x00,0x40,0x20,0x00,0x80,     //0x60, 96,`
0x0E,0x11,0x11,0x12,0x9F,     //0x61, 97,a
0x7F,0x09,0x09,0x06,0x80,    //0x62, 98,b
0x0E,0x11,0x11,0x11,0x8A,     //0x63, 99,c
0x0E,0x11,0x11,0x12,0xFF,     //0x64, 100,d
0x0E,0x15,0x15,0x15,0x89,     //0x65, 101,e
0x04,0x3F,0x44,0x40,0xA0,     //0x66, 102,f
0x00,0x32,0x49,0x49,0xBE,     //0x67, 103,g
0x7F,0x08,0x08,0x07,0x80,     //0x62, 104,h
0x00,0x09,0x2F,0x01,0x80,     //0x69, 105,i
0x02,0x11,0x5E,0x10,0x80,     //0x6A, 106,j
0x7F,0x04,0x0A,0x11,0x80,     //0x6B, 107,k
0x00,0x41,0x7F,0x01,0x80,     //0x6C, 108,l
0x0F,0x10,0x0C,0x10,0x8F,     //0x6D, 109,m
0x0F,0x10,0x10,0x10,0x8F,     //0x6E, 110,n
0x0E,0x11,0x11,0x11,0x8E,     //0x6F, 111,o
0x00,0x7F,0x48,0x48,0xB0,     //0x70, 112,p
0x30,0x48,0x48,0x3F,0x81,     //0x71, 113,q
0x1F,0x08,0x10,0x10,0x88,     //0x72, 114,r
0x0A,0x19,0x15,0x13,0x8A,     //0x73, 115,s
0x08,0x7E,0x09,0x02,0x80,     //0x74, 116,t
0x1E,0x01,0x01,0x02,0x9F,     //0x75, 117,u
0x18,0x06,0x01,0x06,0x98,     //0x76, 118,v
0x1E,0x01,0x02,0x01,0x9E,     //0x77, 119,w
0x11,0x0A,0x04,0x0A,0x91,     //0x78, 120,x
0x00,0x72,0x09,0x09,0xFE,     //0x79, 121,y
0x00,0x11,0x13,0x15,0x99,     //0x7A, 122,z
0x08,0x2A,0x55,0x41,0x80,     //0x7B, 123,{
0x00,0x00,0x7F,0x00,0x80,     //0x7C, 124,|
0x00,0x41,0x5D,0x2A,0x88,     //0x7D, 125,}
0x08,0x10,0x08,0x10,0x80,     //0x7E, 126,~







};

#endif /*FONT_H_*/
Logged

Guildford, UK
Offline Offline
Full Member
***
Karma: 0
Posts: 217
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Have you sorted this out?

Surely you just need a call to writeArduinoOnMatrix() at the end of setup() and an empty loop() {}?

Iain
Logged

Global Moderator
Boston area, metrowest
Offline Offline
Brattain Member
*****
Karma: 524
Posts: 26442
Author of "Arduino for Teens". Available for Design & Build services. Now with Unlimited Eagle board sizes!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Have you tried just commenting these lines out?
Code:
// shift the screen to the left
  for (i = 0; i < 63; i++) {
    screen_mem[i] = screen_mem[i+1];
 }
Logged

Designing & building electrical circuits for over 25 years. Check out the ATMega1284P based Bobuino and other '328P & '1284P creations & offerings at  www.crossroadsfencing.com/BobuinoRev17.
Arduino for Teens available at Amazon.com.

Raleigh, NC.
Offline Offline
Full Member
***
Karma: 0
Posts: 129
Addicted to Arduino
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

What version of arduino IDE are you using with this code...I have 1.0.1 and its sayinmg error due to the ledcontrol.....
Logged

Pages: [1]   Go Up
Jump to: