Страница 1 из 7
Таймер на ATMega8 в Bascom-AVR
Добавлено: Вс окт 06, 2013 18:34:02
AlekseyV
Котаны, подскажите как реализовать таймер в atmega8, чтобы каждые 4 часа реле включалось на 5 минут и так бесконечно. Буду очень признателен.
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вс окт 06, 2013 18:56:47
vem566
Взять таймер, поделить его на сколько угодно, забубенить прерывание по переполнению. Посчитать (на калькуляторе) сколько раз он переполнится за 5 минут. Приспособить переменную как счетчик переполнений и считать переполнения, проверяя включено или выключено реле.
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вс окт 06, 2013 19:08:14
pavel1979
А какая Вам нужна точность?если не важна-ответ выше,если нужна точность-можно тактировать от кварца 32768 гц и плясать от него-сделать выдержку 5 минут и их считать,так,4 часа=60 отсчетов по 5 минут
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вс окт 06, 2013 19:16:15
vem566
pavel1979, я как то пробовал при тактировании внешним кварцем и при неудобоваримом временном интервале после переполнения счетчика таймера не сбрасывать его в ноль, а записывать в него значение. Сокращая время переполнения. Можно подобрать делитель частоты для таймера+предустановку счетчика таймера прерывание с точностью до микросекунды. Арифметики только до хрена при подборе, но работает.
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Вс окт 06, 2013 21:18:42
pavel1979
vem566 писал(а):pavel1979, я как то пробовал при тактировании внешним кварцем и при неудобоваримом временном интервале после переполнения счетчика таймера не сбрасывать его в ноль, а записывать в него значение. Сокращая время переполнения. Можно подобрать делитель частоты для таймера+предустановку счетчика таймера прерывание с точностью до микросекунды. Арифметики только до хрена при подборе, но работает.
как-то так,надо сидеть,проверять в железе
Спойлер
'e-mail P-a-h-a@yandex.ru
$regfile = "m8def.dat" ' мега8
$crystal = 8000000
$sim
Dim I As Byte 'задаем всякие переменные и масивы
Config Clock = Soft 'конфигурируем софтовые часы
Config Timer1 = Counter , Edge = Falling , Prescale = 1 : Enable Interrupts
' конфигурируем таймер 1 на подсчет импульсов на кварце, припаянного к Xtal1 Xtal2 на 32768 гц БЕЗ КОНДЕРОВ!
Config Portb.0 = Output
'начало основного цикла
I = 0 'задаем переменную,которая увеличивается каждые 5 мин,причем когда оно равно 0-вкл порт,иначе выключаем
Do
Locate 1 , 1
Lcd I
If _min = 5 And _sec = 0 Then
_min = 0
Incr I
If I = 60 Then I = 0
If I = 0 Then Set Portb.0 Else Reset Portb.0
End If
Loop
End 'end program
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Пн окт 07, 2013 09:09:21
vem566
Я имел ввиду немного другое. Тут работает часовой кварц, не зависимый от основного тактирования камня. А я делил частоту основного такта. Те самые 8 МГц, но не внутреннего RC генератора, а внешнего. Стабильность лучше.
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Пн окт 07, 2013 09:20:10
pavel1979
vem566 писал(а):Я имел ввиду немного другое. Тут работает часовой кварц, не зависимый от основного тактирования камня. А я делил частоту основного такта. Те самые 8 МГц, но не внутреннего RC генератора, а внешнего. Стабильность лучше.
так не вопрос-можно и от 8 мгц,только переделать строчки
Config Timer0 = Timer , Prescale =1024 'такт составляет (1024/8000000)*65535=8,38 сек
On Timer0 Pulse:
Enable Interrupts
Enable Timer0
................
Pulse:
Incr I
If I = 36 Then I = 0'5 минут=300 сек/8,38 сек=36 тактов
If I = 0 Then Set Portb.0 Else Reset Portb.0
End If
Return
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Пн окт 07, 2013 09:29:39
vem566
Ну я примерно о том и толкую. Только 8,38*36=301,68 сек. Вот для компенсации этих 1,68 сек. и можно повыебываться с частотой деления и предустановкой счетчика таймера. Если не принципиально, то все уже описано выше.
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Пн окт 07, 2013 15:37:10
vek
.macro delay_us ;минимум 12тактов(12слов)( 15тактов+4*A;А=xtal/1000000)
; Значения выставлять не более:
pushXs ; при 20МГц - 13107
ldi XL, low( (@0/4)*(XTAL/1000000) ) ; при 8 - 32767
ldi XH, high( (@0/4)*(XTAL/1000000) ) ; при 4 - 65535
md: sbiw X,1 ;
brne md ;
popXs ;
.endm
;+++++++++++++++++++++++++++
.macro pushXs
push XL
push XH
in XH, SREG
push XH
.endm;----------------------------
;+++++++++++++++++++++++++++
.macro popXs
pop XH
out SREG, XH
pop XH
pop XL
.endm;----------------------------
так пойдет? Только еще чего-нибудь полезного относительно трудновато делать будет
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Пн окт 07, 2013 16:20:14
vem566
Пойдет конечно. Только до сих пор не понятно, какая точность нужна.
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Пн окт 07, 2013 16:38:05
vek
vem566 писал(а):Пойдет конечно. Только до сих пор не понятно, какая точность нужна.
Давайте рассуждать логически

Управлять будем реле, значит насколько я могу предположить,навряд-ли точность измеряется в микросекундах.
А вот сугубо мне интересно с какой максимальной частотой может реле переключаться?
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Пн окт 07, 2013 17:15:01
vem566
vek, зависит от типа реле. Обычные электромагнитные имеют время срабатывания от 50 до 150 миллисекунд. Плюс время отпускания(раза в два меньше). Герконовые быстрее, твердотельные еще быстрее. Можно взять обычное и ослабить пружину - время сократиться. Экспериментируйте.
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Пн окт 07, 2013 17:21:40
vek
Не...Ну если разброс в целых 150 мСек, то не надо тратить контроллеры на такую фигню.
что-б получить такой результат

,можно просто приклеить изолентой провода к будильнику,
и пускай стрелки раз в 4 часа контакты замыкают

И программировать ничего ненужно
vem566 писал(а): зависит от типа реле
Мне было интересно узнать про чёрненькие и красненькие

Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Пн окт 07, 2013 17:34:32
pavel1979
vek писал(а):Не...Ну если разброс в целых 150 мСек, то не надо тратить контроллеры на такую фигню.
что-б получить такой результат

,можно просто приклеить изолентой провода к будильнику,
и пускай стрелки раз в 4 часа контакты замыкают
или посадить человека и пусть каждые 4 часа сам вкл-выключает реле! (шутка)
ребят,какие будильники,какая изолента на стрелках,я понимаю что в россии все возможно,но на дворе 21 век,мк стоит 70-80 руб,да и на нее можно возложить много других функций...
чтото автор темы потерялся,наверно забросил
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Пн окт 07, 2013 17:42:43
vem566
vek писал(а):Мне было интересно узнать про чёрненькие и красненькие
А есть еще зелененькие, желтенькие, серебристые и с полосочками.

Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Пн окт 07, 2013 18:31:09
AlekseyV
Реле обычное китайское. Точность не важна. Полдня сегодня прошарил инет на тему прерывателей и таймеров в avr, что-то никак информации полезной не извлек. Также пытался сообразить из этого -
http://forum.cxem.net/index.php?showtopic=127504
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Пн окт 07, 2013 18:36:58
vek
Ну мы просто предлагаем варианты

Заметьте,пожалуйста, автор как минимум не против моего

Ну не ясно что ему объяснять. Мне неизвестен его джедайский lvl по асм-у. Чему учить-то будем? как таймер настроить? Или про стек расскажем? И вроде покамись неизвестно чего от нас хотят

Я-б с радостью помог,вопрос: в чем?
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Пн окт 07, 2013 18:45:41
AlekseyV
vek, спасибо.
Может ссылкой какой-нибудь на разъяснения или кодом-хорошим примером.
Сейчас алгоритм напишу.
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Пн окт 07, 2013 18:56:05
vek
Чего-то лень читать тот исходник.А я вообще не пойму тот исходник,это вроде паскаль что-ли.
А что надо? Всего-лишь включать/выключать в определенные моменты? Больше ничего?на кнопки будем реагировать? Контроллер есть какой-нибудь в наличии?
Точность можно поизголяться и до долей микросикунды настроить,или +/-10минут не страшно?
А лучше скажите что,для чего и зачем вам это нужно. Думаю путевого чего-нибудь подкинем
Re: Таймер на ATMega8 в Bascom-AVR
Добавлено: Пн окт 07, 2013 19:13:30
AlekseyV
Разрывать (перезагружать) цепь коммутаторам, которые вечно виснут от статики, старости и др. причин. Без кнопок, в наличии Atmega8-16PU, принципиальная схема подключена настроена, осталось лишь запрограммировать..
Алгоритм:
t-время (напр. секунды)
Начало
t=0
Портд.0 = 1
If t=14400 то Портд.0 = 0
Подождать 3 секунды
End if
Портд.0 = 1
Конец
Думаю понятно будет. Шью через Bascom