Re: Arduino generování pulzů

Petr Zapadlo zapik na email.cz
Úterý Srpen 1 06:28:22 CEST 2023


Zdravím,

to jsem neznal díky.  Jak se dívám, tak digitalWritefast() je pouze sada 
maker, která rozvine zápis na GPIO na zápis přes registry  případě 
konstantního argumentu čísla pinu.

Tenhle syntaktický cukr je už na můj vkus příliš sladký, asi zůstanu u 
klasického přístupu - pokud to bude nekritické, tak digitalWrite, pokud 
to bude časově kritické, tak přístup přes registry (a nemíchat v jednom 
kodu).

Spíše mě zaujala ta poznámka o neatomicitě   zápisu v přerušení.

Chápu to správně, že když se mi přerušení, které manipuluje například s 
bity 4-7 portu D trefí přesně do okamžiku kdy jsem načetl stav portu D 
pro potřeby například OR (chci nahodit  bit 0, portu D), tak vlastně po 
zápisu na port v hlavní smyčce  "vymažu" změnu co proběhla v přerušení?

Jak se to dá řešit? ( samozřejmě kromě zakázání přerušení)

Díky

Petr


Dne 31. 07. 23 v 21:01 Ales Filip napsal(a):
> Dobrý den,
>
>
> Musíš použit.   digitalWritefast()  ;-)
>
>
> S pozdravem,
> -- 
>  Ales Filip
>  Kutna Hora
> /http://xanadu.khnet.info/ <http://xanadu.khnet.info/>
>
> Dne 30. července 2023 21:15:47 Petr Zapadlo <zapik na email.cz> napsal:
>
>> Ještě upozorním na to, že digitalWrite na atmega není moc efektivní -
>> kdysi jsem to  měřil a je asi tak 3x pomalejší než klasický přístup přes
>> registry.
>>
>> smyčka digitalWrite (pin, 0); digitalWrite(pin,1); nedal ani těch 20kHz
>> (jestli si správně pamatuju)
>>
>> Jinak na PWM těch 20kHz je úplně v poho - ale nesmí se k tomu použít
>> analogWrite - to nastaví PWM do nějakého základního stavu s frekvencí
>> někde kolem 400Hz.  prostě musíte načíst a ručně ponastavovat registry
>> nějakého časovače-
>>
>> Petr
>>
>>
>> Dne 30. 07. 23 v 19:51 Jaroslav Buchta napsal(a):
>>> Cekat v preruseni to se opravdu nedela. Neslo by to delat jako se
>>> hejbe krokovyma motorama?
>>> V preruseni nastavit novou hodnotu pro casovac odpovidajici pozadovane
>>> delce 0/1 a hejbnout GPIO. Klika je, ze u AVR ma preruseni dost malou
>>> rezii, treba u ARMu to takhle moc delat nejde.
>>>
>>> Dne 30.07.2023 v 19:45 Petr Simek napsal(a):
>>>> On Sun, 30 Jul 2023, Martin Záruba wrote:
>>>>
>>>>> // Obsluha přerušení od časovače Timer/Counter1
>>>>> ISR(TIMER1_OVF_vect) {
>>>>>   // Generování pulzu 1 na pinu 9 (při logické 1)
>>>>>   digitalWrite(9, HIGH);
>>>>>
>>>>>   // Počkejte na dobu odpovídající šířce pulzu 1
>>>>>   delayMicroseconds(pulseWidth1);
>>>>
>>>> Kdyz v preruseni vyvolate cekaci smycku, tak se to v tom preruseni
>>>> zablokuje ne ? Pak zalezi na prioritach - bud to jine preruseni
>>>> neprerusi, takze druhy puls bude zmrseny-zpozdeny, nebo prerusi
>>>> a protoze v nem to taky uvizne v cekaci smycce tak to zmrsi-prodlouzi
>>>> prvni puls.
>>>>
>>>>
>>>>
>>>>> Martin Záruba
>>>>
>>>> *------------------------------------------------------------------------* 
>>>>
>>>>
>>>> |                          Petr Simek APS
>>>> JU                           |
>>>> | psimek na jcu.cz                              |
>>>> *------------------------------------------------------------------------* 
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> 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.cz
>>> Hw-list na list.hw.cz
>>> http://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.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/20230801/250d454a/attachment.htm>


Další informace o konferenci Hw-list