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