Страница 3 из 7
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 14:49:02
vek
wait какое максимальное значение может иметь?
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 14:52:14
pavel1979
мы мыслим примерно одинаково-может тупо поставить wait на 4 часа =14400 и все?
добавил
$regfile = "m8def.dat"
$crystal = 8000000
Config Portd.0 = Output
Config Portc.5 = Output
Dim S As Word
Rel1 Alias Portd.0
Led1 Alias Portc.5
S = 0
Do
Wait 14395
Rel1 = 1
Led1 = 1
Wait 5
Led1 = 0
Rel1 = 0
Loop
End
компилируется,занято 2 % памяти!!!какой у Вас программатор?
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 14:55:35
AlekseyV
Фузы вообще не ставил, кварц есть на 16Мгц. Отстает на 16 сек., я так понимаю кварц нужно через фузы забить. Как сделать фузы для кварца и через что?
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 15:00:12
vek
Отстает на 16 сек за 4 часа? Вроде-бы клокдив по умолчанию стоит(делит на 8 внутренний генератор),вроде тогда частота должна быть 1000000 а не 8000000
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 15:01:15
AlekseyV
Нет, за 1 секунду. Выставлено wait 1 - в итоге получается ждешь 16 сек до того как погаснет светодиод.
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 15:05:45
vek
У тебя частота 4000000 - по умолчанию с завода и клокдив стоит тоже с завода, значит пропиши частоту верно: просто поменяй в строчке
$crystal = 8000000 на $crystal = 500000
Если точность позволяет +/- минута-другая в час,то можно без кварца
В фьюзы можешь не лезть.
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 15:14:52
pavel1979
у мега8 нет клокдив,ФУЗЫ НЕ МЕНЯЙ-просто прочитай и напиши какие стоят
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 15:19:58
vek
pavel1979 писал(а):у мега8 нет клокдив,ФУЗЫ НЕ МЕНЯЙ-просто прочитай и напиши какие стоят
а лучше принт-скрин экрана, посмотрим какие галочки стоят
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 15:22:48
AlekseyV
Прошил, выставил fuse через bascom. В общем внимание на скрин, кварц на 16Мгц. Все четко работает. Секунда в секунду.

Но мне кажется использовать данный метод таймера не совсем логично, т.к. планирую в дальнейшем еще пару функций прилепить к МК - забор температуры и замер напряжения.
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 15:29:00
vek
О-о. Нифига себе,а там что не надо галочки что-ли тыкать? просто выбираешь строчку нужную?
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 15:30:41
AlekseyV
Да, именно так. Сам случайно наткнулся

Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 15:30:54
vek
Кстати странно что секунда в секунду,частота была прописана как 8,а кварц ставишь на 16. Или строчку переписал правильно?
ZN-GAME писал(а):
Но мне кажется использовать данный метод таймера не совсем логично, т.к. планирую в дальнейшем еще пару функций прилепить к МК - забор температуры и замер напряжения.
логично,этой фигней мы процессор на 100% загрузили.Значит какое решение напрашивается?
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 15:35:25
AlekseyV
Да, исправил на 16МГц.
Таймеры-прерыватели так и просятся.
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 15:38:46
vek
А посчитать сам сможешь?Для этого необходима утилита ПУСК->СТАНДАРТНЫЕ->КАЛЬКУЛЯТОР

Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 15:39:42
pavel1979
там сильно заумно,я вообще не разобрался,поэтому фузы прошиваю через алгоритм билдер и программатор SPA,если генерацию сажать на кварц тогда лучше сделать прерывания-будут точные временные интервалы,а на счет добавить термометр и вольтметр-тогда сразу можно поставить жки,нарисовать схему под конечное устройство,сделать плату,а уже потом составлять программу,пошагово,проверяя все в железе,это конечно если нет отладочной платы,я делаю так
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 15:42:31
vek
И про GPS-модуль с компасом не забудь

Прокачивать,так прокачивать
и еще макетка - прикольная вещь,рублей 400 стоит.
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 15:43:44
AlekseyV
На макетке все и делаю. А вот с таймером-прерывателем думаю не разберусь.
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 16:00:48
vek
Ну смотри. Имеем Т1 - он в любых АВР-ках 16 разрядный. Это значит что считать он может до 0xffff
По нашему до 65535.
Есть еще регистры сравнения типа OCR1A.
Работает так:
Таймер тикает себе потихоньку,никого не трогает
Выполняется основная программа,ну там считает чего-то,складывает,вычитает.Таймер в это время тикает вообще отдельно,как но другой планете.И тут ОПА!
Совпадение в канале А. Это значит что счетчик таймера(TCNT1 называется) совпал со значением в OCR1A. Основная программа прерывается(в стек запоминается адрес где программа прервалась,это
делается автоматически,без программиста).
И прыгаем по вектору в обработчик прерывания(Обработчик- это обычная подпрограмма,в которую можно попасть только при определенных условиях).В обработчике делаем что-то простое,типа
incr COUNTER и завершаем обработчик. Программа продолжает работать дальше:считать,читать,
какать,писять или чего там нам нужно
В придачу ко всему есть такой режим-СТС называется. Это когда таймер досчитывает до значения такого-же как хранимое в OCR1A и начинает считать сначала.
на частоте 16МГц Т1 может сосчитать максимум до ((1/16 000 000)*65536) секунд. Что является для нашей задачи слишком коротким промежутком. Нафиг так часто в эти часы запрыгивать? Процессору как-будто делать больше нефиг.
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 16:06:43
AlekseyV
Спасибо за разъяснение!

Логика мне итак понятна, вот с написанием кода всегда проблема была. Пару стетеек переварю, может придумаю что-нибудь.
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вт окт 08, 2013 16:08:40
vek
Ну если логика понятна,тогда ладно. А с кодом я не помогу,Бейсик несоображаю.
В общем тебе нужен режим СТС таймера Т1. это биты WGM отвечают в TCCR
Еще обрати внимание на биты CS12...10 - предделитель тебе пригодиться
регистр TIMSK пошерсти - OCIE1A бит разрешает локально прерывание по совпадению с А
и незабудь глобально прерывания разрешить,перед этим по хорошему в регистр TIFR надо записать
0хff(не обязательно)