Как сделать длинную задержку на 2313, да и на других...
Как сделать длинную задержку на 2313, да и на других тоже поделитесь принципом я че-то не докумекаю, если конечно не использовать таймер и тыщу раз его перезапускать через прерывание по переполнению, в аппноут от Atmel я не въезжаю. Кто растолкует
- Реклама
- Сообщения: 232
- Зарегистрирован: Ср фев 28, 2007 17:48:07
Можно сделать несколько более коротких.
в CVAVR вот так
delay_ms(сколько милисекунд);
по моему можно до 0xFFFF делать
пример в папке C:\CVAVR\examples\ADC8535
и на страничке "Си для МК" /05.htm
http://www.radiokot.ru/forum/viewtopic. ... hlight=htm
в CVAVR вот так
delay_ms(сколько милисекунд);
по моему можно до 0xFFFF делать
пример в папке C:\CVAVR\examples\ADC8535
и на страничке "Си для МК" /05.htm
http://www.radiokot.ru/forum/viewtopic. ... hlight=htm
мне вот надо минут 10 и желательно на асме, а если честно я и от 1 часа не откажусь...
Настроить таймер на минимальную частоту, счет от 0, прерывание по переполнению.
В прерывании инкрементируем к.-л. переменную и по достижении ей определенного значения, кот. задается нужным временем задержки, осуществляем действие. Например, при частоте 3кГц 16-ти разрядный таймер переполнится примерно за 20с, т.е. через 180 срабатываний прерывания получим задержку в 1 час.
В прерывании инкрементируем к.-л. переменную и по достижении ей определенного значения, кот. задается нужным временем задержки, осуществляем действие. Например, при частоте 3кГц 16-ти разрядный таймер переполнится примерно за 20с, т.е. через 180 срабатываний прерывания получим задержку в 1 час.
Оптимизм х (Опыт + Знания) = const
Если без таймеров и прерываний, то ничего иного, кроме как вложенные циклы, не придумать:
Прикинь, сколько циклов будет выполняться приведенный пример кода, если перед его началом r0=r1=r2=r3=0: при тактовой частоте 10МГц этот код будет выполняться... более 20 секунд!
У AVR-ов регистров много, можно такие задержки реализовывать
...
Код: Выделить всё
loop1:
dec r0
brne loop1
dec r1
brne loop1
dec r2
brne loop1
dec r3
brne loop1У AVR-ов регистров много, можно такие задержки реализовывать
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
- Сообщения: 232
- Зарегистрирован: Ср фев 28, 2007 17:48:07
delay_ms(0xFFFF);Dmitro писал(а):мне вот надо минут 10
delay_ms(0xFFFF);Dmitro писал(а):если честно я и от 1 часа не откажусь...
delay_ms(0xFFFF);
delay_ms(0xFFFF);
delay_ms(0xFFFF);
delay_ms(0xFFFF);
delay_ms(0xFFFF);
Скомпилируйте и в фале листинга возьмите код на АСМе.Dmitro писал(а):и желательно на асме ...
можно delay_ms(сколько); поместить в цикл while например - тогда на несколько лет наверно можно паузу состряпать.
Только вот при использовании таймера почти все время можно спать, а при delay_ms() контроллер будет пахать вхолостую... А оно надо?
Оптимизм х (Опыт + Знания) = const
Короче пришлось делать через таймер и подсчитывать количество прерываний, так что сильно не поспишь, ну в общем чего надо добился, пару часов наскрести можно на 3,6864МГц...
В Application notes на сайте www.atmel.com есть апноут под номером 133. Там использован очень хитрый прием и его можно использовать. Почитайте, может поможет.
Today fine night...
- Сообщения: 232
- Зарегистрирован: Ср фев 28, 2007 17:48:07
К сожалению я знаю этот сайт нет там на русском, а на ихнем у меня все апноуты есть


