<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Arduino je sada knihoven pro běžný překladač C++ pro platformu
      AVR.</p>
    <p>Nikde není řečeno, že ty knihovny musíte využít,  můžete přístup
      kombinovat (část funkcí z Arduino knihoven a část přímým
      přístupem).</p>
    <p>PORTD = 0b00001000;</p>
    <p>je prosté C/C++ přiřazení  a identifikátor PORTD je vyvtořen 
      tuším v této hlavičce:</p>
    <p>#include <avr/io.h></p>
    <p>Petr<br>
    </p>
    <div class="moz-cite-prefix">Dne 31. 07. 23 v 12:11 Martin Záruba
      napsal(a):<br>
    </div>
    <blockquote type="cite"
      cite="mid:fee6b223-8458-8499-e087-9d967a720a82@volny.cz">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <p><font face="Arial">Je mi to zcela jasné, nemám problém s
          programováním v assembleru. Mě jen naprosto nenapadlo, že
          Arduino IDE dovoluje příkaz PORT. Já myslel, že pouze příkazy
          uvedené v </font><a
          href="https://www.arduino.cc/reference/en/"
          moz-do-not-send="true">Arduino Reference - Arduino Reference</a>.</p>
      <p>Je někde seznam povelů, které Arduino IDE přijme?<br>
      </p>
      <pre class="moz-signature" cols="72">Martin Záruba</pre>
      <div class="moz-cite-prefix">Dne 31.7.2023 v 7:03 Petr Zapadlo
        napsal(a):<br>
      </div>
      <blockquote type="cite"
        cite="mid:a8dff6bd-635b-921c-0366-af3fc3dbbfac@email.cz">
        <meta http-equiv="Content-Type" content="text/html;
          charset=UTF-8">
        <p>digitalWrite je obalovací funkce, která jako vstup má číslo
          pinu, které však nemá žádnou vazbu na "přirozené číslování"
          pinů = identifikaci portu a konkrétního bitu. Tj například
          PORTB, bity 0-7. <br>
        </p>
        <p>Tady mátě jak je to vlastně rozložené:</p>
        <p><a class="moz-txt-link-freetext"
href="https://camo.githubusercontent.com/c55beef2f138da61fe671a1e4a307ff4ffbc318d/68747470733a2f2f692e696d6775722e636f6d2f715849456368542e6a7067"
            moz-do-not-send="true">https://camo.githubusercontent.com/c55beef2f138da61fe671a1e4a307ff4ffbc318d/68747470733a2f2f692e696d6775722e636f6d2f715849456368542e6a7067</a></p>
        <p>podstatné jsou pro vás hned ty zelené čísla u nožek.</p>
        <p>Tedy "arduino" pin označené jako 4 je ve skutečnosti PD4 =
          port D, bit 4. Stejně tak arduino pin 8 je ve skutečnosti PB0,
          tj port B, bit číslo 0.</p>
        <p>Proto digitalWrite musí vždy před nastavením udělat překlad
          co vlastně chcete nastavovat a to stojí nemalý čas. proto je
          digitalWrite dost pomalé.</p>
        <p>Přímý přístup může vypadat takto:</p>
        <p>//pojmenuji si pin signálem<br>
        </p>
        <p>#define RED PD4</p>
        <p>//nastavím pin jako výstupní, ekvivalent pinMode</p>
        <p>//set port D<br>
          DDRD |=(1<<RED);</p>
        <p>//nastavení bitu jako jednička</p>
        <p>PORTD |= (1<<RED);</p>
        <p>//nastavení bitu jako nula</p>
        <p>PORTD &= ~(1<<RED);</p>
        <p><br>
        </p>
        <p>ty nastavovačky možná vypadají jako magie, ale nejsou, je
          třeba si to rozložit co to dělá:</p>
        <p>(1<<RED), RED se přeloží (při překladu na číslo pinu,
          tj v tomto případě 4) a ta rotace posune jedničku ze základní
          pozice 4x, tj výsledkem tohoto je 0b00010000</p>
        <p>No a tohle číslo potom pomocí operace OR (to je to svislítko)
          vypropagujete na portD. OR se používá proto abych nastavením
          jedničky na pinu 4 neovlivnil ostatní porty.</p>
        <p>Stejně tak nulování bitu:</p>
        <p>PORTD &= ~(1<<RED);  (1<<RED) mi vyrobí (při
          překladu) číslo 0b00010000,  vlnovka před závorkou je negace,
          tj  0b11101111 a & je operace AND.  Z toho plyne, že bit 4
          je nulován (cokoliv* nula je nula) a ostatní bity zůstanou
          nedotčené.</p>
        <p><br>
        </p>
        <p>Pochopitelné?</p>
        <p>Petr<br>
        </p>
        <p><br>
        </p>
        <p><br>
        </p>
        <p><br>
        </p>
        <div class="moz-cite-prefix">Dne 30. 07. 23 v 22:15 Martin
          Záruba napsal(a):<br>
        </div>
        <blockquote type="cite"
          cite="mid:e1b90fc6-cdee-c6e9-8a7c-01febc914465@volny.cz">
          <meta http-equiv="Content-Type" content="text/html;
            charset=UTF-8">
          <p><font face="Arial">No a jak jinak nastavit příslušný bit?</font></p>
          <p><font face="Arial">A jak nastavit u PWM jinou frekvenci,
              než těch 400 Hz? A jak jej ovládat? Můžete poslat kousek
              kódu?</font><br>
          </p>
          <pre class="moz-signature" cols="72">Martin Záruba</pre>
          <div class="moz-cite-prefix">Dne 30.7.2023 v 21:15 Petr
            Zapadlo napsal(a):<br>
          </div>
          <blockquote type="cite"
            cite="mid:73711e7c-d074-bec1-94ab-b531dcb78eba@email.cz">Ještě
            upozorním na to, že digitalWrite na  atmega není moc
            efektivní - kdysi jsem to  měřil a je asi tak 3x pomalejší
            než klasický přístup přes registry. <br>
            <br>
            smyčka digitalWrite (pin, 0); digitalWrite(pin,1); nedal ani
            těch 20kHz (jestli si správně pamatuju) <br>
            <br>
            Jinak na PWM těch 20kHz je úplně v poho - ale nesmí se k
            tomu použít analogWrite - to nastaví PWM do nějakého
            základního stavu s frekvencí někde kolem 400Hz.  prostě
            musíte načíst a ručně ponastavovat registry nějakého
            časovače- <br>
            <br>
            Petr <br>
            <br>
            <br>
            Dne 30. 07. 23 v 19:51 Jaroslav Buchta napsal(a): <br>
            <blockquote type="cite">Cekat v preruseni to se opravdu
              nedela. Neslo by to delat jako se hejbe krokovyma
              motorama? <br>
              V preruseni nastavit novou hodnotu pro casovac
              odpovidajici pozadovane delce 0/1 a hejbnout GPIO. Klika
              je, ze u AVR ma preruseni dost malou rezii, treba u ARMu
              to takhle moc delat nejde. <br>
              <br>
              Dne 30.07.2023 v 19:45 Petr Simek napsal(a): <br>
              <blockquote type="cite">On Sun, 30 Jul 2023, Martin Záruba
                wrote: <br>
                <br>
                <blockquote type="cite">// Obsluha přerušení od časovače
                  Timer/Counter1 <br>
                  ISR(TIMER1_OVF_vect) { <br>
                    // Generování pulzu 1 na pinu 9 (při logické 1) <br>
                    digitalWrite(9, HIGH); <br>
                  <br>
                    // Počkejte na dobu odpovídající šířce pulzu 1 <br>
                    delayMicroseconds(pulseWidth1); <br>
                </blockquote>
                <br>
                Kdyz v preruseni vyvolate cekaci smycku, tak se to v tom
                preruseni <br>
                zablokuje ne ? Pak zalezi na prioritach - bud to jine
                preruseni <br>
                neprerusi, takze druhy puls bude zmrseny-zpozdeny, nebo
                prerusi <br>
                a protoze v nem to taky uvizne v cekaci smycce tak to
                zmrsi-prodlouzi <br>
                prvni puls. <br>
                <br>
                <br>
                <br>
                <blockquote type="cite">Martin Záruba <br>
                </blockquote>
                <br>
*------------------------------------------------------------------------*
                <br>
                |                          Petr Simek   APS
                JU                           | <br>
                | <a class="moz-txt-link-abbreviated
                  moz-txt-link-freetext" href="mailto:psimek@jcu.cz"
                  moz-do-not-send="true">psimek@jcu.cz</a>                             
                | <br>
*------------------------------------------------------------------------*
                <br>
                <br>
                _______________________________________________ <br>
                HW-list mailing list  -  sponsored by <a
                  class="moz-txt-link-abbreviated"
                  href="http://www.HW.cz" moz-do-not-send="true">www.HW.cz</a>
                <br>
                <a class="moz-txt-link-abbreviated
                  moz-txt-link-freetext"
                  href="mailto:Hw-list@list.hw.cz"
                  moz-do-not-send="true">Hw-list@list.hw.cz</a> <br>
                <a class="moz-txt-link-freetext"
                  href="http://list.hw.cz/mailman/listinfo/hw-list"
                  moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a>
                <br>
              </blockquote>
              <br>
              <br>
              _______________________________________________ <br>
              HW-list mailing list  -  sponsored by <a
                class="moz-txt-link-abbreviated" href="http://www.HW.cz"
                moz-do-not-send="true">www.HW.cz</a> <br>
              <a class="moz-txt-link-abbreviated moz-txt-link-freetext"
                href="mailto:Hw-list@list.hw.cz" moz-do-not-send="true">Hw-list@list.hw.cz</a>
              <br>
              <a class="moz-txt-link-freetext"
                href="http://list.hw.cz/mailman/listinfo/hw-list"
                moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a>
              <br>
            </blockquote>
            _______________________________________________ <br>
            HW-list mailing list  -  sponsored by <a
              class="moz-txt-link-abbreviated" href="http://www.HW.cz"
              moz-do-not-send="true">www.HW.cz</a> <br>
            <a class="moz-txt-link-abbreviated moz-txt-link-freetext"
              href="mailto:Hw-list@list.hw.cz" moz-do-not-send="true">Hw-list@list.hw.cz</a>
            <br>
            <a class="moz-txt-link-freetext"
              href="http://list.hw.cz/mailman/listinfo/hw-list"
              moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a>
            <br>
          </blockquote>
          <br>
          <fieldset class="mimeAttachmentHeader"></fieldset>
          <pre class="moz-quote-pre" wrap="">_______________________________________________
HW-list mailing list  -  sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz" moz-do-not-send="true">www.HW.cz</a>
<a class="moz-txt-link-abbreviated moz-txt-link-freetext" href="mailto:Hw-list@list.hw.cz" moz-do-not-send="true">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list" moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
        </blockquote>
        <br>
        <fieldset class="moz-mime-attachment-header"></fieldset>
        <pre class="moz-quote-pre" wrap="">_______________________________________________
HW-list mailing list  -  sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz" moz-do-not-send="true">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz" moz-do-not-send="true">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list" moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
      </blockquote>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
HW-list mailing list  -  sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
    </blockquote>
  </body>
</html>