Калибровка встроенного RC-генератора

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 6673
Зарегистрирован: Пт сен 10, 2021 15:19:36
Откуда: Протвино

Сообщение AlexS4 »

Dimon456, а какая 2я эталоннаф частота такая же?

anw может быть несколько подходов:
1. напр исследовать интерференцию замешав их напр в A(+)B
затем выделить скажем разность dsp фильтрацией.
2.можно поделить одну из частот в 2^N раз и посчитать количество периодов другой частоты в периоде разделенной, тогда разрешающая способность будет Nbit.
3. если частоты сравнительно низкие - можно сравнивать количества какихто быстрых периодов в периоде одной и другой частоты. тогда разрешающая способность определяется соотношением периодов измеряемых частот и самого короткого измерительного интервала который можно создать, напр макс частотой таймера.
Реклама
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

AlexS4 писал(а): а какая 2я эталоннаф частота такая же?
Да, такая же, 32768Гц, ну раз имеем дело с часиками, и с точностью до одного герца.
AlexS4 писал(а):anw может быть несколько подходов:
Нет, что нибудь по проще.
Если бы был синус можно было бы осциллограф использовать, фигура Лиссажу, кстати с какой точностью можно осциллографом выставить?

А меандр, как насчет D-тригера?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15752
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

[uquote="akl",url="/forum/viewtopic.php?p=4107534#p4107534"][uquote="Карбофос",url="/forum/viewtopic.php?p=4107324#p4107324"]...Как это сделать?[/uquote]Как вариант. ...[/uquote]
Вообще-то у меня несколько иной вариант предполагался...
Выставляем базовый RC у аттини13 на 9,6 МГц
переводим CLKPR с 8 на 1 после запуска программы
Задается коэффициент для прескалера Т0 х64
коэффициент для таймера 150
В итоге имеем прерывание с интервалом в 1 миллисекунду (за время исполнения 9600 одноцикловых команд)
Данное прерывание выставляет байтик флагов для "заинтересованных процессов", одним из которых является наш таймер.
Собственно сам таймер состоит из двух счетчиков -
досчета до секунды (х1000), где собственно и вводится поправка коррекции отклонения точности хода,
и счетчика заданного пользователем интервала в секундах.
Это под ассемблером.
Для адуринки (Си) используем функцию millis() и те же два счетчика.
8)
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

BOB51, не важно как вы там сделаете, но вы должны с чем-то сравнивать.

Идея такова: берем D-тригер (может что еще можно, не знаю), к примеру на к155ла3 собрать, до 2МГц она спокойно работает,
на один вход D-тригер подаем сигнал образцовой частоты
на другой - сигнал с МК

на выходе D-тригера смотрим осциллографом, при равенстве частот там будет идеальный сигнал, вопрос состоит на сколько этот метод эффективен?

Подали на вход 32768Гц - с точностью 1Гц.
Подали 65536 - с точностью 0,5Гц.
131072 - с точностью 0,25Гц.

Вот и подгоняйте ваши прескалеры, коэффициенты, досчеты и пр.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 15752
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Сравнение простейшее выше уже предлагалось:
опорный генератор, линейка счетчиков с дешифратором но заданный интервал, счетчик рассогласования с индикацией и некоторая обвязка для одновременности подачи сигнала запуска и контроля сигнала останова(завершения) счета.
Правда насколько точен будет эталон - также вопрос.
8)
Подгонка константы коррекции такая же как и в обычных часах тик-так энное количество часов - убежали вперед - ставим в минус 1-2 условны единицы, опять проверяем - ежли не так как желаемо ставим соответственно коррекцию в + или в - на некоторое количество тех УЕ. И так пока не добиваемся приемлемого результата.
Долго, но весьма просто и доступно.
8)
Реклама
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

BOB51 писал(а):Сравнение простейшее выше уже предлагалось:
вы предлагаете собрать простейший частотомер.
BOB51 писал(а):Правда насколько точен будет эталон - также вопрос.
производитель уверяет точность 10 минус 12 степени.
По крайне мере я прогнал диапазон до 1МГц, контролируя показания прибором DM90A, единичку в единичку показывает.
BOB51 писал(а):Долго, но весьма просто и доступно.
[uquote="Dimon456",url="/forum/viewtopic.php?p=4107335#p4107335"]С часами как-то дело проще обстоит.
За основу можно взять часы тырнета.
На ds1307 получилось, за 455 часов отстали на 136 секунд, это на кварце 32768Гц с материнки.
Асинхронный таймер удалось настроить, за 215 часов отстал на 3 секунды, это на китайском кварце 32кГц.
Основной минус, долго ждать, а прибора измеряющего с точностью до 9 знака нет.[/uquote]
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15752
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Не частотомер, а специализированный комплект с элементами частотомера(в части измеритель -формирователя контрольного интервала) с автоматическим синхронным формированием импульсов запуска и останова счета. Дополнительный счётный узел считает разницу между импульсами завершения контрольного интервала. Тем самым исключая субъективность восприятия, обычную при визуальной сварке между экраном ПК и дисплеем проверяемого таймера.
8)
akl
Друг Кота
Сообщения: 4468
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Как вариант использовать метод биений.
Допустим, автомат или программа запускает счетчики периодов No и Kx в момент совпадения фронтов Fo и Fx. Автомат или программа определяет момент следующего совпадения фронтов. Тогда
To*No=Tx*Kx или, после преобразования
Fx=Fo*Kx/No
Пример:
No=5'000'001
Kx=5'000'000
100*Fx=32'768*5'000'000/5'000'001=3276799

Думаю, на той же tiny13 такое можно реализовать.
Модератор
Аватара пользователя
Сообщения: 19097
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

а как узнать, что фронты совпали?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
akl
Друг Кота
Сообщения: 4468
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Код: Выделить всё

.INCLUDE "tn13def.inc"

.def	ZERO=R15

.equ	Fo=9600000
.equ	Fo_PIN=1
.equ	Fx_PIN=2
.CSEG
;
;
;
SET_00:
	IN	R22,PINB
	ANDI	R22,1<<Fo_PIN|1<<Fx_PIN
	BRNE	SET_00
;пойманы оба 0
SET_11:
	IN	R22,PINB
	ANDI	R22,1<<Fo_PIN|1<<Fx_PIN
	CP	R22,R23
	BRNE	SET_11
;пойманы оба 11
Модератор
Аватара пользователя
Сообщения: 19097
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

а что такое R23? он у тебя не определен.
по логики-то понятно, что там должно быть 11 ...
и пока твои циклы крутятся в поиске совпадения, будет опоздание к совпадению до 4 машинных циклов. что может дать существенную ошибку.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

К155ЛА3 + осциллограф
Подал меандр с МК вот код
Спойлер

Код: Выделить всё

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 16000,000 kHz
// Mode: CTC top=OCR1A
// OC1A output: Toggle on compare match
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer Period: 0,015625 ms
// Output Pulse(s):
// OC1A Period: 0,03125 ms Width: 0,015625 ms
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (1<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
TCNT1=0x00;
ICR1=0x00;
OCR1A = 0xF9;
OCR1B=0x00;
Тактовая МК 16МГц, выход с МК 32кГц.
Более менее стабильные показания, но не совсем стабильные, мне удалось получить на эталонной частоте 31996Гц - 31997Гц, к сожалению не могу дробнее выставить.

А теперь посчитайте какая реальная частота кварца МК?
Друг Кота
Аватара пользователя
Сообщения: 6673
Зарегистрирован: Пт сен 10, 2021 15:19:36
Откуда: Протвино

Сообщение AlexS4 »

я бы детектировал совпадение фронтов сравнивая 2 бита gpio предыдущего(сохраненного) и текущего состояний, 00->11 так количество битов/сигналов неважно, хоть 2 хоть 8. и полная синхронность сэмплирования! и конечно это легко сводится к 1 операции сравнения например сдвигом и сравнением с паттерном. или xor+and.
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

Продолжаем эксперимент с К155ЛА3 и осциллографом.
32кГц это много и грубо.

100Гц.
Спойлер

Код: Выделить всё

TCCR1A=(0<<COM1A1) | (1<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (1<<CS11) | (0<<CS10);
OCR1A = 0x270F;
Почти стабильные показания удалось получить при 10001us 99,99Гц.

Спускаемся ниже, 10Гц
Спойлер

Код: Выделить всё

TCCR1A=(0<<COM1A1) | (1<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (1<<CS11) | (1<<CS10);
OCR1A = 0x30D3;
Почти, почти, идеальные показания удалось получить при 100011us 9,9989Гц.
По чему почти, я ловлю либо фронт либо спад сигнала, селектор развертки в положении 1ms, за 15 минут наблюдения сигнал сместился на 3 деления (не на три клеточки) от середины.

Думаю при 1 секунде можно получить идеальные показания.

Пока вы будете
детектировал совпадение фронтов сравнивая 2 бита
до 4 машинных циклов.
я определил точную частоту кварца МК 16001760Гц.
akl
Друг Кота
Сообщения: 4468
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Dimon456 писал(а):... определил точную частоту кварца МК 16001760Гц.
Это ошибка. До правки число 15998240 было правильнее.
Модератор
Аватара пользователя
Сообщения: 19097
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

Dimon456, может, сегодня не мой день,но я ничего не понял из твоего эксперимента с К155ЛА3 и осциллографом.
что ты подаешь на К155ЛА3 и что ты видишь на осциллографе?
и откуда взялись 100011 мкс?
Dimon456 писал(а):я определил точную частоту кварца МК 16001760Гц.
ну да, ошибка тут.
нужно 9,9989 Гц умножить на 1600000
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

akl, да вы правы.
Все равно это не поможет.
СпойлерВон с какой ошибкой получается

Код: Выделить всё

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 250,000 kHz
// Mode: CTC top=OCR1A
// OC1A output: Toggle on compare match
// Timer Period: 50 ms
// OC1A Period: 0,1 s Width: 50 ms
TCCR1A=(0<<COM1A1) | (1<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (1<<CS11) | (1<<CS10);
OCR1A = 0x30D3;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 249,973 kHz
// Mode: CTC top=OCR1A
// OC1A output: Toggle on compare match
// Timer Period: 50,002 ms
// OC1A Period: 0,1 s Width: 50,002 ms
TCCR1A=(0<<COM1A1) | (1<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (1<<CS11) | (1<<CS10);
OCR1A=0x30D2;
Хотя для этого, ошибка минимальна

Код: Выделить всё

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 2000,000 kHz
// Mode: CTC top=OCR1A
// OC1A output: Toggle on compare match
// Timer Period: 5 ms
// OC1A Period: 10 ms Width: 5 ms
TCCR1A=(0<<COM1A1) | (1<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (1<<CS11) | (0<<CS10);
OCR1A = 0x270F;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 1999,780 kHz
// Mode: CTC top=OCR1A
// OC1A output: Toggle on compare match
// Timer Period: 5,0001 ms
// OC1A Period: 10 ms Width: 5,0001 ms
TCCR1A=(0<<COM1A1) | (1<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (1<<CS11) | (0<<CS10);
OCR1A=0x270E;
Добавлено after 4 minutes 52 seconds:
Starichok51, берем D-тригер (может что еще можно, не знаю), к примеру на к155ла3 собрать, до 2МГц она спокойно работает,
на один вход D-тригер подаем сигнал образцовой частоты
на другой - сигнал с МК

на выходе D-тригера смотрим осциллографом, при равенстве частот там будет идеальный сигнал, я имею ввиду ширина импульса не будет изменяться.

Это то же самое, что вы пытаетесь
детектировал совпадение фронтов сравнивая 2 бита
, таким бы способом я бы совпадение фронтов ждал бы вечность.
akl
Друг Кота
Сообщения: 4468
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

[uquote="Dimon456",url="/forum/viewtopic.php?p=4108705#p4108705"]...Спускаемся ниже, 10Гц

Код: Выделить всё

TCCR1A=(0<<COM1A1) | (1<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (1<<CS11) | (1<<CS10);
OCR1A = 0x30D3;
Почти, почти, идеальные показания удалось получить при 100011us 9,9989Гц.
...определил точную частоту кварца МК 16001760Гц.[/uquote]
OC1A=F_CPU/Fout/PRESCALER/2 -> F_CPU=12'500*2*64*9,9989=15'998'240
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

На кварце написано 16.000, я думал что 16 и 000 он должен выдавать, ладно после 000 там не гарантируется.
Модератор
Аватара пользователя
Сообщения: 19097
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

Dimon456 писал(а):на выходе D-тригера смотрим осциллографом, при равенстве частот там будет идеальный сигнал, я имею ввиду ширина импульса не будет изменяться.
а еще был вопрос
Starichok51 писал(а):и откуда взялись 100011 мкс?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Ответить

Вернуться в «AVR»