Страница 1 из 2
как сконфигурировать таймер?? (срочненько
Добавлено: Чт сен 21, 2006 18:19:56
CyberMerlin
помогите плз
мне нужно чтоб у меня какой-то цикл выполнялся по истечении определнного времени скажем 50 мс
как мне это сделать
(в дельфи я использовал таймер системный (системное время и по нему ориентировался)
а как мне это делать для ATmega162
в ассемблере какие есть процедры или функции, чтобы задать прерывание и заставить выполнить немедленно именно этот цикл
находящийся скажем по метке Start_proc:
Добавлено: Чт сен 21, 2006 19:32:07
xelos
1. конфигурируете таймер на примерно нужное время
2. устанавливаете нужные прерывания
3. отлавливаете прерывания
4. корректируете таймер.
Добавлено: Пт сен 22, 2006 09:27:12
CyberMerlin
2 xelos
Проблема, что я такую же себе схемку в уме давно нарисовал, кроме последнего пункта, конфигурировать таймер по-моему не надо, сразу выставляешь, чтоб он только по 50 мс отсчитывал и все...
или я ошибаюсь??????????
- в любом случае, это слова, А КАК МНЕ это сделать?? чего писать, куда писать???
по аналогии с Дельфи, я просто использовал системный таймер (компонента Clock или можно процедуру Timer использовать и просто в цикле сверять сколько миллисекунд прошло!!!)
как в АВР-асме это сделать??
Добавлено: Пт сен 22, 2006 19:06:27
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. Для мени они будут другие. См датащит. Вообще, полезный документ, советую от корки до корки -)
Добавлено: Пн сен 25, 2006 10:00:57
CyberMerlin
угу
спасибо большое. просто еще не дошел до этого раздела
экзамены экстернатом сдаю в универе по дискретке и вычмату -)
Добавлено: Чт сен 28, 2006 12:50:58
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'
вот что в этом файле на этой строке написано
Добавлено: Пт сен 29, 2006 08:24:01
CyberMerlin
ну помогите кто-н
почему такая ерунденька???
Добавлено: Пт сен 29, 2006 14:13:45
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'
вот что в этом файле на этой строке написано
переводчик promt.ru jy-лайн !
=======
пишет что метка, название
TIMER1COMPBaddr:
уже определена (используется) в файле m162def.inc
назовите иначе.
=======
и на Си переходите.
Добавлено: Пт сен 29, 2006 15:50:57
CyberMerlin
ну так а как мне добавить
Код: Выделить всё
ldi Temp0,0 ;обнуление таймера
out TCNT1H,Temp0
out TCNT1L,Temp0
под этой TIMER1COMPBaddr меткой ?? и чтоб было определение на адрес $01C ?????
в обучалке немного непонятно описано это
получается из аппноута я должен убрать
но тогда по идее системные нарушения будут (эта метка должная быть строго локализована как понимаю (в обучалке это Timer1_comp1 )
если я сейчас займусь изучать еще С, у меня время уйдет, а так у меня основной цикл, нет ВСЁ готово, только вот эти ошибки есть, ну пару мелких вопросов висят, так что быстрее будет на асме уж дописать
Добавлено: Пт сен 29, 2006 19:27:22
avr123.nm.ru
сумбурно ты пишешь, не могу понять что тебе нужно сделать ?
метку ты можешь назвать как тебе угодно лишь бы такого называния уже не было ранее.
Добавлено: Пт сен 29, 2006 19:28:40
avr123.nm.ru
на электрониксе начали тоже курс лепить - там на асме, вроде самые азы - звгляни:
http://nix-06.nm.ru/
Добавлено: Пн окт 02, 2006 12:04:13
CyberMerlin
не работает сцылко
в Обучалку глянь вот сюда,
http://www.radiokot.ru/start/mcu_fpga/avr/11/
переменная была в appnotes в файле *.inc
народ ну кто-н кто не бездумно читал и примеры делал по ОБУЧАЛКЕ
помогите плз
Создатель ОБУЧАЛКИ плз ответь на вопрос ну проблема же....
админ форума, плз сошли создателя сюда.
я хвост в узел уже заворачиваю
и гривку взъерошил
Добавлено: Пн окт 02, 2006 12:12:40
avr123.nm.ru
CyberMerlin писал(а):не работает сцылко
проверил. работает.
Добавлено: Пн окт 02, 2006 13:06:44
Serega
Аз есмь Создатель. Немного пробежался по предыдущим постам. Ниче не понял. Поэтому можно вкратце, что имеем на этот момент? Какова задача и какие проблемы при ее реализации?
Добавлено: Пн окт 02, 2006 14:43:18
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'
залез я в файл этот там строка
полагаю Ваша рекомендация будет - УДАЛИ её из файла
тогда у меня вопрос а будет ли работать у меня тогда нормально??
и зачем в ИНК файле эта строка??
----------------------------
- в обучалке советовалось такое вписать в модуль
Код: Выделить всё
ldi Temp0,RamEnd ;инициализация стека for work in the RCALL
out SPL,Temp0
а компилятор пишеть, что не могу туда поместить, якобы выходит за рамки адресного пространства
warning: Constant 0x4FF out of range (0x00-0xFF)
как исправить??
Добавлено: Пн окт 02, 2006 15:08:15
avr123.nm.ru
CyberMerlin писал(а):
- в обучалке советовалось такое вписать в модуль
Код: Выделить всё
ldi Temp0,RamEnd ;инициализация стека for work in the RCALL
out SPL,Temp0
off: круто ! я не стал забивать голову асмом и поручаю биться с ним компилятору.
Добавлено: Пн окт 02, 2006 15:12:46
avr123.nm.ru
CyberMerlin писал(а):полагаю Ваша рекомендация будет - УДАЛИ её из файла
я ж написал вам выше - переименуйте ВАШУ метку !
Добавлено: Пн окт 02, 2006 15:48:35
CyberMerlin
в том то и дело, что согласно ОБУЧАЛКи я должен именно ее использовать, чтоб у меня работал Компаратор таймера!
если заменю, таймеру несчем сравнивать будет (если правильно понял ОБУЧАЛКУ)
Добавлено: Пн окт 02, 2006 16:14:55
Serega
Уважаемый, приведите текст обучалки, в котором ТАК написано!

И тогда мы будем разбираццо

Добавлено: Пн окт 02, 2006 17:27:18
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/
вроде все