Форум программистов, компьютерный форум, киберфорум
Электроника для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/39: Рейтинг темы: голосов - 39, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 66
1

Задержка :-)

20.11.2010, 22:00. Показов 7298. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот хочу помигать св.диодами, начало положено и становится все более ясней. Но вот возник вопрос - как ЛУЧШЕ, ЭФФЕКТИВНЕЙ, ЭКОНОМИЧНЕЙ реализовать задержку на ассемблере. Гдето читал, что - "delay loop generator" не есть гуд.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2010, 22:00
Ответы с готовыми решениями:

Timer0 задержка в 1сек
Добрый день. Пробовал организовать задержку по таймеру в 1 сек. В AVR studyo получается ~ 1сек, ...

Задержка на pic18f452
Всем доброго времени суток. Помогите пожалуйста реализовать задержку в одну секудну на MCC18....

Задержка в stm32
Всем привет. Потихоньку разбираюсь с STM32f4. Задача такая, нужно принять биты с ножек и...

Секундная задержка
Пытаюсь понять как формируется задержка, но не могу понять до конца/ Фрагмент программы: ...

18
0 / 0 / 0
Регистрация: 29.03.2010
Сообщений: 2,017
20.11.2010, 22:03 2
Ну если процессор больше ничем не будет заниматься, тогда и эта утилита пойдет. Но скорее всего вам нужно использовать таймер, а инверитировать ногу по прерыванию от него.
0
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 66
20.11.2010, 22:10 3
Цитата Сообщение от Bomomd
Ну если процессор больше ничем не будет заниматься, тогда и эта утилита пойдет. Но скорее всего вам нужно использовать таймер, а инверитировать ногу по прерыванию от него.
Задача состоит в том, чтоб понять ( пока ) как это работает, ну и таймеры тоже. Для опытов взял 128 мегу.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
20.11.2010, 22:13 4
Сейчас подкину информации к размышлению....

У меня в роботе (на плате контроллера движков) есть пара светодиодов. Юзаются они, в основном, для отладки.
Код, обрабатывающий каждый светик, помещён в прерывании от таймера. Само прерывание происходит каждые 40мс.

Код
   //Зелёный светик:
lds r17, Green_light_count //загружаем счётчик из памяти в регистр
cpi r17, 0                      //если он = 0, то
breq kriim_light_skip       //выходим
SBI PORTB,6                 //Если не равен, то зажигаем светик.
dec r17                        //уменьшаем счётчик на 1
brne kriim_light_skip      //если он всё-ещё не = 0, то выходим
CBI PORTB,6                 //если = 0, то гасим светик
kriim_light_skip:
sts Green_light_count,r17 //в конце сохраняем регистр обратно
В результате, если мы хотим, чтобы светик горел, к примеру, 400мс, то делаем так:
Код
ldi r16, 10
sts Green_light_count, r16
0
SWK
20.11.2010, 22:19 5
Цитата Сообщение от vjr
Задача состоит в том, чтоб понять ( пока ) как это работает, ну и таймеры тоже. Для опытов взял 128 мегу.
Неплохое начало... Вот только ноги у нее мелковаты (шаг 0,8мм)... Обычно для начала Мегу 16 или 32 берут, в DIP 40. В случае чего, и поменять на панельке проще, чем 64 ногую TQFP перепаивать.
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 66
20.11.2010, 22:38 6
Цитата Сообщение от SWK
Цитата Сообщение от vjr
Задача состоит в том, чтоб понять ( пока ) как это работает, ну и таймеры тоже. Для опытов взял 128 мегу.
Неплохое начало... Вот только ноги у нее мелковаты (шаг 0,8мм)... Обычно для начала Мегу 16 или 32 берут, в DIP 40. В случае чего, и поменять на панельке проще, чем 64 ногую TQFP перепаивать.
ft232rl с флюсом припаял за 5 сек., а мегу если убью, со временем, в чем я не сомневаюсь, выпаять феном - не дольше.
0
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 66
20.11.2010, 22:45 7
Цитата Сообщение от dsodir
Сейчас подкину информации к размышлению....
Спасибо, это точно. А где можно почитать подробнй на эту тему?
0
0 / 0 / 0
Регистрация: 29.03.2010
Сообщений: 2,017
20.11.2010, 22:55 8
Да тут же. В учебном курсе есть все.
0
0 / 0 / 0
Регистрация: 01.11.2010
Сообщений: 238
21.11.2010, 03:26 9
Цитата Сообщение от Bomomd
Да тут же. В учебном курсе есть все.
Есть, но там слишком много написано и не совсем всё чётко ясно. Я долго разбирался по началу. Поэтому, опишу что надо сделать, чтобы запустить таймер TC0 (остальные по аналогии):
- записать в TCCR0 1,2,3,4 или 5 (для предделителя 1,8,64,256 и 1024 соответственно)
(как вариант: ldi r16,2
out TCCR0,r16)
- выставить 0-й бит TIMSK в 1 (разрешает прерывания по таймеру)
(как вариант: ldi r16,1
out TIMSK,r16)
- записать в TCNT0 ноль (для обнуления)
(как вариант clr r16
out TCNT0,r16)
- В сегменте кода (.CSEG) прописать такие строчки:
.ORG $012
rjmp label (или jmp label), где "label" это метка перехода на обработчик прерывания по переполнению таймера.
label:
...
...
...
reti
0
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 66
21.11.2010, 13:44 10
OmdyRate & AVRSots юзал кто?
0
0 / 0 / 0
Регистрация: 02.11.2004
Сообщений: 1,112
21.11.2010, 14:11 11
Цитата Сообщение от vjr
Для опытов взял 128 мегу.
круто))
я для первых опытов взял пару штук ATTiny13, там тоже всё есть - плюс оно в DIP8 корпусе.
0
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 66
21.11.2010, 14:25 12
Цитата Сообщение от Omt
Цитата Сообщение от vjr
Для опытов взял 128 мегу.
круто))
я для первых опытов взял пару штук ATTiny13, там тоже всё есть - плюс оно в DIP8 корпусе.
Мне попался перевод DataShietа этой меги, ото и решил на ней.
0
0 / 0 / 0
Регистрация: 06.07.2010
Сообщений: 485
21.11.2010, 18:19 13
Цитата Сообщение от dsodir
Сейчас подкину информации к размышлению....

У меня в роботе (на плате контроллера движков) есть пара светодиодов. Юзаются они, в основном, для отладки.
Код, обрабатывающий каждый светик, помещён в прерывании от таймера. Само прерывание происходит каждые 40мс.

Код:
//Зелёный светик:
lds r17, Green_light_count //загружаем счётчик из памяти в регистр
cpi r17, 0 //если он = 0, то
breq kriim_light_skip //выходим
SBI PORTB,6 //Если не равен, то зажигаем светик.
dec r17 //уменьшаем счётчик на 1
brne kriim_light_skip //если он всё-ещё не = 0, то выходим
CBI PORTB,6 //если = 0, то гасим светик
kriim_light_skip:
sts Green_light_count,r17 //в конце сохраняем регистр обратно

В результате, если мы хотим, чтобы светик горел, к примеру, 400мс, то делаем так:
Код
ldi r16, 10
sts Green_light_count, r16
не могли б вы скинуть проект контроллера движков, если есть такая возможность)
0
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 66
26.11.2010, 00:23 14
Люди добрые, подскажите (намекните) где бока, причину сам хочу выявить, уж сильно затянуло это, только мозг уже закипает, перечитал А. В. Белова "Использование таймера" - не могу понять! И будет работать код на меге без кварца через JTAG в реальном времени с задержками?
.ymstude "m128def.yms"
.list
.def temp = R16
.equ kdil = 780
.cseg
.org 0
;------------------Иниц. стека
ldi temp,low(ROMEND)
out spl,r16
ldi temp,high(ROMEND)
out sph,r16
;------------------Иниц. порта D
ldi temp,(1<<6) | (1<<7)
out DDRD,temp
;------------------Иниц. таимера
ldi temp,0x05 ; делитель 1024
out TCCR1B,temp
;------------------Иниц. компаратора
ldi temp,0x80
out ACSR,temp
;------------------Основная программа
cikl:
ldi temp,(1<<6) ; светится первый светодиод
out PORTD,temp
rcall woyt
ldi temp,(1<<7) ; светится второй светодиод
out PORTD,temp
rcall woyt
ldi temp,(0<<6) ; тушим один светодиод
out PORTD,temp
rcall woyt
ldi temp,(0<<7) ; тушим второй светодиод
out PORTD,temp
rcall cikl
;----------------- Задержка ------------------------------------
woyt:
push temp ;сохраняем содержимое регистра
ldi temp,0 ;обнуляем
out TCNT1H,temp ;записываем ноль в старш.регистр таймера
out TCNT1L,temp ;записываем ноль в младш.регистр таймера
wt1:
in temp,TCNT1L
cpi temp,low(kdil) ;сравниваем младшую
brlo wt1 ;переход если temp меньше kdil
in temp,TCNT1H
cpi temp,high(kdil) ;сравниваем старшую
brlo wt1 ;переход если temp меньше kdil
pop temp ;востанавливаем значение регистра
ret ;выход из подпрограммы
;----------------------------------------------------------------
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
26.11.2010, 00:33 15
Какое-то хитроумное сравнение :)
Почему-бы не сделать так:
Код
wt1:
in temp, TCNT1L
cpi temp, Lo(kdil)  ;Сравниваем младший
in temp, TCNT1H
cpc temp, Hi(kdil)  ;Сравниваем старший с учётом переноса
brlo wt1   ; Обратно,если меньше
А ещё можно запихать kdil в регистры OCR1AL:OCR1AH и ждать флага OCF1A, но это уже совсем другая история...
0
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 66
26.11.2010, 00:50 16
Цитата Сообщение от dsodir
Какое-то хитроумное сравнение :)
Почему-бы не сделать так:
Код:
wt1:
in temp, TCNT1L
cpi temp, Lo(kdil) ;Сравниваем младший
in temp, TCNT1H
cpc temp, Hi(kdil) ;Сравниваем старший с учётом переноса
brlo wt1 ; Обратно,если меньше

А ещё можно запихать kdil в регистры OCR1AL:OCR1AH и ждать флага OCF1A, но это уже совсем другая история...
Ну а в целом, код, постановка задачи, верна? А работать без кварца в JTAGе будет? Или там задержки долго обрабатываются?
0
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 368
26.11.2010, 16:33 17
Цитата Сообщение от vjr
OmdyRate & AVRSots юзал кто?
AVRSots использую, а где взять OmdyRate?
0
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 66
26.11.2010, 17:13 18
Цитата Сообщение от svs39
Цитата Сообщение от vjr
OmdyRate & AVRSots юзал кто?
AVRSots использую, а где взять OmdyRate?
Куда скинуть OmdyRate?

И я, таки разобрался (понял) !!! Заставил мигать эти диоды !!! Проблема была в фузе-бите совместимости 128 с 103 мегой, который был установлен по умолчанию.
0
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 368
26.11.2010, 17:18 19
Цитата Сообщение от vjr
Куда скинуть OmdyRate?
[URL="mailto:vstashko@gmail.som">vstashko@gmail.som[/URL]. Спасибо!
0
26.11.2010, 17:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.11.2010, 17:18
Помогаю со студенческими работами здесь

Не работает задержка
Этот код работает, т.е. зажигает два светодиода и потом один гасится Main: sbi PORTB, 3 sbi...

Задержка в микросекундах
И снова здравствуйте. Недавно столкнулся с проблемой. Введение: я приобрел покупного робота....

Задержка на МК AT89C51
Добрый день. Вот такая проблема: хочу организовать задержку на МК AT89C51. Делаю циклом: нифига, а...

Задержка в микросекундах
Здравствуйте, есть задача получить задержку с точностью до микросекунд. Поискал в интернете, нашёл...

Программная задержка
Нужно в сделать программную задержку 0.7 секунды. Аппаратная выставлена, а вот с программной...

Задержка времени в Quartus II
Нужно реализовать задержку на включение и выключения двигателя! Как это реализовать в Quartus II...

Как работает задержка?
Здравствуйте, помогите разобраться как работает задержка: WAIT_LCD: PUSH ACC ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru