Обсуждаем контроллеры компании Atmel.
Ответить

Re: Помогите с асинхронным таймером на AtMega8a

Ср фев 21, 2018 11:22:33

4 лишних символа не так уж и много, темболее проблем с этим куском у меня нет, мне бы часики точные получить)

Re: Помогите с асинхронным таймером на AtMega8a

Ср фев 21, 2018 12:06:32

Думаю, чтобы улучшить точность хода ваших часов, необходимо изменить разводку платы. Особое внимание нужно уделить часовому кварцу- дорожки от контролёра к нему должны быть минимально возможной длины, под кварцевым резонатором необходимо предусмотреть полигон который соединяется с минусом питания в одной точке. Сам кварцевый резонатор необходимо припаять к полигону на котором он будет находиться. И конечно же не стоит выход контролёра ( динамическая индикация.) располагать в паре миллиметров от дорожки кварцевого резонатора. Воспользуйтесь переназначением выхода контролёра на другой его "пин". Плата на фото выглядит чистой, но спрошу: - Как и чем её мыли после пайки? Недоотмытый флюс под контролёром и между выводов резонатора может доставить много неприятностей. Визуально - невидим, но его тонкая плёнка вносит существенную коррекцию в работу устройства( это- из личного опыта.)
Посмотрев на печатную плату можно увидеть, что можно контролёр повернуть на 45 град. по часовой стрелке, при этом дорожки к кварцевому резонатору станут гораздо короче, минус питания проходит вдоль него и припаять корпус к минусу- дело 1 минуты.

PS
Пожалуй, я бы сделал минусовую шину- пошире, примерно как на фото ниже, корявенько нарисовано но смысл понятен, и кнопки убрать подальше от резонатора.
Вложения
1ie5cs5fsy_1.jpg
(63.29 KiB) Скачиваний: 244

Re: Помогите с асинхронным таймером на AtMega8a

Ср фев 21, 2018 20:26:19

Отмывал изопропиловым спиртом, особенно уделял внимание дорожкам кварца, корпус уже подтянул к земле, скобой из жесткой медной проволки. Мне кажеться он спешит довольно равномерно, потому попытаюсь ввести корректировку времени (пока по расчетам нужно отнимать еденицу из счётчика 2, каждые 980 тиков, если я все правильно посчитал, можно к примеру ввести отдельную переменную которая будет за это отвечать)
Вам огромное спасибо за помощь и + к карме, без вашей помощи, я бы не справился)

Добавлено after 7 hours 58 minutes 56 seconds:
Появился еще один вопрос, я могу паралельно прерыванию по совпадению с 127, сделать прерывания по совпадению с 63?
Я посчитал, и по идеии для корректировки нужно отнимать единицу из второго счётчика каждые 7,5 секунд, и вот мне надо получить эти пол секунды. Ну либо второй вариант, по очереди отнимать единицу через 7 и через 8 секунд. Что посоветуете?

Re: Помогите с асинхронным таймером на AtMega8a

Чт фев 22, 2018 06:47:20

То что на коленке написал за пару минут (каждые 15 секунд, отнимаю по два из второго счетчика) помоголо, за 9 часов, ушло на 3 секунды :roll:
осталось еще немного пошаманить, и думаю все будет довольно точно

Re: Помогите с асинхронным таймером на AtMega8a

Чт фев 22, 2018 06:49:57

Jack-Sidr писал(а):Что посоветуете?

Частота, на которой должен работать ХОРОШИЙ часовой кварц, выбрана кратной степеням двойки. Поэтому, при наличии в схеме такого кварца и грамотно написанной программы, коррекция хода потребуется минимальная. Т.е. верная программа делит точно до секунды, и остается только точность кварца/конденсаторы/монтаж. Я собрал около десятка часов/таймеров, и максимальный уход у меня был около 4 секунд за 10 дней.
Я бы рекомендовал:
1. попробовать настроить таймер, как я советовал выше по теме.
2. если результаты не улучшатся, поменять кварц.
3. попробовать поиграться с конденсаторами и фьюзом CKOPT
4. если ничего не помогло, и плата чистая, тогда я не знаю :facepalm:

Re: Помогите с асинхронным таймером на AtMega8a

Чт фев 22, 2018 08:37:09

Вот как формируется минутный интервал кварцами гейер одной партии когда частота задана 32'768Гц.
Изображение

Re: Помогите с асинхронным таймером на AtMega8a

Чт фев 22, 2018 10:52:22

metan писал(а):3. попробовать поиграться с конденсаторами и фьюзом CKOPT
это самое правильно решение.
в узком диапазоне можно изменять частоту конденсаторами.
1. отключить внутренние конденсаторы.
2. изменением внешних конденсаторов подбирать частоту по минимальной погрешности.
и необязательно менять емкость одновременно обоих конденсаторов. гораздо точнее подгонка частоты будет подбором одного конденсатора.
3. но может случиться такое, что даже при маленькой емкости параллельных конденсаторов, частота будет ниже требуемой (ниже 32768).
тогда ставим конденсатор последовательно с кварцем - это позволит повысить частоту. и дальше возвращаемся к пункту 2 - подгонять частоту параллельными конденсаторами.
но последовательный конденсатор должен иметь уже не маленькую емкость (может, сотни-тысячи пик), чтобы не сильно снизить эквивалентную емкость кварца.

есть еще и способ 4. для снижения частоты параллельно кварцу поставить маленькую емкость для увеличения эквивалентной емкости кварца.

например, в советских наручных часах "Электроника" стоял крошечный подстроечный конденсатор для регулировки точности хода часов.

то есть, не придумывать "костыли" с вычитанием или прибавлением единички с некоторой периодичностью, а поиграть настройкой частоты.

Re: Помогите с асинхронным таймером на AtMega8a

Чт фев 22, 2018 12:54:02

Зачем трахаться с конденсаторами, когда все решается на программном уровне.
Вот у стартера часы убежали за 8,5 часов на 30 секунд, т.е. за 30'600 насчитали 30'630 секунд.
30'630/30'600*32768Гц~32'800Гц. Что без внешних конденсаторов вполне логичная величина, которая забивается в OCR1A=32800-1 таймера Т1. Таймер переводится в режим CTC. Организуется счетчик секунд на 59, после отсчета которым в последнюю 60-ю секунду заносится число, представляющее разность между минутным интервалом и периодом 59 секунд. Вот длительностью последней секунды можно программно корректировать минутный интервал и получить примерно такое
Изображение

Re: Помогите с асинхронным таймером на AtMega8a

Чт фев 22, 2018 13:20:32

Тоже не вижу смысла с конденсоторами играться, главное что частота не плавает, а значит можно настроить программно, я уже уменьшил убегание с 31 секунды до 3 секунд, немного настрою корректировку, и выйду на нормальную частоту, темболее так хоть математически можно посчитать корректировку, а не по воле случая тыкать конденстары и пытаться поймать частоту.

Re: Помогите с асинхронным таймером на AtMega8a

Чт фев 22, 2018 14:08:05

akl, а каким образом ты в 8-битный асинхронный таймер запишешь 32800?
у ТС же используется 8-битный таймер с внешним кварцем на 32768...

Re: Помогите с асинхронным таймером на AtMega8a

Чт фев 22, 2018 14:20:58

Лично я решил отнимать тики с второго счётчика, через определенные интервалы

Re: Помогите с асинхронным таймером на AtMega8a

Чт фев 22, 2018 14:27:19

Starichok51 У mega8 имеется 16-разрядный таймер Т1 и возможность работы от Low-Frequency Crystal Oscillator 32'768Гц. Не нужно заморачиваться с предделителями и ограничивать возможность подключения встроенных конденсаторов FUSE-битом CKOPT. Это просто рабочий вариант.

Re: Помогите с асинхронным таймером на AtMega8a

Чт фев 22, 2018 15:12:07

про существование Таймера1 я знаю.
остается только объяснить это топикстартеру, чтобы он отказался от Таймера2, и не мучился с "изобретением" этой убогой коррекции времени...

Re: Помогите с асинхронным таймером на AtMega8a

Чт фев 22, 2018 16:34:10

Jack-Sidr писал(а):Тоже не вижу смысла с конденсоторами играться

Я тоже не вижу, если программа и кварц нормальные, понадобится только МИНИМАЛЬНАЯ коррекция (никак не секунды в час)
См. мою первую рекомендацию. Сделайте для начала деление частоты кварца ровно на 32768.

Re: Помогите с асинхронным таймером на AtMega8a

Чт фев 22, 2018 17:26:29

akl писал(а):Starichok51 У mega8 имеется 16-разрядный таймер Т1 и возможность работы от Low-Frequency Crystal Oscillator 32'768Гц. Не нужно заморачиваться с предделителями и ограничивать возможность подключения встроенных конденсаторов FUSE-битом CKOPT. Это просто рабочий вариант.
Вообще то нет.
Только таймер T2 позволяет тактировать от кварца 32'768, сохранив тактирование основного ядра от внутреннего RC-генератора 8МГц.
Если Т1 вы будете тактировать от кварца 32'768 то и основное ядро будет также тактироваться от 32'768.
К примеру UART от 32'768 работает кое как на скорости 110 бит/сек,
тогда как от RC-1МГц - кое как 9600 бит/сек,
от RC-8МГц - 19200 бит/сек и более.
Смотря для чего ему надо, может и 32'768 достаточно будет.

Re: Помогите с асинхронным таймером на AtMega8a

Чт фев 22, 2018 17:38:29

пожалуй, для этих часов не нужен UART. да и процессору в часах мизерный объем работы.
так что вполне можно запустить Таймер1 от кварца 32768 Гц.

Re: Помогите с асинхронным таймером на AtMega8a

Пт фев 23, 2018 17:53:32

Таймер1 не вариант, поскольку хочу реализовать бесперебойное питание, что-бы при пропадании внешнего питания, кидало мк в сон, а таймер продолжал тикать от батарейки.

Добавлено after 9 minutes 44 seconds:
1. попробовать настроить таймер, как я советовал выше по теме.


Проблема в том, что если я копирую без изменений, WinAvr просто отказывается компилировать
Код:
main.c:80: error: 'TIM2_OVF' undeclared here (not in a function)
main.c:80: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'


Если заменяю
Код:
interrupt [TIM2_OVF] void timer2_ovf_isr(void)

на
Код:
ISR(TIMER2_OVF_vect)


Компилируется, но таймер не запускается совсем, могли бы вы скопировать мой код, скомпилировать в CVAvr и скинуть hex?
Если не трудно.

Re: Помогите с асинхронным таймером на AtMega8a

Пт фев 23, 2018 18:16:21

Jack-Sidr писал(а):Компилируется, но таймер не запускается совсем, могли бы вы скопировать мой код, скомпилировать в CVAvr и скинуть hex?
Если не трудно.
Держи Или какой другой код?

Вот его код.

Re: Помогите с асинхронным таймером на AtMega8a

Пт фев 23, 2018 19:20:36

По поводу питания: ток потребляемый МК прямо пропорционален частоте, и, если правильно настроить режим сна, потребленная энергия зависит только от напряжения питания и от количества выполненных команд (а от частоты не зависит).
поэтому, если часового кварца хватит для тактирования АЛУ (по его производительности) то даже лучше тактировать им, т.к. увеличивается стабильность работы на пониженном напряжении питания при тойже (или даже меньшей из за меньшего Uпит) мощности (есть проект, и я недавно на него ссылку выкладывал, где тинька13 от 1,5в работает, правда т.к. сама кварц не умеет - использует внешний генератор на часовом кварце).

Re: Помогите с асинхронным таймером на AtMega8a

Пт фев 23, 2018 19:29:22

Спасибо, буду пробовать, утром отпишусь про результат.
Ответить