Keresés

Részletes keresés

Prof Creative Commons License 2015.01.28 0 0 751

Jó lesz az 800-nak is (nekem annyiba -- se -- volt).

Node ha már. I2C vagy (inkább) SPI DAC? 4 csatornás, 12 bites? Van valami épeszű ötleted?

Előzmény: Vargham (749)
Prof Creative Commons License 2015.01.28 0 0 750

Szia,

Én stoppert csináltam időkiértékeléssel (speciális versenyzéshez). A Nano-n lévő kristály biza elmászott. Egyszer csak úgy poénból csináltam egy mérést, elindítottam egy rendes stoppert és ezt a protót, aztán 10 perc után megnéztem, hogy mi az eltérés.
Nem a programmal volt gond [szerintem, de ha gondolod, meg tudod nézni nyilvános oldalon], mert nem vártam alapvetően, hanem csak időket hasonlítottam össze (millis() mint referencia a mérés elején és a mérés végén). A mérési tartományban (30 mp +/- 5 mp) ez jelentéktelen eltérés, kisebb, mint amekkora eltérés a humán kezelésből adódik (tudniillik, hogy nem tudsz egy stoppert 0,1 mp-en belül azonos időben megállítani). 4 mp 10 percen belül pedig 30 mp-re nagyjából 0,2 mp. Ez 7 ezrelék körüli eltérés.
Az alap DS1307 breakout-okat dobáltam kifelé meg vaterás rendelésekhez adtam ajándékba, annyira rettenetesek voltak (5-10 mp/nap vagy rosszabb). De való igaz, itt a minőségért fizetni kell rendesen és/vagy megfelelő szakértelemmel ki kell küszöbölni ezeket a hibákat (amely szakértelem nálam csak szórványosan van meg egyelőre).

Én változatlanul azt tartom, hogy ezek még bőven működő megoldások, ha valaki ismeri és tudja kezelni a hátulütőket, illetve olyan rendszert tud felépíteni, amely az igényeinek megfelel.

Előzmény: Törölt nick (744)
Vargham Creative Commons License 2015.01.28 0 0 749

Ráadásul kemény 400 forint. :-)

Előzmény: Prof (748)
Prof Creative Commons License 2015.01.28 0 0 748

Pedig van. MCP23017 például.

Előzmény: x20fan (747)
x20fan Creative Commons License 2015.01.28 0 0 747

Meg lehet oldani persze, a lényeg, hogy oda kell figyelni, hogy meg legyen oldva a túlcsordulás.

Érdekes, hogy sokféle tartozékot láttam, de portbővítőt nem annyira, vagy a sensor shield lenne az? A shiftregiszter illesztése viszont egyszerű, olcsó, és védi a board bitjeit a külvilágtól.

 

Előzmény: Törölt nick (746)
Törölt nick Creative Commons License 2015.01.27 0 0 746

Ez így igaz, kicsit elállítódik az idő vagy egyebek is. :-)

 

Viszont 4-5 programsorból meg lehet oldani a problémát...... Mármint a túlcsordulás figyelést. És a lekezelése is max ennyi.

Előzmény: x20fan (735)
Törölt nick Creative Commons License 2015.01.27 0 0 745

Létezik multitasking még arduino alatt is. Persze ez "virtuálisan" lehetséges, de megoldható.

Előzmény: x20fan (725)
Törölt nick Creative Commons License 2015.01.27 0 0 744

Hát nem tudom.

 

Én csináltam a milis fügvénnyel egy komplett ébresztőórát. Egy nap alatt 1-2 sec eltérésem volt. Nyilván függ a kvarc pontosságától, sőt főleg ettől, így ettől nagyobb eltérés is előfordulhat. De hogy 10 percen belül legyen 2 sec eltérés, ott valami baj van, vagy nem korrekt a program valahol, és valamit nem veszel figyelembe.

 

10 perc az 600 sec. ebben 2 sec tévedés az 0.33%-os kvarc gyártási pontosságot jelentene. Ennél sokkal pontosabbak szoktak lenni, még a sima kerámiarezonátorok is jobbak. Nagyságrendileg 0,0005% körüli pontossági értékek vannak kvarecoknál.

 

Pont azért kvarc. Az vagy valami nagyon gagyi kvarc, vagy a progi valami rosszat művel, vagy valamiért nem rezeg rendesen. Elég sok trükköt kell alkalmazni, mire jó órát kapunk, nekem két napig eltartott egy mindenben tökéletesnek tekinthető óraprogramot megírni ébresztővel, túlcsordulás figyelővel. A mérete olyan 8-10 kbájt lett, már nem emlékeszem. Mármint C-ben Atmel Studió alatt, meg kíváncsiságból átírtam Arduinora is. Illetve anno PIC-eknél is volt hasonló gyakorlófeladatom.

Előzmény: Prof (724)
Prof Creative Commons License 2015.01.27 0 0 743

Ültess be egy úrvezetőt egy Baja versenyautóba... Kb. ez az, amit az Atmel Studio tud. Kezdőknek csak komoly elhivatottsággal, vagy azzal sem (bár tény és való, hogy külső programmerrel csodákra képes).

Előzmény: Vargham (732)
Törölt nick Creative Commons License 2015.01.27 0 0 742

Annyit azért hozzátennék, hogy lehet több szálon futtatni egy progi, azaz amolyan "ál-multitask" módon. meg lehet osztani az erőforrásokat a szálak között.

Előzmény: x20fan (722)
Törölt nick Creative Commons License 2015.01.27 0 0 741

Én is csak ajánlani tudom, jól használható.

 

És így használhatóak az Atmel könyvtárai és cuccai is....

 

Mondjuk a debugger csak 30 napig free

Előzmény: Vargham (732)
Prof Creative Commons License 2015.01.27 0 0 740

Ez valószínű. Csak ha szétírod a tokban lévő eepromot, akkor kuka a kártya. Ha szétírod a ráfűzött eepromot, akkor kidobod és bedugsz helyette egy másikat.

Vagy vagy... Ugye.

Előzmény: Vargham (734)
Prof Creative Commons License 2015.01.27 0 0 739

Nos, és az elmúlt uszkve 2 órában vastagon sz'ptam az mbed és egy ST Nucleo F401RE párosával.

Maga az eszköz kib. gyors, nagyon fáint rajta minden, kivéve, hogy a talpán is vannak lábak, ráadásul sok, összesen 80.

Az mbed önmagában egy rettentő komplex dolog, viszont összehasonlíthatatlanul jobb, mint az Arduino. Példa. Van pár eszközöd, ezekhez a könyvtárakat össze tudod magadnak válogatni, s ha kell, ott van. Amit változtatsz, változik mindenütt (teszem azt, megváltoztatod az i2c kulcsát egy modulnak, akkor az összes projektben átíródik, nem csak abban, amiben épp dolgozol). Ha valamit kidobsz, kiveszed a listából, többet nem foglal helyet (mint az Arduino library-k).

De.

Kiciócókínai bizbaszok nincsenek, legalábbis az én szettem és az mbed "Components" alatt fellelhető eszközök között nincs egyezés. Amit próbáltam (gyakorlatilag mindent), azzal eddig nem ment: MAX7221 + 7 szegmenses kijelző, 128x96 I2C/SPI OLED, 1602 I2C LCD vezérlő + LCD. Egyetlen shield-et tudtam életre kelteni, egy sima LCD keypad modult, ami elsőre működött. Bár súlyosan megütném az embert aki csinálta, mert az elejéről elegánsan kihagyta a törlő parancsot (vagyis ha előzőleg volt rajta valami, akkor reset után is lesz).

 

Az eszközre visszatérve. VÉÉÉÉGRE nem az van, hogy adott egy kártya és pokoli nehéz rá bármit is rakni az idióta lábkiosztás miatt, hanem konkrétan egy raszteres. Minden irányban. Vagyis piszok egyszerűen gyártható hozzá próbapanelből shield. Ez az Arduino fél raszteres lábeltolása miatt nem (illetve csak nagyon körülményesen) megy. Óriási respect.

 

Egyelőre kb. ennyi.

vfp Creative Commons License 2015.01.27 0 0 738

Lehet, hogy az Atmel Studio ingyenes és van Arduino plugin hozzá, csak egy kezdőnek használhatatlan. Mintha a bicigli helyett egy űrhajóba ülnél (teljesen kiismerhetetlen).

Felraktam, nem kis munka volt, mert a telepítő mindent elkezdett húzogatni a netről. Végre elindult és fogalmam nem volt, hogy mi micsoda.

 

Lehet, hogy már én vagyok öreg hozzá :(

Előzmény: Vargham (732)
Vargham Creative Commons License 2015.01.27 0 0 737

illetve ez http://hobbyist.co.nz/?q=web-switch.

Ez azért már határeset egy UNO-nak. :-)

Az mbed-et pont az Internet of Things dolgok fejlesztéséhez hozták létre. Beépített hálózat és felhő támogatással.

Előzmény: teglascs (723)
x20fan Creative Commons License 2015.01.27 0 0 736

Ezek hasznosak, köszi.

Előzmény: John Zero (730)
x20fan Creative Commons License 2015.01.27 0 0 735

Nem kevés az 50 nap, viszont ha beválik egy program, és otthagyom a boardot, hogy végezze a dolgát, akkor hamar eltelik, és jön a meglepi.

 

Előzmény: Prof (727)
Vargham Creative Commons License 2015.01.27 0 0 734

limitált írási-olvasási műveletet képes elviselni (ez néhány ezer az I2C eeprom milliós értékével szemben)

Az inkább 100 ezer GARANTÁLT írás.

De csináltak már többen, többször is ilyen tesztet. A valóságban csak olyan egymillió írás után kezd el hibázni. A gyártó szándékosan ad meg egy nagyságrenddel kisebb értéket, mint a valódi érték.

Előzmény: Prof (724)
Vargham Creative Commons License 2015.01.27 0 0 733

> A millis()-sel lehet csak operálni? Eltenni az értéket, minden lefutásnál összehasonlítani, és ha már 1000-rel több, akkor váltani a ledet?

Igen.

delay()-t használni tilos. Szétcsúszik tőle minden, ami bonyolultabb egy LED villogtatásánál. Már két LED-et nem tudsz különbözőképpen villogtatni egyszerre, ha delay()-t használsz.

 

(Az mbed-ben kapásból van ilyen célra egy Ticker nevű interfész. Atmel MCU-n is van hasonló, csak az Arduino környezet nem támogatja ilyen egyszerűen.)

Előzmény: x20fan (722)
Vargham Creative Commons License 2015.01.27 0 0 732

-- javaslom valami alap szerkesztő használatát (Notepad ++) az Arduino IDE mellett

Javaslom az Atmel Studio-t. Ingyenes, Visual Studio alapú. Támogatja az összes Atmel hardvert. Van hozzá Arduino plugin, aminek a segítségével a sketch-ekből project-et lehet készíteni. A sketch-ek továbbra is használhatóak maradnak az eredeti Arduino IDE-vel is. Van benne rendes kódkiegészítés, debugger, átnevezés, stb.

Szóval egy komplett IDE, nem olyan herélt, mint az Arduino.

Előzmény: Prof (720)
Vargham Creative Commons License 2015.01.27 0 0 731

Sajnos sok hardver közösségi fejlesztésű könyvtára tartalmaz delay()-t... Innentől kezdve pedig megette a fene.

Előzmény: John Zero (730)
John Zero Creative Commons License 2015.01.27 0 0 730

Normális programban szinte tilos delayt használni, mert "blokkolja" a többi dolgot, pl. gombnyomás érzékelést.

Érdemes library-t használni, minek megírni újra?Pl. Metro ("metronóm" library.

https://github.com/thomasfredericks/Metro-Arduino-Wiring/wiki

vagy Timer

http://playground.arduino.cc/Code/Timer

 

Előzmény: x20fan (725)
Prof Creative Commons License 2015.01.27 0 0 729

Az előbbi felállás:

Mega(/Due) + Ethernet + i2c alfanumerikus LCD.

 

A termosztát adók kiváltása nem annyira egyszerű. Egy zárt, működő rendszerbe kívülről beavatkozni, adatokat vagy jelet kiszedni vagy berakni nem magától értetődő, ehhez a zárt rendszer architektúrájának ismerete (gyakorlatilag kapcsolási rajz szintjén) kell. És még így sem biztos, hogy sikerül. A termosztát egy kő egyszerű eszköz rendszerint, 1 bites szabályzást csinál a legtöbb esetben (magyarul ki/be kapcsol), egyszerűbb tehát kiváltani, mint beállni mellé.

A redőny más tészta, mert ha nincs saját vezérlése, akkor pl. a végállásokat meg kell oldani. Ha van saját vezérlése, akkor a kapcsolófelületre kell rácsatlakozni (kvázi nyomógombokat, kapcsolókat párhuzamosítani), ez viszonylag egyszerűen megoldható (hasonló projekten dolgozom épp csak teljesen más felállásban).7

 

A programozásra már írtam.

 

Instructables.com-on érdemes körbenézni.

Előzmény: kerezsijoc (728)
kerezsijoc Creative Commons License 2015.01.27 0 0 728

"Remélem, hogy nem keverem össze több felhasználó igényét. :-)

 

Ha jól emlékszem, az alábbi követelmények voltak:

-Szenzorok olvasása. IGEN                                                        

 

-Értékek helyi naplózása SD kártyára. NEM AKAROM SD-RE, ELÉG HA A NAS SZERVERRE EGY FILE-BA RAKJA AMI KIÉRTÉKELHETŐ

 

-(Később beavatkozás a rendszerbe a mért, naplózott adatok alapján.) NEM AKAROK BEAVATKOZNI EGYÁLTALÁN, MAJD KÉSŐBB CSAK AMIT 645-ös hozzászólásomban írtam, hogy termosztát adókat csinálni (rádiós) és távolról vezérelni + ha megoldható szintén távolról redőnyvezérlés mind rádiós

 

-Lokális felhasználói felület grafikus LCD-vel, menüvel, grafikonokkal. HÁT ELÉG HA CSAK A MÉRT ÉRTÉKEKET KIÍRJA

 

-Távelérés etherneten. IGEN

 

-Legyen olcsóbb, mint egy gyári megoldás. MINIMUM :)

 

-Ne nulláról kelljen kezdeni a programozást. AZ BIZTOS

 

Erre a követelmény listára írtam a válaszomat."

 

 

Előzmény: Vargham (646)
Prof Creative Commons License 2015.01.27 0 0 727

50 nap eszelősen sok idő, és azzal érdemes számolni, hogy a legtöbb kártya (kivétel a Due, a Leonardo és a speciális kártyák közül egyik-másik) azonnal resetet nyom, amikor -- külső táp ellenére -- USB-re dugod.

 

Valószínűleg az órajel felével vagy a körül, de nem egyenletesen -- ha egyáltalán. Érdekes kísérlet lenne szkóppal megnézni.

Előzmény: x20fan (725)
Prof Creative Commons License 2015.01.27 0 0 726

Mega(/Due) + RTC + hálókártya.
Esetleg egy Yún, de annál már vannak jobbak.

Én vezéreltem már SSR-t netről, kívülről. Jól konfigurálhato router kell hozzá, erre figyelni kell (az Invitel lakossági modem + cucca pl. alkalmatlan rá teljesen)

Előzmény: teglascs (723)
x20fan Creative Commons License 2015.01.27 0 0 725

Persze egy dolgot csinál egyszerre, úgy értettem, hogy sorban vannak a feladatok, és egymás után. A delay() az ebbe a koncepcióba nem ilik bele, az tipikusan a kezdő kis programocskákhoz jó. Viszont az időzítés az nagyon gyakori igény szinte bármilyen felhasználásnál, nade akkor majd a millis()-sel meg az rtc-vel ügyeskedek.

 

A belső eeprom írást akkor felejteni kell, meg ha lesz rtc, akkor már úgyis ott a ram rajta.

 

A delay nélküli példát néztem, és láttam hogy nem törődik a túlcsordulással:

if(currentMillis - previousMillis > interval)

ha a millis átcsordul, és kezdi 0-ról, akkor ez az if 50 napig nem lesz igaz, vagyis egy most bekapcsolt Arduino 50 napig szépen fogja villogtatni a ledet, majd 50 napig nem villog. Szóval ezt le kell kezelni, ha túlcsordult, akkor külön módon kell eljárni, és az értéket átírni a previousMillis-be.

 

Ha már említetted a sebességet, kb. mire lehet számítani? Mondjuk egy ledvillogtató delay nélkül mekkora frekivel villogna?

void loop() {
  digitalWrite(led, HIGH);
  digitalWrite(led, LOW);
}

Előzmény: Prof (724)
Prof Creative Commons License 2015.01.27 0 0 724

Szia!

Ha csak egy parancsot lehetne örökre kiszedni az Arduino parancsok közül, az sok ember szerint a delay() lenne. Én inkább csak a paramétert limitálnám nagyjából 100-ra.

 

A meglátásod nem rossz, de van benne egy gixer. Itt nincs olyan hogy a board csinál mást IS. Egy dolgot csinál, nagyjából mindig. Ehhez képest egy érdemi kivétel van, az interrupt, mert az az architektúra másik szintjén figyel folyamatosan, vagyis akkor is bele tud szólni a programfutásba, ha épp nem történik vizsgálat. Jó játék soros kiolvasással megnézni pár kódrész futási idejét. Meg fogsz lepődni...

1. kérdés: a meglátás jó. Túlcsordulhat, erre figyelni kell, ha olyan a szoftverkörnyezet. A millis() alapból unsigned long, vagyis az a változó, amivel vizsgálsz, szintén unsigned long kell legyen, a kezdeti változódeklarációknál erre figyelni kell (a váltásnál így is előfordulhat nehézség, de ez ugye 50 nap nagyjából). Lásd: blink without delay.

 

2. kérdés: elvileg igen, gyakorlatilag olcsóbb és egyszerűbb egy külső eeprommal megoldani. Két okból: egyrészt a belső eeprom (ami konkrétan az IC-n belül van) csak limitált írási-olvasási műveletet képes elviselni (ez néhány ezer az I2C eeprom milliós értékével szemben). Az EEPROM-hoz sem kell elem, kb. 100-200 év az adatvesztésig eltelő idő. Van breakout is, de kb. 40 forint egy darab, plusz a két előtétellenállás.

 

3. kérdés: nincs rajta idő. A millis() elvileg alkalmas időmérésre, ha csinálsz egy változót, amit szinkronizálni tudsz. De...

Egyrészt az Arduinokon (pláne a klónokon) lévő kristály nem éppen atomi pontosságáról híres, nekem 10 percen belül másodperces járateltérést produkált, ami ugye pár perces időmérésnél irreleváns (nem fogod látni, hogy a blink without delay 1 másodperc vagy 1,001 másodperc), de a másodperces jel akár pár perc alatt el tud "mászni" egy referencia jeltől (pl. egy óra kattogásától).

Helyette: RTC, de ne az olcsójános kínai (DS1307, rettenetesek, 1 percet is meghaladó napi járateltérésük bír lenni), hanem a a DS3231 például.

Előzmény: x20fan (722)
teglascs Creative Commons License 2015.01.27 0 0 723

Értem.

Igazából nekem ami mozgatja a fantáziámat ezen a területen, az ez http://forum.index.hu/Article/viewArticle?a=133119232&t=9166766 (c) vfp koll. :-)

illetve ez http://hobbyist.co.nz/?q=web-switch.

Tehát pl. a fűtési rendszer monitorozása, ill. beavatkozás a működésébe.

Ugye, ehhez nem kell igazán erőmű?

Előzmény: Prof (719)
x20fan Creative Commons License 2015.01.27 0 0 722

Telefonon tényleg érdekes lehet programot diktálni, soronként egy elírás, nehezen fog működni.

 

Nulláról kezdem az ismerkedést az Arduinoval, de máris van kérdésem. A loop() ugye pörög állandóan, és a ledvillogtató példa a delay(1000)-rel lassítja láthatóra.

Ha két dolgot végez a board és az egyik a villogtatás, a másik meg egy olyan, amit maximális sebességgel kell futtatni, akkor a delay nem jó módszer, mert az a másik programrészt is lassítja. A millis()-sel lehet csak operálni? Eltenni az értéket, minden lefutásnál összehasonlítani, és ha már 1000-rel több, akkor váltani a ledet? Működhet ez így, de mi van, ha a millis túlcsordul?

Szabad-e használni az eepromot valami mérési eredmény tárolására? Nade úgy, hogy minden kiolvasást oda tárolok, vagyis lehet akár másodpercenként többezer írás is. Vagy jobb ilyen célra egy elemmel ellátott órapanel, mert a ramot végtelenszer lehet írni és az elem miatt nem felejt? Vagy más megoldás?

Órapanel nélkül van-e dátum és idő a boardon? Mondjuk napi szinkron megoldható pc-ről, reggel 8-kor a pc lehúzza low-ba a 2-es pint 5 másodpercre vagy ilyesmi, és akkor csak egy napig kell szabadon járnia az órának.

Előzmény: Prof (720)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!