Таймер на ATMega8 в Bascom-AVR
- Сообщения: 291
- Зарегистрирован: Ср май 26, 2010 20:40:47
Котаны, подскажите как реализовать таймер в atmega8, чтобы каждые 4 часа реле включалось на 5 минут и так бесконечно. Буду очень признателен.
- Реклама
Взять таймер, поделить его на сколько угодно, забубенить прерывание по переполнению. Посчитать (на калькуляторе) сколько раз он переполнится за 5 минут. Приспособить переменную как счетчик переполнений и считать переполнения, проверяя включено или выключено реле.
А какая Вам нужна точность?если не важна-ответ выше,если нужна точность-можно тактировать от кварца 32768 гц и плясать от него-сделать выдержку 5 минут и их считать,так,4 часа=60 отсчетов по 5 минут
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
- Реклама
Я имел ввиду немного другое. Тут работает часовой кварц, не зависимый от основного тактирования камня. А я делил частоту основного такта. Те самые 8 МГц, но не внутреннего RC генератора, а внешнего. Стабильность лучше.
так не вопрос-можно и от 8 мгц,только переделать строчкиvem566 писал(а):Я имел ввиду немного другое. Тут работает часовой кварц, не зависимый от основного тактирования камня. А я делил частоту основного такта. Те самые 8 МГц, но не внутреннего RC генератора, а внешнего. Стабильность лучше.
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
Ну я примерно о том и толкую. Только 8,38*36=301,68 сек. Вот для компенсации этих 1,68 сек. и можно повыебываться с частотой деления и предустановкой счетчика таймера. Если не принципиально, то все уже описано выше.
- Сообщения: 563
- Зарегистрирован: Чт апр 16, 2009 04:53:41
.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;----------------------------
так пойдет? Только еще чего-нибудь полезного относительно трудновато делать будет
; Значения выставлять не более:
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;----------------------------
так пойдет? Только еще чего-нибудь полезного относительно трудновато делать будет
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
Пойдет конечно. Только до сих пор не понятно, какая точность нужна.
- Сообщения: 563
- Зарегистрирован: Чт апр 16, 2009 04:53:41
Давайте рассуждать логическиvem566 писал(а):Пойдет конечно. Только до сих пор не понятно, какая точность нужна.
А вот сугубо мне интересно с какой максимальной частотой может реле переключаться?
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
vek, зависит от типа реле. Обычные электромагнитные имеют время срабатывания от 50 до 150 миллисекунд. Плюс время отпускания(раза в два меньше). Герконовые быстрее, твердотельные еще быстрее. Можно взять обычное и ослабить пружину - время сократиться. Экспериментируйте.
- Сообщения: 563
- Зарегистрирован: Чт апр 16, 2009 04:53:41
Не...Ну если разброс в целых 150 мСек, то не надо тратить контроллеры на такую фигню.
что-б получить такой результат
,можно просто приклеить изолентой провода к будильнику,
и пускай стрелки раз в 4 часа контакты замыкают
И программировать ничего ненужно 

что-б получить такой результат
и пускай стрелки раз в 4 часа контакты замыкают
Мне было интересно узнать про чёрненькие и красненькиеvem566 писал(а): зависит от типа реле
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
или посадить человека и пусть каждые 4 часа сам вкл-выключает реле! (шутка)vek писал(а):Не...Ну если разброс в целых 150 мСек, то не надо тратить контроллеры на такую фигню.
что-б получить такой результат,можно просто приклеить изолентой провода к будильнику,
и пускай стрелки раз в 4 часа контакты замыкают![]()
ребят,какие будильники,какая изолента на стрелках,я понимаю что в россии все возможно,но на дворе 21 век,мк стоит 70-80 руб,да и на нее можно возложить много других функций...
чтото автор темы потерялся,наверно забросил
А есть еще зелененькие, желтенькие, серебристые и с полосочками.vek писал(а):Мне было интересно узнать про чёрненькие и красненькие
- Сообщения: 291
- Зарегистрирован: Ср май 26, 2010 20:40:47
Реле обычное китайское. Точность не важна. Полдня сегодня прошарил инет на тему прерывателей и таймеров в avr, что-то никак информации полезной не извлек. Также пытался сообразить из этого - http://forum.cxem.net/index.php?showtopic=127504
- Сообщения: 563
- Зарегистрирован: Чт апр 16, 2009 04:53:41
Ну мы просто предлагаем варианты
Заметьте,пожалуйста, автор как минимум не против моего
Ну не ясно что ему объяснять. Мне неизвестен его джедайский lvl по асм-у. Чему учить-то будем? как таймер настроить? Или про стек расскажем? И вроде покамись неизвестно чего от нас хотят
Я-б с радостью помог,вопрос: в чем?
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
- Сообщения: 563
- Зарегистрирован: Чт апр 16, 2009 04:53:41
Чего-то лень читать тот исходник.А я вообще не пойму тот исходник,это вроде паскаль что-ли.
А что надо? Всего-лишь включать/выключать в определенные моменты? Больше ничего?на кнопки будем реагировать? Контроллер есть какой-нибудь в наличии?
Точность можно поизголяться и до долей микросикунды настроить,или +/-10минут не страшно?
А лучше скажите что,для чего и зачем вам это нужно. Думаю путевого чего-нибудь подкинем
А что надо? Всего-лишь включать/выключать в определенные моменты? Больше ничего?на кнопки будем реагировать? Контроллер есть какой-нибудь в наличии?
Точность можно поизголяться и до долей микросикунды настроить,или +/-10минут не страшно?
А лучше скажите что,для чего и зачем вам это нужно. Думаю путевого чего-нибудь подкинем
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
- Сообщения: 291
- Зарегистрирован: Ср май 26, 2010 20:40:47
Разрывать (перезагружать) цепь коммутаторам, которые вечно виснут от статики, старости и др. причин. Без кнопок, в наличии Atmega8-16PU, принципиальная схема подключена настроена, осталось лишь запрограммировать..
Алгоритм:
t-время (напр. секунды)
Начало
t=0
Портд.0 = 1
If t=14400 то Портд.0 = 0
Подождать 3 секунды
End if
Портд.0 = 1
Конец
Думаю понятно будет. Шью через Bascom
Алгоритм:
t-время (напр. секунды)
Начало
t=0
Портд.0 = 1
If t=14400 то Портд.0 = 0
Подождать 3 секунды
End if
Портд.0 = 1
Конец
Думаю понятно будет. Шью через Bascom


