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

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


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
> 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/9394395c/attachment.htm>


Další informace o konferenci Hw-list