Генератор из arduino

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
shev1975
Грызет канифоль
Сообщения: 287
Зарегистрирован: Чт апр 02, 2009 17:46:04
Откуда: Крым

Re: Генератор из arduino

Сообщение shev1975 »

[uquote="roman.com",url="/forum/viewtopic.php?p=4736678#p4736678"]чтобы просто
лучше режим FPWM...
там можно:
-менять частоту (ICR).
-менять скважность (OCR).[/uquote]
Так мне и нужна частота 25300Гц. FPWM я пытался визардом CVAVR настроить, он паразит мне 32кГц выдает, ошибка 19%. СТС частоту точнее выдает, с погрешностью 0,6%
Изображение
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Генератор из arduino

Сообщение roman.com »

допустим мне нужны часы.
для этого мне надо чтобы таймер тикал каждую секунду.
т.е. мне нужна частота таймера = 1 герц.

для этого берём:
-ардуино. (мега328)
-таймер номер 1.
-режим номер 14. (быстрая ШИМ с верхним пределом счета ICR).

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

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 31,250 kHz 
// Mode: Fast PWM top=ICR1
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x02; //WGM11=1, WGM10=0 
TCCR1B=0x1C; //WGM13=1, WGM12=1 //8.000.000 Hz/256 = 31250 Hz  
TCNT1H=0x00;
TCNT1L=0x00;

//unsigned int kor=31250;   // коррекция часы
ICR1H=(kor>>8);//регистр захвата - верхний предел счета = 31250 Hz / 31250 Hz = 1c
ICR1L=kor;     //регистр захвата - верхний предел счета = 31250 Hz / 31250 Hz = 1c
//ICR1H=0x00;  //регистр захвата - верхний предел счета = 31250 Hz / 31250 Hz = 1c
//ICR1L=0x00;  //регистр захвата - верхний предел счета = 31250 Hz / 31250 Hz = 1c

OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
Итого:
-тактовая частота ардуино (мега328) = 8.000.000 Hz
-делитель ставим на 256. Получаем: 8.000.000 Hz/256 = 31250 Hz
-задаём верхний предел счёта ICR = 31250.
-получаем частоту таймера ровно 1 герц.
:tea:
-если записать в OCR половину частоты таймера 31250/2=15625.
то получим на выходе чистый меандр частотой ровно 1 герц (и скважность 0,5).
:tea:

аналогично можно настроить таймер практически любую частоту.
:tea:
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Генератор из arduino

Сообщение OKF »

Рома, такие часы даже начинающие сейчас не делают.
Кварц плохой. Зачатую даже не кварц, а керамический резонатор. Неточный, нестабильный.
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Генератор из arduino

Сообщение Just_Fluffy »

да и я б не утверждала, что любую частоту....
Любую, но с погрешностью....
например, 987.0000 Гц со скважностью 0,5 чисто на таймере не получить....
Будет или 987.045Гц, или можно динамически играясь верхним пределом, например, в прерывании, получить среднюю частоту 987 герц, но с джиттером. И скважность там не будет 0.5
И чем выше будет требуемая частота , тем больше может быть погрешность.
Белая и Пушистая
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Генератор из arduino

Сообщение roman.com »

ну начинается))
:?
-кварц не тот...
-ардуино не та...
-и вообще алгоритм неправильный...
:facepalm:
всё... закидали тапками))
:)))
это был самый простой вариант.

ну предлагайте свой вариант.
:tea:
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Генератор из arduino

Сообщение OKF »

[uquote="roman.com",url="/forum/viewtopic.php?p=4736689#p4736689"]допустим мне нужны часы.[/uquote]
Самый бюджетный вариант. Ядро от intrc, таймер 2 в асинхронном режиме с часовым кварцем.
Ну и резервное питание CR2032 через Шоттки и sleep режим при этом.
Китайцы ставят ds1302 c CR1220 и МК какой подешевле, обычно из 8051 семейства.
Но ты ещё и об индикации не забывай. Наиболее дешево обычные светодиоды. А лучше цветные. Через драйверы.
Аватара пользователя
shev1975
Грызет канифоль
Сообщения: 287
Зарегистрирован: Чт апр 02, 2009 17:46:04
Откуда: Крым

Re: Генератор из arduino

Сообщение shev1975 »

[uquote="OKF",url="/forum/viewtopic.php?p=4736743#p4736743"]Самый бюджетный вариант. Ядро от intrc, таймер 2 в асинхронном режиме с часовым кварцем.
Ну и резервное питание CR2032 через Шоттки и sleep режим при этом.[/uquote]
Как дошло то до часов, изначально нужно было получить противофазный сигнал на двух выводах, для получения частоты 25300Гц. :shock: для питания ультразвукового излучателя.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Генератор из arduino

Сообщение Jack_A »

А если меандр будет со скважностью не 2, а к примеру 1,999 - мир рухнет? :))
Если есть пара свободных пин (пинов?), то чтоб не зас@орять себе мозги хитросплетениями таймерных режимов - я бы в прерывании синхронно инвертировал бы эту пару бит путём XOR. И заняло бы у меня написание этого куска кода секунд 5.
Изображение
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Генератор из arduino

Сообщение Just_Fluffy »

Jack_A, если МК умеет, то можно без ксора, писать единичку в PIN - оно инвертирует соответствующий бит в PORT... Причем, если писать несколько единичек - то будет атомарное изменение состояния
Белая и Пушистая
Аватара пользователя
shev1975
Грызет канифоль
Сообщения: 287
Зарегистрирован: Чт апр 02, 2009 17:46:04
Откуда: Крым

Re: Генератор из arduino

Сообщение shev1975 »

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

Re: Генератор из arduino

Сообщение akl »

Ассемблер упорно генерирует число 9d. Почему у вас заносится 4e непонятно.
LDI LOW(8000000/25300/2-1)
OUT OCR0A, R17
OUT OCR0B, R17
Для получения противофазных импульсов попробуйте подключить один из каналов к выходу битом FOC0B, который специально для этого предназначен.
LDI R17,1<<COM0A0|1<<COM0B0|1<<WGM01
OUT TCCR0A, R17
Ldl r17,1<<FOC0B|1<<CS00
OUT TCCR0B, R17
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Генератор из arduino

Сообщение OKF »

[uquote="shev1975",url="/forum/viewtopic.php?p=4736752#p4736752"]Как дошло то до часов, изначально нужно было получить противофазный сигнал на двух выводах, для получения частоты 25300Гц. :shock: для питания ультразвукового излучателя.[/uquote]
До часов - это Роман в сторону увёл.)
А если один из выходов OCxA сначала установить через Set on Compare Match (другой через Clear), а затем запустить оба в режиме Toggle, не?
Во! akl правильно заметил.

Добавлено after 5 minutes 59 seconds:
[uquote="Jack_A",url="/forum/viewtopic.php?p=4736754#p4736754"]...я бы в прерывании синхронно инвертировал бы эту пару бит путём XOR. И заняло бы у меня написание этого куска кода секунд 5.[/uquote]
Можно и так, если в софт ничем особо не нагружен.
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Генератор из arduino

Сообщение roman.com »

[uquote="roman.com",url="/forum/viewtopic.php?p=4736689#p4736689"]и скважность 0,5[/uquote]
я сказал скважность...
неее... я имел ввиду заполнение 0,5
Screenshot_1.jpg
(48.15 КБ) 59 скачиваний
:tea:
никого я никуда не уводил... вопрос был про таймер для ультразвука.

ещё не забываем про стабильность частоты. потому что излучатель ультразвука имеет резонанс...
Screenshot_2.jpg
(30.21 КБ) 45 скачиваний
:tea:

-можно поставить в часы ds1302 но не хочется усложнять ))
-CR1220 не потянет... там нужен аккумулятор побольше))
-светодиоды не нужны... вместо них экран телефона.
СпойлерИзображение
:tea:
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Генератор из arduino

Сообщение OKF »

[uquote="roman.com",url="/forum/viewtopic.php?p=4736867#p4736867"]-CR1220 не потянет... там нужен аккумулятор побольше))[/uquote]
Скажи это китайцам. Но прежде сам почитай и посчитай.
Почему то я всё время читаю roman.кош. Для тех кто не в курсе - это название горы в Крыму.
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Генератор из arduino

Сообщение roman.com »

мы в курсе что это название горы в Крыму.
причём самой высокой в Крыму.
:tea:
следующий вопрос про стабильность.
-встроенный RС генератор нестабильный. может быть 8.000.000 Hz... а может быть 7.900.000 Hz... и т.д.
-кварц 8.000.000 Hz поставить можно. но для часов лучше часовой. на таймере 2. уже стоит)) стабильность часов заметно выше... в десятки раз. но до идеале пока не дотягивает. в телефоне стабильней.
:tea:
КотПротон
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт июл 31, 2025 20:41:39

Re: Генератор из arduino

Сообщение КотПротон »

Ну, кош - это временная стоянка или жилище у наших предков. На Алтае есть поселок Кош-Агач.

Добавлено after 2 minutes 10 seconds:
8.000.000 Hz поставить можно. но для часов лучше часовой.
У "часового" и "высокочастотного" кварцев примерно одинаковая точность. Вернее, точность конкретно указывается в наименовании кварца. Распространенная точность ±20 ppm. Реже встречается ±10 ppm. Точность ±5 ppm и менее - уже редкость.
(1 ppm = 0,000'001 долей частоты)
в телефоне стабильней.
Если отключите телефон от сотовой сети, увидите, что точность сильно-пресильно хуже стала. Мобилы синхронизируются по информации из сотовой сети.
Последний раз редактировалось КотПротон Чт авг 07, 2025 11:49:02, всего редактировалось 1 раз.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Генератор из arduino

Сообщение Jack_A »

[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4736765#p4736765"]Jack_A, если МК умеет, то можно без ксора, писать единичку в PIN - оно инвертирует соответствующий бит в PORT...[/uquote]
Вот именно - если умеет. Насколько помнит мой склероз, у старых моделей вроде АТ2313 (давно снятых с производства :) ) этой фичи нет.
Впрочем, тут речь идёт о вполне конкретной модели.
Изображение
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Генератор из arduino

Сообщение roman.com »

да... мобилы синхронизируются по информации из сотовой сети...
как и компы по интернету... правда не каждый день.
но в компе всё равно часы стабильней... даже без интернета.
:roll:
да... у "часового" и "высокочастотного" кварцев примерно одинаковая точность.
но у "часового" меньше потребление. получается экономней.
:tea:
в принципе в ардуино "часовой" кварц работает сносно.
только стабильность плавает в зависимости от температуры.
может добавить коррекцию по температуре... благо датчик температуры уже подключен к ардуино.
надо подумать...
:roll:
ещё можно сделать синхронизацию по интернету... NTP...
но делать так не рекомендуется ))
:tea:
КотПротон
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт июл 31, 2025 20:41:39

Re: Генератор из arduino

Сообщение КотПротон »

[uquote="roman.com",url="/forum/viewtopic.php?p=4736897#p4736897"]но в компе всё равно часы стабильней... даже без интернета.[/uquote]
Насколько помню, там обычный кварц с ±10 ppm, что дает менее секунды в сутки, в худшем случае, это около полуминуты за месяц.

Добавлено after 7 minutes 41 second:
Можно попробовать найти в продаже часовой кварц с ±5 ppm, что даст около 10 секунд в месяц, а это уже вполне хороший показатель.

PS. В моих наручных часах Casio Protrek PRW6000, которым уже 11 лет, стоит вероятно какой-то термостатированный кварц, потому что погрешность хода - всего лишь 15-20 секунд В ГОД! Я время на них поправляю раз в год, 31 декабря вечером.
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Генератор из arduino

Сообщение roman.com »

да... в компе примерно так и есть.
в компе часы убегают со временем... но не сильно... полуминуты за месяц где то.
:roll:
я вытащил часовой кварц из часов.
в часах он работал стабильно. примерно как в компе.
в ардуино работает хуже. 10 секунд за сутки. и зависит от температуры в доме.
значит проблема в ардуино. наверное нужна термокомпенсация.

в старых часах типа электроника была функция подстройки частоты кварцевого генератора.
хотя я точно не знаю как там сделано... но факт в том что заходим в меню часов и подстраиваем частоту с точностью 0,1 секунда в сутки... как то так там было написано.
и да. действительно. помню поставил +0,3 секунды и часы у меня убегали на несколько секунд в месяц.
такие часы уже не выпускаются.
:tea:
Ответить

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