Hirdetés

2024. április 28., vasárnap

Gyorskeresés

Téma összefoglaló

Téma összefoglaló

  • Utoljára frissítve: 2023-03-11 00:46:52

LOGOUT.hu

Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.

Összefoglaló kinyitása ▼

Hozzászólások

(#2851) fpeter84 válasza krisztianAMG (#2850) üzenetére


fpeter84
senior tag

Analógot viszonylag egyszerű, vannak rá kész/félkész kapcsolások, de a digitálissal meggyűlt a bajom... jópár mikrokontroller alapú kapcsolást kipróbáltam már, de valahogy egyik sem bizonyult stabilnak - mindenki az otthon található szemeteiből, bontott alkatrészeiből építkezik (főleg induktivitás) és neki véletlenül működik a talált értékeivel, de csak totózik hogy mit is használ és valahogy nekem eddig semmi nem ment... :( Nyilván nem lehetetlen, és nem is töltöttem a fél életemet a kísérletezéssel csak pár sikertelen nekifutás elkedvetlenített, de én is szeretnék már majd végre valami ilyesmit, mert a jóféle 1 csatornás labortápokat is súlyos tízezrekben mérik, én meg ha elkezdenék építeni tuti nem állnék meg a 3-5 csatorna alatt, mert sokszor jól jönne ha lenne mihez nyúlni...

Vannak kész buck-boost konverter kapcsolások, ezekből is vannak analóg és digitálisak is és nem is megfizethetetlen egyik sem - kérdés hogy a digit mennyire precízen szabályozható/szabályozza magát... Most ezzel szemezek - kiderítettem a gyártója elérhetőségét és próbálok utánajárni, hogy a kijelzője melletti Rx/Tx lábsoron nem vezérelhető e kívülről - ha még ezt is tudná, szuper lenne, de mondjuk pár-10 mA-es szabályzásra lehet nem képes, arra lehet valami kisebb cucc kellene...

Neked párszáz mA-hez valami jóval kisebb is elég - csak az ilyen boost meg buck-boost konvertereknél kérdéses hogy a kimenet mennyire stabil - ez csipp és kapcsolásfüggő is - szóval lehet kísérletezni is kell kicsit... Tele van az ebay ilyen cuccokkal, érdemes nézelődni kicsit!

(#2852) Teasüti válasza fpeter84 (#2848) üzenetére


Teasüti
nagyúr

Csodálkoztam is, hogy full fényerőn is működik gond nélkül.
Elvileg ilyenkor több mint kétszer annyit vesz fel, mint a limit az összes kimeneten.
Este megnézem lehalkított ledekkel, esetleg egy példát is. :R

(#2853) Dunczy


Dunczy
csendes tag

Üdv!
Szeretnék segítséget kérni. A problémám a következő: Adott egy általam már megírt egyszerű vezérlés, ami tartalmaz egy motor bekapcsolását és egy fűtőlap szabályozását egy ellenálláshőmérő értékei alapján. Hogyan tudnám ezt időzíteni úgy hogy bizonyos ideig fusson (1óra) majd írja ki hogy kész.

(#2854) Teasüti válasza Teasüti (#2852) üzenetére


Teasüti
nagyúr

Nem tudtam ma reprodukálni a soros kapcsolat szemetelését. :F

Viszont szabadna feltennem egy C-vel kapcsolatos kérdést?
Deklaráltam az alábbit:
int numPixels = 85;
byte buffer1[3*numPixels] = {}; //R, G, B csatornák ledenként
#define RED(x, i) x[i]
#define GREEN(x, i) x[i+1]
#define BLUE(x, i) x[i+2]

Majd:
RED(buffer1, i) = akármi;

A problémám az volna, hogy vmiért nem fut le a program az UNO-n, ha 85-nél többet adok meg a numPixels változóban. Ez arra enged következtetni, hogy a tömbbe nem tudok berakni 256-nál több elemet, ha jó a tippem.
Van erre vmi ötlet, hogy mi lehet a gond? :F
Vmi C fogyatékosság, amiről nem tudok?

[ Szerkesztve ]

(#2855) happy555 válasza Teasüti (#2854) üzenetére


happy555
aktív tag

A #define után két dolgot írhatsz :
1. mi helyett
2. mire cseréljen a program

A két dolgot egy szóközzel kell elválasztani egymástól. Több szóközt nem tartalmazhat!!

pl.
#define bekapcs digitalWrite(12,1);

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#2856) Teasüti válasza happy555 (#2855) üzenetére


Teasüti
nagyúr

Ezt konkrétan a zárójelben lévő vessző utáni szóközre érted?
Aha, köszi! :)

Rájöttem menet közben, teljesen máshol volt a bug.
Az egyik függvényben a számlálót bájtban deklaráltam, ami így nem tudta megcímezni a tömb elemeit 256 után. Marha... Csak két órát nézegettem a kódot ott, ahol nincs is hiba. :C

(#2857) tvamos válasza krisztianAMG (#2850) üzenetére


tvamos
nagyúr

Végy LED drivert. [link]

"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János

(#2858) gyapo11 válasza krisztianAMG (#2847) üzenetére


gyapo11
őstag

Folyamatos feszültséget pwm kimeneten lehet generálni (persze szűrni kell), ezt kell áttranszponálni 0-5 V-ról 0-tetszőlegesre. Műveleti erősítő, a pozitív bemenetre az arduino, a negatívra a kimenetről ellenállásokkal leosztott feszültség. Ilyenkor a max kimenő áramot a műveleti erősítő szabja meg, ha az egy 20 W-os ic, akkor 20 V-on 1 A-t tud.

menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet

(#2859) gyapo11 válasza krisztianAMG (#2850) üzenetére


gyapo11
őstag

szabályozható áramkorlátos tápot hogyan lehetne megvalósítani?

Ezt is műveleti erősítővel. A terhelés és a föld közé teszel egy ellenállást, ezen át fog folyni az áram, és esik rajta az áramnak megfelelő feszültség. Ez megy a műveleti erősítő pozitív bementére, a kívánt maximális áramnak megfelelő feszültség meg a negatív bemenetére. Ha az áram átlépi a beállított értéket, akkor a pozitív bemeneten magasabb lesz a feszültség, és a műveleti erősítő kimenete pozitív irányba mozdul, ezzel a jellel kell szabályozni a táp kimenő áramát. Kell a műveleti erősítőre negatív visszacsatolás is, hogy ne legyen túl durva a szabályzás.

menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet

(#2860) gyapo11 válasza Dunczy (#2853) üzenetére


gyapo11
őstag

Először elteszed az aktuális millis() értéket egy változóba:
elozo=millis()
Utána beteszel egy vizsgálatot a már megírt programod végére:
if (millis()-(60*60*1000) > elozo)
Ha ez igaz, akkor már eltelt egy óra, kiírod hogy kész, ha nem igaz, akkor még nem, mehet tovább a program.
Persze attól, hogy kiírt valamit a loop még fut tovább.

menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet

(#2861) krisztianAMG válasza tvamos (#2857) üzenetére


krisztianAMG
senior tag

tvamos: Köszi, jól néz ki!

gyapo11: Neked is köszönöm, ez is jó ötlet.

Azt még el tudná valaki nagyjából magyarázni, hogy hogyan lehet feszültséget szabályozni PWM jellel? Akár a linkelt LED drivernél? Az áramnál értem, hogy hogyan jön ki az effektív érték a zárt és a nyílt állapotok átlagából, de a feszültségnél ugyan ez már nem áll össze a fejemben. :B

(#2862) gyapo11 válasza krisztianAMG (#2861) üzenetére


gyapo11
őstag

A pwm kimenetre teszel egy r-c szűrőt, és lesz egy feszültséged. Ezt egy erősítőbe kötöd, ami valahányszoros feszültségerősítéssel és valamekkora maximális árammal terhelhető.
Vagy egy olyan tápegységbe, aminek a kimenő feszültségét egy potméter állítja be, ami egy állítható feszültséget küld az ic-be. Ehelyett a potméter helyett küldi a pwm a beállító feszültséget.

menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet

(#2863) krisztianAMG válasza gyapo11 (#2862) üzenetére


krisztianAMG
senior tag

Ezen látsz valami kivetnivalót? Ha nem, akkor ezt rendelem meg első körben.

Ha jól értem, akkor 12 és 24V közti táp kell neki, amit egyben az áramkör táplálásáért is felelős, és ezt a feszt szabályozza a kimeneten. Tehát a bemenet nem lehet alacsonyabb 12V-nál, de a kimenetet 0V-ig is le tudja szabályozni?

(#2864) fpeter84 válasza Teasüti (#2852) üzenetére


fpeter84
senior tag

Azért a tápot ugye nem I/O lábról adod a LED-nek, hanem az 5V feliratúról? Az összes kimenet limite az belső, az az I/O lábakra vonatkozik csak mint current sink/source, az 5V láb az más tészta

[link]

Ha csak az USB portról kapja a tápot, akkor annak az elméleti maximuma 500mA - vannak portok amelyek jóval kevesebbtől is kifekszenek, letiltanak, vannak amelyek a dupláját is ki tudják engedni magukon. Ez átmegy az F1 polyfuse "öngyógyuló" biztosítékon ami viszont szintén csak 0.5A, tehát ha a port többet is tudna, ez a biztosíték idővel akkor is leold - lehet pont ez történik, nagyon a határán billeg és épp csak villanásokra szaggat még amit a fedélzeti elkó kondik valamennyire még kisimítanak de anomáliákat okoz...

Alternatív tápolása, ha a DC csatiba beledugsz valami 1-2A terhelhetőségű 9-15V egyenáramú tápot. Ekkor a T1 P-csatornás MOSFET nyit, az USB 5V-ja leválasztódik, és az U1 NCP1117ST50 LDO adja az 5V ágra a kakaót, ami papíron 1A terhelhetőségű - ezt csökkentheti a magas VIN tápfesz, vagy az esetleges elégtelen hűtés miatti túlmelegedés.

Mindenesetre dugj rá külső tápot, akkor jóval nagyobb lesz a terhelhetősége. Hosszú távon, ennél több LED-hez viszont érdemes lesz egy pár A-es 5V-os tápot is beújítanod

(#2865) gyapo11 válasza krisztianAMG (#2863) üzenetére


gyapo11
őstag

Nem tudok erről a modulról semmit, úgyhogy fogalmam sincs, hogy lehet-e vezérelni feszültséggel.
Inkább a feladat felől kellene megközelíteni, és hátha nem túl nehéz tervezni olyan megoldást, ami megfelel az elvárásoknak és lehet vezérelni pwm kimenettel.
Programozható tápot írtál 100 mA kimenettel, ezt egy emitterkövető npn tranyó is tudja.
Az elv ilyen:

Az r1-c1 szűri a pwm jelet, az r4 és az r3+r6+ic osztja le a kimenő feszt. Az alsó ic az áramkorlát, az I bemenetére kell a kívánt áramnak megfelelő feszültség. Ahogy ezt túllépi, az ic2 kimenetén addig emelkedik a feszültség, amíg az ic1 negatív bemenete annyira emelkedik, hogy ezzel a megfelelő mértékig csökken a kimenő feszültség, és ezzel a kívánt mértékig csökken az áram.

menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet

(#2866) gyapo11


gyapo11
őstag

Van egy 200 ms-onként érkező impulzussorozat, amiknek a feldolgozása néhány programsor, tehát időben nagyon rövid. Arduinoval megszakítással akarnám megoldani, és két megszakítás között altatni a minél kevesebb fogyasztás érdekében. Hogyan kell ezt csinálni, van-e valakinek egyszerű példaprogramja erre? És ha leveszem a táp ledet, akkor alvás közben mennyit kajálhat mondjuk a pro mini, amin usb-serial ic sincs?

menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet

(#2867) zka67 válasza gyapo11 (#2866) üzenetére


zka67
őstag

Szia, nem bonyolult a megoldás, mindössze Power-Down módba kell kapcsolnod a procit. Ha lekapcsolod a watchdogot (vagy nem is engedélyezed), akkor ebben az üzemmódban kb. 0.2uA a chip fogyasztása. A chipet megszakítással lehet felébreszteni, szerintem neked a Pin Change Interrupt lesz a megfelelő. Ehhez a megfelelő IO pin konfigurációban a PCINT funkciót kell kiválasztanod, és engedélyezni a megfelelő regiszterben.

Szerintem ehhez nem nagyon találsz arduinos könyvtárat, magadnak kell megírni ezt a pár sort.

Nem bonyolult, de át kell nyálazni a proci leírását, hogy melyik regiszterbe mit kell beírnod. Atmel oldalán megtalálsz minden procihoz minden adatlapot.

(#2868) gyapo11 válasza zka67 (#2867) üzenetére


gyapo11
őstag

Az elég szimpi fogyasztás. Nem nagyon akarok kutakodni, meg processzor regisztereket tanulmányozni, azért nyomulok arduinoval és nem csupasz chippel. De ha látnék egy interruptos egyszerű programot, akkor könnyen módosíthatnám, gondolom.

menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet

(#2869) Gergosz2 válasza gyapo11 (#2868) üzenetére


Gergosz2
veterán

<avr/sleep.h>-nak érdemes utána olvasni, ott benne van minden. És igen tényleg elérhető elég kis fogyasztás, de érdemes ezt elolvasnod: [link].

Én személy szerint nem mentem el végletekig, az interfaceket lőttem le a timereket meg a ADC-t. Ez már levitte az áramfelvételt 30uA környékére ami 3,3V-on már elég kellemes volt. Én ezt egy Atmega168-cal csináltam.

Maga a az altatást végző függvény ez:

void sleepNow()
{
byte adcsra = ADCSRA;
delay(100);
//Mirf.powerDown();
ADCSRA = 0; //ADC kikapcsolása
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
attachInterrupt(0, wakeup_nrfl, LOW);
sleep_mode();
sleep_disable();
ADCSRA = adcsra;
detachInterrupt(0);
}

Ezt loopban rögtöm meghívom. A lényeg az, hogyha jön egy megszakítás, a program rögtön a sleep_disable(); parancsot hajtja végre, szóval ha elaltatod, akkor onnan folytatja. Azért is kell rögtön kikapcsolni, meg a megszakítást is addig kivenni. Utána megy tovább a loop-ban, amit még oda beraksz azt megcsinálja. Utána meg megint elalszik.

[ Szerkesztve ]

Nokia 6030 Hardcore User // I Panic Restaurant by Taito

(#2870) zka67 válasza gyapo11 (#2868) üzenetére


zka67
őstag

Gergosz2 válaszával és ezzel már szerintem elboldogulsz te is :)

[ Szerkesztve ]

(#2871) gyapo11 válasza Gergosz2 (#2869) üzenetére


gyapo11
őstag

Azon a linken nagyon lemennek bit szintre, meg a bootloadert is piszkálják.
A kis programrészlet nekem pont jó, csak működjön.

menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet

(#2872) gyapo11 válasza zka67 (#2870) üzenetére


gyapo11
őstag

Köszi, majd szükség esetén nézegetem.

menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet

(#2873) peter1998


peter1998
tag

Sziasztok ! Találkozott már valaki olyan problémával hogy a "digitalWrite(rele, HIGH);"-ra a relé nem kapcsolbe de LOW éretékre pedig bekapcsol.Tehát a LOW és a HIGH felcserélődött ? Az arduino-t a gép USB portjáról táplálom és a relé panelt pedig közvetlen az arduinoról. A kötés így néz ki [link]

(#2874) Teasüti válasza fpeter84 (#2864) üzenetére


Teasüti
nagyúr

5V pin-en van a ledsor, természetesen. Szóval 0,5A max. Az tetszik. A ledek elméletileg 480 mA-nél többet nem vesznek fel, de amúgy lecsavart fényerővel használom - különben kiégeti a szemem -, így elvileg nem kéne gondot okoznia. Úgy tudom az áramfelvétel arányos a (programozott) fényerővel.
Nem tudom miért szemetelt korábban, de holnap veszek egy 9V-os elemet az Uno-hoz. Azóta a monitorban csak nagyon ritkán fordul elő hiba, viszont a programfeltöltés gyakran hibával leáll, de második nekifutásra mindig jó.

(#2875) fpeter84 válasza Teasüti (#2874) üzenetére


fpeter84
senior tag

Az elhasznált töltések mennyisége valóban arányos, de a LED-ek az áramkorlátozásuknak megfelelő maximális áramot veszik fel impulzusokban! Tehát maximálisan a végsőkig feszítik az USB portból nyerhető, illetve a polyfuse által átereszthető áramot - a polyfuse mondjuk nem olyan nagyon gyors és precíz, tehát egy villanásnyi 0.51A nem fogja azonnal megszakítani, de ha kitartóan bombázod ezzel a határértékhez közel, akkor idővel elmelegedhet a belseje és szaggathat picit.

A 9V elem kevés lesz, hamar leszívja a LEDsor. Bármilyen 9-15V DC táp jó lesz hozzá, a legtöbb routerhez is ilyeneket osztogatnak de sok más műszaki cikk alól is ki lehet ilyesmit termelni, vagy boltban venni... Ha van egy asztali PC ATX tápod akkor abból is ki lehet nyerni a jól terhelhető 5/12V-ot...

(#2876) DrojDtroll


DrojDtroll
addikt

Egy ilyen enkódert, hogyan kössek be?

A 0v és gnd-s dolog zavar meg egy kicsit. Mindegy melyiket használom? Mindkettőt kell?

(#2877) Lompos48 válasza DrojDtroll (#2876) üzenetére


Lompos48
nagyúr

Csak akkor mindegy, ha össze vannak kötve. Az összes elektronikától függ, hogy az árnyékolás a nullára van/lesz kötve vagy nem. A kollektorba pedig egy olyan bemenetet kell kötni, ahol létezik felhúzó (pull up) ellenállás.

[ Szerkesztve ]

(#2878) DrojDtroll válasza Lompos48 (#2877) üzenetére


DrojDtroll
addikt

Multival leellenőrzöm holnap, hogy össze vannak-e kötve.

(#2879) DrojDtroll


DrojDtroll
addikt

Minden shield kitolja az arduino méretét valamelyik irányba? Meglepődve tapasztaltam, hogy nem pont felé esik az amit rendeltem.

(#2880) fpeter84 válasza DrojDtroll (#2879) üzenetére


fpeter84
senior tag

Abszolút random! A W5100 csippes LAN shield-em olyan aljzatot kapott, aminek a hosszú átmenő lábai egyben a csatlakozói is az alatta lévő shield felé - elegáns, de picit vékonyabbak azok a lábak a kelleténél és vigyázni kell főleg a tárolásnál mert könnyebben elhajolnak mint a tüskék. Van olyanom is 1-2 ami eltolva kapta a tüskesort, így bár kevésbé elegáns megoldás, de funkcióját tekintve tökéletes, tornyozható és erősek a tüskék. Viszont van nem is 1 olyan kínai shield-em ami tervezési hibásnak is tekinthető - a tüskék vagy kifelé vagy befelé esnek a felső foglalatsorhoz képest mind2 oldalon, így a tornyozhatóságot agyonverik, belőle felfelé már csak vezetékezni lehet...

(#2881) Teasüti válasza fpeter84 (#2875) üzenetére


Teasüti
nagyúr

Ohh erre nem is gondoltam, hogy PWM esetén áramból is a maximumot veszi fel. Akkor kár is fényerővel kalkulálnom, 60mA-rel kell méreteznem ledenként.
Adafruit Neopixel oldala szerint lehet számolni az átlaggal is, ha jól értelmeztem. :S
Már úton van egy 15A-es buck konverter, de az majd a járművön fog kelleni.

Veszek szerintem egy usb breakboard-ot, vagy mit, aztán addig usb töltőről fog üzemelni. :-)

(#2882) DrojDtroll válasza fpeter84 (#2880) üzenetére


DrojDtroll
addikt

Én úgy szívtam meg, hogy az egyik projekthez készítettem egy dobozt. Simán az uno nagyon szépen belemegy, de már a shield-el együtt túl széles.

(#2883) fpeter84 válasza Teasüti (#2881) üzenetére


fpeter84
senior tag

"USB breadboard" alatt nem tudom pontosan mit értesz - mindenesetre az ilyenek hasznosak, érdemes idővel felszerelkezni belőlük: 830p breadboard, tápmodul breadboardhoz, 12V/5A táp, 5.5 tápcsati Y splitter, 5.5 tápcsati bekötő stb stb

@ DrojDtroll

ismerős jelenség, párszor már én is belefutottam ilyenekbe hogy valamit jól elképzeltem előre, aztán a gyakorlatban rájöttem hogy de ott valami még plusszban kilóg, belóg, nem fére el úgy a csati ahogy elképzeltem, stb - eztért mostmár igyekszem minden előre beszerezni, lemérni, esetleg 3D studio-ban modellezni...

[ Szerkesztve ]

(#2884) fpeter84 válasza fpeter84 (#2883) üzenetére


fpeter84
senior tag

Azt elfelejtettem a tápmodulhoz leírni, hogy a rajta lévő USB alj az dísz! Nincsen semmi sehová bekötve rajta - van egy marék ilyen modulom több beszerzésből, ránézésre egyformák - úgyhogy tényleg nem értem minek teték rá a kínaiak :)) Szóval csak az 5.5-es DC tápcsatin lehet etetni... Az 5 és 3.3V ágakat is AMS1117-es fix feszstab adja, aminél a voltage input absolute max rating 15V - magyarán 12V fölé tényleg ne menjen ez se mert meg fog sülni idővel...

(#2885) Teasüti válasza fpeter84 (#2883) üzenetére


Teasüti
nagyúr

Usb kivezetés, breakout board. Mea culpa. :R
Bluetooth modulból melyik ajánlott?

Illetve most ismerkedek az I2C adatbusszal, ehhez van esetleg vkinek egy jól bevált interface-e, ami nem shield?
Fizikailag akár légszerelve is össze lehet drótozni több eszközt az SDA/SDC portokra?
Jah és a lényeg: a WS2812 ledek vezérlése és UART (bluetooth kommunikáció) + I2C (szenzor adatok) + interrupt mennyire mission impossible?
A kódot még összerakom vhogy, csak hogy működni is tud a dolog?
A megszakítást csak számlálóként használnám, az se életbevágó probléma, ha addig nem számol, amíg a ledekre ír a program - tekintve, hogy addig kilövi a led library a megszakítást.

A kacatokat köszönöm szépen, már megy is a kosárba! :R

[ Szerkesztve ]

(#2886) fpeter84 válasza Teasüti (#2885) üzenetére


fpeter84
senior tag

Kékfog: előszöris, mekkora hatótávra? Van a class 1 aminek az elméleti hatóköre 100m - gyakorlati tapasztalat alapján egy jóféle BTM-22x akár 2-300m-re is elvisz jó rálátással és alacsonyabb baudrate-el (4800-9600) - természetesen a másik oldalnak is hasonlóan táposnak kell lennie ehhez. Vagy az átlagos class 2, ami papíron 10m-t ígér - ez is sokszor elvisz több 10m-re is, leginkább az antennákon és a zavaró körülményeken múlik. Ha az autó környékére kell, akkor valószínűleg elég lesz egy olcsó class 2 is, feltéve hogy mondjuk nem az első lökhárító fémje alá elrejtett modullal akarsz adni a hátsó lökhárító alá elrejtett másiknak :)

A másik kérdés, hogy elég e a slave eszköz, elég e ha csak a nevét, PIN-t és baud-ot tudod állítani, vagy kell a master/slave váltás, több állítgathatóság. Slave akkor, ha a géped/telefonod/tableted csatlakozik hozzá, master akkor ha két ilyen modul képes egymás között egy transzparens csatornát felépíteni - a slave a szerver, és ahhoz csatlakozik a master kliens...

itt van egy jó összefoglaló és howto az ebay-en népszerű HC-05 és HC-06 modulokról, hogy melyik mit tud és hogyan éleszthető. Valójában csak firmware különbség van köztük, megfelelő külső író hardverrel akár a butább is felokosítható, csak nem biztos hogy megér annyi küzdelmet :)

I2C: ez így elég tág fogalom. Hőmérő, barométer, gyorsulásérzékelő, gyroszkóp, GPIO expander - millió féle hardver van hozzá. A legtöbb népszerű, modul formájában elérhetőhöz általában van kész arduino library, de ha tudni szeretnéd hogy valójában mi történik a színfalak mögött, akkor lehet a saját írás/olvasással is küzdeni...

A WS2812 amúgy is elég lassúcska (400Hz rémlik?), szerintem nem lesz vele gond. Ha meg esetleg váltasz WS2802-re az meg úgyis a hardveres SPI buszra kerül, ami a nagy tempó mellett (20-40MHz?) elég sokat levesz a hardver válláról, úgyhogy úgy is működhet. Ha mégis kevés, akkor ott a Due vagy valamelyik másik nagytesó. De arra hogy próbálgasd, tanulj, arra biztosan elég az Uno is...

(#2887) Teasüti válasza fpeter84 (#2886) üzenetére


Teasüti
nagyúr

A BT csak számítógépes kommunikációra kell, nincs szükség master/slave csatornára.
Class 2 is elég belőle. Szal HC 5 és 6 megfelelő... Tele van vele az ebay, akkor ez pipa. :R

I2C: első körben egy MPU 6050 gyro szenzor érdekel, de csak játszani. Ha működik a megszakítás (abs jeladót szeretném monitorozni), akkor nem lesz szükségem accelero-ra.

A lednél hogy érted azt, hogy az SPI levesz a hardver válláról?
WS2801 és 02 nem bit bang-gel működik?
Hmm, akkor talán utána kéne néznem az SPI-nek is, hogy miként lehet több eszközt használni róla.
Még az is lehet, hogy kevesebb porttal kijönnék 5 db ledszalag meghajtása esetén (mindegyik külön adattal természetesen). :F

WS2812-nél én úgy tudom a 400 hz a PWM frekvencia. A komminukáció 400/800 Khz-en zajlik.
A másiknál a 20 KHz is PWM frekvenciát jelent.

[ Szerkesztve ]

(#2888) fpeter84 válasza Teasüti (#2887) üzenetére


fpeter84
senior tag

Ha az ABS jeladóból jövő frekvenciát szeretnéd mérni, akkor arra nem is annyira a mezei megszakítások és timerek szoftveres lekezelését érdemes használni, hanem az Input Capture témára érdemes rákeresned! Ez ugyanaz csak hardverből: futtatja a timert, és ha esemény van a lábon akkor lemásolja a timer regisztereit és generál egy megszakítást > precízebb mérést ad, és ha valamelyik library letiltja a megszakításokat ideiglenesen akkor sincsen gond, legfeljebb majd a következő eseménynél kapod meg az eredményt, de nem lesz elszalasztott trigger mert a hardver addig is számolja...

MPU6050-el és sok mással küzdöttem már én is, jobbára kész lib-ekből indultam ki, a cél az egy 9DOF gyro és gyorsulásérzékelővel kompenzált iránytű lenne, de eddig nem találtam semmi valóban működőt - a borogatás, rázás előbb utóbb mindet megbolondította eddig sajnos, márpedig hajós környezetbe kellene ahol időnként kapná az áldást rendesen... Ettől függetlenül ha csak egyik másik érzékelő nyers értékeivel akarsz valamit számolgatni az működhet, csak erre az összetett, egymást kompenzáló 3x3 értékre nem találtam még kielégítő megoldást - pedig a telefonokban csak működik valahogy :U

Valóban, a WS2812 sem olyan lassú - annak a doksijában nem találtam ugyan a LED PWM órajelére utalást - de az adatokat picit zavarosan ugyan, de valóban valami 400-800kbps körüli ütemen várja, amit bitbang módon szoktak adni neki a lib-ek.

A WS2801 órajel+adat busza viszont teljesen megfelel az SPI hardver paraméterezhetőségének (max 25MHz-et ír a doksi, de úgy rémlik hogy RPi-s projektnél láttam 3xMHz-et is emlegetni), így meghajtható azzal is. Ha jól van megírva a lib - ami egyáltalán nem biztos - akkor amíg kiad a bufferből 1-1 byte-ot, addig a proci mással is tud foglalkozni. Bár a bitbang-et is elméletben meg lehetne oldani timerekkel és megszakításokkal nem blokkolósra, de tartok tőle ennyie nem foglalkoztak vele, így elég sok prociidőt elpazarolhat. De ugye ez is majd a gyakorlatban jól kiderül, hogy mit bír a vas...

Nekem is van egy hasonló félbemaradt projektem: a colorduino-t próbáltam másolni, csak nálam nem 8x8 hanem 2 modulból 16x8 RGB LED van. Idő híján erősen akadozik sok hasonló félkész projektem, de ha nagy lesz, valami ilyesmi lesz... Gondoltam én is arra is hogy akár WS2801/2812 LED sorral is meg lehetne oldani, de ezekből még nem vásároltam próbálgatásra...

[ Szerkesztve ]

(#2889) Teasüti válasza fpeter84 (#2888) üzenetére


Teasüti
nagyúr

MPU 6050-nél én pl abszolút nem értem hogy kéne értelmezni a 6 tengelyes mérés kimenetét 3 darab értékkel, amit ad a DMP. Ha ezt elhelyezem egy koordinátarendszerben, akkor is csak egy vektort kapok 3 dimenzióban.
Amúgy nem értem miért jó a gyártónak a "discouragement policy", hogy nincs rendesen dokumentálva a DMP. :U
De mindegy is, nekem elég 1D a jármű gyorsulására, lassulására. Ezt váltaná ki az abs jeladó.
Lehetne vacakolni még dőlésszögekkel (motorról lesz szó amúgy), de nem én fogom újrafeltalálni az egykerekezés gátlót, vagy kanyar abs-t.

Hardveresen lehet számolni mindkét megszakitót egymástól függetlenül?

SPI-nél akkor elméletileg nincs delay()?

I2C:
több eszköz összedrótozása akkor nem probléma?
Egy SI1145 fényérzékelőt viszont be szeretnék vetni. :)

Az az asztal nagyon beteg!! :Y
A hangot is a mikrokontroller dolgozza fel, vagy stream-elik az adatokat pc-ről?
Szeretnék hangérzékeny effekteket is majd. :B

[ Szerkesztve ]

(#2890) fpeter84 válasza Teasüti (#2889) üzenetére


fpeter84
senior tag

Azért van "6 tengely", mert ez egyszerre gyro + gyorsulásérzékelő. Természetesen ezek a 3 dimenziót írják le, csak a gyorsulásérzékelő a tengelyeivel párhuzamos elmozdulásokat mutatja ki, a gyro pedig a tengelyei menti elfordulás gyorsulását. Ha bekerül a képbe még egy digit iránytű is, akkor emlegetik 9DOF-nak, esetleg vannak még a 10DOF modulok ahol egy légnyomásmérő is van, amivel a tengerszint feletti magasságot lehet megállapítani. Az iránytű azért nem elegendő önmagában, mert elmozdulhat. Amíg tökéltesen vízszintesen nyugalomban van, addig elvileg elég lenne egyetlen, a függőleges tengelyéről leolvasott adat. Viszont ha megmozdítod, akkor tudnod kell hogy merre van a le/fel - erre használják a gyorsulásérzékelőt: a gravitációs lefelé mutató 1g megmondja merre van a lefelé. Viszont ez még szintén nem elég a teljes képhez, tudni kell azt is amikor éppen valamelyik tengelye körül fordul, erre van ugye a gyro. A végén elméletben a 9 nyers adatból ki lehet matekozni egy szöget, égtájat ami maga az iránytű már...

Input Capture: az Uno-n lévő Atmega328-on egyetlen ICP láb van csak, így legfeljebb mux útján lehetne több forrást mérni...

SPI: delay valami van, de azt inkább a szoftveres feldolgozásod fogja okozni, mint a buszrendszer késlekedése

I2C: vannak valamiféle elméleti korlátai, de gyakorlatban akárhány eszközt felfűzhetsz egyetlen drótra. Próbálgattam, és akár a csillagpont közepén lévő uC körül 30m-es UTP kábelek végén is simán tudtam olvasni 4-5 forrást hiba nélkül. Rövidebb vezetékkel max az I2C címek száma és maga az adatátviteli tempó limitál...

LED asztal: tömörítetlen wav-ot játszattam már le PIC PWM-jével SD kártyáról és egészen tűrhetően szólt - nyilván nem zenei minőség, de az emberi beszéd szép tiszta érthető volt, szóval akár ez se tűnik lehetetlennek, de bejövő hang feldolgozásával, elemzésével még sosem foglalkoztam. Elsősorban engem azok a videók fogtak meg, ahol egy kontrollerrel pl tetrist játszottak rajta :)

(#2891) tvamos válasza fpeter84 (#2890) üzenetére


tvamos
nagyúr

A gyorsulás, az nem elmozdulás. (Ez azért fontos, mert az egyenes vonalú, egyemletes mozgást a 6 tengelyes sem érzékeli.)

"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János

(#2892) fpeter84 válasza tvamos (#2891) üzenetére


fpeter84
senior tag

igaz, fogalmazási hiba :R de az egyenes vonalú egyenletes mozgás nem is befolyásolja az iránytűt, nem szükséges adat hozzá

(#2893) Teasüti


Teasüti
nagyúr

Uhm, hol a probléma itt???
uint16_t = byte * 255 / int
Hibás eredményt kapok, még a long is átfordul tőle. :Y
Kikisérleteztem, hogy a byte-ot legfeljebb 128-al szorozhatom, különben hibázik. Ebből nekem nem esik le a tantusz, szóval van vkinek vmi tippje?
Köszönöm! :R

(#2894) razorbenke92 válasza Teasüti (#2893) üzenetére

Valószínűleg azért van, amiért C-szerű nyelveken a
double = int / int
is hibázik.
uint16_t = (int)byte * 255 / int
egyel jobb lesz, de ez még mindig csak a pontatlan egészrészt adja, gondolom arra számítottál.

Mások számára a kondi fáradós, nekem farad-os...

(#2895) tvamos válasza Teasüti (#2893) üzenetére


tvamos
nagyúr

-

[ Szerkesztve ]

"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János

(#2896) hermit


hermit
tag

Sziasztok,

egy Arduino mega, ethernet shield, lcd es rtc fizikailag osszekotheto egyszerre?
Az etherneten tartana a kapcsolatot a kulvilaggal, az lcd-n lehetne latni hogy "el", az rtc pedig az idot/datumot orizne, ha eppen nincs ethernet.
Ezen kivul lenne meg 1 bemenete es 4-6 kimenete.

(#2897) zka67 válasza hermit (#2896) üzenetére


zka67
őstag

Szia, a mai világban, ha nincs internet, az idő az ami legkevésbé érdekli az embereket...

(#2898) fpeter84 válasza hermit (#2896) üzenetére


fpeter84
senior tag

Semmi megvalósíthatatlan nincsen benne, csak arra figyelj hogy csak olyan lábra kösd az RTC és LCD-t amit nem használ az ethernet shield. Utóbbi SPI-s, de van még pár segéd láb is. Az RTC valszeg I2C lesz (bár van belső RTC is a Mega2560-ban, de sajnos az Arduino-ról lespórolták a hozzá szükséges másodlagos kvarcot, helye sincsen a nyákon), és egy karakteres LCD is mehet szintén az I2C-re, ha elég a tudása, nem akarsz grafikusat...

(#2899) Teasüti válasza razorbenke92 (#2894) üzenetére


Teasüti
nagyúr

Az a gond, hogy a byte az kellene a képletbe, mert nem deklarálhatom másként. Vagy erőforráspazarló módon át kéne másolnom másik változóba? Az egészrésznél nem is kell több. Sőt, az eredmény is elférne egy byte-ban, mert az osztó mindig nagyobb 255-nél.

Amúgy mit jelent, amit írtál? :B
Ez az (int)byte?

Köszi! :R

(#2900) fpeter84 válasza Teasüti (#2899) üzenetére


fpeter84
senior tag

A byte típusú változót kezelje ezalkalommal úgy mintha int lenne. Ez olyan esetekben praktikus, amikor pl egy egész számot akarsz osztani, és a végeredmény float lenne, pl x = (float)y/z - ekkor az y bár egész, de az x-be szép float fog kerülni, nem kerekítet szétvagdalt eredmény. Mi az, ami csak byte-ot kaphat? Lehet ott is működne ez a trükk csak fordítva: (byte)int - csak azt nem tudom, hogy mi van akkor ha az int változóban nagyobb érték van mint 255? Kékhalál arduino módra? :)

Copyright © 2000-2024 PROHARDVER Informatikai Kft.