<html><body><div>Hele, čtu to dobře, že to je SPI nebo synchroní sériák?</div><div>Co tě nutí to dělat bit bankingem? Proč nepoužiješ SPI devic přímo v hardware procesoru?<br></div><div><br></div><aside>---------- Původní e-mail ----------<br>Od: Jirka Mww <jirka.mww@gmail.com><br>Komu: HW-news <hw-list@list.hw.cz><br>Datum: 29. 1. 2024 14:08:29<br>Předmět: Re: Zase Arduino - jak dostat data do přerušení</aside><br><blockquote data-email="jirka.mww@gmail.com"><div dir="ltr">Dobrý den,<div><br></div><div>tak jsem se k tomu zase dostal, dole je zdrojovy kod té přerušovací rutiny.  K tomu jen pár vysvětlení :</div><div>Celé to má sloužit k imitaci snímače absolutního úhlu ,  je to spouštěné sestupnou hranou CS ( žlutá) , CLKEXT ( fialová)  , jsou hodiny  generované nadřízeným systémem, DOEXT je výstup s daty, měla by se přenést proměnná TEST1. </div><div>V hlavní smyčce programu je aktuálně jen delay (100), jinak se tam nic nedělá</div><div>Proměnná TEST1 se v přerušovací rutině opakovaně plní 0xAAA, takže riziko, že ji nějak přepíše něco v hlavní smyčce je snad nulové</div><div>Když ten řádek, kde se zapisuje , tj. <span style="color:rgb(78,91,97);font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre"> </span><span style="font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre;color:rgb(211,84,0)">digitalWrite</span><span style="color:rgb(78,91,97);font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre"> </span><span style="font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre;color:rgb(67,79,84)">(</span><span style="color:rgb(78,91,97);font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre">DOEXT,</span><span style="font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre;color:rgb(211,84,0)">bitRead</span><span style="font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre;color:rgb(67,79,84)">(</span><span style="color:rgb(78,91,97);font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre">TEST1,R</span><span style="font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre;color:rgb(67,79,84)">))</span><span style="color:rgb(78,91,97);font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre">;  nahradím tím, co je v komentáři ( XREF= !XREF atd...), tj. jen reverzací proměnné XREF</span></div><div><span style="color:rgb(78,91,97);font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre">tak to dává data dle obrázku v příloze - žlutá je CS, od toho je to přerušení, fialová jsou hodiny - oboje generované nadřízeným systémem</span></div><div><span style="color:rgb(78,91,97);font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre">Modrá jsou data - tak nějak bych si to představoval , že by to mělo vypadat</span></div><div>Na všech třech drátech mám osciloskop - viz přiložený obrázek  </div><div>Když to pustím po resetu s tím digitalWrite<span style="font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre;color:rgb(67,79,84)">(</span><span style="color:rgb(78,91,97);font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre">DOEXT,</span><span style="font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre;color:rgb(211,84,0)">bitRead</span><span style="font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre;color:rgb(67,79,84)">(</span><span style="color:rgb(78,91,97);font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre">TEST1,R</span><span style="font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre;color:rgb(67,79,84)">))</span><span style="color:rgb(78,91,97);font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre">; tak mi na osciloskopu nějaká data jednou probliknou, ani nejsou celá, a pak ten výstup DOEXT ( modrý ) zůstane trvale v nule.</span></div><div><span style="color:rgb(78,91,97);font-family:Consolas,'Courier New',monospace;font-size:14px;white-space:pre"><br></span></div><div><br></div><div><br></div><div><div style="color:rgb(78,91,97);font-family:Consolas,'Courier New',monospace;font-size:14px;line-height:19px;white-space:pre"><div><span style="color:rgb(149,165,166)">   /*  RUTINA PRo VYSTUP DAT     */</span></div><div> <span style="color:rgb(0,151,157)">void</span> <span style="color:rgb(211,84,0)">DataOut</span><span style="color:rgb(67,79,84)">()</span> <span style="color:rgb(67,79,84)">{</span></div><div><span style="color:rgb(149,165,166)">   // cli(); // disable global interrupts</span></div><div>   <span style="color:rgb(0,151,157)">volatile</span> byte K;<span style="color:rgb(149,165,166)">                 // pocitadlo pro hodiny</span></div><div>   <span style="color:rgb(0,151,157)">volatile</span> byte R;<span style="color:rgb(149,165,166)">                 // pocitadlo pro vystup bitu</span></div><div>   <span style="color:rgb(0,151,157)">volatile</span> <span style="color:rgb(0,151,157)">unsigned</span> <span style="color:rgb(0,151,157)">int</span>  TEST1 = 0x<span style="color:rgb(0,92,95)">AAA</span>;<span style="color:rgb(149,165,166)">             // jen pro test</span></div><div>   <span style="color:rgb(0,151,157)">volatile</span> byte  XREF = <span style="color:rgb(0,92,95)">0</span>;<span style="color:rgb(149,165,166)">           // pro vysledek</span></div><div>    K= <span style="color:rgb(0,92,95)">10</span>;</div><div>    R= <span style="color:rgb(0,92,95)">10</span>;</div><div>     XREF = <span style="color:rgb(0,92,95)">0</span>;</div><div>   <span style="color:rgb(114,142,0)">do</span> <span style="color:rgb(67,79,84)">{</span> <span style="color:rgb(211,84,0)">digitalRead</span><span style="color:rgb(67,79,84)">(</span>CLKEXT<span style="color:rgb(67,79,84)">)</span>;<span style="color:rgb(67,79,84)">}</span> <span style="color:rgb(114,142,0)">while</span> <span style="color:rgb(67,79,84)">(</span><span style="color:rgb(211,84,0)">digitalRead</span><span style="color:rgb(67,79,84)">(</span>CLKEXT<span style="color:rgb(67,79,84)">)</span> == HIGH<span style="color:rgb(67,79,84)">)</span>;<span style="color:rgb(149,165,166)">// ceka na sest. hranu hodin</span></div><div>   <span style="color:rgb(211,84,0)">delayMicroseconds</span><span style="color:rgb(67,79,84)">(</span><span style="color:rgb(0,92,95)">30</span><span style="color:rgb(67,79,84)">)</span>;</div><div>   <span style="color:rgb(114,142,0)">do</span>  <span style="color:rgb(67,79,84)">{</span></div><div>          <span style="color:rgb(114,142,0)">do</span> <span style="color:rgb(67,79,84)">{</span><span style="color:rgb(211,84,0)">digitalRead</span><span style="color:rgb(67,79,84)">(</span>CLKEXT<span style="color:rgb(67,79,84)">)</span>;<span style="color:rgb(67,79,84)">}</span> <span style="color:rgb(114,142,0)">while</span> <span style="color:rgb(67,79,84)">(</span><span style="color:rgb(211,84,0)">digitalRead</span><span style="color:rgb(67,79,84)">(</span>CLKEXT<span style="color:rgb(67,79,84)">)</span> == LOW<span style="color:rgb(67,79,84)">)</span>;<span style="color:rgb(149,165,166)"> // ceka na vzestupnou hranu, aby zapsal data</span></div><div>          <span style="color:rgb(211,84,0)">delayMicroseconds</span><span style="color:rgb(67,79,84)">(</span><span style="color:rgb(0,92,95)">3</span><span style="color:rgb(67,79,84)">)</span>;</div><div>          <span style="color:rgb(211,84,0)">digitalWrite</span> <span style="color:rgb(67,79,84)">(</span>DOEXT,<span style="color:rgb(211,84,0)">bitRead</span><span style="color:rgb(67,79,84)">(</span>TEST1,R<span style="color:rgb(67,79,84)">))</span>;  // tady je problem</div><div><span style="color:rgb(149,165,166)">    // XREF = !XREF;                                                             // tohle dává obrázek na osciloskopu v příloze</span></div><div><span style="color:rgb(149,165,166)">    // if ( XREF > 0) {digitalWrite (DOEXT,0);} else { digitalWrite (DOEXT,1);} </span></div><div>        <span style="color:rgb(211,84,0)">delayMicroseconds</span><span style="color:rgb(67,79,84)">(</span><span style="color:rgb(0,92,95)">30</span><span style="color:rgb(67,79,84)">)</span>;</div><div>        K= K-<span style="color:rgb(0,92,95)">1</span>; </div><div>        R = R-<span style="color:rgb(0,92,95)">1</span>;</div><div>        <span style="color:rgb(114,142,0)">do</span> <span style="color:rgb(67,79,84)">{</span><span style="color:rgb(211,84,0)">digitalRead</span><span style="color:rgb(67,79,84)">(</span>CLKEXT<span style="color:rgb(67,79,84)">)</span>;<span style="color:rgb(67,79,84)">}</span> <span style="color:rgb(114,142,0)">while</span> <span style="color:rgb(67,79,84)">(</span><span style="color:rgb(211,84,0)">digitalRead</span><span style="color:rgb(67,79,84)">(</span>CLKEXT<span style="color:rgb(67,79,84)">)</span> == HIGH<span style="color:rgb(67,79,84)">)</span>;<span style="color:rgb(149,165,166)">  // ceka na sestupnou hranu kdy Master cte data</span></div><div>         <span style="color:rgb(211,84,0)">delayMicroseconds</span><span style="color:rgb(67,79,84)">(</span><span style="color:rgb(0,92,95)">30</span><span style="color:rgb(67,79,84)">)</span>;</div><div>        <span style="color:rgb(67,79,84)">}</span>  <span style="color:rgb(114,142,0)">while</span>  <span style="color:rgb(67,79,84)">(</span>K>= <span style="color:rgb(0,92,95)">0</span><span style="color:rgb(67,79,84)">)</span>; </div><div>     <span style="color:rgb(114,142,0)">do</span> <span style="color:rgb(67,79,84)">{</span><span style="color:rgb(211,84,0)">digitalRead</span><span style="color:rgb(67,79,84)">(</span>CLKEXT<span style="color:rgb(67,79,84)">)</span>;<span style="color:rgb(67,79,84)">}</span> <span style="color:rgb(114,142,0)">while</span> <span style="color:rgb(67,79,84)">(</span><span style="color:rgb(211,84,0)">digitalRead</span><span style="color:rgb(67,79,84)">(</span>CLKEXT<span style="color:rgb(67,79,84)">)</span> == LOW<span style="color:rgb(67,79,84)">)</span>;<span style="color:rgb(149,165,166)">  // konecny prechod do jednicky    </span></div><div>     <span style="color:rgb(211,84,0)">sei</span><span style="color:rgb(67,79,84)">()</span>;<span style="color:rgb(149,165,166)"> // enable interrupts</span></div><div>  </div><div>  <span style="color:rgb(67,79,84)">}</span><span style="color:rgb(149,165,166)"> // konec preruseni</span></div></div></div><div> <br clear="all"><div><div dir="ltr" class="-wm-gmail_signature">Zdravi<br>Jirka Sloupenský  OK1MWW</div></div><br></div></div><div id="-wm-DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2"><br><table style="border-top:1px solid #d3d4de"><tbody><tr><td style="width:55px;padding-top:13px"><a href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail"><img src="https://s-install.avcdn.net/ipm/preview/icons/icon-envelope-tick-round-orange-animated-no-repeat-v1.gif" alt width="46" height="29" style="width:46px;height:29px"></a></td><td style="width:470px;padding-top:12px;color:#41424e;font-size:13px;font-family:Arial,Helvetica,sans-serif;line-height:18px">Neobsahuje žádné viry.<a href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail" style="color:#4453ea">www.avast.com</a></td></tr></tbody></table><a href="#-wm-DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2"></a></div><br><div class="-wm-gmail_quote"><div dir="ltr" class="-wm-gmail_attr">ne 28. 1. 2024 v 20:49 odesílatel Jaroslav Buchta <<a href="mailto:jaroslav.buchta@hascomp.cz">jaroslav.buchta@hascomp.cz</a>> napsal:<br></div><blockquote class="-wm-gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u>

  
    
  
  <div>
    <div>nebo sem poslat cast zdrojaku...<br>
    </div>
    <div>Dne 28.01.2024 v 20:09 Jirka Mww
      napsal(a):<br>
    </div>
    <blockquote>
      
      <div dir="auto">Tím to bohužel nebude, v současném stavu tam v
        hlavní smyčce dávám konstantu a ani ta se celá neposle.Bude to
        nějaká blbost, asi to chce pauzu...</div>
      <br>
      <div class="-wm-gmail_quote">
        <div dir="ltr" class="-wm-gmail_attr">Dne ne 28. 1. 2024 19:03
          uživatel Jaroslav Buchta <<a href="mailto:jaroslav.buchta@hascomp.cz">jaroslav.buchta@hascomp.cz</a>>
          napsal:<br>
        </div>
        <blockquote class="-wm-gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div>
            <div>Data jsou sdilena v jednom pametovem prostoru, v tom by
              problem byt nemel. Tipnul bych, ze bude nejaky problem v
              synchronizaci hlavni smycky a data se prepisou znova driv,
              nez se odeslou?<br>
            </div>
            <div>Dne 28.01.2024 v 19:00 Jirka Mww napsal(a):<br>
            </div>
            <blockquote>
              <div dir="ltr">Dobrý večer,
                <div><br>
                </div>
                <div>zase se tady trápím s Arduinem.  Potřebuji v
                  přerušení od pinu 2 u Arduino Nano poslat ven dvanáct
                  bitů.  Přerušení vyvolá vstup CS od nadřízeného
                  stroje, pak jdou hodiny asi po 200  uS a na jejich
                  sestupnou hranu potřebuji posílat ven data.  V
                  podstatě mi to funguje, pokud ta data, co potřebuji
                  poslat, vytvořím až v té přerušovací proceduře.  Nevím
                  ale, jak tam dostat data, která vyrobím v hlavní
                  smyčce. Deklaraci té proměnné , co chci poslat, mám
                  jako volatile unsigned integer , zkoušel jsem i
                  volatile byte, deklaraci  mám v hlavním programu
                  ,zkoušel jsem to deklarovat i v té přerušovací
                  proceduře, ale nejsem úspěšný.  Ta data se pošlou jen
                  jednou, a ještě ne celá. Pak to vypadá, že se ta data
                  nějak smažou, nebo co. Posílá to už jen nuly. 
                  Bohužel, ladící výpis tam nejde udělat.  Můžete
                  mne prosím zase nějak nakopnout ?</div>
                <div><br clear="all">
                  <div>
                    <div dir="ltr" class="-wm-gmail_signature">Zdravi<br>
                      Jirka Sloupenský  OK1MWW</div>
                  </div>
                </div>
              </div>
              <br>
              <div></div>
              <pre>_______________________________________________
HW-list mailing list  -  sponsored by <a href="http://www.hw.cz" rel="noreferrer">www.HW.cz</a>
<a href="mailto:Hw-list@list.hw.cz" rel="noreferrer">Hw-list@list.hw.cz</a>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
            </blockquote>
            <p><br>
            </p>
          </div>
          _______________________________________________<br>
          HW-list mailing list  -  sponsored by <a href="http://www.hw.cz" rel="noreferrer noreferrer">www.HW.cz</a><br>
          <a href="mailto:Hw-list@list.hw.cz" rel="noreferrer">Hw-list@list.hw.cz</a><br>
          <a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer noreferrer">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
        </blockquote>
      </div>
      <br>
      <div></div>
      <pre>_______________________________________________
HW-list mailing list  -  sponsored by <a href="http://www.hw.cz">www.HW.cz</a>
<a href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
    </blockquote>
    <p><br>
    </p>
  </div>

_______________________________________________<br>
HW-list mailing list  -  sponsored by <a href="http://www.hw.cz" rel="noreferrer">www.HW.cz</a><br>
<a href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><br>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
</blockquote></div>
_______________________________________________
<br>HW-list mailing list  -  sponsored by www.HW.cz
<br>Hw-list@list.hw.cz
<br>http://list.hw.cz/mailman/listinfo/hw-list
<br></blockquote></body></html>