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

Martin Záruba swz na volny.cz
Pondělí Leden 29 14:45:30 CET 2024


Hm. Ale přece operace bitový posun + and je tak primitivní, že si 
nedovedu vůbec představit, jaké funkce by měla potřebovat. Zkusil jste to?

Martin Záruba

Dne 29.1.2024 v 14:41 Jirka Mww napsal(a):
> Dobrý den,
> zkoušel jsem vyseparovat jednotlivé bity různými způsoby, ale 
> bezúspěšně.  Teď jsem ale dal povolení   přerušení sei(); hned na 
> začátek té přerušovací rutiny a ne až na konec a zdá se, že to začíná 
> fungovat.
> Asi  jsem tím přerušením blokoval nějaké funkce Arduina, i když nevím 
> jaké.....
>
>
>
> 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 14:34 odesílatel Martin Záruba <swz na volny.cz> napsal:
>
>     Pokud se nemýlím, tak obě verze se liší jen použitím bitRead.
>     Zkuste místo toho napsat posun TEST1 vpravo o R-1 + and 1
>
>     Martin Záruba
>
>     Dne 29.1.2024 v 14:07 Jirka Mww napsal(a):
>>     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>
>>
>>
>>
>>     ne 28. 1. 2024 v 20:49 odesílatel Jaroslav Buchta
>>     <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> 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 bywww.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 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  <http://www.HW.cz>
>>>         Hw-list na list.hw.cz
>>>         http://list.hw.cz/mailman/listinfo/hw-list
>>
>>
>>         _______________________________________________
>>         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  <http://www.HW.cz>
>>     Hw-list na list.hw.cz
>>     http://list.hw.cz/mailman/listinfo/hw-list
>     _______________________________________________
>     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/9e1645de/attachment-0001.htm>


Další informace o konferenci Hw-list