Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Sziasztok.
Az arduino uno-n hogyan tudnék letárolni változó értékét (4érték), oly módon, hogy egy ki és bekapcsolást követően elérhető legyen? A hozzászólás módosítva: Feb 27, 2022
Elrakod az eepromba, és minden inditás után abbol olvasod ki az utolso beirt értéket.
köszi szépen, király vagy! (nem tudtam, hogy van eeprom, adatlapot bogarásztam épp).
Elkészültem, nem tudom van-e arra ehetőség, hogyha ide megosztom a programot, megnézitek, követtem-e el valami oltári hibát?
Első találkozásom a mikrovezérlőkkel...
Mekkora értékek lennének? Byte?
neeem, int típusba mentem, 0,1,2,3 és 4 ami előfordulhat de tárolásra csak az 1,2,3, azaz 2bit.
De maga a valtozó természetesen 2byte-ot foglal.
A 4 nem fér bele az egy byteba? Engem is meglepett az arduino mert előtte használtam a bascomot ami lekezelte a változók tipusait, viszont az arduino nál neked kell a változókat byteokra szedni úgy beleirni, értelemszerűen kiolvasáskor bytokból összerakni, szerencsére akár float változóra is van megoldás.
Meg tudod osztani ha akarod. Alul van egy zöld gomb Kód felirattal , oda lehet beilleszteni a kimásolt kódot.
Idézet: „viszont az arduino nál neked kell a változókat byteokra szedni úgy beleirni” Nem kell. Az EEPROM.h könyvtár kezeli a változók típusát, valamint a magad által létrehozott változók struktúráját is. A következő EEPROM címet pedig a sizeof() függvénnyel lehet kiszámítani.
Itt megtalálod a megoldást: EEPROM kezelése
Ez így jól működik?
Kicsit módosítottam de nem próbáltam
Igen, teljesen jól ment, kikapcs után is megmaradtak az állapotok. Mit kellett módosítani?
Látom. Byte-ként hataroztad meg a számlálókat, azok változóit. Ezt nem ismerem, majd utánanézek. Jobb gondolom mint a var, esetleg nem foglal le, csak egy byte-ot a kettő helyett?
A másik, hogy te a void setupba állitottad be az eepromból ezek értékeit nem a változók deklarásánál. Ez csak így korrektebb, vagy van egyéb oka a modszernek? Azért kérdezem, hogy a jóvöben hogyan járjak el. En eddig azt gondoltam, a void setup a ki és bemenetek beállitására van.
Idézet: „En eddig azt gondoltam, a void setup a ki és bemenetek beállitására van.” Majdnem. A setup a program indulásakor fut le, és pontosan egyszer. A ki és bemenetek beállítása is itt célszerű pontosan ezért. De nem "erre van", hanem az olyan dolgokat elvégezni, amiket egyszer induláskor kell elvégezni. Tehát a fent említett beállításokat is.
Már csak egyet nem értek. Akkor a konstansok értékadását vagy pl a buttonstate = HIGH értékbeállítást miért nem ebben a setup-ban végzik el általában? Hiszen a buttonstate-nek is ezt a HIGH értéket csak induláskor kell egyszer beadni.
Mint esetemben is, az egyéb (globális) változók nem bántották a szemed, egyedül a counter. Akkor tulajdonképpen a setup előtti részt is (frame? nem tudom mi a neve) lehetne a setupban létrehozni ha csak egyszer kellene beállítani, a könyvtárhasználatot kellene csak a setup előtt megadni? A hozzászólás módosítva: Márc 1, 2022
Bocs, nem a te szemed, hanem GPeti1977-ét
Változóknak lehet kezdeti értékadni a deklarációnál is, de a setup-ban is. A setup futásidőben dolgozik, de ha a deklarációs részben adsz értéket, akkor azt még a fordító végzi el. Tehát ebben az esetben maga a tárgykód már úgy van elkészítve, hogy a változód értéke be van állítva. A setup mivel induláskor teszi meg ezt, alkalmas arra is, hogy a processzor regisztereit, portjait beállítsa. Tehát deklarációként nem tudod pl a timert indítani, mert az egy hardveres eszköz, muszáj futásidőben. Nem tudom érthetően sikerült-e leírnom
Ezek a választható opciók!
De pl modulszintű konstansokat nem tudsz létrehozni a setupban(vagy máshol), csakis deklarálással! Ez igaz a változókra is...
A nagy része úgy érzem teljes mértékben világos.
Mindjárt kiderül a többi. A korrekt megoldás, ha a setupban van kiolvasva és átadva bármi az eeprom-ból, de a tapasztalat szerint akkor az atmega tud forditáskor is eeprom-ból olvasni, de ez kicsit vagy vagy? Értem ezt általanosságban, nem kifejezetten az atmegánál. Modulszintü konstans az, amivel pl. kimenetet állitok be? A hozzászólás módosítva: Márc 1, 2022
Idézet: „A setup futásidőben dolgozik, de ha a deklarációs részben adsz értéket, akkor azt még a fordító végzi el.” A fordítás eredménye az amit a FLASH-be töltesz. A RAM-ba nem töltesz direktben semmit, ami a fordítás eredménye, azaz mindegy, hogy a deklarációnál vagy a setup-ban adsz értéket egy változónak, az bizony a kód futtatása által lesz inicializálva. A különbség csak annyi, hogy az egyik ténylegesen a setup-ból fordított kódból történik, a másik meg előtte egy a fordító által generált inicializáló kódrészletből. A hozzászólás módosítva: Márc 1, 2022
Valahol láttam egy megoldást, ahol a PWM kimenetet egy változoba töltötték, amit ezután elvben bármelyik portra fel lehet használni. Sajnos nem jut az eszembe hol is volt.
Egy olyan szerkezeten dolgozok, aminek kimenetei egy-egy LEDet hajtanak. Minden kimenetet idöben lehet ki-be kapcsolni, és 3 különféle változot rávezetni. 1. Sima High/Low ( ki be kapcsol) 2. PWM fényeröség változot elalszik majd ujra lassan elkezd világitani. 3. Véletlen jelekkel villog ( Random) Még nincs kész a végleges cucc, de az 1. meg 3. dolog már egy régebbi berendezésben müködik. Igaz az csak a codeban programozhato ( a PCröl), most meg magán a berendezésen lesz programozási lehetöség ( egy tömb tartalmának a manuális bevitele néhány nyomogombbal meg kis displayjel). Elvben nagyon hasonlit egy zenei sequencerre, vagy egy disco világitás meghajtojára.
Sziasztok.
Valaki meg tudná mondani, hogy egy ATmega168-as procinál, aminek 1k RAM-ja van, mennyi marad szabadon a bootloader feltöltése után?
A bootloader nem csökkenti a felhasználói program által elérhető RAMot, csak a flasht.
Sziasztok!
Szenvedek egy motor PWM szabályzásával. Találtam a neten egy nagyon rövidke programot, abban ha átírom az analogwrite értékét akkor változik a motor fordulatszáma. De ahogy implementálom a saját kódomba, meg sem moccan a motor. Mit ronthatok el? A csatolt képen baloldalt az enyém, jobboldalt a működő kód.
Mivel a lényegi rész ugyanaz, szerintem a megszakítás akad össze benne. Próbáld meg kikommentelni a megszakításos részt, és úgy nézd meg hogy működik-e a motorod!
Elég komplex a megszakításos rész, melyik részét kommentáljam ki?
Egyébként az még hozzátartozik a történethez, hogy ugyanez a kód működik ha a motorvezérlőt át-jumperelem és szimplán amit az in1 in2-ről kap jelet, maxon forgatja a motort. Egyszerűen csak az analóg kimenetet nem tudja értelmezni és így meg sem nyikkan.
Talán az zavarhat be, hogy a loop-ban van, másodpercenként nagyon, de nagyon sokszor lefut. Nem olvastam át teljesen az analogWrite() forrását, de lehet, hogy nem kellene másodpercenként százezerszer beállítani az 500 Hz-es PWM-et.
|
Bejelentkezés
Hirdetés |