Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Elég jo a TAVIR tanfolyam, én is végigcsináltam az összel. Egy kicsit hiányoltam belöle a praktikusabb dolgokat, de amit tanultam, az mind jo és érthetö volt, csak ajánlani tudom. Ha érdekel szolj privátban elküldhetem a jegyzeteimet ( a könyvet nem láttam).
A YT-bon van németül egy remek vagy 35 részes kurz. A svájci kolléga nagyon érthetöen és szép lassan lépésröl lépésre elmond mindent, söt optimalizálja is a kodokat. Van egy hasonlo amerikai kurz is, annak sajnos az eleje nagyon rosszul zavaroan lett vágva (az kb az elsö 10 lecke), de amit a csávo beszél az nagyon jo és ott rengeteg praktikus applikácio van.
Ez utóbbi érdekelne engem is, ha tudsz valami konkrétabbat mondani róla, ami alapján megtalálom.
Szia
Ebböl a két tanfolyambol illetve a kapcsolodo filmecskékböl rengeteget tanultam az összel ( ágyhoz voltam kötve). dronebot Hobbyelektroniker A hozzászólás módosítva: Márc 27, 2020
Szia!
A korábban említett ébresztőóránál jelenleg a csipogóval bíbelődök. Sikerült megoldani, hogy a passzív zümmert a Timer1 hajtsa. A probléma csak az, hogy a csipogás időtartama alatt az egyik gomb is aktiválódik.
A gond az, hogy amikor a 250ms sípolás van, akkor a LED_ALARM_PIN is H szintre vált, illetve nem világít olyan fényesen, mint amikor lenyomom az ALARM_BUTTON_PIN-re kötött gombot. A 600ms szünet alatt a led elalszik. Tudnál benne segíteni, hogy mi a gond?
Még 2 kérdésem lenne ehhez a dologhoz.
Ugy tudom, hogy az Arduinoban nem tudok egy megszakitást csinálni, ha az uint_8 value változik. Az lenne az optimális ha a proci minden változásra reagálna. Ha csak az loop IF-be irom be lehet, hogy nem kap el minden változást. A másik kérdés meg olyasmit kellene csinálnom, hogyha a fenti érték egy bizonyos ideig nem változik, akkor resetelnem kellene egy számlálot. Kösz.
Azt kell először végiggondolnod, hogy mi az a legrövidebb idő, amire reagálni kell? Ha a loopod periódusideje kisebb, akkor nem kell megszakítás. Ha nagyobb, akkor kell megszakítás. Talán egyszerűbb megszakítással megvalósítani.
Pin change interrupt megszakítást is könnyű csinálni. Erre is igaz, hogy ha nem az Arduino libet használod (attachInterrupt), hanem megírod direktben ahogy AVR-GCC-ben kell (bekonfigurálás+ISR(PCINTX_vect)), akkor sokkal gyorsabb lesz. Én így csinálnám interrupttal: * PCINT interruptot állítanék be, hogy minden változásra jöjjön ISR(PCINTx_vect) * Változáskor megnézném, hogy az előző állapothoz képest (amit ugye tárolnék) valid-e a mostani állapotátmenet? Ha nem, akkor egy hibajelzőt beállítanék * Leolvasnám az órát, és az előző állapothoz képest megnézném mennyi idő telt el: ha túl kevés, akkor az is invalid, hibajelző beállít * számlálás, ha minden oké Főprogramban: * Ellenőrizgetjük az előző változás óta eltelt időt: ha túl nagy, akkor nullázzuk a számlálót és töröljük a hibajelzőt * Frissítjük a képernyőn a számot, és a hibajelzőt (pl a 8 szegmenses kijelző pontját lehet hibajelzőnek használni) Itt van pin change interruptos példa: https://playground.arduino.cc/Main/PinChangeInterrupt/
Kösz, ki fogom probálni. A változások nem gyorsak, csak itt irták a kollégák, hogy lehet a kimeneten valami bizonytalan állapot, amit lehet, hogy a loopban futo koddal nem fogok látni.
A loop ideje joval kisebb, tegnap csak ugy probálgattam a looppal, fél perc alatt majdnem 50000 lépést számolt (fix bemenettel) ennyit a motor egy ora alatt sem kap. A hozzászólás módosítva: Márc 28, 2020
Üdv mindenkinek.
Egy kérdésem lenne, hogyan tudok egy tömböt létrehozni arduinón ,hogy egy for ciklusba beágyazott For stb... { myGLCD.print( "Touch", 15, (y1 + 7)); } stb... Touch helyére egy előre megírt tömbből olvassa ki a megjelenítendő szavakat. Remélem érthető mit szeretnék.Próbáltam már megírt programokból lesni de nem találok per pillanat ![]()
Közben részben megoldódott.
Most csak annyi a gondom , hogy nem lép tovább csak a Jan - szót írja egyfolytában const char *Name[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; For stb... { myGLCD.print( *Name, 15, (y1 + 7)); // }
Sikerült megoldanom. A moderátor törölheti , ne foglalja az értékes megabájtokat a hozzászólásom.
A const char* -nál a * jelzés mi célt szolgál?
Sziasztok,
Segítséget keresek, öreg vagyok én már ehhez. ![]() A programban van egy ciklus (uint8_t reply[10]) ami 10x futtatja le a mérést, utána leáll. Ezt szeretném kiiktatni, hogy folyamatos legyen a mérés, de nem tudom mit töröljek ki. Köszönöm. A hozzászólás módosítva: Márc 28, 2020
A kutya elásva a programodban lesz (ino), amit nem mellékeltél. Ez a szenzor olvasó library egy darabja(cpp). Az a reply változó tömb az adat beolvasáshoz kell, ami több bájtból áll, nem a mérési eredményeket tárolja.
Az .ino fájlban nincs semmi, ami a ciklusra utalna, viszont ha a uint8_t reply[10] sorban a 10 értékét növelem akkor nő a mérések száma. Ezért gondolom, hogy itt kellene valamit módósitani.
Idézet: „gondolom, hogy itt kellene valamit módósitani” Inkább az ino programot tedd fel, mert nem vagyunk gondolatolvasók. A hozzászólás módosítva: Márc 28, 2020
Innen szedtem le a programot.
Ez a programkönyvtár, amit belinkeltél nem futtatja 10x a mérést. A reply nevű tömbbe minden mérésnél 8 db. bájtot olvas be a program. Ebből állítja össze az eredményt.
A programkönyvtár úgy van megírva, hogy 2 másodpercnél sűrűbben nem mér. Nyilván az eszköz működésében van egy ilyen korlát. Ennél tehát ne akarj "folyamatosabban" mérni!
A 2 mp. nem gond, még ritkább is elég, viszont 10 mérés után leáll a program, ezt szeretném kiküszöbölni.
"10 mérés után leáll a program, ezt szeretném "
Melyik program és hol áll le? A könyvtári program meg van pakolva kiírató utasításokkal, célszerű azokat kivenni a kommentből, akkor jobban lehet látni, hogy mi a probléma.
Bocsánat mindenkitől az esetleges félrevezetés miatt, az .ino fájl LCD-re lett átírva.
A problémám ennek ellenére ugyanaz. A zip fájlban a teljes program és tartozékai vannak.
Gyanús nekem valami.
Az example kódban a loop-ban az első feltétel arra utal, hogy ha van HIBÁS adat akkor írjon a serial printre. Ez megtörténik nálad mielőtt nem olvas többé? Mert ha igen akkor van egy tippem a return;- miatt. Lehet kilépteti az egész loop függvényből! A hozzászólás módosítva: Márc 28, 2020
Gondolom, ott azt figyeli, hogy a 2mp. várakozás kell 2 adatfrissítés között.
A 10 cikluson belül nincs is probléma vele, de ha lejár a 10 ciklus akkor a kijelző üres lesz.
A loop függvény biztosítja a folytonosságot. Az ottani kódok futnak folyton az mcu-ban. A késleltetést a delay(2000); sor biztosítja.
mondjuk a 10 az tényleg jelent valamit. A serial-on figyeled mik történnek? Nem csak az LCD-n?
Nekem tényleg az a gyanúm, hogy hiba esetén kilépteti a fő loop ciklusból, és soha többé nem folytatja a kódok futtatását. Az LCD elsötétül, mert megszakad minden. A soros monitor tartalmát ide másolhatnád.
Ha igazam van akkor egy ilyen üzenet előzi meg a hibát: "Failed to read data from AM2315" A soros monitoron természetesen. De ma nem vagyok ok, fáj a fejem, nem aludtam rendesen, kijárás tilalom is van 4 hete nem ittam semmit, és nincs is itthon semmi... ![]()
Serialt nem néztem, ennek sz.gép nélkül kellene menni.
Az alap elképzelés az, hogy egy 328-as tartalmazza a programot és LCD-n keresztül mutassa az aktuális értéket. Ha beindul, akkor lenne egy kapcsolójel, ami adott érték-kombinációnál billenne.
Közben megnéztem serial monitorral is, leállás után semmit se ír ki.
Nem tudom akkor mi a gond.
![]() Alszok egyet rá, remélem valaki segíteni tud neked.
Mindenesetre, kössz a segitőszándékot.
Végül meglett a hiba oka. Nem programhiba volt, hanem hardverhiba. A mikrovezérlő közvetlenül hajtotta meg a passzív zümmert és valami visszarúgás okozta a hibát. 220R ellenállást betéve a zümmer és a mikrovezérlő közé a hiba is megszűnt. Piezo zümmernél nem gondoltam, hogy ilyen jelenség fellép.
|
Bejelentkezés
Hirdetés |