Re: Zase Arduino - jak dostat data do přerušení

Jindrich Fucik FULDA na seznam.cz
Pondělí Leden 29 16:04:02 CET 2024


Hele, čtu to dobře, že to je SPI nebo synchroní sériák?

Co tě nutí to dělat bit bankingem? Proč nepoužiješ SPI devic přímo v 
hardware procesoru?




---------- Původní e-mail ----------
Od: Jirka Mww <jirka.mww na gmail.com>
Komu: HW-news <hw-list na list.hw.cz>
Datum: 29. 1. 2024 14:08:29
Předmět: Re: Zase Arduino - jak dostat data do přerušení
"
Dobrý den,



tak jsem se k tomu zase dostal, dole je zdrojovy kod té přerušovací rutiny. 
 K tomu jen pár vysvětlení :

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. 

V hlavní smyčce programu je aktuálně jen delay (100), jinak se tam nic 
nedělá

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é

Když ten řádek, kde se zapisuje , tj.  digitalWrite (DOEXT,bitRead(TEST1,R))
; nahradím tím, co je v komentáři ( XREF= !XREF atd...), tj. jen reverzací 
proměnné XREF

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

Modrá jsou data - tak nějak bych si to představoval , že by to mělo vypadat

Na všech třech drátech mám osciloskop - viz přiložený obrázek  

Když to pustím po resetu s tím digitalWrite(DOEXT,bitRead(TEST1,R)); tak mi 
na osciloskopu nějaká data jednou probliknou, ani nejsou celá, a pak ten 
výstup DOEXT ( modrý ) zůstane trvale v nule.












   /*  RUTINA PRo VYSTUP DAT     */

 void DataOut() {

   // cli(); // disable global interrupts

   volatile byte K;                 // pocitadlo pro hodiny

   volatile byte R;                 // pocitadlo pro vystup bitu

   volatile unsigned int  TEST1 = 0xAAA;             // jen pro test

   volatile byte  XREF = 0;           // pro vysledek

    K= 10;

    R= 10;

     XREF = 0;

   do { digitalRead(CLKEXT);} while (digitalRead(CLKEXT) == HIGH);// ceka na
sest. hranu hodin

   delayMicroseconds(30);

   do  {

          do {digitalRead(CLKEXT);} while (digitalRead(CLKEXT) == LOW); // 
ceka na vzestupnou hranu, aby zapsal data

          delayMicroseconds(3);

          digitalWrite (DOEXT,bitRead(TEST1,R)); // tady je problem

    // XREF = !XREF; // tohle dává obrázek na osciloskopu v příloze

    // if ( XREF > 0) {digitalWrite (DOEXT,0);} else { digitalWrite (DOEXT,
1);} 

        delayMicroseconds(30);

        K= K-1; 

        R = R-1;

        do {digitalRead(CLKEXT);} while (digitalRead(CLKEXT) == HIGH);  // 
ceka na sestupnou hranu kdy Master cte data

         delayMicroseconds(30);

        }  while  (K>= 0); 

     do {digitalRead(CLKEXT);} while (digitalRead(CLKEXT) == LOW);  // 
konecny prechod do jednicky    

     sei(); // enable interrupts

  

  } // konec preruseni



 


Zdravi
Jirka Sloupenský  OK1MWW








 
(https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail)
	Neobsahuje žádné viry.www.avast.com
(https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail)
	

(#-wm-DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2)



ne 28. 1. 2024 v 20:49 odesílatel Jaroslav Buchta <jaroslav.buchta na hascomp.
cz(mailto:jaroslav.buchta na hascomp.cz)> napsal:

" 

nebo sem poslat cast zdrojaku...


Dne 28.01.2024 v 20:09 Jirka Mww napsal(a):

" 
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...



Dne ne 28. 1. 2024 19:03 uživatel Jaroslav Buchta <jaroslav.buchta na hascomp.
cz(mailto:jaroslav.buchta na hascomp.cz)> napsal:

" 

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?


Dne 28.01.2024 v 19:00 Jirka Mww napsal(a):

" 
Dobrý večer, 



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 ?




Zdravi
Jirka Sloupenský  OK1MWW
 






_______________________________________________
HW-list mailing list  -  sponsored by <a rel='noreferrer' href='http://www.hw.cz'>www.HW.cz</a>
<a rel='noreferrer' href='mailto:Hw-list na list.hw.cz'>Hw-list na list.hw.cz</a>
<a rel='noreferrer' href='http://list.hw.cz/mailman/listinfo/hw-list'>http://list.hw.cz/mailman/listinfo/hw-list</a>

" 



_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz(http://www.hw.cz)
Hw-list na list.hw.cz(mailto:Hw-list na list.hw.cz)
http://list.hw.cz/mailman/listinfo/hw-list
(http://list.hw.cz/mailman/listinfo/hw-list)
" 




_______________________________________________
HW-list mailing list  -  sponsored by <a href='http://www.hw.cz'>www.HW.cz</a>
<a href='mailto:Hw-list na list.hw.cz'>Hw-list na list.hw.cz</a>
<a href='http://list.hw.cz/mailman/listinfo/hw-list'>http://list.hw.cz/mailman/listinfo/hw-list</a>

" 



_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz(http://www.hw.cz)
Hw-list na list.hw.cz(mailto:Hw-list na list.hw.cz)
http://list.hw.cz/mailman/listinfo/hw-list
(http://list.hw.cz/mailman/listinfo/hw-list)
"
_______________________________________________ 
HW-list mailing list - sponsored by www.HW.cz 
Hw-list na list.hw.cz 
http://list.hw.cz/mailman/listinfo/hw-list 
"
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240129/71b07f67/attachment-0001.htm>


Další informace o konferenci Hw-list