LED matrix vezérlés

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Avatar
bitwriter
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2008. december 6. szombat, 7:00

LED matrix vezérlés

Hozzászólás Szerző: bitwriter »

Sziasztok!


Már egy jó ideje küzdök a következő dologgal:
AVR-Duino-val szeretnék egy 8x8-as, egyszínű LED matrixot vezérelni.
Ehhez az alapelvet innen szedtem: http://www.arduino.cc/en/Tutorial/ShiftOut
a kijelző pedig ez: http://futurlec.com/LED/LEDM88G.shtml

Egy próbapanelre tehát felraktam a következőket:
-2 db 74HC595 léptetőregiszter (x és y tengely), a 12-es (ST_CP) lábaknál 1-1 22p-s kondenzátor az Arduino-s cikk alapján
-valamint a LED matrix-ot

a programom pedig a következő:

Kód: Egész kijelölése

// for X axis
byte x_ST_CLOCK = 2; // to IC#1 ST_CP/RCK (pin 12) latch
byte x_CLOCK = 3; // to IC#1 SH_CP/SCK (pin 11), clock
byte x_SER_IN = 4; // to IC#1 DS/SER (pin 14), data

// for Y axis
byte y_ST_CLOCK = 8; // to IC#2 ST_CP/RCK (pin 12)
byte y_CLOCK = 9; // to IC#2 SH_CP/SCK (pin 11)
byte y_SER_IN = 10; // to IC#2 DS/SER (pin 14)

byte LedArr[8][8] = {
 {0,0,0,0,0,0,0,0},
 {0,0,0,0,0,0,0,0},
 {0,0,1,0,0,1,0,0},
 {0,0,0,0,0,0,0,0},
 {0,0,0,0,0,0,0,0},
 {0,1,0,0,0,0,1,0},
 {0,0,1,1,1,1,0,0},
 {0,0,0,0,0,0,0,0}};
 
byte columns[8] = {
 B01111111,
 B10111111,
 B11011111,
 B11101111,
 B11110111,
 B11111011,
 B11111101,
 B11111110};

void setup() {
 pinMode(x_ST_CLOCK, OUTPUT);
 pinMode(x_CLOCK, OUTPUT);
 pinMode(x_SER_IN, OUTPUT);
 pinMode(y_ST_CLOCK, OUTPUT);
 pinMode(y_CLOCK, OUTPUT);
 pinMode(y_SER_IN, OUTPUT);
 
}

void loop() {
 RefreshScreen();

}

void RefreshScreen() {
 byte rowbin;
 byte sum;
 
 for (byte cols=0; cols<8; cols++) {
  sum = 0;
  for (byte rows=0; rows<8; rows++) {
   if (LedArr[rows][cols] == 1) {
    rowbin = 1 << rows;
    sum = sum + rowbin;

    digitalWrite(x_ST_CLOCK, LOW);
    shiftOut(x_SER_IN, x_CLOCK, MSBFIRST, columns[cols]);
    digitalWrite(x_ST_CLOCK, HIGH);

    digitalWrite(y_ST_CLOCK, LOW);
    shiftOut(y_SER_IN, y_CLOCK, MSBFIRST, rowbin);  
    digitalWrite(y_ST_CLOCK, HIGH);        
 
    }
          
  }

 }
}
A problémám pedig a következő:
nem csak azok a led-ek világítanak, melyek a LedArr matrix-ban egyessel vannak jelölve, hanem néhány, közvetlenül mellettük levő is.
és ezt nem tudom, hogyan küszöbölhetném ki, már legalább négyszer újraírtam a programomat...

Segítségeteket előre is köszönöm!
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Próbáld megcserélni a kiírás sorrendet. Előbb Y, Utána X.
Vagy esetleg igy:
digitalWrite(x_ST_CLOCK, LOW);
digitalWrite(y_ST_CLOCK, LOW);

shiftOut(x_SER_IN, x_CLOCK, MSBFIRST, columns[cols]);
shiftOut(y_SER_IN, y_CLOCK, MSBFIRST, rowbin);

digitalWrite(x_ST_CLOCK, HIGH);
digitalWrite(y_ST_CLOCK, HIGH);
:?:
A lényeg az lenne, hogy az régi érték ne lépjen át a következő helyre. Vagy legalább olyan rövid ideig, hogy ne látsszon.
Avatar
bitwriter
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2008. december 6. szombat, 7:00

Hozzászólás Szerző: bitwriter »

Igen, kb. ez lenne a lényege, amit az utolsó mondatodban leírtál, csak sajnos sehogysem akar működni.

Kipróbáltam, amit javasoltál, úgy sem működik megfelelően.

még próbáltam beletenni egy delay(0)-t is, viszont ettől meg már láthatóan "vibrálnak" a led-ek, nem tűnik folyamatosnak.

próbálkoztam még nagyobb értékű kondenzátorokkal is, de azok sem hoztak jobb eredményt
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

OFF: Ez e bascom topic.
Avatar
bitwriter
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2008. december 6. szombat, 7:00

Hozzászólás Szerző: bitwriter »

elnézést, ha rossz helyre nyitottam volna, csak a másik topic meglehetősen kihaltnak látszott, ez tűnt az igazi "tárgyalóasztalnak"
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Mondjuk szerintem is jobb választás a Bascom, mint az Ardunio!
De ha nem moderálták ki, hagy növelje a lehetőségeket!
:D
Ui: Különben a forum neve: "Tavir AVR" :twisted:
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2009. április 26. vasárnap, 10:58-kor.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Esetleg a 13-as OE lábon a léptetés idejére (H) letiltani a kimenetet?
:idea:
Avatar
bitwriter
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2008. december 6. szombat, 7:00

Hozzászólás Szerző: bitwriter »

Ez lesz a jó megoldás!

Igaz, egészen kis mértékben még mindig világít pár szomszédos LED, de ez már tényleg alig észrevehető.

Köszönöm! :wink:
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Jobban átnézve az adatlapot 5. oldal:
http://www.nxp.com/acrobat_download/dat ... T595_4.pdf
SH-CP 8-bites shift regiszter feltöltése után, kel ST-CP tároló regisztert beírni!
:!:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Valahogy a léptetés idejére kioltani a LEDeket? Elvenni a +5V-t róluk, vagy az OutputDisable (esetleg triState állapotba a kimeneteket)?
A 7szegmenses kijelzőknél legalábbis így működik...


U.i.: a topicit az arduino részbe átraktam....
Avatar
bitwriter
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2008. december 6. szombat, 7:00

Hozzászólás Szerző: bitwriter »

LED-ek matrix-szerű elrendezése miatt ez - ha jól gondolom - úgy működik, ahogy azt kapu48 pár sorral feljebb leírta, és valóban, ez jo(bb) eredményhez vezetett
Avatar
radiation
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2011. február 21. hétfő, 7:00

Re: LED matrix vezérlés

Hozzászólás Szerző: radiation »

Üdv mindenkinek.
Egy nagy segítségre lenne szükségem.
El kellene készítsek egy led mátrix kijelzőt, amin soros portról érkező számokat kellene kiíratnom.
Ez LCD-n működik is, de a led mátrixon nem.
Minta feladatokat próbáltam már amiken van soros beolvasás és kiíratás, de nem úgy működtek mint ahogy nekem kell.
MAX7219 hajtja a mátrixokat.
3darab kijelző lenne egymás után.
soros portról beolvassa a számot kiírja, majd 10mp múlva törli a kijelzőt.
Ennyit kellene elérjek, de azt sem tudom, merre induljak el.
Hálás volnék ha tudnátok segíteni.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: LED matrix vezérlés

Hozzászólás Szerző: Robert »

Jelenleg a programkódod/részlete hogy néz ki?
Avatar
radiation
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2011. február 21. hétfő, 7:00

Re: LED matrix vezérlés

Hozzászólás Szerző: radiation »

Helló!
Egyelőre csak mintaprogramokból próbálom kiollózni a nekem kellő részt.
Két alternatívát próbáltam, a ledcontrolMS-t és a maxmatrix-ot.
Igazából nem is tudom mit másoljak be, mert nem vagyok tisztában azzal, hogy melyik részlet az, ami nekem kell.
LCD kijelzővel működik a dolog, már csak kijelzőt kellene kicserélnem LED mátrix-ra.

Kód: Egész kijelölése

/*  LiquidCrystal
 LCD fuggvenykonyvtar
 A 2x16 karakteres LCD mintaprogram
 EXT1 aramkorre hangolva
 Soros - LCD kiiras


#include "LiquidCrystal.h"
 
LiquidCrystal lcd(4, 5, 6, 7, 8, 9);
 
 
void setup() {
  pinMode(13, OUTPUT);
  digitalWrite(13, HIGH);
    //hatter bekapcsol EXT1 eseten 
  Serial.begin(9600);
    //Sorosport 9600 bps nyitasa
  lcd.begin(16, 2);
    //2x16-os LCD van
lcd.setCursor(0, 0);
     //A kiiras helye: 0. oszlop, 0. sor  
    lcd.print(" Serial reader  ");
  lcd.setCursor(0, 1);
     //A kiiras helye: 0. oszlop, 1. sor 
    lcd.print("     v.:1.0     "); 
    delay(1000);
  lcd.clear();  
  
}
 
void loop()
{
  if (Serial.available()>=1) {
    //Ha van valami a soros bufferben
    lcd.write(Serial.read());
    //akkor irjuk ki az LCD-re
    delay(10);
    }
  if (Serial.available() <= 0 ) {
     delay(2000);
     lcd.clear();
     //lcd.setCursor(0, 0);
     lcd.print("   Adatra var   ");
  }
}
Végül is két részletet kellene megtanulnom.
Az egyik, hogy hogyan definiáljam a karaktereket, a másik, hogy
Hogyan küldjem azt el a kijelzőnek.
Az LCD-nél könnyű dolgom volt, mert az első problémát megoldja helyettem a vezérlő chip és a második gondom is pofon egyszerű.
Viszont jól láthatónak kell lennie a kijelzésnek, ezért nem jó a karakteres LCD.
Ha tudnál segíteni, hogy merre induljak el, hol keressek, vagy mi az ami nekem kellene, azt nagyon megköszönném.
Üdv:Balázs
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: LED matrix vezérlés

Hozzászólás Szerző: Robert »

LED mátrix esetén olyan eljárás/függvénykönyvtárat keress, amiben a karakterdefiniálás is szerepel.
Nem olyan egyszerű, mint a karakteres LCD....
Válasz küldése