- Xiaomi 14T Pro - teljes a család?
- Megvan, milyen chipet használ a Pura 80 Ultra
- Motorola Edge 40 - jó bőr
- Érintésnélküli fizetési megoldások - PayPass via NFC
- Xiaomi 13 - felnőni nehéz
- További kavarás a Pixel 10-ek körül
- Samsung Galaxy S21 és S21+ - húszra akartak lapot húzni
- Milyen okostelefont vegyek?
- Macrodroid
- Nokia 8 Sirocco - tudja, honnan fúj a szél
-
Mobilarena
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.
Új hozzászólás Aktív témák
-
zka67
őstag
válasz
Pubszon #2317 üzenetére
Szia, ennek valójában már nem sok köze van az ENC28J60-hoz, ez már inkább a html programozás kategóriába tartozik. De röviden, csinálsz egy formot GET küldéssel, majd a fogadott adatokból kihámozod a GET paramétereit. Nem tudom milyen library-t használsz, de pár hsz-szel korábban említettem egy nagyon jó könyvtárat, amivel tudsz multipackettet is küldeni. Előbb-utóbb kevés lesz az egy buffernyi méretű oldalad...
-
zka67
őstag
válasz
gyapo11 #2258 üzenetére
Szia, majdnem. Addig jó, hogy ha bekapcsolod, akkor egy default idővel töröl.
Mindig az utolsó törléstől méri az időt.
Ha a következő törlés előtt kikapcsolod, majd később visszakapcsolod, akkor az előző törlés és a visszakapcsolás közti idővel fog törölni. Túl hosszú időt nem lehet vele beállítani, akkor visszaáll a default időre, de szerintem percenkénti törlést nincs is értelme beállítani, akkor csak megpöccintem a kart és töröl egyet.
-
zka67
őstag
válasz
gyapo11 #2249 üzenetére
Szia, a változtatás is ugyan úgy megy, mint ahogy leírtam. A törlés után kikapcsolod a szakaszos törlést, és amikor úgy látod, hogy most már törölnie kell, akkor visszakapcsolod, és ebben az ütemben folytatja. A visszajelzés te magad vagy: kicsit esik az eső, bekapcsolod a szakaszos törlést, aztán ki is kapcsolod, majd a törlés után, amikor úgy látod, hogy most már törölhetne, akkor visszakapcsolod és úgy hagyod, és megjegyezte az ütemet. Ha gyorsítani vagy lassítani akarod, akkor is ugyan ez a teendő. Pl. gyorsítani akarod, akkor látod, hogy már törölhetne, akkor csak ki és be kell kapcsolnod, mert az utolsó törléstől eltelt időt méri. Ha lassítani akarod, akkor kikapcsolod, és ha elég eső esett, akkor kapcsolod vissza. Remélem érthető vagyok
Én nagyon szeretem, sokkal jobb, mint a 2 fokozatú vagy potival állítható törlők, mert nem időt kell beállítanod, hanem az eső mértékéhez tudod igazítani a sebességet.
-
zka67
őstag
válasz
gyapo11 #2244 üzenetére
Szia, a mikrokontrollerek baromi érzékenyek a külső zavarokra. Gondolok itt elsősorban az autó gyújtótrafójára. Ha nincs megfelelően leárnyékolva és a táp megszűrve, akkor felejtsd el, hogy megbízhatóan fog működni.
Az ablaktörlőre szerintem a ford fiestában kitalálták a tökéletes megoldást: úgy működik, hogy bekapcsolod a szakaszos törlést, majd ki is kapcsolod. Utána amikor úgy látod, hogy törölni kell, akkor ismét bekapcsolod és megjegyezte az időt, ezután ebben az ütemben fog törölni.
-
zka67
őstag
Szia, igen, én is találkoztam ezzel a hibával, bár nem arduinon, hanem ARM uC-n, de a lényegen ez nem változtat, mert u.a. a könyvtárat írtam át az ARM-ra. Néha hülyeségeket küldözget a hálózatra, és aztán le is áll az ethernet vezérlő. Nem volt idegrendszerem hozzá, hogy megkeressem benne a hibát.
A megoldásom az volt, hogy kerestem egy másik könyvtárat, átírtam és azt használom, azzal abszolút nincs semmi gondom. Itt az eredeti arduinos könyvtár, kicsit másképp működik, de jóval egyszerűbb.
-
zka67
őstag
válasz
dave0825 #2117 üzenetére
Szia, ez alapján szerintem el lehet indulni.
Ebből neked csak a rajz bal oldala kell az órajel generátor nélkül. Mivel az ardiunonak ha jól tudom, csak 6 ADC bemenete van, ezért szükséged lesz neked is analóg kapcsolókra, mert itt tíz jelet kell feldolgoznod. Szerintem jobban jársz, ha CD4051-es IC-t használsz (2db-ot, filléress cucc), mert akkor összesen 3 kimenetre lesz szükséged a bemenet kiválasztásához, és 2 ADC bemenetre.
A frekvenciák: 32Hz, 64Hz, 125Hz, 250Hz, 500Hz, 1kHz, 2kHz, 4kHz, 8kHz és 16kHz, fentől lefele.
Szerintem nyugodtan nekiállhatsz egy-két csatornával kísérletezni (pl. a 125Hz és 1kHz).
Ráteszel 1db CD4051-et, hogy a bemenetek választását is ki tudd próbálni.
Soros porton pedig kiíratod az aktuális értékeket. -
zka67
őstag
válasz
dave0825 #2111 üzenetére
Szia, először is nem poén volt, hanem ha jobban megnézed a videót, a középső zöld ledek egyáltalán nem világítanak. A linkelt videódon én nem látom, hogy arduinot használnának.
De:
Nagyjából erről beszéltem, amit itt az Adafruit_NeoPixel.cpp-ben találsz
Szerintem ha már kigondoltad, csináld is meg, ne add fel!
A sávszűrők alkatrészköltsége kevesebb, mint 500 Ft.
Ha hobbiból csinálod, munkaidő költsége 0 Ft.
Tapasztalatszerzés: felbecsülhetetlen érték! -
zka67
őstag
válasz
dave0825 #2102 üzenetére
Szia,
Akkor azt hogy csinálja, hogy 1:24-nél a középső 6 ledet kikapcsolja?
Úgy, hogy a középső zöld ledek rosszak, egyáltalán nem világítanak
A WS2812B-vel meg lehet csinálni, de ehhez kevés lesz a digitalWrite az arduinon, itt már assembly szinten kell majd programoznod a chip időzítései miatt.
Az EQ-t én úgy csinálnám meg, hogy csinálnék egy 7 vagy akárhány sávos sávszűrőket, analóg módon, ellenállásokkal, kondikkal és LM324-el vagy hasonló IC-vel. Az IC kimenetére tennék egy diódát és egy kondi+ellenállást, ez tárolná az aktuális hangerőt azon a sávon. Aztán mehet az ADC-be.
Ha viszont kevés lenne az arduino a feladathoz (itt a led szalagok frissítésére gondolok, az időzítésekre, mert elég precíz időzítést igényel az IC), akkor én azt javasolnám neked, hogy mozdulj inkább az ARM procik irányába. Kezdésnek szerintem ezt választhatnád: ARM Cortex-M0 Core Module LPC1114 Development
Ehhez van Keil IDE, full szoftveres debug (azaz nem is kell hozzá az áramkör), simán le tudod tölteni a programot soros porton keresztül, nincs vacakolás, hogy van-e rajta bootloader vagy milyen verziójú van, mert benne van a chip-ben. Az IC ugyan 3.3V-ról jár, de az összes IO lába 5V toleráns, azaz nem kell az 5V-os cuccokhoz se level shifter. 48MHz-es, Cortex-M0 mag van benne, ami jelen esetben lényegtelen, tanulni, gyakorolni szerintem nagyon jó.
Ha érdekel a dolog, szívesen segítek benne, mind szoftveresen, mind hardveresen.
Sőt, van is egy ilyen modulom, ha érdekel, eladó, kb. 200x volt írva a proci. (10000-t simán kibír) -
zka67
őstag
válasz
dave0825 #2068 üzenetére
Szia, a kijelző és a lábai kb 11mm magasak. Maga a nyák és az ic kb 4mm magasak együtt. (Az ic a kijelző alatt van, annak a magassága 2.5mm, azt ne számold bele az össz magasságba.
Ne legyél tanácstalan, rendelj 5db IC-t, 5db DIY kitet, és rendeld meg az 5db-os összeszereltet is
Keress az eBay-en olcsóbb DIY-t, rengeteg 2db-os aukciós van, le kell csapni rájuk az utolsó pillanatban. -
zka67
őstag
válasz
dave0825 #2066 üzenetére
Szia, megrendelheted ám az SMD-set is, (én inkább DIY-t rendelnék belőle), mert ehhez már van nyák, csak a ledeket kell beledrótoznod majd. Azt nézd meg, hogy hogyan férne el két darab ezekből az órádban. A mátrix helyére egyszerűen az óra ledjeit kötöd be. Remélem érted, hogy mi akarok mondani (magyarul nem kell külön a nyákkal bíbelődnöd).
Szerk: egyénként az IC árustól én is szoktam rendelni, megbízható eladó
-
zka67
őstag
válasz
peter1998 #2048 üzenetére
Szia, Tápegységáruház
23.-án délig vannak nyitva, legközelebb csak január 6. után lesznek.
-
zka67
őstag
válasz
gyapo11 #2035 üzenetére
Szia, kezdünk átmenni a hobbielektronika topikba való témákra...
Ja, a sima 5050-es RGB led eBay-en 20Ft, a WS2812B meg 37Ft/db 100db esetén. Csak nem mindegy, hogy pl. egy jégcsapnál ott van 8-10 db led, mögötte meg egy számítógép hatalmas hűtőbordával és azok lógnak a fán, vagy csak a ledek egy 6 lábú mikrokontrollerrel, ami egyáltalán nem is észrevehető, akkora. (Most egy kicsit túloztam, de a dolog lényegét próbáltam meg érzékeltetni).
-
zka67
őstag
válasz
dave0825 #2025 üzenetére
Szia, én mindenképp a legkisebb méretű uC-t választanám, pl. ezt:
ATTINY10-TSHR vagy ezt
ATTINY13A-SUCsak egy kimenetre van szükség, azt kell megfelelő időzítéssel röcögtetni (4/8 órajelenként változtatni a kimenetet). Van benne 32/64 bájt ram, az bőven elég a ledek aktuális szín értékeinek tárolására, 1k flash meg a programnak is 3x sok.
-
zka67
őstag
válasz
dave0825 #2021 üzenetére
Szia, így értettem a filléres cuccot, de most már emlékszem hogy ez nem játszik nálad.
Egyébként ahhoz képest, hogy RGB és true color, nem is drága. Szerintem a bolti jégcsap csak egyszínű lehet...
A fantáziámat különben beindítottad, én úgy csinálnám meg a jégcsapokat, hogy tennék rá egy icipici kis mikrokontrollert, és az vezérelné egy előre megírt vagy random program alapján a jégcsapok növekedését és színét. Így csak a tápot kellene elvinni a jégcsapig, és mindegyik mást mást csinálna.
Na mindegy, jövő karácsonyig ráérsz újat fejleszteni
-
zka67
őstag
válasz
dave0825 #2008 üzenetére
Szia, közben megtaláltam a jégcsapodat
WS2812B-nek hívják, ez egy RGB led és egy bele integrált IC. Összesen 3 vezeték kell hozzá, GND, +5V és az adat, hogy vezérelni tudd. Sorba lehet kötni őket az adatvonalukon. Filléres cucc.
Így még a jégcsap színét is tudod változtatni, nem csak a méretét
Szerk: Ja és true color
-
zka67
őstag
válasz
gyapo11 #2009 üzenetére
Szia, bocs, hogy beleszólok, de már nagyon régen feltalálták a MOSFET-eket
Én kapcsolgatásra csak ezeket használom, 500mA-ig BSS170-eseket, filléres cuccok. Ha kell valakinek több ezer darab BC337, mondjuk 5 Ft/db áron, akkor szóljonSzerintem félnek az emberek a MOSFET szó hallatán, mert nem tudják, hogy mi az, mire jó, hogyan kell vezérelni, pedig jóval egyszerűbb, mint egy tranzisztort.
-
zka67
őstag
válasz
dave0825 #2006 üzenetére
Szia, az adatlapját le tudod tölteni, pl az alldatasheet.com-ról. A vezérlése nagyon egyszerű, az egyik lábon küldöd neki az órajelet, a másikon meg az adatot, oszt ennyi. 16 bitet kell kiküldeni egy sorhoz, ebből 4 bit nem használt, 4 bit a regiszter címe, 8 pedig az adat. A regiszterek között vannak sorcímek és vezérlő regiszterek, pl a fényerő meg egyebek.
Miért nem csinálod meg úgy, hogy a jégcsap mögé beteszed az IC-t is, és akkor csak néhány vezetéket kell elvinned?
-
zka67
őstag
válasz
dave0825 #2000 üzenetére
Szia, igaz magyarországon drágább mint az arany, de szerintem ez a legegyszerűbb megoldás:
MAX7219CNG+ Driver; display controller; Common Cathode; DIP24
Egyszerű vezérelni, be lehet állítani a max fényerőt, és azon belül programból tudod állítani is. Nem kellenek ellenállások a ledekhez, simán mátrixba kötöd, ráaggatod az ic lábaira, aztán szoftver és működik.
Szerk: közben találtam olcsóbban, ehhez adnak nyákot és egy 8x8-as (gondolom piros) kijelzőt, amit vagy elhasználsz ,vagy majd jó lesz valamire:
-
zka67
őstag
válasz
DrojDtroll #1953 üzenetére
Vagy optocsatolóval + fet-tel, tranzisztorral. (Pl. PC817 + BSS170, vagy PC817 + BC337)
Használhatsz logikai kimenetes optocsatolót is, pl H11L1-et, ennek 5V táp kell a vevő oldalról, és TTL kimenetet ad, utána ott már azt kapcsolsz vele, amit akarsz. -
zka67
őstag
Szia, te nem olvasol, csak írsz?
-
zka67
őstag
Srácok, igaza van tvamos-nak, ide soros vonal kell, mégpedig RS485-ös adó-vevőkkel, különben nem fog működni a rendszer. Egy I2C buszt nem lehet elvinni még 2 méterre sem, soros vonalat árnyékolt vezetékkel talán 15m-re alacsony sebességgel. RS485-öt meg csavart érpáron (UTP vezetéken) akár 1200m-re is (nekem egy ipari parkban működik 80 darab kártyaolvasóm ezzel a megoldással).
Továbbá figyelembe kell venni azt is, hogy mit használtok kapcsolónak? Relét? Szerintem marhaság, egyrészt drága, másrészt meg sok a gond vele, néha több kárt csinál mint hasznot. Én MOSFET-et használnék, ha a kapcsolt áramköröknek nem kell összekötve lennie a GND pontjuknak. (Egy relé árából veszek tíz mosfetet).
Én úgy csinálnám meg a rendszert, hogy - ha már ardunionál kötöttetek ki - vennék egy vezérlő adruinot, aminek a soros port kimenetére tennék egy 75176-os IC-t adó üzemmódban, majd UTP-n sorba felfüznék rá annyi aurduinot, amennyi szükséges. Ezeknek a soros port bemenetükre tennék szintén 75176-os IC-ket vevő üzemmódban. Minden egyes vevő arduinonak adnék egy báziscímet és kész is a protokoll.
Ha be akarok kapcsolni egy kimenetet, akkor kiküldöm a kapcsolni kívánt port címét, 0-127 között, valamint a 7-es bitet 1-be kapcsolom, ha ki akarom kapcsolni, akkor pedig a 7-es bitet nullába kapcsolom. Ha a cím az adott arduino tartományába esik, akkor feldolgozza a parancsot, ha nem, akkor figyelmen kívül hagyja.
Ezzel ki lehet védeni azt is, hogy esetleg gyorsan ki-be kapcsolgathassa az adott portot (vannak olyan áramkörök, amik nem igazán szeretik ezt). Pl. ha ki van kapcsolva a port és bekapcsolás parancs jön, akkor bekapcsolja. De pl. ha 5 mp-en belül kikapcsolás parancs jön, akkor azt eltárolja, de nem kapcsolja ki azonnal a portot. Ha közben ismét bekapcsolás parancs jön, akkor marad bekapcsolva a port, különben 5 mp múlva kikapcsolja.
-
zka67
őstag
Szia, a működése: a prev változó tárolja a nyomógomb előző állapotát, a state a kimenet aktuális állapotát.
Utána egy végtelen ciklusban beolvassa a curr változóba a nyomógomb aktuális állapotát, majd megnézi, hogy a nyomógomb most le van-e nyomva és az előző állapotban nem volt-e lenyomva, azaz most került-e lenyomásra. Ha igen, megváltoztatja a kimenet állapotát és kiírja azt a portra. A végén minden esetben átkerül az előző állapotba a nyomógomb aktuális állapota, és vár 100ms-et a nyomógomb prell elkerülésére.NYOMÓGOMB ___ _________ _____ ______
\____/ \/\______/ \_/
LED ______________ _______
___/ \______________/
MINTAVÉTEL | | | | | | | | | | | | | | |Szerk: lásd gyapo11 válaszát is
-
zka67
őstag
válasz
Pubszon #1803 üzenetére
Szia, próbáld meg így:
void setup()
{
pinMode(DS_pin, OUTPUT);
pinMode(STCP_pin, OUTPUT);
pinMode(SHCP_pin, OUTPUT);
digitalWrite(STCP_pin, LOW);
digitalWrite(SHCP_pin, LOW);
}
...
void writereg()
{
digitalWrite(STCP_pin, LOW);
digitalWrite(SHCP_pin, LOW);
for (int i = shiftoutput; i >= 0; i--)
{
digitalWrite(DS_pin, registers[i] );
digitalWrite(SHCP_pin, HIGH);
digitalWrite(SHCP_pin, LOW);
}
digitalWrite(STCP_pin, HIGH);
digitalWrite(STCP_pin, LOW);
} -
zka67
őstag
válasz
dave0825 #1775 üzenetére
Márpedig ha nem tudjuk, hogy milyen kódot kap, akkor elég nehezen fogunk rájönni a hiba okára. De van egy sejtésem: szerintem az utoljára vett kódot küldi vissza néha valamiért a library, egy OK-val. Próbáld meg törölni a result.value értékét miután kiolvastad, ha jó volt a kód, ha nem. Így nem marad benne véletlenül sem.
-
zka67
őstag
válasz
dave0825 #1747 üzenetére
Szia, pont erről beszélgettünk a minap egy Új-Zélandi barátommal, aki ezt írta: Mains + relays + microcontrollers are not easy bedfellows. ami magyarul: A hálózati feszültséget, reléket és mikrokontrollereket nem egyszerű egymással összehozni.
Az egyenáramú relékben a tekercs eltárolja az energia egy részét, ami a meghúzásához kell. Amikor megszakítod a tekercs tápját, az visszaadja a benne levő energiát, azaz "visszarúg". Ezt egy párhuzamosan kötött diódával szokták kivédeni, pl. így: [link]
A mikrokontrollerek érzékenyek a tápfesz ingadozásra, amit kiválthat pl. egy relé meghúzásakor fellépő áramlökés, ill. az elengedésekor keletkező túlfeszültség. Továbbá a relék lábai elég közel vannak egymáshoz, a 220V-ot illik megfelelő távolságban elvinni a tekercset meghajtó vezetékektől.
Szóval a mikrokontrollerek tápját illik megszűrni egy tekercs-kondi kombinációval, amit már te is csináltál. Filléres alkatrészek, mégis szinte minden amatőr kispórolja ezeket az alkatrészeket.
Viszont nálad ennek ellenére szerintem más lesz a gond. Az arduino library-k sem tökéletesek. Én az infra vevőkhöz csináltam egy kis áramkört, egy olcsó atmel mikrokontrollerrel, az soros vonalon kiköpi nekem a kódot, vagy azt, hogy "REPEAT", ha nyomva tartod a gombot, és nem kell foglalkozom vele a továbbiakban, hogy hogyan és miért működik egy infra vevő. Mert működik, nem téveszt, én írtam a programját.
-
zka67
őstag
válasz
gyapo11 #1724 üzenetére
Viszont óvatosan kell bánni az olcsó kínai cuccokkal, mert szerintem elég sok selejtes alkatrészt árulnak. Értem ezalatt, hogy a nem tudják a gyártó által specifikált értékeket. Vettem például DS1307-es RTC chipeket, amik napi 20-30mp-et késnek/sietnek, tápot adva rájuk nem állnak be alapértékre, hanem random időről kezdik a futást. Igaz, fillérekért adták, de külső kondival kellett kalibrálnom őket egyesével, ami a munkaidőt tekintve jóval többre jött ki, mint ha megvettem volna a normális chipeket.
-
zka67
őstag
válasz
dave0825 #1641 üzenetére
A led-ek világítása ezek szerint mégiscsak szoftveres probléma lesz...
Nézd meg a mátrixban, hogy melyik ledek világítanak halványan. Szerintem ilyesmi mintázatot fogsz kapni, ahol a . nem világít, O teljes fénnyel világít, x halványan világít:
123456
1 ..O.xO
2 O.x..x
3 x.....
4 ..OO..
5 ..xxO.azaz a következő sorban is világítanak halványan azok a ledek, amik az előzőben be voltak kapcsolva, vagy fordítva.
Az "elveszik az áram a vastagabb vezetékben" mondatodon én is hatalmasat röhögtem
-
zka67
őstag
válasz
dave0825 #1636 üzenetére
Szia, ugye te is azt látod, amit én: 4.93V+0.07V=5.00V.
Akkor az ardu tápján hogy lehet még egy tized volttal kevesebb, ha a 4.93V-ot vezetékkel kötötted rá?
Cseréld ki a GND és a táp vezetékeit vastagabbra, legalább 0.5mm2-esekre. Pl. a riasztós kábelekben találsz a vékony vezetékek mellett egy piros és egy fekete vastagabbat, na olyasmire.Előtte azért kíváncsiságból megmérhetnéd a kondi és az ardu VCC és a kond és az ardu GND közötti vezetékeken mekkora fesz esik. Ha 0V-nál többet mérsz, cseréld a vezetéket.
-
zka67
őstag
válasz
dave0825 #1626 üzenetére
Szia, ha a buck kimenetén 5V van, és a tekercsen át a VCC-re kötötted, a tekercsen esik 0.07V, akkor nem lehet a stab ic lábán 0.2V-al kevesebb.
Mérd végig a vezetékeket, hogy hol tűnik el az a két tized volt. Először a buck kimenet és a stab ic lába között mérd meg. Ha itt több van, mint a tekercsen eső feszültség, akkor szerintem valamit elkötöttél.
Menj végig a vezetéken, a buck kimenetére tedd a műszer egyik pontját, és a műszer másik pontjával haladj végig a vezetékeken a tekercsig. Írd le, hogy melyik vezeték hova megy és hány volt esik rajta. Ezután a műszer másik pontját tedd át a tekercs másik végére, azt is írd fel. Mérd meg, hogy a tekercs e pontja és a stab ic között mennyit mérsz.
Esetleg kösd át így a vezetékeket:
BUCK
+5V-----o-------------LED MODUL TÁP----
| |
) |
) |
) |
| |
o----ARDU VCC-- LED MODUL
| | |
=== ARDU |
--- NYÁK |
| ARDU GND| |
BUCK----o-------------o---------------o
GND LED MODUL
GNDA lényeg az lenne, hogy a buck-ról minél közelebbről kapja az ardu a tápot, míg a ledek mehetnek hosszabb vezetékkel is. Elkötés lesz ez... vagy annyira vékony vezetéket használtál, hogy olyan nincs is. 30mA-nél nem eshet két tized volt egy vezetéken, ilyen nincs.
-
zka67
őstag
válasz
dave0825 #1588 üzenetére
Szia, ezt nem értem, hogyhogy nincs meg az 5V egy 5V-os tápról? A buck-ról mennyi jön le? Mennyi esik a tekercsen? Mekkora áram folyik át a tekercsen?
Ha a buck-ról 5V jön le, néhány mA-t fogyaszt a nanod infrástól mindenestől együtt, akkor nem eshet két tized volt a tekercsen. Hacsak tényleg nem nyírtad ki a nano prociját. Ezt különben kézzel is meg tudod nézni, ha tűzforró a proci, akkor bizony zárlatot csináltál valamelyik lábán egyszer, az kipurcant, és ezért zabálja az áramot. Ha nem, akkor majd keressük tovább a hibát, de mindenesetre ez így még biztosan nem jó.
-
zka67
őstag
válasz
dave0825 #1584 üzenetére
Igen, erre gondoltam. Nem ártana, ha itt 5V lenne...
Nem a nanoval lesz itt gond, hanem a táppal. A ledek világíthatnak ettől, hogy a PNP tranzisztorok 5V-ot kapnak, viszont a bázisukra már csak 4.4V jut, azaz kinyitnak egy picit.Kösd át így a tápot:
BUCK->LED->Induktivitás->Nano VCC(plusz innen a földre a kondi).
Ha meg van az 5V a stab IC jelölt lábain, akkor a proci is megkapja az 5V-ot, meg az infra is, ezeknek már működniük kell rendesen. Ha még mindig világítani fog halványan néhány led, az már programhiba lesz. Nem emlékszem pontosan a programodra, de mielőtt sort váltasz, kapcsold ki az aktív sort, írd be az új oszlop adatait és utána kapcsold be az új sort. Remélem értesz. Azért kell előbb kikapcsolni az aktív sort, mert ha enélkül írod be az új oszlop adatait, az megjelenik az aktív sorban is, mielőtt átváltasz az új sorra. De lehet, hogy így van a programodban, mondom már nem emlékszem rá.
-
zka67
őstag
válasz
dave0825 #1582 üzenetére
Akkor légyszíves mérd meg a stab IC-n a tápot:
OUT
-----
| |
|---------|
| |
| |
| |
-----------
| | | | | |
- - -
GND OUT VINA bal oldali lába a GND és a hűtő pad között. Itt 5 V-ot kell mérned, ha ennél kevesebb, akkor természetes dolog, hogy nem úgy működik az áramköröd, ahogy kell. Az USB-ról táplálva úgy látom a kapcsrajzon, hogy van egy FET a táppal sorba kötve, ebben van egy schottky dióda, amin eshet 2-3 tized volt. Lehet, hogy pont ez hiányzik az áramkörnek. Ha a stab IC-n is 4.6-4.7V-ot mérsz, akkor kösd át az USB-ről a tekercs kimenetét a VCC-re.
-
zka67
őstag
válasz
dave0825 #1580 üzenetére
Szia, örülök neki, hogy működik. Az infra vevőd 5V-ot kellene, hogy kapjon a tápján. Ez egy háromlábú IC, +5V, GND és OUT a lábai, az IC-től függ, milyen sorrendben. Ha a tápján mérted ezeket a feszültségeket, akkor orr valami nem jó, mert 5V-nak kellene lennie, ha a kimenetén, akkor az nagyjából rendben van.
Tudnál csinálni néhány nagyfelbontású fotót az arduinodról és az infráról? Hátha több szem többet lát...
-
zka67
őstag
válasz
dave0825 #1572 üzenetére
Szia, mint említettem, nekem nincs arduinom, viszont a kapcsrajzán látok egy stab ic-t is. A tiéd honnan kapja a tápot, amikor a buck-ról járatod? Mert az is lehet gond, ha a stab ic-re csak 5V-ot küldesz és az levesz belőle, mire a procihoz és a többi kiegészítőhöz jut a táp. Meg tudod mérni, hogy pl. az infra paneleden ilyenkor hány volt a táp?
-
zka67
őstag
válasz
dave0825 #1267 üzenetére
Szia, parancsolj:
const unsigned char minutes[60][6] = {
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, // perc 0
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, // perc 1
...
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000} // perc 59
};
const unsigned char hours[12][6] = {
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, // ora 0
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, // ora 1
...
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000} // ora 11
};
const unsigned char temperatures[17][6] = {
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, // fok 15
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, // fok 16
...
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000} // fok 30
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000} // ures
};
void checkMinute() {
unsigned char second,minute,i;
second=Clock.getSecond();
minute=Clock.getMinute();
for (i=0; i<6; i++) data[i] = minutes[minute][i];
showpattern();
}
void checkHour() {
unsigned char hour;
hour=Clock.getHour(h12, PM);
for (i=0; i<6; i++) data[i] = hours[hour % 12][i];
showpattern();
}
void checkTemperature() {
unsigned char temperature;
temperature=Clock.getTemperature() - 15;
if (temperature >= 16) temperature = 16;
for (i=0; i<6; i++) data[i] = temperatures[temperature][i];
showpattern();
}vagy szerintem így sokkal szebb, csak másképp kell meghívnod (ebben az esetben természetesen semmi szükség a fenti rutinokra, checkMinutes stb...):
void checkValue(const unsigned char *table) {
unsigned char i;
for (i=0; i<6; i++) data[i] = *table++;
showpattern();
}
checkValue(&minutes[Clock.getSecond()][0]);
checkValue(&hours[Clock.getHour() % 12][0]);
checkValue(&temperatures[Clock.getTemperature()][0]);Remélem a fordító elfogadja a programot, ha meg nem, majd még igazítunk rajta
Szerk: mégiscsak megírtam...
-
zka67
őstag
válasz
dave0825 #1264 üzenetére
Szia, örülök neki, hogy működik a programod
Viszont a REPEAT_TIME-ot nem csökkentened kellene, hanem növelned. Ez mondja meg, hogy mennyi az az idő, amin belül ha ugyan az a kód jön, az ismétlésnek számít. Lehet, hogy ezért ugrik át a beállításoknál. Vedd feljebb 500-ra, szerintem azzal már jónak kell lennie.
a switch (results)-ot át kellett írnom switch (results.value)-ra...
Jaja, én jegyzettömbe írtam a programot
De a presult is megfelelő lett volna...Szerintem sokkal egyszerűbb, átláthatóbb és jóval rövidebb lenne a programod, ha konstans tömbökben tárolnád a megjelenítendő adatokat...
Nem fogom megírni helyetted a programot, tanuld csak szépen a programozást
-
zka67
őstag
válasz
dave0825 #1251 üzenetére
(#1251) dave0825 Én pont ezért nagyon szeretem ezt a fórumot, de leginkább ezt a topikot, mert az esetek nagyon nagy részében mindig sikerül megoldást találni. Nekem legalábbis ritka volt, amikor nem tudtak itt segíteni az emberek.
(#1250) softguner Zseniális ez a csapatmunka
A C Programozás topikban is hasonlóan segítőkészek az emberek
-
zka67
őstag
válasz
dave0825 #1257 üzenetére
Szia, megnéztem a decode_results típust. A következőképpen módosítsd a programot:
#define VK1 0x12345678
#define VK2 0x87654321
#define REPEAT_TIME 250
decode_results results;
void IRHandler(void) {
static unsigned long pmillis, pvalue;
if (irrecv.decode(&results)) {
irrecv.resume();
if (results.value == pvalue) {
if ((millis()-pmillis) < REPEAT_TIME) {
pmillis = millis();
return;
} // Ez hiányzott
}
pmillis = millis();
pvalue = results.value;
switch (results) {
case VK1:
// Key 1 lenyomasakor
break;
case VK2:
// Key 2 lenyomasakor
break;
}
}
}
void loop() {
IRHandler();
} -
zka67
őstag
-
zka67
őstag
válasz
dave0825 #1248 üzenetére
Szia, szerintem ennek működnie kell:
Természetesen a gombok kódjait írd át
#define VK1 0x12345678
#define VK2 0x87654321
#define REPEAT_TIME 250
void IRHandler(void) {
static unsigned long pmillis;
static decode_results results, presults = 0;
if (irrecv.decode(&results)) {
irrecv.resume();
if (results == presults) {
if ((millis()-pmillis) < REPEAT_TIME) {
pmillis = millis();
return;
}
pmillis = millis();
presults = results;
switch (results) {
case VK1:
// Key 1 lenyomasakor
break;
case VK2:
// Key 2 lenyomasakor
break;
}
}
} -
zka67
őstag
válasz
dave0825 #1243 üzenetére
Szia, a 2. esetben, a case-s megoldásodnál kimaradtak a break; -ek
A switch utasítás csak elugrik a megfelelő case ágra, és onnan folytatja a program futását. Azaz, miután lefutott a case 1 ág, mivel nincs break, ezért a case 2 ágon folytatja a futást.
Az infrád ismétlését pedig a következőképpen tudod megszüntetni:
Amikor jön az adat, megnézed, hogy az előző adattal megegyezik-e? Ha nem, akkor új kód, feldolgozod, ha igen, megnézed, hogy mennyi idő telt el az előző adat óta. Ha több, mint 250ms, akkor új adatként feldolgozod, ha kevesebb, akkor figyelmen kívül hagyod.
Ezután az utolsó kódot elmented, és törlöd az eltelt időt.
-
zka67
őstag
válasz
gyapo11 #1201 üzenetére
Szia, az arduino oldalán rengeteg példa van fent, ezek közül a legegyszerűbbet betettem ide.
#include <TimerOne.h>
void setup()
{
// Initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards
pinMode(13, OUTPUT);
Timer1.initialize(100000); // set a timer of length 100000 microseconds (or 0.1 sec - or 10Hz => the led will blink 5 times, 5 cycles of on-and-off, per second)
Timer1.attachInterrupt( timerIsr ); // attach the service routine here
}
void loop()
{
// Main code loop
// TODO: Put your regular (non-ISR) logic here
}
/// --------------------------
/// Custom ISR Timer Routine
/// --------------------------
void timerIsr()
{
// Toggle LED
digitalWrite( 13, digitalRead( 13 ) ^ 1 );
} -
zka67
őstag
válasz
dave0825 #1196 üzenetére
Szia, belinkelhetnéd a programodat.
Csak megkérdezem, hogy ti megszakításokat nem szoktatok használni? Én úgy csinálnám meg a helyedbe, hogy valamelyik timer megszakítással időzíteném a ledeket, A megszakításkor azonnal indítanék egy másik timert, ami a fényerőt fogja szabályozni, azaz annak a megszakításakor egyszerűen csak kikapcsolnám az összes ledet. Ha megszakításokkal dolgozol, akkor tulajdonképpen a programod azt csinálhat közben, amit akarsz, nem kell az időzítésekkel foglalkozni, mert azt a timer-ek elintézik.
Jelen esetben elég neked egy 500Hz-es megszakítás, azzal már 100Hz-es frissítésed lesz. A másik timer-rel pedig 2ms-nál rövidebb időt állítsd be (amit természetesen majd változtathatsz), és kész a fényerőszabályzásod is.
Ha gondolod, szívesen elküldöm neked az órám programját, igaz az nem arduinora készült, hanem egy arm uC-re, de ez a lényegen nem változtat, az elvet szerintem megérted belőle. (Sima C program...)
-
zka67
őstag
válasz
dave0825 #1178 üzenetére
Szia, mint említettem, a tranzisztorok invertálnak, lehet, hogy ez lesz a gond nálad. Melyik típust kötötted a row kimenetekre és melyiket a col kimenetekre?
A programodban egy hibát találtam, a col tömböd csak 5 elem hosszú, te viszont sok helyen hivatkozol a 6. elemére is.
-
zka67
őstag
válasz
gyapo11 #1140 üzenetére
Szia, ebben a konkrét esetben nincs miről beszélnünk. A trükk a tranzisztorokban rejlik, azoknak az áramkorlátozó tulajdonságát használom ki. Ha emlékszel még a rajzokra, mindkét tranzisztor bázisán van egy-egy ellenállás, amin átfolyik néhány mA áram. A tranzisztoroknak van egy u.n. bétája, amivel nagyjából meg lehet szorozni a bázisáramot, és megkapod a kollektoráramot. Jól mondom eddig?
Viszont a tranzisztorok CE feszültsége függ a rajta átfolyó áramtól. Minél nagyobb áram folyna át rajta, annál nagyobb lesz ez a feszültség, azaz csökken a ledre jutó feszültség, azaz csökken a leden átfolyó áram is.
A ledek természetesen így nagyobb áramot fognak kapni, mint amit folyamatos működés során huzamosabb ideig elbírnának, de az impulzus üzem miatt semmi bajuk nem lesz. Mint említettem, az óráim is igy működnek, nagyfényerejű, piros, hétszegmenses kijelzőkkel, amikben a ledeknek még ráadásul kisebb is a nyitófeszültségük, max. 1/8-ados kitöltési tényezővel.
A power ledek már más kategóriába tartoznak, pontosan a melegedés miatt. Ha léteznének 600A-es tranzisztorok 40-es bétával, szerintem ezt is meg lehetne oldani...
-
zka67
őstag
válasz
dave0825 #1137 üzenetére
Szia, nyugodtan kipróbálhatod ellenállások nélkül, impulzusüzemben. Attól hogy mások még nem próbáltak így vezérelni egy ledet, még nem jelenti azt, hogy nem működőképes a dolog, és hogy tönkremegy a leded.
Mivel programozás közben bemenetre váltanak a pinek, nem fog kinyitni egyetlen tranzisztor sem, nem fog világítani egyetlen led sem. Egyébként azt látnád most is, hiszen világítanának a ledek...
Egyébként '90-ben csináltam egy led-es reklámtáblát, ami a BNV-n 3. díjat nyert, és a konkurencia jött nézegetni, hogy hol van a tápegység, mert nem hitték el, hogy az egész tábla csak 200W-ot fogyaszt full fényerőn, amikor az övék 4kW-ot. Abban a táblában se voltak ellenállások, sőt egy LS373-as kimenete volt az egyik tranzisztor, és nem ment tönkre egyetlen alkatrész sem. A tábla 8cm vastag volt, egy PC-s táp hajtotta,
amit szintén belepréseltünk, a konkurrencia táblája meg 60 centi vastag volt, tele ventillátorokkal.Azóta az összes reklámtábla így működik, nem pazarolnak el fűtésre feleslegesen energiát.
Ha nem hiszel nekem, attól még kipróbálhatod, bekötöd a ledeket ellenállással, és az egyik ellenállást menet közben rövidre zárod. És nem fog tönkremenni a leded
-
zka67
őstag
válasz
dave0825 #1129 üzenetére
Akkor nincs mese, vagy elkezdesz kisebb ellenállásokat belerakni, vagy egyszerűen elhagyod az ellenállásokat. Ha nem teszel bele ellenállást, akkor viszont ügyelj arra, hogy mindig működjön az ardu, azaz ne fordulhasson elő olyan eset, hogy valamiért megáll egy leden a program. Én a hétszegmenses órámat használom így, a tranzisztorok megvédik a ledeket, de ha megáll a program, akkor azért túl nagy áramot kaphatnak. Ha így túl nagy lenne a fényerő, akkor azt szoftverből tudod korrigálni, úgy, hogy rövidebb ideig tartod csak bekapcsolva a ledeket. Ha pl. 1 kHz a frissítési frekid, az azt jelenti, hogy a max fényerőhöz 100ms-ig kapcsolod be a ledeket, pl. 10 oszlopnál. Ezt a 100ms-et ha lejebb veszed, csökken a fényerő, de a következő oszlopra csak 100ms múlva lépsz. Remélem érted mit akarok mondani.
-
zka67
őstag
válasz
dave0825 #1127 üzenetére
Szia, hogy próbáltad? Minden led-hez tettél ellenállást és úgy kötötted őket párhuzamosan, vagy csak egy ellenállást tettél összesen? Próbálj ki egy darab led-et egy darab ellenállással 5V-ra kötve. Esetleg impulzus üzemben próbáltad? Ha igen, mérd meg a kitöltési tényezőt. A tranzisztorokkal próbáltad? Ha igen, próbáld ki ardu nélkül, úgy, hogy a megfelelő tranzisztorok lábára a megfelelő szinteket kötöd, hogy úgy hogy világít.
-
zka67
őstag
Szia, én TFT kijelzőt használnék a helyedben. Filléres dolog, színes, touch screen-nel:
3.3V 240x320 2.4" SPI TFT LCD Touch Panel Serial Port Module with PBC ILI9341
És nagyon egyszerű a használata.
-
zka67
őstag
válasz
dave0825 #955 üzenetére
Szia, bocs, hogy ismét beleszólok. A nano tápját felejts el a ledek meghajtásához, felesleges túlterhelni. A nanot hajthatod 12V-ról is, önmagában nem fog melegedni semmi rajta, mivel erre lett méretezve.
A ledeknek viszont tegyél be egy külön kapcsolóüzemű tápegységet, láttam van neked is, használd azt. Beállítod 5V-ra, a nullát összekötöd a nano nullájával, de az 5V-ot nem kötöd össze a nano 5V-jával.
Így még akár a fényerőt is tudod szabályozni, csak nagyon ne menj 5V fölé.
Ehhez a megoldáshoz nem kell semmilyen hűtés, fogsz egy 12V-os tápegységet vagy 9V-ost, és kész.
Az analóg stabilizátorok nagy baja, hogy a bemenő és a kimenő feszültség különbözetét elfűtik a rajta átfolyó árammal arányosan. Én csak néhány mA áramfelvételű áramkörökhöz használok analóg stab ic-ket, különben minden máshoz kapcsolóüzeműt. Filléres alkatrészekből össze lehet rakni (pl. ebay-en vettem 8Ft/db áron MC34063-as IC-t (100db-ot), hozzá tekercset 20Ft/db-ért, schottky diódákat 2Ft-ért. -
zka67
őstag
válasz
dave0825 #938 üzenetére
Szia, az, hogy az arduinoban levő tranzisztorok 20mA-rel terhelhetők nem az jelenti, hogy nem folyhatna át rajtuk több áram. Csak ha túlterheled a kimeneteit, akkor lesz egy szép pirosan világító IC-d is a ledekhez
Itt csupán arról van szó, hogy az arduino tranzisztorai helyett egy nagyobb "teherbírású" külső tranzisztorokat fogsz használni. Ezt több szempontból is jobb megoldás, mert így ha véletlenül zárlatot csinálsz e ledek környékén, akkor sem az arduino fog az örök vadászmezőkre tévedni, hanem max néhány tranzisztor. Illetve szerintem azok kibírják a zárlatot is, mert a bázisellenálláson keresztül nem kap annyi vezérlést, hogy el is tudjon pukkanni. Az arduino kimenetei elég érzékenyek erre, azonnal elfüstölnek, ha közvetlenül a tápra vagy a földre kötöd őket.
-
zka67
őstag
Sziasztok, az eBay-es vásárlásokhoz szeretnék adni egy jótanácsot: ha az ígért határidőig nem érkezik meg a rendelt árutok, akkor azonnal kapcsolatba kell lépni az eladóval, és jelenteni neki, hogy "nem kaptam meg az árut". Ezzel nyittok egy "case"-t, aminek 45 nap a lejárati határideje. Ezt a "case"-t az eladó bármilyen ígéretére se zárjátok le addig, amíg meg nem kaptátok a terméket!
Sok csaló válasz nélkül azonnal visszautalja a pénzeteket, de van aki bepróbálkozik azzal, hogy "azonnal küldök másikat, amint lezártad az ügyet". Ezt semmiképp ne tegyétek meg, mert ezzel aláírjátok azt, hogy rendben megoldódott a problémátok, miközben az árutok a holdba van, és lőttek a pénzeteknek.
Ha a "case" megnyitása után 40 nappal sincs ott az árutok, akkor kérhetitek az eBay-t, hogy intézkedjen, vagy küldje ő vissza nektek a pénzeteket, ugyanis az eBay garanciát vállal arra, hogy ha az árut nem kapjátok meg, akkor vagy az eladó vagy ők visszafizetik a teljes összeget.
Remélem tudtam segíteni egy kicsit, és így már bátrabban mertek vásárolni az eBay-en
-
zka67
őstag
Igazatok van, tévedtem, összekevertem a régebbi Atmel procik kimenetével. De mint említettem, én nem használok arduinot, nekem az lassú, én ARM procikkal foglalkozok. Ha meg valahová elég a lassabb proci is, akkor veszek egy filléres 8051 architektúrájút. Szerintem a 8-bites AVR mikrokontrollerek a legrosszabb ár/teljesítmény arányúak, bár lehet, hogy vannak még ennél is rosszabbak, nem tudom.
Én csak betévedtem ide, és láttam, hogy vannak akik nem boldogulnak egy-egy feladattal, és gondoltam segítek nekik, ezért nem kell rögtön leharapni a fejemet.
-
zka67
őstag
válasz
dave0825 #871 üzenetére
A 330 ohmos ellenállások 0.4W-osak vagy 0.52W-osak legyenek, amilyet kapsz. A többinél lényegtelen a teljesítmény, én pl. kizárólag SMD ellenállásokat használok ilyen esetekben.
@tvamos: Pl. az ATmega2560 összes portja.
(#873) dave0825: Természetesen jó bármilyen ellenállás, nem csak az SMD
-
zka67
őstag
válasz
dave0825 #863 üzenetére
Hogy miért nem szimmetrikus a kapcsolás? Mert a proci kimenete sem szimmetrikus. A proci kimenetét úgy képzeld el, hogy van egy NPN tranzisztor (a valóságban mosfet), amelyiknek az emittere a gnd-re van kötve, a kollektora a kimenet, és a kollektor és a táp között van egy ellenállás (~20K-50K).
Nos, amikor a kimenet alacsony, azaz nyitva van a tranzisztor, azon elég nagy áram át tud folyni, és ez elég a PNP tranzisztorok kinyitásához. Amikor ez a kimenet magas, az ellenálláson keresztül tud annyi áram folyni, hogy teljesen le tudja zárni a PNP tranzisztort. De az NPN tranzisztorok vezérléséhez már nem elég a belső ellenálláson átfolyó áram. Azaz, ha a kimenet alacsony, akkor az NPN tranzisztort biztonsággal le tudja zárni, ezzel nincs is gond. Viszont ha magas a kimenet, a 20-50K közötti belső ellenálláson keresztül nem folyna annyi áram, ami a tranzisztort ki tudná nyitni. Ezért kell "rásegíteni" egy külső, u.n. felhúzó ellenállással. Az ellenállás értékét úgy kell megválasztani, hogy a proci kimenetét se terhelje túl, amikor az alacsony szinten van, de átfolyjon rajta annyi áram, ami bőven elég a tranzisztor teljes kinyitásához.
Ha komplementer tranzisztoros kimenete lenne a procinak, nem lenne semmi gond, meg tudná hajtani mindkét típusú tranzisztort. De nem ilyen a kimenete, hanem még a "régi időkből" megmaradt felhúzó ellenállásos módszert használják. Ennek is vannak előnyei, mert így egyszerre lehetett ki- és bemenetként is használni egy lábat. Hogy hogyan? Amikor a kimenetre 0-t írsz, akkor a láb kimenetként viselkedik, és lehúzza a vonalat nullára. Ha 1-et írsz a kimenetre, akkor a felhúzó ellenálláson keresztül jut magas szint a kimenetre. De kívülről is működik ugyanez a mutatvány: le tudod húzni nullára a kimenetet, vagy hagyod magasban. És kiolvasva a portot megkapod az így már bemenetként viselkedő láb állapotát.
Próbáltam mindenki számára érthetően leírni, remélem sikerült, és megértetted.
-
zka67
őstag
válasz
dave0825 #856 üzenetére
Jó is, hogy szóba került az 1K-s ellenállás, mert lemaradtak a rajzodról az 1K-s és a 4K7-es ellenállások.
A BC337-ek bázisa és az arduino kimenetei közé kell egy 1K-s ellenállás, és valószínűleg fog kelleni ezeknek az arduino kimenetek és a táp közé is egy 2K2, mert nem vagyok benne biztos, hogy az arduinoban levő felhúzó ellenállás elég lesz a tranzisztos kinyitásához.
A BC327-ek bázisa és az arduino kimenetei közé kell egy 4K7-es ellenállás, különben azonnal kinyírod az arduino kimeneteit.
Légyszíves javítsd a rajzodon és töltsd fel ide, hogy megnézhessem.
Továbbá te csak BC337-ek vásárlásáról beszélsz, remélem a BC327-ek helyett nem azt akarsz betenni, mert az egyik NPN, a másik PNP tranzisztor.
-
zka67
őstag
válasz
dave0825 #854 üzenetére
Szia, a BC337 és BC327 kötőjel utáni száma csak a feszültségerősítést jelzi, aminek - mivel itt csak kapcsolóként használjuk - nincs jelentősége, a legolcsóbbat kell megvenni. A rajzokon alulnézetben mutatják a tranzisztorokat, erre figyelj oda. A negyed wattos ellenállások nem ide valók, legalább 0.4W-ost, vagy 0.52W-ost vegyél. Egyébként bármilyen általános tranzisztor megfelel erre a célra, én csak azért használom ezeket a típusokat, mert anno vettem belőlük több ezer darabot fillérekért. A BC337 helyett használhatsz BSS170 vagy hasonló MOSFET-et is, ebben az esetben az 1K ellenállást is elhagyhatod, de a fet jóval drágább a tranzisztornál. Magyarul mindegy mit használsz, csak az a lényeg, hogy ne az arduino kimenete legyen terhelve.
-
zka67
őstag
Szia,
Pwm kimenet nélkül nincs pwm.
Ne mondj olyat, ami nem igaz
Szoftverből is meg lehet oldani a pwm-es fényerőszabályzást.
dave0825: A fényerőszabályzást nem kell feltétlenül a környezethez állítani, lehet azt az időtől is függővé tenni. Az én órám pl. este 9-kor szépen, fokozatosan elhalványul, hogy éjjel ne zavarjon a fénye, és reggel 6-kor fordítva felerősödik. Ha megérted a pwm működését, akkor te is meg fogod tudni csinálni akár szoftverből is.
De segítek: ha halvány fényt akarsz, akkor rövid időre bekapcsolod a ledet, és hosszabb időre pedig ki. Ha erősebb fényt akarsz, akkor hosszabb időre kapcsolod be a ledet, és rövid időre ki. Ha teljes fényerőt akarsz,
akkor folyamatosan bekapcsolva hagyod a ledet. És mindezt legalább 100x mp-enként, hogy ne vedd észre a villogást. -
zka67
őstag
válasz
dave0825 #840 üzenetére
Szia, igen, úgy nézem, jó lesz a rajzod
Igen, minden piros és kék vezetékre kell egy-egy tranzisztor.
A ledeket így már kötheted párhuzamosan.
Egy nagyfényerejű kék lednek szerintem elég 5mA is, de majd meglátod.
A D6,D7,D8 lábakra nem +5V-ot kell kötni, hanem egy 10K ellenálláson keresztül kötöd a +5V-ra.
Csak azért rajzoltam bele, hogy ha netán mégis OC kimenetet állítanál be az arduinonak, akkor is
le legyen zárva rendesen a tranzisztor, ha nincs rá szükség. De szerintem el is hagyhatod, nem
fogod te OC-re állítani a kimenetet. -
zka67
őstag
válasz
dave0825 #838 üzenetére
Ilyet rendeltem... Mondom, hogy ki fogja égetni az agyadat
Az NPN tranzisztorok kollektorára kötöd a kék (led-) vezetékeket, a PNP tranzisztorok kollektorára pedig a piros (led+) vezetékeket. Ezután minden egyes leddel sorba kötsz egy-egy 330 ohmos ellenállást, különben el fognak égni az ellenállásaid a terheléstől (ha egy ellenállást teszel több ledhez).
A D3,D4,D5 megy majd a SELECT ROW-okra, a D6,D7,D8 pedis a SELECT COLUMN-okra, bár a te rajzodon pont fordítva vannak, de nincs jelentősége az elnevezéseknek.
Az OC az open-collector kimenetet jelenti, de felejtsd el amit írtam, nem érdekes, csak összezavar téged.
-
zka67
őstag
válasz
dave0825 #836 üzenetére
Szia, a 40mA az abszolút maximum, a határérték, a javasolt 20mA egy lábon. Továbbá ha a kék ledeket 20mA-ről hajtod, ahhoz már fegyverviselési engedély kell, mert ki fogja égetni az agyadat is a fénye
De komolyra fordítva a szót, igen, meg lehet oldani mindent, még ezt is. Kell hozzá pluszban néhány filléres tranzisztor és ellenállás, remélem ezekben otthon vagy.
A tranzisztorok lehetnek BC337 (NPN) és BC327 (PNP) vagy hasonó típusúak.
A vezérlések invertálódnak, erre figyelj oda. Annyi ROW és COLUMN áramkör kell, ahány sorod és oszlopod lesz, a mátrixot nem rajzoltam fel külön, szerintem az menni fog neked is. A SELECT ROW kimenetek lehetnek OC-k is.Még egy jótanács: LED-eket sose köss párhuzamosan, még ha egy sorozatból valók, akkor se. Mindig használj külön előtét ellenállást minden ledhez. Az okokra most nem térnék ki, fogadd el ezt így.
+5VO O +5V
| |
| -
| | |10K
| | |
E| - 4K7
\| | ---
PNP |--o---| |---< SELECT ROW (0)
C/| ---
|
|
---o---ROW
|
+
LED + 330R
-
|
---o---COLUMN
|
C| 1K0
\| ---
NPN |----| |-----< SELECT COLUMN (1)
E/| ---
|
--- -
zka67
őstag
válasz
dave0825 #823 üzenetére
Én nem arduinot használok, de a lényeg szempontjából ez semmin nem változtat. Megszakítást generálok pl. 1ms-enként, és ezt használom időalapnak.
Ha konkrét megoldás is érdekel, írtam egy fejlesztőkörnyezetet a 8051-es mikrokontrollerekhez, ebben megtalálod példaként ezt az órát is:
Turbo51Studio letöltése
Digital clock példaprogram pascal nyelvenA turbo51 studioval ki is tudod próbálni az órát anélkül, hogy meg kellene építened az áramkört:
Az RTC számolja az órát, percet, napot, stb..., az arduino közben csinálhat mást. Amikor tudni akarod, hogy mennyi az idő, kiolvasod az RTC-ből. Magyarul az arduinotól függetlenül méri az időt. Az akku csak annyit csinál, hogy az RTC akkor is méri az időt, amikor az arduino nem kap tápot.
A checksum-ot, az RTC ramot, és az eepromot egyenlőre hagyd figyelmen kívül
-
zka67
őstag
válasz
dave0825 #821 üzenetére
Szia, bocs, hogy beleszólok, csináltam már jónéhány órát. Nálam a szempont mindig az olcsóság, és az egyszerűség volt. Be lehet "lőni" egész pontosra az arduino-t is, külső RTC nélkül is. A trükk nálam az volt, hogy az internetes időt vettem alapul a "belövéshez". Első lépésben hagytam menni az órát egy teljes napig, majd megnéztem, hogy mennyi az eltérés (természetesen a PC-n minden alkalommal frissítettem előtte az internetes időt). Sietett mondjuk 30 mp-et. Ekkor beállítottam neki, hogy minden 86400/30-adik órajelet hagyja figyelmen kívül (én megszakítást használtam az időzítéshez és a kijelzők multiplexeléséhez, 1kHz-et). A következő lépés az volt, hogy hagytam így menni egy teljes hónapig, majd ugyanezt a számítást elvégeztem, és így kaptam egy olyan órát, ami évi 10mp-nél nem késett/sietett többet, ami szerintem elfogadható. (Ha késik, akkor 2x hívom meg az időszámláló rutint, ha siet, akkor kihagyok egy hívást)
Csináltam órát DS1307-el is, ezt is be lehet "lőni" egész pontosra, két darab 5pF-os kondenzátort kell kötni a kvarc lábai és a föld közé. Ezzel havi 5mp-es pontosságot tudtam elérni, ami szerintem még mindig elfogadható. A DS3231 sem pontosabb, mint a 1307-es, csak abba már beépítettek néhány kondenzátort,
amit a kvarc lábaira tudsz kapcsolni szoftverből, így lehet pontosabbá tenni, de atomóra abból sem lesz.Egyébként az elem azért kell az RTC-nek, hogy ha áramszünet van, akkor is menjen az óra, és a ram-ban tárolt tartalmat is megőrizze. Ez jó dolog, ha csak pár beállítást akarsz tárolni, nem kell külön eeprom.
(Az RTC ram tartalmának ellenőrzésére érdemes egy checkusm-ot is használni, hogy tudd, hogy első
alkalommal indítottad el az órát, és az adatok érvénytelenek, vagy már inicializáltad őket, és érvényesek)Ha atomóra kell, akkor kell hozzá egy wifi modul és le kell kérdezni az internetes időt. Az sem egy bonyolult dolog.
Remélem tudtam segíteni egy kicsit.
Új hozzászólás Aktív témák
Hirdetés
- DOOM - The Dark Ages
- PlayStation 5
- Xbox tulajok OFF topicja
- Xiaomi 14T Pro - teljes a család?
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Samsung LCD és LED TV-k
- LEGO klub
- Külföldi rendelések: boltok, fizetés, postázás
- Milyen billentyűzetet vegyek?
- Megvan, milyen chipet használ a Pura 80 Ultra
- További aktív témák...
- Bomba Ár! Dell Latitude 3190 - Intel N4120 I 4GB I 128GB SSD I 11,6" HD I Cam I W11 I Garancia!
- Bomba Ár! Dell Latitude 3190 - Intel N4120 I 4GB I 64GB SSD I 11,6" HD I Cam I W11 I Garancia!
- Bomba ár! Dell Latitude E6520 - i7-2760QM I 8GB I 256SSD I Nvidia I HDMI I 15,6" HD+ I W10 I Gari!
- Bomba ár! Dell Latitude E7240 - i7-4GEN I 16GB I 256SSD I 12,5" HD I HDMI I Cam I W10 I Garancia!
- Bomba ár! Toshiba Satellite Pro R50-C - i3-6G I 4GB I 128GB SSD I 15,6" I HDMI I Cam I W10 I Gari!
- Nvidia Quadro M2000/ M4000/ P2000/ P2200/ P4000/ P5000/ RTX 4000/ RTX A2000 / RTX A4000
- Új! Targus - USB-C Dual HDMI 4K HUB - 2 HDMI-vel. Saját töltő nélkül 2 monitorral (120Hz)
- Xiaomi 13T Pro 512GB, Kártyafüggetlen, 1 Év Garanciával
- BESZÁMÍTÁS! MSI B450M R5 5500 32GB DDR4 512GB SSD RTX 3060 12GB Rampage SHIVA Chieftec 600W
- BESZÁMÍTÁS! ASUS ROG STRIX Z270G GAMING WiFi alaplap garanciával hibátlan működéssel
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged