Делай - Delay!

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
AndyWorld
Прорезались зубы
Сообщения: 209
Зарегистрирован: Вт сен 30, 2008 09:23:14
Откуда: Краснодарский край

Делай - Delay!

Сообщение AndyWorld »

В книге Джона Мортона "Микроконтроллеры AVR вводный курс" Есть прекрасный пример организации задержек. Вот пример задержки 1 сек для 4Мгц кварца.
ldi Delay1,0x00
ldi Delay2,0x35
ldi Delay3, 0xCC
Loop:
subi Delai1,1
sbci Delay2,0
sbci Delay3,0
brcc Loop

В сети нашел генератор задержек который для 1 сек сгенерил совершеенно перегруженный код.
; ===========
; delay loop generator
; 4000000 cycles:
; -----------------------------
; delaying 3999996 cycles:
ldi R17, $24
WGLOOP0: ldi R18, $BC
WGLOOP1: ldi R19, $C4
WGLOOP2: dec R19
brne WGLOOP2
dec R18
brne WGLOOP1
dec R17
brne WGLOOP0
; -----------------------------
; delaying 3 cycles:
ldi R17, $01
WGLOOP3: dec R17
brne WGLOOP3
; -----------------------------
; delaying 1 cycle:
nop
; ===========
Спрашивается, на кой черт такие приседания в генераторе? И что лучше первый вариант или второй?
Дело в том, что организовать задержку в 1-2-5 сек мне понятно, даже понятно и с миллисекундами, а вот в задержках в микросекундах я начал плавать. Не врублюсь как правильно их считать. Использовать этот мутный генератор что-то не очень охота.
Реклама
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Делай - Delay!

Сообщение ChipKiller »

самый простой способ - запустить Вашу процедуру задержки в отладчике и посмотреть за сколько тактов она выполняется. А длительные задержки лучше получать с помощью таймера.
Реклама
Аватара пользователя
AndyWorld
Прорезались зубы
Сообщения: 209
Зарегистрирован: Вт сен 30, 2008 09:23:14
Откуда: Краснодарский край

Re: Делай - Delay!

Сообщение AndyWorld »

Фишка в чем... Я ковыряюсь с датчиком 18В20. Смотю тексты тех кто уже что-то написал. У всех разный подход к задержкам. Кто-то использует Си, где не нужно сильно заморачиваться, так как есть библиотека delay. Кто-то использует универсальную процедуру в которую он загоняет различные данные через рабочий регистр. И у всех разные задержки. Где правда непонятно.
Вот суть проблемы задержек датчика температуры:
1. Сигнал обнуления линии 480...960 мкс
2. Импульс присутствия или пауза 60..240 мкс
3. пауза для завершения преобразования - не менее 500 мкс (Причем преобразование 9 бит максимально 93,75 мс!!!) что-то не понятно сколько нужно то?
4.Передача 1 не более 15 мкс. Сколько нужно? 4-5-8?
5. Передача нуля больше 15 мкс но не больше 60 мкс. Опять вопрос сколько нужно для надежности?
Может брать середину? Тогда смысл в таких широких диапазонах.
Так как время задержки не так велико смысла использовать таймер не вижу, тем более он мне нужен для других целей.
Как подсчитать эти микросекунды? 1/4000000=0.00000025нс или 0,25 мкс это у на один "тик" значит 1 мкс это 4 такта, и тогда сигнал обнуления линии, допустим будет 500 мкс*4=2000 тактов которые нужно убить. Так чтоли?
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: Делай - Delay!

Сообщение md5sum »

AndyWorld писал(а):Опять вопрос сколько нужно для надежности?
Может брать середину? Тогда смысл в таких широких диапазонах.
Смысл указан где-то по тексту datasheet. Точное место не укажу, но в вольном изложении это будет примерно так: "На длинных линиях емкость линии высока и соответственно фронты (и немного спады) импульсов будут растягиваться, для повышения достоверности передачи и сделаны таки широкие временные рамки".
Напр: Мастер обнулил линию на 480 мкс, а с учетом емкости линии (длинны) на слейве шина вернулась в высокое состояние через 480+Х мкс. где Х - время нарастания.
— Не говорите мне что делать и я не скажу куда Вам идти...
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Делай - Delay!

Сообщение ChipKiller »

AndyWorld писал(а):Фишка в чем... Я ковыряюсь с датчиком 18В20
так чего тогда "вокруг ходить" - спросили-бы рабочий кусок кода. Собственно там их кажется всего два - процедура сброса/инициализации и приема/передачи байта. А то что многие пишут этот код по-разному - ну так тут, кто как трактует datasheet :)
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»