Nove AVR - SIGROW.OSC20ERR5V

Pavel Hudecek edizon na seznam.cz
Čtvrtek Duben 30 15:16:59 CEST 2020


No, to bylo přesně jedním z cílů a dokonce to vypadalo na funkčnost, ale vzhledem k testu ve větším programu se chyba asi ztratila pořadím includů. Teď když to mám separované, protestuje.

No neva. Makro tedy bude z F_CPU dělat F_CPUcorrect.

Delay stejně téměř nepoužívám. Obvykle mám cekej a to používá přerušení.

A ještě jednou, tentokrát záporně:

#define F_test1 (F_CPUnom + ((F_CPUnom * (int8_t)-50) >> 10))
#define F_test2 (F_CPUnom + ((F_CPUnom * (int8_t)-50) / 1024L))

19023437
19023438
(rozdíl 1 je i při -6)

A teď co je „správnější“?

PH

Od: Jan Waclawek

:-)

Len taka poznamka na okraj, to makro moze pokazit miesta, kde sa pocita s
tym, ze ten F_CPU bude konstanta, napr. delay.h (mozno ziadne ine ani nie
je, vid dokumentaciu k avr-libc). Nie zeby som delay.h doporucoval...



----- Original Message ---------------

>Dokonce i víc, ale měl jsem noťas na židli u osciloskopu, tak jsem na to asi koukal moc šikmo:-)
>
>Díky. Funguje i tady.
>
>PH
>
>Od: Jan Waclawek
>
>>#define F_CPUnom 20000000L
>>#define F_CPU (F_CPUnom + (F_CPUnom * (int8_t)SIGROW.OSC20ERR5V) / 1024L)
>>
>>Dal jsem v 1kHz přerušení invertovat port. Bez korekce osciloskop ukáže 503,něco Hz, takto 500,9. Stejně dopadl i _delay_ms z delay.h.
>>
>>Zajímavé je, že veškeré pokusy o použití >>10 místo /1024 selhaly a lezly z toho ňáký MHz. A to včetně varianty, kdy jsem místo (int8_t)SIGROW.OSC20ERR5V) dal natvrdo 6L.
>
>A dal si dostatok zatvoriek?
>
>  a = (F_CPUnom + (F_CPUnom * (int8_t)6L) / 1024L);
>a = 20117187
>  a = (F_CPUnom + (F_CPUnom * (int8_t)6L) >> 10);
>a = 136718
>  a = (F_CPUnom + ((F_CPUnom * (int8_t)6L) >> 10));
>a = 20117187

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20200430/d986f1a7/attachment.html>


Další informace o konferenci Hw-list