Hirdetés

Keresés

Új hozzászólás Aktív témák

  • zka67

    őstag

    válasz mArZsi #2663 üzenetére

    Szia, igen, megszakítás használatával pontosan lehet vezérelni több motort is egyszerre.

    Tudom, sok embernek fogalma sincs arról, hogy mi a megszakítás, mit lehet és nem lehet megcsinálni vele, de higgyétek el, hogy baromi jó dolog. Én komolyan megőrülök, amikor meglátom egy kódban, hogy a millis-sel időzítetek, vártok, ezalatt a proci nem csinál semmi mást, és nem azért van, hogy lustálkodjon.

    Egyébként a millis is egy megszakítással működik...

    Gyakorlatilag minden eszközt lehet megszakítással kezelni, a soros porttól kezdve a GPIO-n át az SPI-ig, mindent. Miért várjak arra, hogy jön egy karakter a soros porton? Majd a megszakítás szól, hogy jött egy karakter és akkor majd foglalkozom vele, addig csinálok mást. Vagy miért várjak arra, hogy lenyomjanak egy gombot? Szóljon a megszakítás, hogy lenyomták azt a gombot, és majd akkor foglalkozok vele.

    Neked konkrétan egy (vagy akár több) timer megszakításra van szükséged, amivel időzíted a motorod sebességét. Ha le akarod állítani a motort, akkor vagy egy flag-el jelzed a kiszolgáló rutinnak, hogy az a motor éppen áll, vagy ha külön timer-eket használsz, akkor egyszerűen leállítod a timert. A sebességet vagy a timer-rel változtatod, vagy a timert beállítod olyan sűrű megszakításra, amiből tudsz egyszerűen osztással sebességet állítani.

    A megszakítást kiszolgáló rutinok nem futhatnak a végtelenségig, előbb-utóbb vissza kell térniük a rendes programhoz, hogy más megszakítások is kiszolgálásra kerülhessenek (vagy lehet még a prioritással is játszani). Ezzel azt akarom mondani, hogy minél gyorsabban lefut a rutin, annál jobb. És ehhez nem árt, ha az ember ismeri a proci utasításkészletét, hogyan lehet assembly utasításokat beépíteni a C kódba, hogyan tud együtt működni a két nyelv.

Új hozzászólás Aktív témák