arduino + 2x MAX7219

Odpovědět
aladin
Příspěvky: 337
Registrován: 12 kvě 2013, 06:43

arduino + 2x MAX7219

Příspěvek od aladin »

Ahoj,
nevíte někdo, jak rozchodit několik LED driverů Max7219 za sebou?
Chci udělat i posouvající se text na několika 8x8 led displejích.
Jeden není problém. Už několik hodin se s tím mořím...
Dík
Aladin
fischertip.cz, Stavebnice.com, MerkurRobot.cz, KlubTechniku.cz
Uživatelský avatar
Dex
Administrátor
Příspěvky: 1519
Registrován: 16 úno 2013, 14:26

Re: arduino + 2x MAX7219

Příspěvek od Dex »

"all your robots are belong to us"
robodoupe.cz
aladin
Příspěvky: 337
Registrován: 12 kvě 2013, 06:43

Re: arduino + 2x MAX7219

Příspěvek od aladin »

díky za odpověd - napsal jsi to dobře - jen to "vypadá na první pohled" - hezké video, ale pak řeknou, že jen pro jeden segment :-(
Mezitím jsem pokročil dál, ale obnáší to neustálé instalace nových knihoven.
Zatím mám sice hezky skrolující text, ale otočený o 90 stupňů.
...tak pokračuji...
fischertip.cz, Stavebnice.com, MerkurRobot.cz, KlubTechniku.cz
Uživatelský avatar
jrt
Příspěvky: 1921
Registrován: 17 úno 2013, 17:13

Re: arduino + 2x MAX7219

Příspěvek od jrt »

jrt
aladin
Příspěvky: 337
Registrován: 12 kvě 2013, 06:43

Re: arduino + 2x MAX7219

Příspěvek od aladin »

hezký, ale neskroluje.
fischertip.cz, Stavebnice.com, MerkurRobot.cz, KlubTechniku.cz
Uživatelský avatar
Dex
Administrátor
Příspěvky: 1519
Registrován: 16 úno 2013, 14:26

Re: arduino + 2x MAX7219

Příspěvek od Dex »

Tak jasně že si s tím budeš muset trochu pohrát ale vypadá to opravdu jednoduše :D

Co si ale matně vybavuji, tak kdysi jsem na blogu Adafruitu četl, že tyto MAXe (ostatně jako kde co) dělají i soudruzi v Číně a je s nimi nějaký problém. Už si ale nepamatuji detaily.
"all your robots are belong to us"
robodoupe.cz
aladin
Příspěvky: 337
Registrován: 12 kvě 2013, 06:43

Re: arduino + 2x MAX7219

Příspěvek od aladin »

promiň Dexi, myslím, že se pouštíme do filozofické debaty.
Nápis mi momentálně skroluje, ale otočen o 90°.
A s ním si zatím nevím rady.
Kod přiložen - funguje, ale otočen o 90stupňů:

Kód: Vybrat vše


#include "LedControl.h" //  need the library

// pin 12 is connected to the MAX7219 pin 1
// pin 11 is connected to the CLK pin 13
// pin 10 is connected to LOAD pin 12

LedControl lc=LedControl(10,12,11,6); // 6 matrices, 6 MAX7219s. 12,11,10

// The message courtesy of Angus Young.

char msg[] = "          The video game says \"Play me\". Face it on a level but it takes you every time on a one on one. Feeling running down your spine. Nothing gonna save your one last dime cause it owns you, through and through. The databank knows my number. Says I gotta pay cause I made the grade last year. Feel it when I turn the screw. Kicks you round the world, there ain't a thing that it can't do. Do to you. Satellites send me pictures.  Get it in the eye, take it to the wire spinning like a dynamo.  Feel it going round and round.  Running out of chips, you got no line in an 8-bit town. So don't look down, no!      ";

int msgsize =  strlen(msg);

// The character set courtesy of cosmicvoid.  It is rowwise

byte Font8x5[104*8] =
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
        0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00,
        0x05, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x0A, 0x0A, 0x1F, 0x0A, 0x1F, 0x0A, 0x0A, 0x00,
        0x0E, 0x15, 0x05, 0x0E, 0x14, 0x15, 0x0E, 0x00,
        0x13, 0x13, 0x08, 0x04, 0x02, 0x19, 0x19, 0x00,
        0x06, 0x09, 0x05, 0x02, 0x15, 0x09, 0x16, 0x00,
        0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x04, 0x02, 0x01, 0x01, 0x01, 0x02, 0x04, 0x00,
        0x01, 0x02, 0x04, 0x04, 0x04, 0x02, 0x01, 0x00,
        0x00, 0x0A, 0x15, 0x0E, 0x15, 0x0A, 0x00, 0x00,
        0x00, 0x04, 0x04, 0x1F, 0x04, 0x04, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01,
        0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
        0x10, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01, 0x00,
        0x0E, 0x11, 0x19, 0x15, 0x13, 0x11, 0x0E, 0x00,
        0x04, 0x06, 0x04, 0x04, 0x04, 0x04, 0x0E, 0x00,
        0x0E, 0x11, 0x10, 0x0C, 0x02, 0x01, 0x1F, 0x00,
        0x0E, 0x11, 0x10, 0x0C, 0x10, 0x11, 0x0E, 0x00,
        0x08, 0x0C, 0x0A, 0x09, 0x1F, 0x08, 0x08, 0x00,
        0x1F, 0x01, 0x01, 0x0E, 0x10, 0x11, 0x0E, 0x00,
        0x0C, 0x02, 0x01, 0x0F, 0x11, 0x11, 0x0E, 0x00,
        0x1F, 0x10, 0x08, 0x04, 0x02, 0x02, 0x02, 0x00,
        0x0E, 0x11, 0x11, 0x0E, 0x11, 0x11, 0x0E, 0x00,
        0x0E, 0x11, 0x11, 0x1E, 0x10, 0x08, 0x06, 0x00,
        0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x02, 0x01,
        0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x00,
        0x00, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x00, 0x00,
        0x01, 0x02, 0x04, 0x08, 0x04, 0x02, 0x01, 0x00,
        0x0E, 0x11, 0x10, 0x08, 0x04, 0x00, 0x04, 0x00,
        0x0E, 0x11, 0x1D, 0x15, 0x0D, 0x01, 0x1E, 0x00,
        0x04, 0x0A, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x00,
        0x0F, 0x11, 0x11, 0x0F, 0x11, 0x11, 0x0F, 0x00,
        0x0E, 0x11, 0x01, 0x01, 0x01, 0x11, 0x0E, 0x00,
        0x07, 0x09, 0x11, 0x11, 0x11, 0x09, 0x07, 0x00,
        0x1F, 0x01, 0x01, 0x0F, 0x01, 0x01, 0x1F, 0x00,
        0x1F, 0x01, 0x01, 0x0F, 0x01, 0x01, 0x01, 0x00,
        0x0E, 0x11, 0x01, 0x0D, 0x11, 0x19, 0x16, 0x00,
        0x11, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x11, 0x00,
        0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x07, 0x00,
        0x1C, 0x08, 0x08, 0x08, 0x08, 0x09, 0x06, 0x00,
        0x11, 0x09, 0x05, 0x03, 0x05, 0x09, 0x11, 0x00,
        0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F, 0x00,
        0x11, 0x1B, 0x15, 0x15, 0x11, 0x11, 0x11, 0x00,
        0x11, 0x13, 0x13, 0x15, 0x19, 0x19, 0x11, 0x00,
        0x0E, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E, 0x00,
        0x0F, 0x11, 0x11, 0x0F, 0x01, 0x01, 0x01, 0x00,
        0x0E, 0x11, 0x11, 0x11, 0x15, 0x09, 0x16, 0x00,
        0x0F, 0x11, 0x11, 0x0F, 0x05, 0x09, 0x11, 0x00,
        0x0E, 0x11, 0x01, 0x0E, 0x10, 0x11, 0x0E, 0x00,
        0x1F, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00,
        0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E, 0x00,
        0x11, 0x11, 0x11, 0x11, 0x0A, 0x0A, 0x04, 0x00,
        0x41, 0x41, 0x41, 0x49, 0x2A, 0x2A, 0x14, 0x00,
        0x11, 0x11, 0x0A, 0x04, 0x0A, 0x11, 0x11, 0x00,
        0x11, 0x11, 0x11, 0x0A, 0x04, 0x04, 0x04, 0x00,
        0x1F, 0x10, 0x08, 0x04, 0x02, 0x01, 0x1F, 0x00,
        0x07, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, 0x00,
        0x01, 0x01, 0x02, 0x04, 0x08, 0x10, 0x10, 0x00,
        0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00,
        0x00, 0x04, 0x0A, 0x11, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00,
        0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x06, 0x08, 0x0E, 0x09, 0x0E, 0x00,
        0x01, 0x01, 0x0D, 0x13, 0x11, 0x13, 0x0D, 0x00,
        0x00, 0x00, 0x06, 0x09, 0x01, 0x09, 0x06, 0x00,
        0x10, 0x10, 0x16, 0x19, 0x11, 0x19, 0x16, 0x00,
        0x00, 0x00, 0x06, 0x09, 0x07, 0x01, 0x0E, 0x00,
        0x04, 0x0A, 0x02, 0x07, 0x02, 0x02, 0x02, 0x00,
        0x00, 0x00, 0x06, 0x09, 0x09, 0x06, 0x08, 0x07,
        0x01, 0x01, 0x0D, 0x13, 0x11, 0x11, 0x11, 0x00,
        0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00,
        0x04, 0x00, 0x06, 0x04, 0x04, 0x04, 0x04, 0x03,
        0x01, 0x01, 0x09, 0x05, 0x03, 0x05, 0x09, 0x00,
        0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
        0x00, 0x00, 0x15, 0x2B, 0x29, 0x29, 0x29, 0x00,
        0x00, 0x00, 0x0D, 0x13, 0x11, 0x11, 0x11, 0x00,
        0x00, 0x00, 0x06, 0x09, 0x09, 0x09, 0x06, 0x00,
        0x00, 0x00, 0x0D, 0x13, 0x13, 0x0D, 0x01, 0x01,
        0x00, 0x00, 0x16, 0x19, 0x19, 0x16, 0x10, 0x10,
        0x00, 0x00, 0x0D, 0x13, 0x01, 0x01, 0x01, 0x00,
        0x00, 0x00, 0x0E, 0x01, 0x06, 0x08, 0x07, 0x00,
        0x00, 0x02, 0x07, 0x02, 0x02, 0x02, 0x04, 0x00,
        0x00, 0x00, 0x11, 0x11, 0x11, 0x19, 0x16, 0x00,
        0x00, 0x00, 0x11, 0x11, 0x11, 0x0A, 0x04, 0x00,
        0x00, 0x00, 0x11, 0x11, 0x15, 0x15, 0x0A, 0x00,
        0x00, 0x00, 0x11, 0x0A, 0x04, 0x0A, 0x11, 0x00,
        0x00, 0x00, 0x09, 0x09, 0x09, 0x0E, 0x08, 0x06,
        0x00, 0x00, 0x0F, 0x08, 0x06, 0x01, 0x0F, 0x00,
        0x04, 0x02, 0x02, 0x01, 0x02, 0x02, 0x04, 0x00,
        0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
        0x01, 0x02, 0x02, 0x04, 0x02, 0x02, 0x01, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x1C, 0x2A, 0x49, 0x49, 0x41, 0x22, 0x1C, 0x00,
        0x1C, 0x22, 0x51, 0x49, 0x41, 0x22, 0x1C, 0x00,
        0x1C, 0x22, 0x41, 0x79, 0x41, 0x22, 0x1C, 0x00,
        0x1C, 0x22, 0x41, 0x49, 0x51, 0x22, 0x1C, 0x00,
        0x1C, 0x22, 0x41, 0x49, 0x49, 0x2A, 0x1C, 0x00,
        0x1C, 0x22, 0x41, 0x49, 0x45, 0x22, 0x1C, 0x00,
        0x1C, 0x22, 0x41, 0x4F, 0x41, 0x22, 0x1C, 0x00,
        0x1C, 0x22, 0x45, 0x49, 0x41, 0x22, 0x1C, 0x00};


byte lentbl_S[104] =
{
        2, 2, 3, 5, 5, 5, 5, 2, 
        3, 3, 5, 5, 2, 5, 1, 5, 
        5, 4, 5, 5, 5, 5, 5, 5, 
        5, 5, 1, 2, 4, 4, 4, 5, 
        5, 5, 5, 5, 5, 5, 5, 5, 
        5, 3, 5, 5, 4, 5, 5, 5, 
        5, 5, 5, 5, 5, 5, 5, 7, 
        5, 5, 5, 3, 5, 3, 5, 5, 
        2, 4, 5, 4, 5, 4, 4, 4, 
        5, 2, 3, 4, 2, 6, 5, 4, 
        5, 5, 5, 4, 3, 5, 5, 5, 
        5, 4, 4, 3, 2, 3, 0, 0, 
        7, 7, 7, 7, 7, 7, 7, 7
};

int curcharix = 0;
int curcharbit = 0;
int curcharixsave = 0;
int curcharbitsave = 0;
int curcharixsave2 = 0;
int curcharbitsave2 = 0;
char curchar;


void setup()
{
  lc.shutdown(0,false);// turn off power saving, enables display
  lc.setIntensity(0,15);// sets brightness (0~15 possible values)
  lc.clearDisplay(0);// clear screen
  lc.shutdown(1,false);// turn off power saving, enables display
  lc.setIntensity(1,15);// sets brightness (0~15 possible values)
  lc.clearDisplay(1);// clear screen
  lc.shutdown(2,false);// turn off power saving, enables display
  lc.setIntensity(2,15);// sets brightness (0~15 possible values)
  lc.clearDisplay(2);// clear screen
  lc.shutdown(3,false);// turn off power saving, enables display
  lc.setIntensity(3,15);// sets brightness (0~15 possible values)
  lc.clearDisplay(3);// clear screen
  lc.shutdown(4,false);// turn off power saving, enables display
  lc.setIntensity(4,15);// sets brightness (0~15 possible values)
  lc.clearDisplay(4);// clear screen
  lc.shutdown(5,false);// turn off power saving, enables display
  lc.setIntensity(5,15);// sets brightness (0~15 possible values)
  lc.clearDisplay(5);// clear screen
}

void loop()
{
  int i,j,k;

  while(1)
  {
    curcharixsave2 = curcharix;
    curcharbitsave2 = curcharbit;

    for (i=5;i>=0;i--) // Loop through our 8 displays
    {
      for (j=0;j<8;j++) // Set up rows on current  display
      {      
        byte outputbyte = 0;
      
        curchar = msg[curcharix];
      
        curcharixsave = curcharix;
        curcharbitsave = curcharbit;
      
        for (k=7;k>=0;k--) // Copy over data for 8 columns to current row and send it to current display
        {
          // This byte is the bitmap of the current character for the current row
          byte currentcharbits = Font8x5[((curchar-32)*8)+j];
      
          if (currentcharbits & (1<<curcharbit))
            outputbyte |= (1<<k);
      
          // advance the current character bit of current character
      
          curcharbit ++;
      
          if (curcharbit > lentbl_S[curchar-32]) // we are past the end of this character, so advance.
          {
            curcharbit = 0;
            curcharix += 1;          
            if (curcharix+1 > msgsize) curcharix=0;
            curchar = msg[curcharix];
          }
        }
      
        lc.setRow(i, j, outputbyte);

        if (j != 7) // if this is not the last row, roll back advancement, if it is, leave the counters advanced.
        {
          curcharix = curcharixsave;
          curcharbit = curcharbitsave;
        }
      }
    }
  
    curcharix = curcharixsave2;
    curcharbit = curcharbitsave2;
 
    curchar = msg[curcharix];
 
    // advance the current character bit of current character
      
    curcharbit ++;
      
    if (curcharbit > lentbl_S[curchar-32]) // we are past the end of this character, so advance.
    {
      curcharbit = 0;
      curcharix += 1;
      if (curcharix+1 > msgsize) curcharix=0;
      curchar = msg[curcharix];
    }
    
    delay(10);
  }
}

fischertip.cz, Stavebnice.com, MerkurRobot.cz, KlubTechniku.cz
Uživatelský avatar
jrt
Příspěvky: 1921
Registrován: 17 úno 2013, 17:13

Re: arduino + 2x MAX7219

Příspěvek od jrt »

aladin píše:Nápis mi momentálně skroluje, ale otočen o 90°.
A nemáš ty displeje na stole jen špatně natočený? :D
jrt
Uživatelský avatar
Dex
Administrátor
Příspěvky: 1519
Registrován: 16 úno 2013, 14:26

Re: arduino + 2x MAX7219

Příspěvek od Dex »

Tak třeba bude někdo vědět víc. Já už bez toho abych se tím začal sám zabývat víc neporadím. Teď si ale hraju s něčím jiným ;)
"all your robots are belong to us"
robodoupe.cz
dan3288

Re: arduino + 2x MAX7219

Příspěvek od dan3288 »

Dex píše:Tak třeba bude někdo vědět víc. Já už bez toho abych se tím začal sám zabývat víc neporadím. Teď si ale hraju s něčím jiným ;)
Už je asi pozdě na odpověď, ale moje verze knihovny umožňovala natočení textu libovolným směrem i libovolný rozměr složeného pole z matrix displejů. Všechno fungovalo, jen bylo nutné si najít v kódu knihovny příkaz pro otočení scrollování textu. U mne vypadal takto: matrix.setRotation(3);
Odpovědět