Страница 1 из 1

Как сделать длинную задержку на 2313, да и на других...

Добавлено: Вс мар 11, 2007 22:52:50
Dmitro
Как сделать длинную задержку на 2313, да и на других тоже поделитесь принципом я че-то не докумекаю, если конечно не использовать таймер и тыщу раз его перезапускать через прерывание по переполнению, в аппноут от Atmel я не въезжаю. Кто растолкует

Добавлено: Вс мар 11, 2007 23:01:20
Abaktyсh
Можно сделать несколько более коротких.

в CVAVR вот так

delay_ms(сколько милисекунд);

по моему можно до 0xFFFF делать

пример в папке C:\CVAVR\examples\ADC8535

и на страничке "Си для МК" /05.htm
http://www.radiokot.ru/forum/viewtopic. ... hlight=htm

Добавлено: Вс мар 11, 2007 23:24:47
Dmitro
мне вот надо минут 10 и желательно на асме, а если честно я и от 1 часа не откажусь...

Добавлено: Вс мар 11, 2007 23:34:33
Aheir
Настроить таймер на минимальную частоту, счет от 0, прерывание по переполнению.
В прерывании инкрементируем к.-л. переменную и по достижении ей определенного значения, кот. задается нужным временем задержки, осуществляем действие. Например, при частоте 3кГц 16-ти разрядный таймер переполнится примерно за 20с, т.е. через 180 срабатываний прерывания получим задержку в 1 час.

Добавлено: Вс мар 11, 2007 23:59:54
ARV
Если без таймеров и прерываний, то ничего иного, кроме как вложенные циклы, не придумать:

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

loop1:
   dec   r0
   brne  loop1
   dec   r1
   brne  loop1
   dec   r2
   brne  loop1
   dec   r3
   brne  loop1
Прикинь, сколько циклов будет выполняться приведенный пример кода, если перед его началом r0=r1=r2=r3=0: при тактовой частоте 10МГц этот код будет выполняться... более 20 секунд!
У AVR-ов регистров много, можно такие задержки реализовывать :)...

Добавлено: Пн мар 12, 2007 00:45:40
Abaktyсh
Dmitro писал(а):мне вот надо минут 10
delay_ms(0xFFFF);
Dmitro писал(а):если честно я и от 1 часа не откажусь...
delay_ms(0xFFFF);
delay_ms(0xFFFF);
delay_ms(0xFFFF);

delay_ms(0xFFFF);
delay_ms(0xFFFF);
delay_ms(0xFFFF);
Dmitro писал(а):и желательно на асме ...
Скомпилируйте и в фале листинга возьмите код на АСМе.

можно delay_ms(сколько); поместить в цикл while например - тогда на несколько лет наверно можно паузу состряпать.

Добавлено: Пт мар 16, 2007 09:42:53
Aheir
Только вот при использовании таймера почти все время можно спать, а при delay_ms() контроллер будет пахать вхолостую... А оно надо?

Добавлено: Пн мар 19, 2007 23:35:28
Dmitro
Короче пришлось делать через таймер и подсчитывать количество прерываний, так что сильно не поспишь, ну в общем чего надо добился, пару часов наскрести можно на 3,6864МГц...

Добавлено: Вт мар 20, 2007 02:12:38
Mamonth
В Application notes на сайте www.atmel.com есть апноут под номером 133. Там использован очень хитрый прием и его можно использовать. Почитайте, может поможет.

Добавлено: Вт мар 20, 2007 06:39:11
Abaktyсh
Поищите на русском на apnout.narod.ru номер AVR133

Добавлено: Вс мар 25, 2007 14:38:00
Dmitro
К сожалению я знаю этот сайт нет там на русском, а на ихнем у меня все апноуты есть

Добавлено: Вс мар 25, 2007 19:13:09
kolyay
А в некоторых процах часы то есть, они то не подойдут?