как сконфигурировать таймер?? (срочненько

Обсуждаем контроллеры компании Atmel.
CyberMerlin
Встал на лапы
Сообщения: 138
Зарегистрирован: Пн сен 18, 2006 13:39:03
Откуда: Попуа Новой Гвинеи (Зимбабва)
Контактная информация:

как сконфигурировать таймер?? (срочненько

Сообщение CyberMerlin »

помогите плз
мне нужно чтоб у меня какой-то цикл выполнялся по истечении определнного времени скажем 50 мс
как мне это сделать
(в дельфи я использовал таймер системный (системное время и по нему ориентировался)
а как мне это делать для ATmega162
в ассемблере какие есть процедры или функции, чтобы задать прерывание и заставить выполнить немедленно именно этот цикл
находящийся скажем по метке Start_proc:
Реклама
Аватара пользователя
xelos
Потрогал лапой паяльник
Сообщения: 336
Зарегистрирован: Пн мар 20, 2006 13:05:08
Контактная информация:

Сообщение xelos »

1. конфигурируете таймер на примерно нужное время
2. устанавливаете нужные прерывания
3. отлавливаете прерывания
4. корректируете таймер.
Я просто верю в то, что рушить догмы - лучший способ не стареть.
Реклама
CyberMerlin
Встал на лапы
Сообщения: 138
Зарегистрирован: Пн сен 18, 2006 13:39:03
Откуда: Попуа Новой Гвинеи (Зимбабва)
Контактная информация:

Сообщение CyberMerlin »

2 xelos
Проблема, что я такую же себе схемку в уме давно нарисовал, кроме последнего пункта, конфигурировать таймер по-моему не надо, сразу выставляешь, чтоб он только по 50 мс отсчитывал и все...
или я ошибаюсь??????????

- в любом случае, это слова, А КАК МНЕ это сделать?? чего писать, куда писать???
по аналогии с Дельфи, я просто использовал системный таймер (компонента Clock или можно процедуру Timer использовать и просто в цикле сверять сколько миллисекунд прошло!!!)
как в АВР-асме это сделать??
Аватара пользователя
Pa5ha
Прорезались зубы
Сообщения: 244
Зарегистрирован: Ср авг 31, 2005 20:09:08
Откуда: Петрозаводск, Карелия.
Контактная информация:

Сообщение Pa5ha »

http://www.radiokot.ru/start/mcu_fpga/avr/11 - про таймеры
http://www.radiokot.ru/start/mcu_fpga/avr/16 - про опрос клавиатуры

просто писать то, что там есть второй раз неохота. Там все очень подробно. Советую посмотреть сорсы. Лично когда мне что-то непонятно, то я читаю это второй раз. Если опять непонятно, то см. п. 1 -)

По поводу прерывания. Вначале мы пишем:
.cseg
.org 0

rjmp RESET ; Reset Handler
rjmp EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
rjmp TIM_CAPT1 ; Timer1 Capture Handler
rjmp TIM_COMP1 ; Timer1 Compare Handler
rjmp TIM_OVF1 ; Timer1 Overflow Handler
rjmp TIM_OVF0 ; Timer0 Overflow Handler
rjmp UART_RXC ; UART RX Complete Handler
rjmp UART_DRE ; UDR Empty Handler
rjmp UART_TXC ; UART TX Complete Handler
rjmp ANA_COMP ; Analog Comparator Handler

это вектора прерываний. Правда, для 2313. Для мени они будут другие. См датащит. Вообще, полезный документ, советую от корки до корки -)
2kb of eeprom should be enought for everybody (C) Bill Gates` cat :)
Реклама
Эиком - электронные компоненты и радиодетали
CyberMerlin
Встал на лапы
Сообщения: 138
Зарегистрирован: Пн сен 18, 2006 13:39:03
Откуда: Попуа Новой Гвинеи (Зимбабва)
Контактная информация:

Сообщение CyberMerlin »

угу
спасибо большое. просто еще не дошел до этого раздела
экзамены экстернатом сдаю в универе по дискретке и вычмату -)
Реклама
CyberMerlin
Встал на лапы
Сообщения: 138
Зарегистрирован: Пн сен 18, 2006 13:39:03
Откуда: Попуа Новой Гвинеи (Зимбабва)
Контактная информация:

Сообщение CyberMerlin »

ага нифига чего-то не пашет
значит написано

Код: Выделить всё

rjmp TIMER1COMPBaddr
TIMER1COMPBaddr:
ldi Temp0,0            ;обнуление таймера
out TCNT1H,Temp0
out TCNT1L,Temp0
и компилятор пишет
code.asm:108: Error : Label 'TIMER1COMPBaddr' already defined at line 665 in 'C:\avr\tavrasm\appnotes\m162def.inc'
вот что в этом файле на этой строке написано

Код: Выделить всё

.equ	TIMER1COMPBaddr	= $01C
Реклама
CyberMerlin
Встал на лапы
Сообщения: 138
Зарегистрирован: Пн сен 18, 2006 13:39:03
Откуда: Попуа Новой Гвинеи (Зимбабва)
Контактная информация:

Сообщение CyberMerlin »

ну помогите кто-н
почему такая ерунденька???
Аватара пользователя
avr123.nm.ru
Вечно гонимый
Сообщения: 331
Зарегистрирован: Пн сен 04, 2006 20:25:28
Откуда: самоучитель по микроконтроллерам
Контактная информация:

Сообщение avr123.nm.ru »

CyberMerlin писал(а):ага нифига чего-то не пашет
значит написано

Код: Выделить всё

rjmp TIMER1COMPBaddr
TIMER1COMPBaddr:
ldi Temp0,0            ;обнуление таймера
out TCNT1H,Temp0
out TCNT1L,Temp0
и компилятор пишет
code.asm:108: Error : Label 'TIMER1COMPBaddr' already defined at line 665 in 'C:\avr\tavrasm\appnotes\m162def.inc'
вот что в этом файле на этой строке написано

Код: Выделить всё

.equ	TIMER1COMPBaddr	= $01C

переводчик promt.ru jy-лайн !

=======

пишет что метка, название

TIMER1COMPBaddr:

уже определена (используется) в файле m162def.inc

назовите иначе.
=======

и на Си переходите.
CyberMerlin
Встал на лапы
Сообщения: 138
Зарегистрирован: Пн сен 18, 2006 13:39:03
Откуда: Попуа Новой Гвинеи (Зимбабва)
Контактная информация:

Сообщение CyberMerlin »

ну так а как мне добавить

Код: Выделить всё

ldi Temp0,0            ;обнуление таймера 
out TCNT1H,Temp0 
out TCNT1L,Temp0 
под этой TIMER1COMPBaddr меткой ?? и чтоб было определение на адрес $01C ?????

в обучалке немного непонятно описано это

получается из аппноута я должен убрать
но тогда по идее системные нарушения будут (эта метка должная быть строго локализована как понимаю (в обучалке это Timer1_comp1 )

если я сейчас займусь изучать еще С, у меня время уйдет, а так у меня основной цикл, нет ВСЁ готово, только вот эти ошибки есть, ну пару мелких вопросов висят, так что быстрее будет на асме уж дописать
Аватара пользователя
avr123.nm.ru
Вечно гонимый
Сообщения: 331
Зарегистрирован: Пн сен 04, 2006 20:25:28
Откуда: самоучитель по микроконтроллерам
Контактная информация:

Сообщение avr123.nm.ru »

сумбурно ты пишешь, не могу понять что тебе нужно сделать ?

метку ты можешь назвать как тебе угодно лишь бы такого называния уже не было ранее.
Аватара пользователя
avr123.nm.ru
Вечно гонимый
Сообщения: 331
Зарегистрирован: Пн сен 04, 2006 20:25:28
Откуда: самоучитель по микроконтроллерам
Контактная информация:

Сообщение avr123.nm.ru »

на электрониксе начали тоже курс лепить - там на асме, вроде самые азы - звгляни: http://nix-06.nm.ru/
CyberMerlin
Встал на лапы
Сообщения: 138
Зарегистрирован: Пн сен 18, 2006 13:39:03
Откуда: Попуа Новой Гвинеи (Зимбабва)
Контактная информация:

Сообщение CyberMerlin »

не работает сцылко

в Обучалку глянь вот сюда, http://www.radiokot.ru/start/mcu_fpga/avr/11/
переменная была в appnotes в файле *.inc
народ ну кто-н кто не бездумно читал и примеры делал по ОБУЧАЛКЕ
помогите плз

Создатель ОБУЧАЛКИ плз ответь на вопрос ну проблема же....
админ форума, плз сошли создателя сюда.
я хвост в узел уже заворачиваю
и гривку взъерошил
Аватара пользователя
avr123.nm.ru
Вечно гонимый
Сообщения: 331
Зарегистрирован: Пн сен 04, 2006 20:25:28
Откуда: самоучитель по микроконтроллерам
Контактная информация:

Сообщение avr123.nm.ru »

CyberMerlin писал(а):не работает сцылко
проверил. работает.
Аватара пользователя
Serega
Говорящий с текстолитом
Сообщения: 1529
Зарегистрирован: Пн авг 22, 2005 21:02:22
Откуда: Питер

Сообщение Serega »

Аз есмь Создатель. Немного пробежался по предыдущим постам. Ниче не понял. Поэтому можно вкратце, что имеем на этот момент? Какова задача и какие проблемы при ее реализации?
Лучше быть первым в деревне, чем вторым в Риме
CyberMerlin
Встал на лапы
Сообщения: 138
Зарегистрирован: Пн сен 18, 2006 13:39:03
Откуда: Попуа Новой Гвинеи (Зимбабва)
Контактная информация:

Сообщение CyberMerlin »

значиться так
- как в обучалке было сказано я вставитл следующий код в свой модуль

Код: Выделить всё

rjmp TIMER1COMPBaddr
TIMER1COMPBaddr:
	ldi Temp0,0		;обнуление таймера
	out TCNT1H,Temp0
	out TCNT1L,Temp0
начал компилировать, а он (компилятор) пишет
code.asm:108: Error : Label 'TIMER1COMPBaddr' already defined at line 665 in 'C:\avr\tavrasm\appnotes\m162def.inc'
залез я в файл этот там строка

Код: Выделить всё

.equ   TIMER1COMPBaddr   = $01C
полагаю Ваша рекомендация будет - УДАЛИ её из файла
тогда у меня вопрос а будет ли работать у меня тогда нормально??
и зачем в ИНК файле эта строка??
----------------------------
- в обучалке советовалось такое вписать в модуль

Код: Выделить всё

ldi Temp0,RamEnd	;инициализация стека for work in the RCALL
out SPL,Temp0
а компилятор пишеть, что не могу туда поместить, якобы выходит за рамки адресного пространства
warning: Constant 0x4FF out of range (0x00-0xFF)
как исправить??
Аватара пользователя
avr123.nm.ru
Вечно гонимый
Сообщения: 331
Зарегистрирован: Пн сен 04, 2006 20:25:28
Откуда: самоучитель по микроконтроллерам
Контактная информация:

Сообщение avr123.nm.ru »

CyberMerlin писал(а): - в обучалке советовалось такое вписать в модуль

Код: Выделить всё

ldi Temp0,RamEnd	;инициализация стека for work in the RCALL
out SPL,Temp0
off: круто ! я не стал забивать голову асмом и поручаю биться с ним компилятору.
Аватара пользователя
avr123.nm.ru
Вечно гонимый
Сообщения: 331
Зарегистрирован: Пн сен 04, 2006 20:25:28
Откуда: самоучитель по микроконтроллерам
Контактная информация:

Сообщение avr123.nm.ru »

CyberMerlin писал(а):полагаю Ваша рекомендация будет - УДАЛИ её из файла
я ж написал вам выше - переименуйте ВАШУ метку !
CyberMerlin
Встал на лапы
Сообщения: 138
Зарегистрирован: Пн сен 18, 2006 13:39:03
Откуда: Попуа Новой Гвинеи (Зимбабва)
Контактная информация:

Сообщение CyberMerlin »

в том то и дело, что согласно ОБУЧАЛКи я должен именно ее использовать, чтоб у меня работал Компаратор таймера!
если заменю, таймеру несчем сравнивать будет (если правильно понял ОБУЧАЛКУ)
Аватара пользователя
Serega
Говорящий с текстолитом
Сообщения: 1529
Зарегистрирован: Пн авг 22, 2005 21:02:22
Откуда: Питер

Сообщение Serega »

Уважаемый, приведите текст обучалки, в котором ТАК написано! ;) И тогда мы будем разбираццо :)
Лучше быть первым в деревне, чем вторым в Риме
CyberMerlin
Встал на лапы
Сообщения: 138
Зарегистрирован: Пн сен 18, 2006 13:39:03
Откуда: Попуа Новой Гвинеи (Зимбабва)
Контактная информация:

Сообщение CyberMerlin »

да всегда пожалуйста
мррррр
привожу только куски кодов из ОБУЧАЛКИ (понимаете почему)
если мы, скажем, хотим активизировать прерывание Timer1_comp1, то мы должны по адресу $004 поставить ссылку на подпрограмму - обработчик этого прерывания. А вообще, лучше расставить в начале программы ссылки на все прерывания. Давайте так и сделаем

Код: Выделить всё

.cseg
.org 0

rjmp Reset
rjmp INT_0
rjmp INT_1
rjmp Timer1_capt1
rjmp Timer1_comp1
В пятой строчке стоит безусловный переход на метку Timer1_comp1. Где-то ниже в программе, мы пишем обработчик этого прерывания и в его начале ставим эту метку.

Код: Выделить всё

Reset:
INT_0:
INT_1:
Timer1_capt1:
Timer1_comp1:
http://www.radiokot.ru/start/mcu_fpga/avr/10/

Код: Выделить всё

Timer1_comp1:
         ldi Temp,0            ;обнуление таймера
         out TCNT1H,Temp
         out TCNT1L,Temp
http://www.radiokot.ru/start/mcu_fpga/avr/11/
Для того, чтобы команда rcall смогла работать, нам надо-таки инициализировать стек. То есть - поставить указатель стека.

Код: Выделить всё

ldi Temp,RamEnd       ;инициализация стека
          out SPL,Temp
http://www.radiokot.ru/start/mcu_fpga/avr/08/
вроде все
Ответить

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