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

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Pondělí Leden 29 16:18:17 CET 2024


Arduino reseni, sry nedalo mi to ;-)
Nevime proc to nefungovalo, nevime, pro neco pomohlo ale je to hotovy... 
Ja uz po zkusenostech vim, ze se takovy pristu drive nebo pozdeji na 
100% vymsti.

Kazdopadne taky nemuzu prijit jen ctenim zdrojaku na to, kde je problem, 
ze to blokuje delsi dobu preruseni by asi v zakladu vadit nemelo, 
protoze snad knihovna pouziva jen jedno dalsi od casovace, ale nevim, co 
dela zbytek programu. Chtelo by to zkouset ruzne veci. A jeste by se 
program nemel dlouho zdrzovat v preruseni, zvlast pokud je to atmega a 
nema prioritni system.
Dne 29.01.2024 v 15:28 Jirka Mww napsal(a):
> Díky za připomínku, tohle jsem už opravil, zdá se, že to povolení 
> přerušení to vyřešilo, díky všem za pomoc.
>
> 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> 
>
>
>
> po 29. 1. 2024 v 15:09 odesílatel Miroslav Šinko <sinkomiro na gmail.com> 
> napsal:
>
>     Arduino kniznice nepoznam, a teda mozno toto nesuvisi s problemom..
>
>     volatile byte K;
>     ..
>     }while  (K>= 0);
>
>     Podmienka je vzdy platna, myslim, ze sa vam to ostane cyklit.
>
>     miro
>
>     On 29.01.2024 14:07, Jirka Mww wrote:
>     > 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
>     >
>     >
>     _______________________________________________
>     HW-list mailing list  -  sponsored by www.HW.cz <http://www.HW.cz>
>     Hw-list na list.hw.cz
>     http://list.hw.cz/mailman/listinfo/hw-list
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored bywww.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/c774816b/attachment.htm>


Další informace o konferenci Hw-list