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

Jirka Mww jirka.mww na gmail.com
Pondělí Leden 29 14:50:19 CET 2024


Ano, zkoušel jsem jak bitově posouvat tu proměnnou a maskovat jedním bitem
, tak jsem zkoušel posouvat jednobitovou masku.  Vypadá to ,že problém byl
v tom přerušení.  Teď jen doladit ,aby mi to dávalo na masteru  0xAAA a ne
0x555. (::::   Ale to už zvládnu správným nastavením toho ukazovátka v
bitRead();

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>
<#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>

po 29. 1. 2024 v 14:45 odesílatel Martin Záruba <swz na volny.cz> napsal:

> 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 by www.HW.czHw-list na list.hw.czhttp://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
>>>>
>>>
>>> _______________________________________________
>>> HW-list mailing list  -  sponsored by www.HW.czHw-list na list.hw.czhttp://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
>>>
>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.czHw-list na list.hw.czhttp://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
>>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.czHw-list na list.hw.czhttp://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/465e413f/attachment.htm>


Další informace o konferenci Hw-list