|
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), никаких указаний на то что счетчик прескейлера чего-то может недосчитать там нет.
|
|
|
|
|
Jan 7 2007, 12:15
|

кекс
     
Группа: Свой
Сообщений: 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)
|
|
|
|
Сообщений в этой теме
nsasha ATmega8 в качестве таймера и настройка с com-порта Jan 6 2007, 20:52 WHALE Цитата(nsasha @ Jan 6 2007, 20:52) Для ра... Jan 6 2007, 21:47     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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|