Nove AVR - SIGROW.OSC20ERR5V

Pavel Hudecek edizon na seznam.cz
Středa Duben 29 02:19:30 CEST 2020


Dobrý den všem,

víte někdo, v jakých jednotkách je v SIGROW.OSC20ERR5V odchylka oscilátoru?

V DS ATtiny414 se lze dozvědět toto:
SIGROW.OSC20ERR5V is the frequency error from 20MHz measured at 5V

Případně:
This registers contain the signed oscillator frequency error value when running at internal 20MHz at 5V, as measured during production.

Je tam i ukázka použití:
int8_t sigrow_val = SIGROW.OSC16ERR3V; // read signed error
int32_t baud_reg_val = 600; // ideal BAUD
register value assert (baud >= 0x4A); // Verify legal min BAUD register value with max neg comp
baud_reg_val *= (1024 + sigrow_value); // sum resolution + error
baud_reg_val /= 1024; // divide by resolution
USART0.BAUD = (int16_t) baud_reg_val; // set adjusted baud rate

Ta ovšem „kompenzuje“ opačným směrem. Když jsem jí použil na ujetějším ks, tak se z textu, kde občas chybí písmenko, stal rozsypaný čaj. Vzhledem k sigrow_val vs sigrow_value je jasné, že to nikdy nebylo testováno. Jó Microchip, to je ono…

Zkusil jsem:
#define uartBaud(br) ((float) (F_CPU*64/(16*(float)br))+0.5)
n = uartBaud(19200);
n *= (1024 + SIGROW.OSC20ERR5V);
n /= 1024;
USART0.BAUD = n;

Hodnota SIGROW.OSC20ERR5V je v mém případě 6
Původní n je 4167
Kompenzované n 4191

Když ovšem udělám for cyklus 4000-4500, funguje 4036-4492, střed je tedy 4264.

Díky,
PH
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20200429/ffe6a744/attachment.html>


Další informace o konferenci Hw-list