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

|
Для работы в качестве таймера или часов с будильником, видел много схем, где МК должен работать на частоте, кратной 1МГц.(потом как-то понижают до 1Гц) А для установки через соm-порт необходима частота 7.3728МГц (рекомендованная стандартом RS-232). Как совмещают оба (обязательных(?)) условия? И, если делают по другому, то как сделать таймер с установкой времени срабатывания через com-порт?
|
|
|
|
|
 |
Ответов
|
Jan 6 2007, 22:26
|
Группа: Новичок
Сообщений: 2
Регистрация: 6-01-07
Пользователь №: 24 158

|
WHALE, а можно поподробней разжевать, плиз! У меня Atmega8515. В доке написано, что работает на частоте до 8МГц. Внешний кварц подключают к ножкам XTAL1 и XTAL2. Я не понял, если подключить кварц с частотой 7.3728МГц, для com-порта, то как из него же получить частоту для таймера?
|
|
|
|
|
Jan 6 2007, 23:02
|
Гуру
     
Группа: Свой
Сообщений: 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 и получаете свой герц. То бишь секунду.
|
|
|
|
|
Jan 7 2007, 00:19
|

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

|
Цитата(SasaVitebsk @ Jan 6 2007, 23:02)  Один кварц как правило не используется, так как однокристалка с таким кварцом будет много "жрать" и потребуется внешнее питание. Если же это Вас не пугает, то тоже ничего страшного нет. Например с кварцем 7372800 устанавливаете предделитель 1024. Получаете частоту 7200. Запускаете таймер в режиме CTC. А в OCR загружаете 7199 и получаете свой герц. То бишь секунду.  Крайне не рекомендую использовать 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 для отсчета времени, то время будет неточным.
|
|
|
|
|
Jan 7 2007, 03:32
|
дятел
    
Группа: Свой
Сообщений: 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), никаких указаний на то что счетчик прескейлера чего-то может недосчитать там нет.
|
|
|
|
Сообщений в этой теме
nsasha ATmega8 в качестве таймера и настройка с com-порта Jan 6 2007, 20:52 WHALE Цитата(nsasha @ Jan 6 2007, 20:52) Для ра... Jan 6 2007, 21:47    defunct Цитата(singlskv @ Jan 7 2007, 03:32) Уваж... Jan 7 2007, 12:15     singlskv Качаем с atmel.com документик:
AVR091: Replacing A... Jan 7 2007, 14:01      defunct Цитата(singlskv @ Jan 7 2007, 14:01) и вн... Jan 8 2007, 06:35       SasaVitebsk Цитата(defunct @ Jan 8 2007, 07:35) Посып... Jan 8 2007, 20:50 SasaVitebsk Спасибо defunct, а я это просмотрел. Смотрю а у ме... Jan 7 2007, 02:34 defunct Цитата(SasaVitebsk @ Jan 7 2007, 02:34) Н... Jan 7 2007, 02:48
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|