Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Valahol fellelhető erről az LGT8F328P csodáról valami elektromos paramétereket felvonultató doksi? Az ékes kínai weboldalon nem találtam semmit se erre vonatkozóan...
Üdvözlet
Segítséget szeretnék kérni. Adott programot meg lehet-e változtatni úgy hogy "fordítva" működjön. (vezérléskor alap állapotban világítson a led)?
Azt rögtön kiszúrtam benne, hogy a loop-ban van egy végtelen ciklus. Arduino esetén ez tilos, mert a keretrendszer két loop hivás között elvégezne néhány feladatot. Mikrokontroller függő, hogy miket, például USB vagy hálózat kezelést.
Ez egy karácsonyi világítás vezérlése arduinóval.
Tavaly egy "üstököst" vezérelt, és működött szépen.(ws2821 led szalag) A többi efektet eddig (sima grb led szalag) arduino pwm lábai vezérelték más programmal. Ezt szeretném kiváltani hogy ne 8db arduino Megalegyen, csak 1 ( arduino + ws2811 ic + fet tranzisztor) A hozzászólás módosítva: Okt 11, 2020
"Arduino esetén ez tilos" - nem találtam még erre utalást. A mikrokontroller elvégez néhány beállítást (timer-ek, interruptok), de ezeket még a programunk indulása előtt. A loop() egyébként is egy sima while(1), vagy for(;; ), mint ahogy a programban is szerepel. Nem tudok róla, hogy a loop() végén bármi is történne. Én a sima Atmega328-ról írtam, de más uC-nél is fura lenne, ha a loop() után olyan történne, amiről a felhasználónak nincs tudomása. Mennyi ideig tart, mit csinál, mivel és miért? Ezeket tudni kellene, különben hibásan futhatna a programunk. De szerintem nem csinál a uC semmit ilyenkor.
A hozzászólás módosítva: Okt 11, 2020
Idézet: „Adott programot meg lehet-e változtatni úgy hogy "fordítva" működjön. (vezérléskor alap állapotban világítson a led)?” Lehet, hogy én vagyok értetlen, de ez nekekm kicsit ködös. A fordítva működést azt értem, de most vezérléskor, vagy alapállapotban világítson? A másik, meg belenéztem a programba, soros porton kapja az adatot, avagy a LED-ek színkódját. Mi adja az adatot a soros portra? Mit szeretnél azon megfordítani? Ha kap adatot ne világítson, de ha nem kap adatot akkor milyen színű legyen?
A számítógépen a Vixen program ami soros porton küldi az adatot.
Az arduino feldolgozza és küldi a ws2811 icéknek. Az icnek r g b lábain negatív fesz jelenik meg, ha aktivak. De nekem n-es fettranzisztorokat kellene kapcsolniuk(nem pedig ledeket), amihez pozitív fesz kellene. (csatornánként egy optokapuval megoldható lenne, de ezt szeretném elkeröülni) Ha a program a g r b lábakon nem 0-tól 255-ig szabájozná a fényerőt, hanem 255-től 0-ig akkor egy felhúzó ellenállással meg is oldanám.
A számoláshoz neked ez kell: "invertaltujvaltozo=255-valtozo"
kell. Ha a változó 0, akkor 255-öt kapsz, ha 255, akkor 0-t.
Ha meg egyik sem akkor hibás színt kap. A kimenetet a FastLEd lib adja, abban kéne matatnia, de a kérdésből ítélve ehhez nem elég felkészült.
Ezzel csak az a baj, hogy nem 0 és 1 amit a WS2811 kap, hanem 24 bit. És mivel nem te írtad a kimeneti funkciót, hanem a FastLED könyvtárat használod, abban kellene a változtatás eszközölni. Nem ismerem én másikat használok, lehet, hogy van benne kimenet invertálás. Utána kell nézni a Githubon.
Visszavonom. Hardveresen kimenet esetén biztosan működik, de több mint valószínű a bitbillegtetés esetén is. Azon gondolkodttam, hogy esetleg az elején vagy a végén hiányozhat egy fel vagy lefutó él, de mivel bájtra van megírva így biztosan nem fog.
Idézet: „Nem tudok róla, hogy a loop() végén bármi is történne.” Attól még történik. Idézet: „más uC-nél is fura lenne, ha a loop() után olyan történne, amiről a felhasználónak nincs tudomása. Mennyi ideig tart, mit csinál, mivel és miért? Ezeket tudni kellene, különben hibásan futhatna a programunk.” Változó ideig tart. Ez nem amikrokontroller hibája, vagy sajátossága. Az Arduino egy kezdőknek szánt keretrendszer, ami elrejt egy csomó mindent a mélyebb működésből. Pont emiatt nem alkalmas valósidejű alkalmazásokhoz. Linkelem néhány variáns main loopját. Minimum egy serial event handling van benne. Ezen kívül megszakításokat is kezel, például a millis-t növeli, stb. De az ESP esetén egészen sok minden történik két loop hívás között. https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduin...in.cpp https://github.com/esp8266/Arduino/blob/master/cores/esp8266/core_e...in.cpp https://github.com/stm32duino/Arduino_Core_STM32/blob/master/cores/...in.cpp https://github.com/arduino/ArduinoCore-sam/blob/master/cores/arduin...in.cpp Ha magad akarod kontrollálni a mikrokontrollert, akkor ne használj Arduino környezetet.
Én is így tudom, és tapasztaltam is, hogy nem szabad a loop rutint blokkolni, abból mindig ki kell lépni! Azt hiszem pl az időzítő függvények sem működnek jól ellenkező esetben, de még jó pár dolog van, ami problémás lehet, ha ezt nem tesszük meg!
Kb. 4-6 értéket izeg-mozog a kiolvasott érték.
Lehet, hogy csinál dolgokat a main végén, de az időzítésnek mi köze hozzá? Azok gondolom megszakításból futnak. Simán megy egy végtelen ciklusban. Soros kommunikáció is. Gáz is lenne ha nem így lenne. Nem lehetne írni x ideig tartó szubrutinokat.
Szia!
Gépi fordítású van, kicsit kesze-kusza, de jobbat nem találtam. Kb 8 mega pdf.
Köszönöm mindenkinek a válaszokat.
Futok vele egy kört, de úgy érzem ez nem az én kategóriám.
Nem olyan nehéz ez.
Ez adja a színeket. Ezt kell módosítanod erre:
Na várjál, most olvasom el mégegszer. A WS2811 lábait akarod invertálni? Azt szoftveresen nem lehet. Abból PWM jel jön ki.
A hozzászólás módosítva: Okt 11, 2020
Maradjunk csak az Atmega328-nál, azt ismerem behatóbban is.
"Minimum egy serial event handling van benne. Ezen kívül megszakításokat is kezel, például a millis-t növeli, stb." - érdekes ez a serial event run, most olvasom, hogy a loop után mindig lefut. De ez csak a soros kommunikációval van kapcsolatban. Akkor vesz el sok prociidőt, ha van is kommunikáció. A millis az interruptból van meghívva, a loop-tól független. Atmega328-nál más nem történik. Tehát ha nincs bejövő soros porti adat/kommunikáció, akkor a loop megakasztható, és a loop végén pár utasítás után visszatérünk a loop elejére. ESP és STM32-nél nincs tapasztalatom ilyen téren, de láttam a linked.
A soros kommunikáció szerintem is megy függvényen belül a loop vége nélkül is, szóval nem tudom, ez a serial event run mihez kellhet. Azt írják a Serial.read-nak adja át a bejövő adatot, meg buffert kezel. Viszont a soros port az mehetne interruptból is. Minek kellene a loop végén pollozni, ha csak beállítom a regisztert, és jön a megszakítás, amikor kell.
Ezt találtam: "The Serial port itself continues to be interrupt driven, but SerialEvent() is not called from interrupt level. (which is a really good thing.) The current Tutorial example is really stupid, IMO. SerialEvent gives you "baby multitasking." You have the "loop" task, and you have the "serialEvent" task(s) that only gets called when there has been Serial data received. If you are reading sensors and controlling stuff in loop(), you could put a command/response function in SerialEvent so that you could "check" on things in the event code without interfering with the logic of loop() As long as "commands" are infrequent and short (fit in the serial ISR buffer: usually 64 bytes), you can even do significant delay() calls in your loop. Here's a slighly less silly example. "Blink with Serial Event." A typical "Blink" program, with a serialEvent handler added to modify or report on the state of blinking..." Tehát ez egy kombó, megszakításos soros port kezelés, és egy loop utáni függvény. A hozzászólás módosítva: Okt 11, 2020
Nem tudom. Kimenő adathoz biztos nem kell. 2 órája fut az ESP32-n a millis() serial portra írása végtelen while ciklusban. De minek kellene olvasáshoz is? Én még nem hallottam, nem is tapasztaltam. Igaz Arduino nem nagyon volt a kezemben, ESP-hez használom az IDE-t. A teszthardveren futó programom szubrutinja most is végtelen ciklusban hajtja a neopixle LED-eket az ESP32-n úgy hogy közben wifit is figyel gond nélkül 3-4 hónapja. Nem ismerem az Arduino belső lellkivilágát, ,de az a Core nem csak az indításkor fut le?
ESP-nél az van, hogy a stack-et akarja frissíteni, és mivel ez nem történik meg időben, elkezd ugatni a watchdog. Ebből is van két féle, mindkettő ugat. Van egy utasítás amit meg kell hívogatni ha megakasztod a loop-ot, és akkor eltűri.
Szerk.: NodeMCU-n próbáltam, ott biztos ez van. A hozzászólás módosítva: Okt 11, 2020
Ez 8266-on van? Mert az ESP32-n én nem tapasztalom.
Igen. ilyen kimenetet produkál ilyenkor.
Csórikám etetné a wifit, de ha tiltjuk, akkor beáll mint a gerely.
Hmm. Kipróbáltam, és tényleg. 5 másodpercenként soft resetel a stack miatt. Az UNO-t most nem veszem elő emiatt. Szerencsére az ESP32-nek semmi baja a loop blokkolással.
Nagyon ügyes vagy .Teljesen jól működik.
Köszönöm. |
Bejelentkezés
Hirdetés |