реклама на сайте
подробности

 
 
> ATmega8 в качестве таймера и настройка с com-порта
nsasha
сообщение Jan 6 2007, 20:52
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 6-01-07
Пользователь №: 24 158



Для работы в качестве таймера или часов с будильником, видел много схем, где МК должен работать на частоте, кратной 1МГц.(потом как-то понижают до 1Гц)
А для установки через соm-порт необходима частота 7.3728МГц (рекомендованная стандартом RS-232).
Как совмещают оба (обязательных(?)) условия?
И, если делают по другому, то как сделать таймер с установкой времени срабатывания через com-порт?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
nsasha
сообщение Jan 6 2007, 22:26
Сообщение #2





Группа: Новичок
Сообщений: 2
Регистрация: 6-01-07
Пользователь №: 24 158



WHALE, а можно поподробней разжевать, плиз!
У меня Atmega8515. В доке написано, что работает на частоте до 8МГц. Внешний кварц подключают к ножкам XTAL1 и XTAL2. Я не понял, если подключить кварц с частотой 7.3728МГц, для com-порта, то как из него же получить частоту для таймера?
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 6 2007, 23:02
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(nsasha @ Jan 6 2007, 23:26) *
WHALE, а можно поподробней разжевать, плиз!
У меня Atmega8515. В доке написано, что работает на частоте до 8МГц. Внешний кварц подключают к ножкам XTAL1 и XTAL2. Я не понял, если подключить кварц с частотой 7.3728МГц, для com-порта, то как из него же получить частоту для таймера?


ATM8515 не имеет часов реального времени. Для этого используется например ATM8/88/16 и другие. Вы там на первой странице даташита увидите такую строку:
"– Real Time Counter with Separate Oscillator".

Фузы программируются для работы от внутреннего генератора (для меги8/88) а кварц подпаивается часовой и используется только в часах. Для меги16 устанавливаются два кварца. Один можно поставить 7372800 к примеру, а второй часовой. Если у вас всёже один кварц (М8/М88) это тоже не беда, внутреннюю частоту можно "подстроить под нужную Вам с помощью специального фуз-регистра. Или использовать такую частоту общения с PC, чтобы ошибка не превышала допустимых 0.5%.

Один кварц как правило не используется, так как однокристалка с таким кварцом будет много "жрать" и потребуется внешнее питание. Если же это Вас не пугает, то тоже ничего страшного нет. Например с кварцем 7372800 устанавливаете предделитель 1024. Получаете частоту 7200. Запускаете таймер в режиме CTC. А в OCR загружаете 7199 и получаете свой герц. То бишь секунду.
smile.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 7 2007, 00:19
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(SasaVitebsk @ Jan 6 2007, 23:02) *
Один кварц как правило не используется, так как однокристалка с таким кварцом будет много "жрать" и потребуется внешнее питание. Если же это Вас не пугает, то тоже ничего страшного нет. Например с кварцем 7372800 устанавливаете предделитель 1024. Получаете частоту 7200. Запускаете таймер в режиме CTC. А в OCR загружаете 7199 и получаете свой герц. То бишь секунду.
smile.gif

Крайне не рекомендую использовать CTC с предделителем не равным 1, для получения точных отсчетов.

В приведенной ниже выдержке из даташита:

Код
• Bit 3 – CTC1: Clear Timer/Counter1 on Compare Match
When the CTC1 control bit is set (one), the Timer/Counter1 is reset to $0000 in the clock
cycle after a compareA match. If the CTC1 control bit is cleared, Timer/Counter1 continues
counting and is unaffected by a compare match. Since the compare match is
detected in the CPU clock cycle following the match, this function will behave differently
when a prescaling higher than 1 is used for the timer. When a prescaling of 1 is used,
and the Compare A Register is set to C, the timer will count as follows if CTC1 is set:
... | C-2 | C-1 | C | 0 | 1 |...
When the prescaler is set to divide by 8, the timer will count like this:
... | C-2, C-2, C-2, C-2, C-2, C-2, C-2, C-2 | C-1, C-1, C-1, C-1, C-1, C-1, C-1, C-1 | C, 0,
0, 0, 0, 0, 0, 0 |...
In PWM mode, this bit has no effect.


можно заметить, что при достижении значения C (записанного в OCR) таймер отсчитывает всегда 1 такт, а не количество тактов установленное предделителем. Т.о. имеем абсолютную погрешностью минимум в 1 такт, максимум в (N тактов предделителя - 1). Если использовать режим CTC с предделителем не равным 1 для отсчета времени, то время будет неточным.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jan 7 2007, 03:32
Сообщение #5


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(defunct @ Jan 7 2007, 00:19) *
Крайне не рекомендую использовать CTC с предделителем не равным 1, для получения точных отсчетов.

В приведенной ниже выдержке из даташита:

Код
• Bit 3 – CTC1: Clear Timer/Counter1 on Compare Match
When the CTC1 control bit is set (one), the Timer/Counter1 is reset to $0000 in the clock
cycle after a compareA match. If the CTC1 control bit is cleared, Timer/Counter1 continues
counting and is unaffected by a compare match. Since the compare match is
detected in the CPU clock cycle following the match, this function will behave differently
when a prescaling higher than 1 is used for the timer. When a prescaling of 1 is used,
and the Compare A Register is set to C, the timer will count as follows if CTC1 is set:
... | C-2 | C-1 | C | 0 | 1 |...
When the prescaler is set to divide by 8, the timer will count like this:
... | C-2, C-2, C-2, C-2, C-2, C-2, C-2, C-2 | C-1, C-1, C-1, C-1, C-1, C-1, C-1, C-1 | C, 0,
0, 0, 0, 0, 0, 0 |...
In PWM mode, this bit has no effect.


можно заметить, что при достижении значения C (записанного в OCR) таймер отсчитывает всегда 1 такт, а не количество тактов установленное предделителем. Т.о. имеем абсолютную погрешностью минимум в 1 такт, максимум в (N тактов предделителя - 1). Если использовать режим CTC с предделителем не равным 1 для отсчета времени, то время будет неточным.


Уважаемый defunct
Боюсь что Вы вводите общественность в заблуждение.
Тот эфект который Вы описали был свойственен чипам AT90Sxxxx.
В чипах ATtiny и ATmega данный эфект не наблюдается.
Посмотрите временные диаграммы работы таймера1 ну например ATmega8,
они в даташите приведены для вариантов с делителем 8 и без делителя (1),
никаких указаний на то что счетчик прескейлера чего-то может недосчитать там нет.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 06:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01416 секунд с 7
ELECTRONIX ©2004-2016