|
Тактирование Atmega128. |
|
|
|
Dec 2 2006, 01:49
|
Частый гость
 
Группа: Свой
Сообщений: 94
Регистрация: 3-01-06
Пользователь №: 12 813

|
Есть рабочий проект на Атмеге 128 с использованием двух кварцев 14,745МГц и 32768Гц. Низкочастотный кварц крутил таймер Т0 и по переполнению таймера (каждую 1сек) велся подсчет импульсов по трем каналам - мерил частоту. Все бы хорошо, но от кварцев сказали избавиться, а дают 48МГц на управление схемой. Сделав в ПЛИС делитель на 3, получил частоту 16МГц, которую и собираюсь использовать для внешней синхронизации контроллера. Далее поделив еще на 15625 получил 1024Гц, которые я и хотел использовать для отсчета времени, но прочитал, что нельзя подавать внешнюю синхронизацию на низкочастотный вход (ТОSС1, TOSC2). Вот и хотелось бы узнать: 1. Как можно завести эту частоту в таймер T0. (T1,T2,T3 - уже используются в этом проекте) 2. Можно ли запрограммировать контроллер так, чтобы если нет частоты с внешней синхронизации, то он переключался бы на встроенный генератор. (Как это можно сделать)
|
|
|
|
|
 |
Ответов
|
Dec 2 2006, 03:35
|
Частый гость
 
Группа: Свой
Сообщений: 94
Регистрация: 3-01-06
Пользователь №: 12 813

|
Цитата(defunct @ Dec 2 2006, 02:29)  Почему бы просто не использовать тактовую частоту процессора? Ведь у таймера T0 есть режим OC CTC. установите прескейлер 1024, запишите в OCR0 число 125, и по прерыванию T0 декрементируйте некоторую статическую переменную от 125 до 0. При достижении 0 - увеличивайте счетчик секунд, и обновляйте статическую переменную числом 125. Код ... TIMSK |= (1 << OCIE0); OCR0 = 125; TCCR0 = (1 << WGM01) | 7; ...
#define RELOAD_VALUE (125)
#pragma vector=TIMER0_COMP_vect __interrupt void t0compHandler(void) { static U8 cnt = RELOAD_VALUE; cnt--; if (!cnt) { cnt = RELOAD_VALUE; seconds += 1; } } Спасибо за помощь! Можно и так, но не хотелось бы иметь прерывание с частотой 125Гц. В проекте и так их достаточно. Другое дело, когда оно медленное 1с, меньше вероятность пересечения событий. К тому же в контроллере это время еще считает наработку устройства до 100000 часов. По этому чем точнее измерение и меньше погрешность тем лучше. Может есть еще какие идеи и предложения?
|
|
|
|
|
Dec 2 2006, 19:35
|

Знающий
   
Группа: Участник
Сообщений: 845
Регистрация: 10-02-06
Пользователь №: 14 193

|
Цитата(Igor26 @ Dec 2 2006, 10:37)  У DS1307 есть вывод, который дергается раз в секунду(его сначала нужно "сконфигурить"). Заведите его на свободный INTx (если есть) и по прерыванию считайте время. У меня девайс, который год пролежал в столе, отстал за этот год по времени на пять минут.  Человек же сказал - требование исключить все кварцы. === Судя по вопросу №2, предлагаю прежде всего начать с изучения архитектуры AVR. Ответ - нельзя. Это устанавливается только фьюзами при программировании.
--------------------
|
|
|
|
|
Dec 3 2006, 01:06
|
Частый гость
 
Группа: Свой
Сообщений: 94
Регистрация: 3-01-06
Пользователь №: 12 813

|
Цитата(VDG @ Dec 2 2006, 19:35)  Цитата(Igor26 @ Dec 2 2006, 10:37)  У DS1307 есть вывод, который дергается раз в секунду(его сначала нужно "сконфигурить"). Заведите его на свободный INTx (если есть) и по прерыванию считайте время. У меня девайс, который год пролежал в столе, отстал за этот год по времени на пять минут.  Человек же сказал - требование исключить все кварцы. === Судя по вопросу №2, предлагаю прежде всего начать с изучения архитектуры AVR. Ответ - нельзя. Это устанавливается только фьюзами при программировании. По поводу фьюзов в контроллере, я это знал - хотелось просто еще раз подтвердить свои знания (может чего нового изобрели). Просто меня ввел в заблуждение один товарищь, который сказал, что он сделал так: когда на контроллере нет внешнего синхросигнала он использует внутренний. Может конечно он имел ввиду, что когда нет внешнего сигнала, то он переключается на внутренний - внутри платы (к примеру логическая схема, зашитая в ПЛИС). Надо будет у него пораспрашивать.
|
|
|
|
|
Feb 11 2007, 23:18
|
Частый гость
 
Группа: Свой
Сообщений: 94
Регистрация: 3-01-06
Пользователь №: 12 813

|
Цитата(Allexiy @ Dec 3 2006, 01:06)  Цитата(VDG @ Dec 2 2006, 19:35)  Цитата(Igor26 @ Dec 2 2006, 10:37)  У DS1307 есть вывод, который дергается раз в секунду(его сначала нужно "сконфигурить"). Заведите его на свободный INTx (если есть) и по прерыванию считайте время. У меня девайс, который год пролежал в столе, отстал за этот год по времени на пять минут.  Человек же сказал - требование исключить все кварцы. === Судя по вопросу №2, предлагаю прежде всего начать с изучения архитектуры AVR. Ответ - нельзя. Это устанавливается только фьюзами при программировании. По поводу фьюзов в контроллере, я это знал - хотелось просто еще раз подтвердить свои знания (может чего нового изобрели). Просто меня ввел в заблуждение один товарищь, который сказал, что он сделал так: когда на контроллере нет внешнего синхросигнала он использует внутренний. Может конечно он имел ввиду, что когда нет внешнего сигнала, то он переключается на внутренний - внутри платы (к примеру логическая схема, зашитая в ПЛИС). Надо будет у него пораспрашивать. Оказалось все намного проще: на плате стоял фазовый детектор, который при отсутствии синхросигнала включал кварцевый генератор.
|
|
|
|
Сообщений в этой теме
Allexiy Тактирование Atmega128. Dec 2 2006, 01:49 Alex_Pol Может речь шла об MSP? Он таким штукам обучен. Dec 3 2006, 01:16 Allexiy Цитата(Alex_Pol @ Dec 3 2006, 01:16) Може... Dec 3 2006, 12:09  vooon Цитата(Allexiy @ Dec 3 2006, 12:09) Что з... Dec 3 2006, 12:55 =GM= Цитата(Allexiy @ Dec 1 2006, 22:49) Есть ... Dec 5 2006, 16:03 Allexiy Цитата(=GM= @ Dec 5 2006, 16:03) Цитата(A... Dec 5 2006, 21:33  =GM= Цитата(Allexiy @ Dec 5 2006, 18:33) Цитат... Dec 6 2006, 16:21   TomaT Цитата(=GM= @ Dec 6 2006, 16:21) ....
На ... Dec 6 2006, 17:53 Allexiy Хорошо!
Так и попробую сделать. Всем спасибо з... Dec 6 2006, 19:03 chernenko Цитата(Allexiy @ Dec 2 2006, 01:49) Есть ... Dec 6 2006, 19:34
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|