AVR128 (ATmega128) funkce delay_us - příliš dlouhé zpoždění

ahoj ,
používám atmegu128 , program od ASIXu a v něm mám nastavený interní oscilátor 1MHz.Používám program CodeVisionAVR a v tomto programu když napíšu funkci delay_us(500); tak se mi na osciloskopu zobrazí pulz dlouhý 2000us , což je 4x více než by mělo být.
díky za rady

:arrow_right: administrator: přejmenováno z "interní oscilátor u AVR128"

Predpokladam ze sa ta mmusi niekde priradit hodnota frekvencie oscilatora alebo priamo nastavit v programe…

Datasheets str.42

nastavuji to pouze v programu Asix a pokud se dobře koukám do datasheetu amtgegy128 tak by měl být interní oscilátor defaultně nastaven 1 MHz.

a co máš nastavené v tom CodeVisionAVR ?? Tam to musíš mít taky nastavené

V CodeVison AVR nic nenastavuji , protože to hází chybu.
Když napíšu do programu
CKSEL.0 = 1;
CKSEL.1 = 0;
CKSEL.2 = 0;
CKSEL.3 = 0;
což znamená nastav interní oscilátor na frekvenci 1MHz tak překladač hází chybu undefined symbol

Typ oscilátoru (např. interní 1 MHz) se nedá nastavit žádnými příkazy v programu.
Nastavuje se pomocí programátoru, změnou konfiguračních bitů.

Překladači potom musíme sdělit skutečnou frekvenci oscilátoru.

Nový Avr má nastavený interní oscilátor 1 MHz.
V CodeVision Menu-Project-Configure-C compiler je třeba nastavit “Clock” na 1 MHz.

jj , máš pravdu , já tam mám nastaveno 4MHz.
díky za rady

Jen bych dodal, že pracovní frekvenci megy128 jde měnit (pouze snížit) programově za chodu. To by taky ovlivnilo delay().
Slouží k tomu XTAL Divide Control Register – XDIV

CHybí ti definice
#define F_CPU 1000000U
Tuhle definici potřebuje knihovna util/delay.h
Výchozí hodnota je 4MHz, proto správně ti to zpožďuje nyní 2000us.