Таймер на ATMega8 в Bascom-AVR

Обсуждаем контроллеры компании Atmel.
Ответить
Грызет канифоль
Сообщения: 291
Зарегистрирован: Ср май 26, 2010 20:40:47

Сообщение AlekseyV »

Котаны, подскажите как реализовать таймер в atmega8, чтобы каждые 4 часа реле включалось на 5 минут и так бесконечно. Буду очень признателен.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4747
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

Взять таймер, поделить его на сколько угодно, забубенить прерывание по переполнению. Посчитать (на калькуляторе) сколько раз он переполнится за 5 минут. Приспособить переменную как счетчик переполнений и считать переполнения, проверяя включено или выключено реле.
Реклама
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

Сообщение pavel1979 »

А какая Вам нужна точность?если не важна-ответ выше,если нужна точность-можно тактировать от кварца 32768 гц и плясать от него-сделать выдержку 5 минут и их считать,так,4 часа=60 отсчетов по 5 минут
Друг Кота
Аватара пользователя
Сообщения: 4747
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

pavel1979, я как то пробовал при тактировании внешним кварцем и при неудобоваримом временном интервале после переполнения счетчика таймера не сбрасывать его в ноль, а записывать в него значение. Сокращая время переполнения. Можно подобрать делитель частоты для таймера+предустановку счетчика таймера прерывание с точностью до микросекунды. Арифметики только до хрена при подборе, но работает.
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

Сообщение 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
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4747
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

Я имел ввиду немного другое. Тут работает часовой кварц, не зависимый от основного тактирования камня. А я делил частоту основного такта. Те самые 8 МГц, но не внутреннего RC генератора, а внешнего. Стабильность лучше.
Реклама
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

Сообщение 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
Друг Кота
Аватара пользователя
Сообщения: 4747
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

Ну я примерно о том и толкую. Только 8,38*36=301,68 сек. Вот для компенсации этих 1,68 сек. и можно повыебываться с частотой деления и предустановкой счетчика таймера. Если не принципиально, то все уже описано выше.
vek
Вымогатель припоя
Аватара пользователя
Сообщения: 563
Зарегистрирован: Чт апр 16, 2009 04:53:41

Сообщение 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;----------------------------


так пойдет? Только еще чего-нибудь полезного относительно трудновато делать будет
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
Друг Кота
Аватара пользователя
Сообщения: 4747
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

Пойдет конечно. Только до сих пор не понятно, какая точность нужна.
vek
Вымогатель припоя
Аватара пользователя
Сообщения: 563
Зарегистрирован: Чт апр 16, 2009 04:53:41

Сообщение vek »

vem566 писал(а):Пойдет конечно. Только до сих пор не понятно, какая точность нужна.
Давайте рассуждать логически :))) Управлять будем реле, значит насколько я могу предположить,навряд-ли точность измеряется в микросекундах.
А вот сугубо мне интересно с какой максимальной частотой может реле переключаться?
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
Друг Кота
Аватара пользователя
Сообщения: 4747
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

vek, зависит от типа реле. Обычные электромагнитные имеют время срабатывания от 50 до 150 миллисекунд. Плюс время отпускания(раза в два меньше). Герконовые быстрее, твердотельные еще быстрее. Можно взять обычное и ослабить пружину - время сократиться. Экспериментируйте.
vek
Вымогатель припоя
Аватара пользователя
Сообщения: 563
Зарегистрирован: Чт апр 16, 2009 04:53:41

Сообщение vek »

Не...Ну если разброс в целых 150 мСек, то не надо тратить контроллеры на такую фигню.
что-б получить такой результат :idea: ,можно просто приклеить изолентой провода к будильнику,
и пускай стрелки раз в 4 часа контакты замыкают :))) И программировать ничего ненужно :tea:
vem566 писал(а): зависит от типа реле
Мне было интересно узнать про чёрненькие и красненькие :)))
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

Сообщение pavel1979 »

vek писал(а):Не...Ну если разброс в целых 150 мСек, то не надо тратить контроллеры на такую фигню.
что-б получить такой результат :idea: ,можно просто приклеить изолентой провода к будильнику,
и пускай стрелки раз в 4 часа контакты замыкают :)))
или посадить человека и пусть каждые 4 часа сам вкл-выключает реле! (шутка)
ребят,какие будильники,какая изолента на стрелках,я понимаю что в россии все возможно,но на дворе 21 век,мк стоит 70-80 руб,да и на нее можно возложить много других функций...
чтото автор темы потерялся,наверно забросил
Друг Кота
Аватара пользователя
Сообщения: 4747
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

vek писал(а):Мне было интересно узнать про чёрненькие и красненькие
А есть еще зелененькие, желтенькие, серебристые и с полосочками. :beer:
Грызет канифоль
Сообщения: 291
Зарегистрирован: Ср май 26, 2010 20:40:47

Сообщение AlekseyV »

Реле обычное китайское. Точность не важна. Полдня сегодня прошарил инет на тему прерывателей и таймеров в avr, что-то никак информации полезной не извлек. Также пытался сообразить из этого - http://forum.cxem.net/index.php?showtopic=127504
vek
Вымогатель припоя
Аватара пользователя
Сообщения: 563
Зарегистрирован: Чт апр 16, 2009 04:53:41

Сообщение vek »

Ну мы просто предлагаем варианты :) Заметьте,пожалуйста, автор как минимум не против моего :) Ну не ясно что ему объяснять. Мне неизвестен его джедайский lvl по асм-у. Чему учить-то будем? как таймер настроить? Или про стек расскажем? И вроде покамись неизвестно чего от нас хотят :)) Я-б с радостью помог,вопрос: в чем?
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
Грызет канифоль
Сообщения: 291
Зарегистрирован: Ср май 26, 2010 20:40:47

Сообщение AlekseyV »

vek, спасибо.
Может ссылкой какой-нибудь на разъяснения или кодом-хорошим примером.
Сейчас алгоритм напишу.
Последний раз редактировалось AlekseyV Пн окт 07, 2013 19:05:19, всего редактировалось 1 раз.
vek
Вымогатель припоя
Аватара пользователя
Сообщения: 563
Зарегистрирован: Чт апр 16, 2009 04:53:41

Сообщение vek »

Чего-то лень читать тот исходник.А я вообще не пойму тот исходник,это вроде паскаль что-ли.
А что надо? Всего-лишь включать/выключать в определенные моменты? Больше ничего?на кнопки будем реагировать? Контроллер есть какой-нибудь в наличии?
Точность можно поизголяться и до долей микросикунды настроить,или +/-10минут не страшно?



А лучше скажите что,для чего и зачем вам это нужно. Думаю путевого чего-нибудь подкинем
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
Грызет канифоль
Сообщения: 291
Зарегистрирован: Ср май 26, 2010 20:40:47

Сообщение AlekseyV »

Разрывать (перезагружать) цепь коммутаторам, которые вечно виснут от статики, старости и др. причин. Без кнопок, в наличии Atmega8-16PU, принципиальная схема подключена настроена, осталось лишь запрограммировать..
Алгоритм:
t-время (напр. секунды)

Начало
t=0
Портд.0 = 1
If t=14400 то Портд.0 = 0
Подождать 3 секунды
End if
Портд.0 = 1
Конец

Думаю понятно будет. Шью через Bascom
Ответить

Вернуться в «AVR»