MAX7219 matrx kijelző pár perc után elsötétül

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
bagizoltan
Bitmanipulátor
Hozzászólások: 128
Csatlakozott: 2015. december 8. kedd, 19:52
Tartózkodási hely: Budapest

MAX7219 matrx kijelző pár perc után elsötétül

HozzászólásSzerző: bagizoltan » 2020. január 5. vasárnap, 7:42

Sziasztok!

Hőmérséklet, légynyomás és páratartalom kijelzőt csinálok a ház falára. A mért értékeket 2-3 másodpercenként frissítem ki egy 7 segmenses led kijelzőre, de hogy látható legyen melyik érték is van kint a kijelzőn éppen, egy 3 tagból álló 8x8-as ledmátrix kijelző sorra teszem ki szövegesen az eredmény leírását (Cfok->mbár->%). A program jól működik egy pár percig. Aztán elsötétül a matrix kijelző sor, mindhárom egyszerre. Hogy meddig működik, az véletlenszerű, van hogy 1-2 percig, de volt már 10perc is. A hétszegmenses számsoron közben szépen változnak az adatok, ahogyan kell, tehát a program fut.

A vezérléshez a ledcontrol.h könyvtárat használom. Így néz ki a program setup része:
#include "LedControl.h"
LedControl lc=LedControl(8,7,6,3);

..és így egy jellemző részlet az a ciklikus írásból:
lc.setColumn(0,7,B00000000);lc.setColumn(0,6,B00000000);lc.setColumn(0,5,B00000000);lc.setColumn(0,4,B00000000);
lc.setColumn(0,3,B00000000);lc.setColumn(0,2,B00000000);lc.setColumn(0,1,B00000000);lc.setColumn(0,0,B00000000);
lc.setColumn(1,7,B00000000);lc.setColumn(1,6,B00000000);lc.setColumn(1,5,B00000000);lc.setColumn(1,4,B01000110);
lc.setColumn(1,3,B00100110);lc.setColumn(1,2,B00010000);lc.setColumn(1,1,B11001000);lc.setColumn(1,0,B11000100);

Próbálkoztam azzal, hogy minden új információ kiíráskor a ciklusban újra ki és bekapcsolom a kijelzőket. Ez így néz ki:
lc.shutdown(0,true);lc.shutdown(1,true);lc.shutdown(2,true);
delay(20);
lc.shutdown(0,false);lc.shutdown(1,false);lc.shutdown(2,false);
delay(20);

A késleltetéseket már kínomban tettem bele a programba. Amióta a ki és bekapcsolás bekerült a programba, annyi változott a helyzet, hogy nem teljesen sötétül el a kijelző, néhány led világit folyamatosa (3-4db/modul).

Ez az időjárás kijelző már a második verzió. Az első elviekben ugyanígy épült fel, csak ott 4 mátrix modult kapcsoltam sorba. Már ott is volt némi probléma. Áramszünet után amikor újraindul a vezérlő, minden működni kezdett, kivéve a ledmátrix kijelzők. Ha azonban a működő berendezésben (egy Arduino nano a központi rész), nyomtam egy resetet, a kijelzők máris működni id kezdtek, és ez a működés tartósan fenn is maradt, akár hónapokon keresztül. Mindig csak akkor volt baj, ha áramszünetet követően visszajött a tápfesz. Mivel ez csk ritkán volt, nem foglalkoztam vele. Észre vettem, hogy nem működik, kiballagtam a berendezéshez, és nyomtam egy resetet!
Annyiban hasonlít a mostani helyzet erre, hogy reset hatására szintén működni kezdenek a kijelzők, de kis idő múlva kikapcsolnak, illetve a leírtak szerint néhány pont világít csak. Most viszont az "áramszünet" nem okoz problémát!

Kipróbáltam azt is, hogy a tápot rajta hagyom a kijező modulokon, de a nano felől érkező jelvezetékeket kihúzgáltam. Nyilván ekkor a kijelzőre fagy az utolsó kijelzett érték, hiszen nem kap új adatot! Épp most várakozok, hogy mi történik, de úgy tűnik, hogy nem alszanak el a ledek, folyamatosan olvasható az utolsó felirat. Tehát az új információk írása okoz valamilyen zavart a működésben.

Nincs valakinek ötlete, hogy mi lehet a baj. Esetleg tud valaki más programkönyvtárról, amire cserélhetném a jelenlegit? Avledcontrol könyvtárban lehet még valamit állítani? Vagy más ötlet, hogy mivel próbálkozzak? Már kifogytam mindenből. A "dobd a kukába.." nem hasznos tanács :D !

Köszönettel

Bagi

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3348
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: MAX7219 matrx kijelző pár perc után elsötétül

HozzászólásSzerző: kapu48 » 2020. január 5. vasárnap, 15:35

Szia Zoli!

Már ne haragudj de ettől a díszítősor formájú program kódtól, sikítani támad kedvem!
Valószínű minden programozó így van ezzel a fórumon! Ezért válassz nélkül elmenekülnek!
:evil:

Javaslom használd inkább ezt a példát:
...\LEDMatrixDriver\examples\MarqueeText\

Itt szöveges tömbben adhatod meg a kiírni valót, nem kel neked kínlódni a pixelekkel.
A lényeg az lenne, hogy tömböt kel használni a karakterek pontjainak tárolására.
És a kiíratást ciklusba szervezve kel megoldani. Így mindjárt könnyebb lenne a program fejlesztés.

Ha valamelyik külső HW. nem indul el bekapcsoláskor? Akkor kel rakni várakozást a setupban az inicializáló sorok elé, hogy legyen ideje feléledni.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10033
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: MAX7219 matrx kijelző pár perc után elsötétül

HozzászólásSzerző: Robert » 2020. január 6. hétfő, 5:40

A kijelző és a processzor/vezérlő közt mekkora a távolság? SPI kommunikációd van, nem illik pár 10cmnél hosszabbnak lennie vagy a kommunikációs sebességet lassítanod kell jelentősen.
A kijelző áramkör Vcc/GND közé tegyél nagyobb kondit - lehet a sok kijelzendő LED megrántja a tápfeszt és nem képes a rendszer távolról betuszkolni az elektronokat...
http://www.tavir.hu - a gazda :)

bagizoltan
Bitmanipulátor
Hozzászólások: 128
Csatlakozott: 2015. december 8. kedd, 19:52
Tartózkodási hely: Budapest

Re: MAX7219 matrx kijelző pár perc után elsötétül

HozzászólásSzerző: bagizoltan » 2020. január 6. hétfő, 8:28

Sziasztok!

Kedves kapu48! Nem lehet mindenki olyan profi, hogy kapásból olyan programot írjon amitől Te nem menekülsz el!

Kedves Robi! Köszi az érdemi választ és ötleteket. Sajnos a vezeték nem 10cm. Kb 1m-re kell elhelyeznem a kijelzőt az Arduino nano-tól. Sajna nem tudom, hogyan lehetne a sebességet csökkenteni, nem találtam erre lehetőséget a ledcontrol doksijába, de lehet, hogy nem vettem észre valami!

Az egész berendezés úgy épül fel, hogy a kijelző egy külön panel, külön 5V-os táppal (most egy konektorba dugható mobiltöltő, 2A-es). Ezen a panelen vannak a kijelzők. A 7 segmenses kijelzőkhöz a 77HC595 (8db), a mtrix kijelzők a MAX7219-el (3db). Az Arduino nano jelenleg a laptopomról kapja a tápot, ezért arra gyanakszom, hogy nem ez lesz a gond. De a tápegységgel jó helyen gondolkodsz. A következő tapasztalatokat szedtem össze:

1. Kitettem a program elején a matrix kijelzőkre egy szöveget, és otthagytam, a program nem ír ki semmit, nem küldök infót. A szöveg tartósan (több órán át) megjelnik a matrix kijelzőn. Tehát nem arról van szó, hogy a max7219-ek lefagynak, vagy megbolondulnak, maguktól stb. Ha az Arduino nano nem küldözget semmit, akkor tartósan jó infó jelenik meg, és nem is alszanak el maguktól a ledek.

2. Növeletm az információ kiírások (váltások) idejét 2 másodpercről 20 másodpercere. Lényegileg nem változott a mátrix kijelző "lefagyásáig" eltelt idő, 2-10 perc között minden előfordult. A "lefegyás"-kor általában 2-3 led véletlenszerűen égve marad a mátrix kijelzőkön!

3. Csökkentettem az információ kiírások idejét 300msec-re. Gyakorlatilag ugyanazt tapasztaltam, mint a második pontban.

4. Most jön az érdekesség. Kihúztam véletlenül a kijelző tápját. Számomra meglepő módon a 7 szegmense kijelzőkön továbbra is láthatóak maradtak az adatok, csak nagyon halványan. A mátrix kijelzőkön viszont jól látható fényerővel látható volt az információ, szépen váltakozva íródtak ki az adatok. Ismétlem, kihúztam a tápot. A nano és a kijelző panelem között van egy földvezeték, az első MAX7219 két jelvezetése (Data és clock), és az első 74HC595 jelvezetékei (data, lach cs). Azt még értem, hogy világíthatnak a ledek, hiszen a jelvezetékeken is megy energia, de hogy az egész áramkör jól működik, belépnek és megjelennek a bitek, ez meglepett. De nem ez a lényeg: ebben az esetben órákig jól működött. Haloványan ugyan, de megjelentek az adatok 2 másodpercenként váltott a kiírt információ! Aztán lefeküdtem aludni és reggelre a 3 mátrix közül az egyik lefagyott, három négy led világított rajta véletlenszerűen, de a másik kettő rendben működött, szépen irogatta 2 másodpercenként hol a "%", hol a "mbr", hol pedig a fokC" felitratot.

Ezen infók alapján inkább a tápra gyanakodnék (kapcsoló üzemű), de lehet időzítés is a hosszú vezetéken! Ha időzítési probléma lenne, akkor szerintem nem "lefgyna" a kijelzés, hanem időnként rossz infó jelenne meg a kijelzőn, de a következő írási ciklusban (ha az sikeres), akkor újra jó adat jelenne meg a kijelzőn.

Kondit hamarosan rakok még!! Meg egy pár nanosat is, mert az lehet, hogy kifelejtődött!

Bocs a hosszú leírásért, nem ment rövidebben!

Bagi

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3348
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: MAX7219 matrx kijelző pár perc után elsötétül

HozzászólásSzerző: kapu48 » 2020. január 6. hétfő, 11:44

Ha már tápra gyanakszol, az egész logikát kiegészíteném.
A kínai 5V névlegesen 2A-es tápok, amelyeken van kb. 2m-es vékonyka toldó vezeték.
Már az is kétséges, hogy átjut a vezetéken a 2A?
Most ha ennek a végére teszel nagyobb puffer kondit, az még lassabban fog feltöltődni bekapcsolás-kór.
Még bizonytalanabb lesz az indítás.

bagizoltan
Bitmanipulátor
Hozzászólások: 128
Csatlakozott: 2015. december 8. kedd, 19:52
Tartózkodási hely: Budapest

Re: MAX7219 matrx kijelző pár perc után elsötétül

HozzászólásSzerző: bagizoltan » 2020. január 6. hétfő, 13:28

Ok !
Köszi, figyelni fogok rá!
Bagi

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10033
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: MAX7219 matrx kijelző pár perc után elsötétül

HozzászólásSzerző: Robert » 2020. január 6. hétfő, 20:49

A "ledcontrol.h" a kimenetet a shiftout() utasítással hajtja végre. Ebben nincsen lehetőség a sebesség állítására.

https://github.com/wayoda/LedControl/bl ... ontrol.cpp

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

void LedControl::spiTransfer(int addr, volatile byte opcode, volatile byte data) {
    //Create an array with the data to shift out
    int offset=addr*2;
    int maxbytes=maxDevices*2;

    for(int i=0;i<maxbytes;i++)
        spidata[i]=(byte)0;
    //put our device data into the array
    spidata[offset+1]=opcode;
    spidata[offset]=data;
    //enable the line
    digitalWrite(SPI_CS,LOW);
    //Now shift out the data
    for(int i=maxbytes;i>0;i--)
        shiftOut(SPI_MOSI,SPI_CLK,MSBFIRST,spidata[i-1]);
    //latch the data onto the display
    digitalWrite(SPI_CS,HIGH);
}   


A ShiftOut belső Arduino utasítás az amit meg lehet piszkálni és/vagy a shiftout eljárást is beemelni a LedControl.cpp-be és ott módosítani és/vagy megírni a shiftout eljárást itt az eljárásban...
http://www.tavir.hu - a gazda :)

bagizoltan
Bitmanipulátor
Hozzászólások: 128
Csatlakozott: 2015. december 8. kedd, 19:52
Tartózkodási hely: Budapest

Re: MAX7219 matrx kijelző pár perc után elsötétül

HozzászólásSzerző: bagizoltan » 2020. január 7. kedd, 7:38

Szia!

Közben én is eddig jutottam. Azonban amint megláttam a ledcontrol forrását, rájöttem, hogy a 74HC595 ic-re is ugyanezzel az utasítással megy ki az adat. Mivel ezeknek az IC-knek is ugyanolyan hosszú a kábele (párhuzamosan fut két riasztó vezeték, egy a mátrix kijelzőknek, egy pedig a 7 segmes kijezőknek viszi az adatot), és azok probléma mentesen működnek, nem tartom valószínűnek, hogy a kábel hossza lenne a zavaró tényező. Ennek ellenére, mint legegyszerűbben kivitelezhető lehetőség, ma este lerövidítem a kábeleket minimumra (kb 20cm-re), és kipróbálom úgy!

Köszi!

Bagi

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10033
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: MAX7219 matrx kijelző pár perc után elsötétül

HozzászólásSzerző: Robert » 2020. január 8. szerda, 6:03

Hülye kérdés:
"Elsötétül a kijelző" fogott meg. Ez a MAX7219 esetén csak két módon lehet:
- kontraszt/fényerő lábon levő alkatrésszel (ellenállás)
- szoftveresen állítva

Mindhárom esetén egyszerre - esélytelen a közös meghibásodás. Ott én tápfesz. hibára tippelnék - pl. szakadt tápkábelre. MAX7219 4...5.5V tápfeszt vár el. A processzoros rendszer simán elmegy 5V helyett 3.3V-ról is (A BOD reset vagy nincs bekapcsolva, vagy általában 2.8V).
Nem esik le a kijelzőkön ekkor a tápfeszültség? Lehet rövidzár pl. beázás miatt, vagy akár drótszakadás....
Az adatvonalakon meg a belső tápfesz felé menő védődióda megtáplálja a chipet - ezért parázslik a mátrixban a LED-ek. A befagy működéskor az is pillanatnyi tápfeszkiesésére jellemző.
http://www.tavir.hu - a gazda :)

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10033
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: MAX7219 matrx kijelző pár perc után elsötétül

HozzászólásSzerző: Robert » 2020. január 8. szerda, 6:05

A 7szegmeneses meghajtás a 595 chippel hogyan van? Egyesével szegmensenként latch-ként tárolva, vagy multiplexelt módon?
A multiplex alapú meghajtás prociidőigényes. Esetlegesen érdemes kipróbálni a LEDmátrix gyári mintát, ha semmi más nem fut a prociban, csak pl. számolás a mátrixkijelzőn.
http://www.tavir.hu - a gazda :)

bagizoltan
Bitmanipulátor
Hozzászólások: 128
Csatlakozott: 2015. december 8. kedd, 19:52
Tartózkodási hely: Budapest

Re: MAX7219 matrx kijelző pár perc után elsötétül

HozzászólásSzerző: bagizoltan » 2020. január 8. szerda, 8:02

Kedves mindenki!
Köszönöm a segítséget, megtaláltam a hibát!

A következő dolgok rendben voltak:
Működtek a 74HC595 meghajtók és a 7 szegment led kijelzők
működtek a max7219 meghatók és a matrix led kijelzők
működött a fényerőszabályozás a led kijelzőn (ha rásüt a nap nagyobb fényerő kell)
működött mindhárom DS18b20 hőmérő
működött a DHT22 páratartalommérő
működött a légnyomásmérő
működött az rtc óra
működött az rtc óra "egynyomógombos" setup programja
működött az sd kártya modul, és az adatgyűjtés, az összes mért adatra órás és napi átlag számításokkal
működött a lcd kijelző
működött az I2C kapcsolat a két arduino nano között (nem fértem bele a 32K-ba, ezért ketté bontottam a feladatokat)

Egyetlen dolog nem működött, amit elfelejtettem beépíteni!

Mi ebből a tanulság? Mert mindig van tanulság!!
Mindig simítsuk el a hullámokat! (kell az a szűrőkondi! is)

... és hogy a közben feltett kérdésedre is válaszoljak:
Az volt a 7 szegmens kijelzőknél a probléma, hogy ha nyáron a házfalra süt a nap, akkor nem lehet látni a kijelzést, ezért maximális fényerőt kell kicsiholni belőlük. Ezzel sokat kísérleteztem, és nem multiplex meghajtás lett a vége. A mátrix kijelzők érdekes módon sokkal nagyobb fényerőt produkálnak még multiplexelve is. Bár ez nem is annyira meglepő, hiszen kisebb felületen sugározzák a fénypontok a fényt!
Egyébként ez a kijelező a gyenge pont! Ha rásüt a nap, simán felmelegszik 40-50 fok környékére. Az első verzió helyett azért építettem újat, mert a nagy hőterhelés miatt tönkrementek a ledek. A meghajtó IC-k jól bírják. A mátrix kijelzőkben tudtam led matrixot cserélni, de a 7 szegmens ledeket sajnos beforrasztottam. Az új verzióban már cserélhető, betároltam a gyors javítócsomagba +10 darabot. Ez kb 5 évre elegendő lesz :-)
Nagyon sokat tanultam ezzel a projekttel! Ebbe mindent beleraktam, ami amatőr gyakorlatban első körben belefér. Távlati tervem, hogy amint az új verzió működik, mellé rakok egy ESP8266 vagy hasonlót, és a mobiltelefonomon webböngészővel nézegetem az adatokat. Már készülök az esőmérő és szélsebesség és iránymérő kiegészítésekre is. De ezek nagyon drága mechanikák, és egyenlőre magam akarom megépíteni ezeket. Általában idővel feladom és megveszem a gyári megoldást :-)
Nagy tanulság még a vezetékhosszak meghatározása. Az I2C-re csak néhányszor 10 centimétert ajánlanak. Nekem simán ment 12 méterig. ADS18b20-ra olvastam 400m vezetékhosszt is, de nekem már 10m felett gondjaim támadtak. Végül minden chip-et külön vezetékre és külön bemenetre kellett tennem külön felhúzó ellenállással, így elértem, hogy a leghosszabb vezeték 30m körüli lehessen (ez a hőmérő egy aknában van mélyen a járdaszint alatt)! A hobbielektronika weboldalon valaki írta, hogy működik több száz méterig, de érdemi gyakorlati tapasztalatot nem árult el, csak ködösítés folyt sajnos! Idővel rá fogok jönni, hogy hol rontom el!

Bagi


Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég