Nove AVR - SIGROW.OSC20ERR5V

Pavel Hudecek edizon na seznam.cz
Středa Duben 29 10:20:42 CEST 2020


Ráno moudřejší večera:-)

Teď jsem vzal osciloskop a změřil Fclk. Výsledek 20,1174 MHz.

Na rozdíl od noci, jsem teď taky pochopil, co je míněno „compressed Q1.10“ a z tý 6 mi vyšlo 20,1172 MHz. Takže opravená korekce je správně.

A má pravdu pan Sladký „kdo vi, jak presne funguje ten prijimajici UART“. Jedná se o UART v debugu na Xplained nano tiny416. K diskusi je, jak vzniká ten rozdíl oproti středu rozsahu fungujících hodnot.

Pan Sladký má pravdu i v tom, že by se mělo provést to přetypování. Takhle by to při záporné chybě nechodilo.

Dotaz: Je nějaký důvod, proč místo jednotlivých korekcí na různých místech, nenahradit konstantu F_CPU makrem, nebo funkcí stejného jména, ze kterého rovnou vyleze správný Fclk?

PH

Od: Pavel Hudecek
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.

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


Další informace o konferenci Hw-list