Stránka 1 z 1
Arduino a 2xMAX7219
Napsal: 24 srp 2025, 15:15
od jankrizan
Zdravím. Potreboval by som zapojiť dva moduly 7-segmentové MAX7219. Nájde sa niekto, (myslím, že isto), kto mi poradí, ako bude znieť sketch, alebo kde nájdem návod na program s prepojením na tieto dva moduly? Potrebujem (chcem) vyhodiť LCD displej a namiesto neho zapojiť MAX.... v spajkovacej stanici, kde treba aby jeden displej zobrazoval aktualnu teplotu hrotu a druhý displej nastavovaciu. Hľadam aj na internete, ale asi neviem hľadať, pretože nič také som nenašiel. Stačilo by aj nejakú aplikáciu s dvoma modulmi, ja si už prispôsobím obsah. Nie matrix displeje. Ďakujem.
Napsal: 24 srp 2025, 15:26
od rnbw
MAX2719 sa daju retazit ("cascading"), vid datasheet.
Napsal: 24 srp 2025, 15:33
od jankrizan
Je mi jasné, ale ako napísať program, aby každý displej zobrazoval niečo iné? To neovládam vytvoriť, na korekcie programu si trúfam.
Napsal: 24 srp 2025, 16:37
od rampage
Tak písať program nie je až tak zložité, céčko nemá krkolomnú syntax. Gro budeš vždy hľadať v datasheete, tzn. ako ten čip správne adresovať a aké príkazy mu posielať tak aby fungovali dva (v datasheete označené ako daisy-chain).
Ale skús ChatGPT. Nedávno som mu dal dotaz, ako správne programovať sekvencer v konkrétnom čipe, určenom pre prácu s MFM harddiskami. Normálne si to samo naštudovalo datasheet z 1991 (generovanie odpovede trvalo tri minúty) a vyplulo funkčný princíp pseudokódu, aj s vysvetlením jednotlivých registrov. Ten som už následne poupravil a doladil tak, aby korešpondoval s tým, ako som mal ten čip pripojený na adresné linky Arduina.
Jasné, že to nevypluje hneď funkčné a škálovatelné riešenie jak na striebornom podnose, ale nakopnúť to vie...
Napsal: 24 srp 2025, 17:10
od martinkopp
Nic na tom není, prostě do prvního obvodu data pošleš nejdřív pro druhý v řetězu, pak pro první displej a zobrazíš chip selectem, pokud si dobře pamatuju.
Napsal: 24 srp 2025, 17:25
od rampage
Datasheet popisuje spojiť chipselecty dohromady a DOUT prvého MAXu zapojiť do DIN druhého. Cez SPI následne pošle jedno 16bit slovo a jeden no-op. Pri preklopení /CS následne dostane ten prvý čip nič a druhý data - alebo môže takto naprogramovať data hneď pre obidva. V datasheete to má rozpísané do detailu.
Zo strany Arduina mu stačí pozrieť príklad ako sa pracuje so SPI.
Napsal: 24 srp 2025, 19:08
od jankrizan
Chlapi, priznám sa, že tomu nerozumiem. Teoria (Nic na tom není, prostě do prvního obvodu data pošleš nejdřív pro druhý v řetězu, pak pro první displej a zobrazíš chip selectem), je pekná, ale ja neovládam príkazy na tvorbu programu, ani ako mám zadať do jednotlivých príkazov. Vo veku 65-ke, už nie je ten "memory efekt" v hlave, ako v 20-ke. Ak máte niekto nejaký funkčný program s dvoma MAX, viac by mi pomohlo, keby so ho videl napísaný, skôr ho pochopím. Vďaka.
Napsal: 24 srp 2025, 20:04
od HF_Tech
Chatgpt říká použít LEDcontrol knihovnu
Kód: Vybrat vše
#include <LedControl.h>
// Pins: DIN = 11, CLK = 13, CS = 10
// 2 devices daisy chained
LedControl lc = LedControl(11, 13, 10, 2);
void setup() {
// Wake up the displays
for (int i = 0; i < 2; i++) {
lc.shutdown(i, false); // Wake up
lc.setIntensity(i, 8); // Set brightness (0–15)
lc.clearDisplay(i); // Clear display
}
// Example: Display text across 16 digits
displayText("HELLO WORLD 1234");
}
void loop() {
// Nothing here for now
}
// Maps characters to 7-segment (limited to supported ones)
void displayText(String text) {
const char* charMap = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ -";
byte segmentCodes[] = {
0b01111110, // 0
0b00110000, // 1
0b01101101, // 2
0b01111001, // 3
0b00110011, // 4
0b01011011, // 5
0b01011111, // 6
0b01110000, // 7
0b01111111, // 8
0b01111011, // 9
0b01110111, // A
0b00011111, // B
0b01001110, // C
0b00111101, // D
0b01001111, // E
0b01000111, // F
0b01011110, // G
0b00110111, // H
0b00110000, // I (same as 1)
0b00111100, // J
0b00000000, // K (not displayable)
0b00001110, // L
0b00000000, // M (not displayable)
0b00010101, // N (compromise)
0b01111110, // O
0b01100111, // P
0b01110011, // Q
0b00000101, // R
0b01011011, // S
0b00001111, // T
0b00111110, // U
0b00111110, // V (same as U)
0b00000000, // W (not displayable)
0b00110111, // X (same as H)
0b00111011, // Y
0b01101101, // Z (same as 2)
0b00000000, // space
0b00000001 // dash -
};
Připojení:
DIN → Arduino D11
CLK → Arduino D13
CS/LOAD → Arduino D10
VCC → 5V
GND → GND
Napsal: 24 srp 2025, 20:09
od bum
Na webu drátek.cz v sekci NAVODY K PRODUKTŮM na str.36 je popsáno ovládání jednoho IO Max 7219 8*8 led diod a na str.21 je ovládání osmimístného led displeje s uvedeným MAX7219 s programy, tyto se dají upravit jak potřebujete. Uvedené led moduly 8*8 i displeje led 7 * 8 s MAX 7219 ovládám pomocí PICAXE i počítačem pomocí sériového portu viz web.
Napsal: 25 srp 2025, 03:44
od Valdano
Dratek:
Příklad k MAX7219, popis i se zdrojákem pro Arduino.
Zapojení dvou obvodů MAX7219
viz tento odkaz.
Upravený zdroják pro dva moduly MAX7219.
Kód: Vybrat vše
#include "LedControl.h"
// nastavení propojovacích pinů
#define DIN 12
#define CS 10
#define CLK 13
#define PRVNI_MAX7219 0
#define DRUHY_MAX7219 1
// vytvoření objektu displeje,
// propojovací piny a počet MAX obvodů (2)
LedControl max7219 = LedControl(DIN, CLK, CS, 2);
// proměnná pro pauzy mezi znaky
int pauza = 250;
void napisArduino(int addr)
{
// ukázka nastavení znaků různými způsoby
// s pauzou mezi zobrazeními
max7219.setChar(addr, 6, 'a', false);
delay(pauza);
max7219.setRow(addr, 5, 0x05);
delay(pauza);
max7219.setChar(addr, 4, 'd', false);
delay(pauza);
max7219.setRow(addr, 3, 0x1c);
delay(pauza);
max7219.setRow(addr, 2, B00010000);
delay(pauza);
max7219.setRow(addr, 1, 0x15);
delay(pauza);
max7219.setRow(addr, 0, 0x1D);
delay(10*pauza);
// vyčištění displeje
max7219.clearDisplay(addr);
delay(pauza);
};
void setCas(int addr, unsigned long cas)
{
// výpis času na všech 8 segmentů
// postupným získáním jednotlivých číslic
max7219.setDigit(addr, 7, (cas / 10000000) % 10, false);
max7219.setDigit(addr, 6, (cas / 1000000) % 10, false);
max7219.setDigit(addr, 5, (cas / 100000) % 10, false);
max7219.setDigit(addr, 4, (cas / 10000) % 10, false);
max7219.setDigit(addr, 3, (cas / 1000) % 10, false);
max7219.setDigit(addr, 2, (cas / 100) % 10, false);
max7219.setDigit(addr, 1, (cas / 10) % 10, false);
max7219.setDigit(addr, 0, cas % 10, false);
};
void setup()
{
// vypnutí úsporného režimu
max7219.shutdown(PRVNI_MAX7219, false);
max7219.shutdown(DRUHY_MAX7219, false);
// nastavení intenzity na přibližnou polovinu (0-15)
max7219.setIntensity(PRVNI_MAX7219, 8);
max7219.setIntensity(DRUHY_MAX7219, 8);
// vypnutí svitu všech znaků
max7219.clearDisplay(PRVNI_MAX7219);
max7219.clearDisplay(DRUHY_MAX7219);
// výpis textu "Arduino" na segmenty
napisArduino(PRVNI_MAX7219);
napisArduino(DRUHY_MAX7219);
};
void loop()
{
// načtení času od spuštění do proměnné
unsigned long cas = millis();
// výpis času na všech 8 segmentů
// na první MAX7219
setCas(PRVNI_MAX7219, cas);
delay(pauza);
// výpis času na všech 8 segmentů
// na druhý MAX7219
setCas(DRUHY_MAX7219, cas);
delay(pauza);
};
Ohledně dalších úprav se inspirujte z
popisu knihovny LedControl.
Napsal: 25 srp 2025, 07:56
od bu2520
Trochu jsem s tím měl problémy při řízení matice, pokud jsem neposlal na matici , která neměla nic zobrazit prázdný znak , tak se tam zkopíroval znak z předchozí matice.
Napsal: 28 srp 2025, 18:20
od mluno
Je několik knihoven a ne všechny umí řetězené displeje ovládat.
Z mých poznámek:
Kód: Vybrat vše
name=LedControl
version=1.0.6
author=Eberhard Fahle <e.fahle@wayoda.org>
maintainer=Eberhard Fahle <e.fahle@wayoda.org>
sentence=A library for the MAX7219 and the MAX7221 Led display drivers.
paragraph=The library supports multiple daisychained drivers and supports Led-Matrix displays as well as 7-Segment displays.
category=Display
url=http://wayoda.github.io/LedControl/
architectures=*
Je to zřejmě právě ta knihovna, kterou jsem použil po vyzkoušení více různých. A protože mě štvalo, že se občas displej rozsypal (asi jak se tam vadným spojením poslalo něco jiného) tak jsem dopsal funkci na reinit displeje, kterou jsem nakonec volal před každým zobrazením. Nejdřív jsem měl v plánu ji volat v nějakých intervalech, ale zrovna v tom programu bylo času dost, tak jsem to udělal právě tak. Dávám do přílohy.
Můj požadavek bylo právě ovládání několika zřetězených 7219. Jak segmentových tak maticových, možná i nějaké kombinace. Používal jsem i jiné knihovny, už jsem se v tom dlouho nehrabal, tak si přesně nepamatuju, musel bych vzpomínat.