Van Arduinora egy saját smart home kódom, ami több eszközön megy. Jelenleg 8db arduino nano, és egy arduino mega.
Lényegében ugyanaz a kód, amik vannak különbségek az eszközökön beállításban, más ethernet miatt vagy 1-2 eltérő szenzor miatt, azok fordítási feltételekkel vannak lekezelve. A nanok UIPEthernet.h-val, a mega Ethernet.h-val megy.
A nanok betonstabilan mennek. A megán viszont időnként lerohad a webszerver.... Igen, csak az, mert pingelni lehet ilyenkor is. Hogy milyen időnként? Van hogy pár nap után, van hogy 1 hónapig is megy... Cseréltem kompletten megát+ethernetet másikra 2x is, nem volt változás.
Régi probléma, a használt libraryk frissültek már többször is, feltettem rá újra a programot, nincs változás.
A kódot többször átnéztem, hibát nem látok, a releváns részen próbálgattam pl több féle módon azt, hogy a kapcsolatot hogy zárom le... Mekkora a buffer... Már nem is tudom, elég sok mindent.
Csak tök fura, hogy a nanon megy hibátlanul, a mega meg szarakodik (egyébként az egyetlen dolog, amit ott mega van, az a digitális kimeneti lábak száma; sem teljesítmény, sem semmi más nem indokolja)
Tudom, így kód nélkül nehéz... De mit tudtok tanácsolni? Debug ötlet? Mit nézzek, mit próbáljak? Valaki esetleg találkozott már hasonlóval? Azért szar ez, mert ugye van hogy hetekig megy....
- 876 megtekintés
Hozzászólások
Azt mondod, kész libre támaszkodsz. Abban meg bármi lehet, amit nem saját magad írtál.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Igen, én is erre tippelek... De saját ethernet kódot nulláról csak nem írnék... :)
"Sose a gép a hülye."
- A hozzászóláshoz be kell jelentkezni
A meglévő tanulmányozása nem opció?
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
De, egy része igen. Mondjuk amelyik a server, még úgy ahogy. De maga a tényleges hardver kezelés, írás-olvasás memóriába, regiszterbe, hogy miért oda, miért azt a hexa értéket stb, ezt így a chip mély ismerete nélkül halvány fingom sincs hogy jó vagy nem...
"Sose a gép a hülye."
- A hozzászóláshoz be kell jelentkezni
Nincs róla katalóguslap?
Itt inkább az az aggasztó, hogy ritkán jön elő a hiba. Ez tipikusan rosszul kezelt race condition, ami ránézésre nem látszik. Mondjuk egy rövid kódrészbe becsapó megszakítás. Vagy valami nem volatile, aminek annak kellene lennie. Vagy nem atomikus. Mondjuk 16 bites architektúrán 32 bites művelet.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
"mert pingelni lehet ilyenkor is"
Ha Wiznet chip van a modulodon, az magától válaszol a pingre, ha fel van húzva. Külön regiszterbittel kell tiltani, hogy ne válaszoljon.
"Normális ember már nem kommentel sehol." (c) Poli
- A hozzászóláshoz be kell jelentkezni
A W5100 max 4 párhuzamos kapcsolatot kezel.
.stop() mindig megvan?
- A hozzászóláshoz be kell jelentkezni
Van stop.
Egyébként igen, erre is gondoltam, de próbáltam stress tesztelni, és nincs fagyás, csak egyszerűen késleltetve van a kapcsolat, vagy nem is sikerül.
"Sose a gép a hülye."
- A hozzászóláshoz be kell jelentkezni
Hmm, szóval tegnap mikor megállt megint, nem indítottam újra (elfelejtettem).
Most meg nézem, és... magához tért és megy tovább. :)
https://i.imgur.com/K1KPn0Y.png
Szóval lehet hogy mégsem zárja le mindig a kapcsolatokat, vagy valami bug van, és míg valami timeout ki nem fut, addig nincs új kapcsolat.
"Sose a gép a hülye."
- A hozzászóláshoz be kell jelentkezni
Nem lehet, hogy valami koztes eszkoz vagja fejbe a sessiont? Nekunk volt anno olyan, hogy a kabelmodem 5 perc idle utan dobta a sajat session/upnp tablajabol a kapcsolatot, ami miatt az SSH-k es egyeb kapcsolatok is "szakadoztak". Mivel ez a routernek egy security feature-je volt, ezert nem lehetett felulirni, maradt az ssh keepalive 2 percre allitasa...
- A hozzászóláshoz be kell jelentkezni
LAN-on belül megy a forgalom, egy switch van köztük, semmi egyéb.
És egyébként nincs session, simán HTTP GET-tel van kérdezgetve.
"Sose a gép a hülye."
- A hozzászóláshoz be kell jelentkezni
Azok a libek forrásban vannak meg, s fordítod a projecthez, vagy binárisok, s csak linkelni kell? Mert ha forrás, akkor írhatsz logolást is gyanús helyekre, persze figyelve arra, hogy ne több kilobyte log keletkezzen másodpercenként.
Én műszer firmware-éhez nagyon szép logokat csináltam µs felbontással. Elképesztően sokat segít. Akár abban, hogy azt hiszem, minden a legnagyobb rendben, aztán a logból látom, hogy valami baj van, amivel foglalkoznom kell, érzékelhető tünete nem is volt.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Források mindig, különböző board-okra nem is menne másképp.
Hát oké, de hova tegyek logolást? Milyet? És hova logoljak ~1,5 hónapig amíg mondjuk megáll?
"Sose a gép a hülye."
- A hozzászóláshoz be kell jelentkezni
Cseréltem kompletten megát+ethernetet másikra 2x is, nem volt változás
ENC28J60-at is próbáltál a megával? Érdemes lenne, ha a nagyobb kód nem probléma.
- A hozzászóláshoz be kell jelentkezni
Nem próbáltam.... De mondjuk ez nem hülyeség.
Miért lenne nagyobb a kód? A nanok is azzal mennek. :) Egyébként meg pont a megába hogy a viharba ne férne el, ha a nanon elfér.... :)
"Sose a gép a hülye."
- A hozzászóláshoz be kell jelentkezni
Miért lenne nagyobb a kód?
Azért nagyobb a kódja, mert ez kicsit "butább" chip, mint a másik, pl. ott van hardveres TCP/IP stack, itt meg nincs.
Egyébként meg pont a megába hogy a viharba ne férne el, ha a nanon elfér
Azt nem tudhatom, hogy a megában miket futtatsz, ahhoz mekkora méretű kódot írtál. :)
- A hozzászóláshoz be kell jelentkezni
Ugyanaz a kód, mint a nanon.
Konstansokat írok át, és fordítási paraméterekkel van összerakva, hogy mit buildeljen. Így lesz a megán Ethernet.h, a nanokon UIPEthernet.h, így lesz más a MAC és IP címük, a nevük, a kimeneti/bemeneti lábak paraméterei. A nanokon van egy AM2320 sensor, a megán ez nincs, helyette van DS18B20 (később került rá, a mega már előtte is fagyott), valamint az ehhez kapcsolódó lekérdezések. Ennyi.
"Sose a gép a hülye."
- A hozzászóláshoz be kell jelentkezni
Ugyanaz a kód, mint a nanon.
vs
Konstansokat írok át, és fordítási paraméterekkel van összerakva, hogy mit buildeljen
Tehát nem ugyanaz a kód kerül bele az egyes mikrokontrollerekbe. :)
Ha Ethernet vezérlőt cserélnél a mega és egy nano között, kiderülhetne, melyik kódrészlet okozhatja a hibát. Ha átmegy a hiba a megáról a nanora, akkor az Ethernet.h a bűnös, ha nem, akkor az jó, máshol kell a hibát keresni a megára forduló kódban.
- A hozzászóláshoz be kell jelentkezni
Igen ez jó ötlet, már írták.
Megnézem majd, hogy a nano shield-et hogy lehet bekábelezni a megához...
"Sose a gép a hülye."
- A hozzászóláshoz be kell jelentkezni
Relé van? Brutál random fagyásokat tud okozni.
- A hozzászóláshoz be kell jelentkezni
Igen reléket kapcsol, mint az összes többi nano.
De a fagyás egyébként nem köthető relé kapcsoláshoz, tegnap pl. nap közben állt meg, és biztosan nem volt semmi.
"Sose a gép a hülye."
- A hozzászóláshoz be kell jelentkezni
A relé panel tápjába tegyél sorba egy schottky diódát, minden relé tekercsével párhuzamosan egy 100 mikró tantált, biztos ami biztos, ne szopasd magad.
- A hozzászóláshoz be kell jelentkezni
minden relé tekercsével párhuzamosan egy 100 mikró tantált
Egy ellenpárhuzamosan kapcsolt dióda miért nem elég?
- A hozzászóláshoz be kell jelentkezni
ESP8266 a behúzáskor lefagy. Nem tudom miért, nincs olyan szkópom ami kiderítené.
EZ volt a bűnös, a relére forrasztott tantálkondi neg a táppal sorba rakott schottky dióda megoldotta.
- A hozzászóláshoz be kell jelentkezni
Ez egy "gyári" panel, amin a relé is megtalálható, amit készen vettél? Vagy te tervezted az áramkört és a NYÁK-ot?
- A hozzászóláshoz be kell jelentkezni
A linken vettem. Egy legótvarabb kínai fos, de a tantálkondi javított a helyzeten. Nem táphiba volt, 5V 2A jó minőségű kábeles USB tápról kapta a szuflát. Ez szerintem processzorfüggő hiba. Csak ötlet volt, nekem ez megoldotta a hibát. Tranziensek, emp, faszomtudja mi. Nem is érdekel, most jó.
- A hozzászóláshoz be kell jelentkezni
Nekem mégis úgy tűnik, hogy a tápot rángatta meg a relé. A soros dióda jó megoldás, de én tettem volna utána egy nagyobb elkót, hogy előtte ne piszkáljon bele a tápba a relé. A tekercsről meg levenném a kondit, az lassabb, gyengébb meghúzást okoz.
A tápok kábelezése kritikus tud lenni, a GND-ket meg a + tápfeszt is egy-egy erős csillagpontból célszerű vinni, nem felfűzve megoldani. Én az erek vastagságával sem szoktam spórolni, a tápot is jól kell megválasztani, ezek a kínai csodák sokszor a felét is alig tudják annak, ami rájuk van írva, de ez - gondolom - köztudott.
Megoldás lehet még az elektromágneses zavarok ellen az árnyékolás. Ha nem nehéz kivitelezni, akkor érdemes megcsinálni.
- A hozzászóláshoz be kell jelentkezni
Egy 300W-os DELL PC tápról megy az összes. :)
"Sose a gép a hülye."
- A hozzászóláshoz be kell jelentkezni
De most éppen az ESP tápjáról beszélgettünk. :)
- A hozzászóláshoz be kell jelentkezni
Nekem mégis úgy tűnik, hogy a tápot rángatta meg a relé.
Kizárt, mivel előtte a tekercsen folyó áram nulla, azaz épp soft módon alakul ki az áram. Pont a párhuzamos tantál kondi lesz az, ami iszonyat mód meg fogja cibálni a tápot bekapcsoláskor.
Simán gondolnék arra, hogy a kapcsolt körről, a kontaktusokról származik az a zavar, amitől az MCU megdöglik. De lehet úgy táplálni MCU-t, hogy kellő mennyiségű hidegítő kerámia kondi, sorosan meg kb. 560 nH induktivitás. Én így csináltam, s amikor EMC/EMI laborban megkínálják a gép házát 8 kV-os feszültség tüskékkel, vígan megy tovább, nem fagy szét.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Nem is érdekel, most jó.
Aztán így keletkeznek a tévesznék. Fekete kakast áldoztunk teliholdkor éjfélkor, az uram majdnem elpatkolt, de ettől meggyógyult, bivalyerős mára, naponta megdug, minden rendben Marikám, szóval neked is azt ajánlom, szerezz egy fekete kakast és várd a teliholdat...
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Ez viszont jó ötlet, hiszen az u(t) = L * di(t) / dt összefüggés alapján - a képlet másik tagja hiányzik, mert feltételeztem, hogy az L induktivitás időben nem változik - az áram nem változhat meg ugrásszerűen azon okból, hogy realitása csak véges feszültségnek van, tehát kikapcsoláskor az áram tovább fog folyni. Legegyszerűbb, ha körbe járatjuk, s az 1 / 2 * L * i ^ 2 energiát a diódán illetve a tekercs ellenállásán hővé alakítjuk.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Kész panelom van, abba nem nyúlkálnék bele... És ugye, a nanok nem fagynak, pedig ugyanarról a táp IC-ről megy a nano és a relé modul.
"Sose a gép a hülye."
- A hozzászóláshoz be kell jelentkezni
minden relé tekercsével párhuzamosan egy 100 mikró tantált
Rossz ötlet. A tekercs bekapcsolásakor elméletileg dirac-delta, azaz végtelen nagy áram folyna. Miért akarod ezt?
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Volt hogy csak a használt GPIO láb fagyott ki, volt hogy az egész proci. Garantáltan jó USB kábellel, táppal egy WeMos D1 mini csinálta ezt a hibát, a modul lábaira (G, 5V, GPIO) direktbe kötöttem a relé modult. Volt benne visszdióda. Érdekes, 3.3V lábon nem fagyott, de nem mindig húzott be (értelemszerűen). Én se értettem.
- A hozzászóláshoz be kell jelentkezni
A diódával és a tekerccsel párhuzamos soros RC-tagot még megérteném.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Esetleg ha a Nano (ATMEGA328P) atomstabil, es csak a digitalis outputok hianyoznak, nem lenne jo megoldas a Megat masra hasznalni, es lecserelni egy ujabb Nano-ra + egy marek 595-re? 3 labbal (extrem esetben 2-vel) IC-nkent 8 bit kimenetet kapsz, es lancolhato, szoval ha 4 darabot teszel moge, 32 kimenetet kapsz 3-ert. Kezelni is nagyon konnyu, vagy rateszed az SPI-ra, es csak 1 engedelyezes kell (bar ez bezavarhatja a halozatodat, ha az is azt hasznal), vagy az egyszerubb eset a shiftOut fuggveny. Az 595-ost meg kb. gombokert utanaddobjak. A vegen a kutyu lehet, hogy meg kisebb is lesz - amilyen batar a Mega.
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
Nem szeretnék ilyet tákolni, meg azt se, hogy minden váltásnál a kimeneten végigpörögjön az output.
"Sose a gép a hülye."
- A hozzászóláshoz be kell jelentkezni
Nem porog vegig. 1 adat lab, 1 orajel, es egy, ami a shift regiszterbol attolti a belso latch-be. Ha azonos adat marad, semmi nem tortenik. Ha az utobbit elhagyod, akkor persze vegigporog, de megy 2 labbal is (nem ajanlom ezt a modot, csak ha muszaj).
Azt persze megertem, es elfogadom, ha nem akarsz sajat kutyut. Vannak amugy I2C alapu IO extenderek is, szokasos "arduino modul" formaban. Az meg egy lehetoseg.
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
Eredeti a mega? Ismerősömnek sikerült egyszer bevásárolnia hamisítottból, és 3-50 óránként újraindult vagy megfagyott. Hetekig szívtunk vele, hogy az én vasaimon jó, és ugyanaz a kód az ő cuccaival lefagyogat.
Ezen kívül a w5100-aknak javaslom, hogy a reset lábát vágd ki és kösd be egy szabad IO-ra, és ha nincs rajta forgalom, akkor szoftveresen reseteld ki alóla és begineld újra 2 másodperccel később. Rengeteg (70+) ilyen shielddel üzemeltetünk arduinokat, és hosszútávon nem megbízhatóak, ahol lehet, ott inkább w5500-as shieldeket használunk, azok lényegesen stabilabban működnek. Vagy pedig ezt a gusztustalan workaroundot.
A másik, hogy ha alsó polcos w5100 shieldet veszel, lespórolják róla a reset chipet (4 lábú kis IC az egyik sarkán a panelnek), ezért vagy elindul amikor áramot kap, vagy nem. A fenti ezt is megoldja.
- A hozzászóláshoz be kell jelentkezni
Az egyik igen, mert gyorsan kellett és az hestore-ból rendeltem, egyébként minden más aliexpress.
"Sose a gép a hülye."
- A hozzászóláshoz be kell jelentkezni
Az egyik igen, mert gyorsan kellett és az hestore-ból rendeltem
Attól még nem biztos, hogy eredeti, árulnak ők azt is, de kínai koppintást is.
https://www.hestore.hu/prod_10036436.html
vs
- A hozzászóláshoz be kell jelentkezni
Még valami!
A W5100 shieldeknek van egy "gyári" hibája: az ethernet lezáró 50 ohmos ellenállások helyett 510 ohmot ültettek be (létra felirata 511). Ez pont elég ahhoz, hogy a link bizonytalan legyen.
https://www.google.com/search?client=opera&hs=4mg&sca_esv=c799b5a334c4a…
"Normális ember már nem kommentel sehol." (c) Poli
- A hozzászóláshoz be kell jelentkezni
Ez a hiba nem az lesz, mert ping van.
De egyébként: Pff... Szerintem legalább 5 krimpeltem újra a kábelt anno, meg cseréltem is, mert nem jött fel a link sokszor.... És olyan is volt hogy emiatt cseréltem ethernet shieldet. Remek.
"Sose a gép a hülye."
- A hozzászóláshoz be kell jelentkezni
A Ethernethez használt kábelek (Cat 5e, Cat 6 stb.) hullámimpedanciája 100 ohm, ehhez kell illeszkednie az Ethernet kártyának/adapternek. Általában 2 db 50 ohm körüli ellenállást kötnek sorba, a közös pontjukat pedig egy ellenálláson vagy kondenzátoron vagy párhuzamos RC-tagon keresztül lekötik GND-re. Ha 50 ohm helyett 500 ohm körüli értékeket használnak, az azt jelenti, hogy kvázi lezáratlanok, illesztetlenek lesz az érpárak, ami reflexiót és jeltorzulást fog okozni, aminek működésbeli problémák lesznek a következményei, TCP/IP-n csomagvesztések fognak jelentkezni. TCP esetén még orvosolható a dolog, de UDP-n nem (pl. ezért lehet olyan, hogy a shield nehezen, sokadik kérésre kap IP-t a DHCP-kiszolgálótól, esetleg nem is kap) . Elég nagy szívás, ha így kerülnek ki a gyártótól shieldek, nem mindenki van arra felkészülve, hogy orvosolja a problémát, ami amúgy nem olyan nagy feladat, de szerszám és gyakorlat nélkül nem fog menni.
- A hozzászóláshoz be kell jelentkezni
Mázlista :)
Nálunk több mint 10 kering, és mindegyik 511.
"Normális ember már nem kommentel sehol." (c) Poli
- A hozzászóláshoz be kell jelentkezni
Nálam tapasztaltabbtól azt hallottam, hogy minden firmware-rel rendelkező dolgot úgy kell beépíteni, hogy hard resetet tudjon adni neki az áramkörünk. Ezekben szoftver is van, és néha még a soft reset sem elég nekik, hogy újra működő állapotba jöjjenek.
- A hozzászóláshoz be kell jelentkezni
Egy watch dog csodákat tud tenni. Érdemes beépíteni minden eszköz firmware-ébe, és akkor kvázi magától meg tudnak javulni ilyen-olyan problémák, zavarok miatt eltévedt programok.
- A hozzászóláshoz be kell jelentkezni
Mi az, hogy az "áramkörük"? Hogy van egy relé ami a tápját kapcsolja az arduinonak, elengedett állapotban zárt, és amikor saját maga behúzza, akkor reset?
"Sose a gép a hülye."
- A hozzászóláshoz be kell jelentkezni
A rituális öngyilkosság lehet tervezett, amikor egy hardware-es állapotautomata végig tudja vinni ezt akkor, amikor már elkezdődik a reset. Ugyanakkor szerintem ő arra gondolhatott, hogy vannak önálló, intelligens perifériáid, s legyen arra lehetőség, hogy a rendszer működésének egészét irányító, tehát a fő processzor tudja ezeket a kis perifériákat hardware-esen is reset-elni.
Alapvetően jó ötletnek tartom, bár manapság felesleges, amennyiben jól csinálták meg az adott perifériát, nem egy RC-tag a reset áramkörük, hanem egy komoly infrastruktúra, valamint van, és használják a watchdog reset-et.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni