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

 
 
> 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
defunct
сообщение Jan 7 2007, 12:15
Сообщение #6


кекс
******

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



Цитата(singlskv @ Jan 7 2007, 03:32) *
Уважаемый defunct
Боюсь что Вы вводите общественность в заблуждение.
Тот эфект который Вы описали был свойственен чипам AT90Sxxxx.
В чипах ATtiny и ATmega данный эфект не наблюдается.
Посмотрите временные диаграммы работы таймера1 ну например ATmega8,
они в даташите приведены для вариантов с делителем 8 и без делителя (1),
никаких указаний на то что счетчик прескейлера чего-то может недосчитать там нет.

Боюсь, что да, только частично..
Прескейлер не будет сбрасываться, соответственно ничего лишнего таймер не посчитает.
Но, есть одно но.
Формулы для OCR будут различаться на 1.

Ну а упомянутая диаграмма в ДШ к чипу M8 весьма скупа (нет цифр)..
Следуя же цитате из того же ДШ к M8:

Код
In Clear Timer on Compare or CTC mode (WGM13:0 = 4 or 12), the OCR1A or ICR1
Register are used to manipulate the counter resolution. In CTC mode the counter is
[b]cleared to zero when the counter value (TCNT1) matches either the OCR1A[/b] (WGM13:0
= 4) or the ICR1 (WGM13:0 = 12).

Формулы расчета коэффициента деления соответвенно будут такими:

- с предделителем >1 - N*(OCRxA), где N значение предделителя
- с предделителем =1 - 1*(OCRxA + 1)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 16:47
Рейтинг@Mail.ru


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