Здравствуйте. Возникла проблема при работе с DS18B20. В железе датчик не инициализируется (датчик рабочий, проверял схему и с новым - не работает). В протеусе все пашет, сверился по документации, интервалы времени правильные. Подскажите в чем может бы загвоздка? Код и схему в протеусе прилагаю
Вложения:
Комментарий к файлу: Проект в студии и схема в протеусе DS18B20.zip [70.09 KiB]
Скачиваний: 183
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт апр 07, 2011 06:50:23
Встал на лапы
Зарегистрирован: Вс фев 27, 2011 01:01:11 Сообщений: 86 Откуда: Республика Крым
Рейтинг сообщения:0
Уважаемые коты! Что скажете по поводу применения 4 новых команд, описанных в http://www.atmel.com/dyn/resources/prod ... oc0856.pdf , а именно: XCH Z,Rd; LAS Z,Rd; LAC Z,Rd и LAT Z,Rd. Судя по описанию - команды очень даже полезные. Дизассемблер студии 4.18 SP3 их понимает, а вот ассемблер - нет. (Отсутствует подсветка и говорит, что неизвестная команда). Какие контроллеры работают с этими инструкциями?
_________________ Опыт и мудрость приходят с годами... К некоторым годы приходят одни...
Что скажете по поводу применения 4 новых команд, описанных в http://www.atmel.com/dyn/resources/prod ... oc0856.pdf , а именно: XCH Z,Rd; LAS Z,Rd; LAC Z,Rd и LAT Z,Rd. Судя по описанию - команды очень даже полезные. Дизассемблер студии 4.18 SP3 их понимает, а вот ассемблер - нет. (Отсутствует подсветка и говорит, что неизвестная команда). Какие контроллеры работают с этими инструкциями?
... ИМХО если Atmel не вносит их в AVR Studio, наверное на то есть причины ... Например тест команды LAC Z,R17 на atmega8 дал результат dec YH dec ZL, а не то, что описано в руководстве ....
уважаемые коты! программа является моим собственным вариантом бегущего огонька из обучалки: 4 программы индикации светодиодов переключаются между собой кнопкой на INT0. один таймер отсчитывает время между переключениями светодиодов 200мс, а другой таймер включается по внешнему прерыванию и отсчитывает 250мс (программный антидребезг), после чего обнуляется и отключается.
проблема в том, что программа переключается периодически через одну. неужели задержки в 250мс мало или я все-таки где-то в тексте программы облажался?
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт апр 07, 2011 13:57:31
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19736 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Necroteeth писал(а):
проблема в том, что программа переключается периодически через одну. неужели задержки в 250мс мало или я все-таки где-то в тексте программы облажался?
Прерываение по уровню или фронту/спаду (или по обоим)?
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт апр 07, 2011 14:41:12
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19736 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Necroteeth писал(а):
по спаду
Перед самым выходом из прерывания флаг прерывания сбрасываете?
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Перед самым выходом из прерывания флаг прерывания сбрасываете?
я не совсем понял... вы имели в виду GIFR что ли? как у меня сделано: происходит прерывание INT0, при входе в его обработчик локально запрещается INT0, глобально разрешается все и запускается таймер Timer0 путем установки в TCCR0 значения прескалера. зацикливаемся, пока не выставится регистр TimeIsOver в 1. это происходит в прерывании таймера 0, из которого мы возвращаемся в обработчик прерывания INT0 через reti. после этого на единицу увеличивается переменная-счетчик Counter, показывающая текущую программу индикации, затем останавливается Timer0 и через reti возвращаемся в основной цикл.
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт апр 07, 2011 15:04:34
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19736 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Necroteeth писал(а):
я не совсем понял... вы имели в виду GIFR что ли?
Да, его. Перед выходом из обработки прерывания по INT0 вы сбрасываете INTF0 (записью в него лог. "1")???
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт апр 07, 2011 16:14:06
Поставщик валерьянки для Кота
Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Пт май 23, 2008 19:32:22 Сообщений: 2401 Откуда: Россия, Волгоград
Рейтинг сообщения:0 Медали: 1
Necroteeth писал(а):
я не совсем понял... вы имели в виду GIFR что ли? как у меня сделано: происходит прерывание INT0, при входе в его обработчик локально запрещается INT0, глобально разрешается все и запускается таймер Timer0 путем установки в TCCR0 значения прескалера. зацикливаемся, пока не выставится регистр TimeIsOver в 1. это происходит в прерывании таймера 0, из которого мы возвращаемся в обработчик прерывания INT0 через reti. после этого на единицу увеличивается переменная-счетчик Counter, показывающая текущую программу индикации, затем останавливается Timer0 и через reti возвращаемся в основной цикл.
Вот это глум сам то-то понял что хотел сделать?
_________________ Чем дальше, тем больше становлюсь занудой...
ldi TEMP,0 ;остановка таймера антидребезга out TCCR0,TEMP
reti
сопутствующий обработчик прерывания таймера0:
Код:
Delay: ldi TimeIsOver,1 ;выставляем флаг того, что таймер антидребезга досчитал до конца и возвращаемся в обработчик прерывания INT0 reti
при симуляции я вообще не заметил никаких телодвижений со стороны регистра GIFR. выставлял вручную на пине INT0 в единицу - регистр не шелохнулся, и даже когда единицу сбросил (т.е. просимулировал отрицательный фронт сигнала) - регистр все равно никак не изменился, хотя программный указатель скакнул на метку обработчика прерывания. не могли бы вы тогда объяснить суть установки единицы в бит INTF0? что при этом происходить будет и надо ли потом эту единицу оттуда убивать?
GP1 писал(а):
Вот это глум сам то-то понял что хотел сделать?
я не глумился ни над кем. выше я выкладывал полный листинг программы с комментариями. а это всего лишь текстовое дополнение к нему было
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт апр 07, 2011 19:10:05
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19736 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Necroteeth писал(а):
при симуляции я вообще не заметил никаких телодвижений со стороны регистра GIFR.
Верить симуляции — дело десятое.
Necroteeth писал(а):
выставлял вручную на пине INT0 в единицу - регистр не шелохнулся, и даже когда единицу сбросил (т.е. просимулировал отрицательный фронт сигнала) - регистр все равно никак не изменился, хотя программный указатель скакнул на метку обработчика прерывания.
А как по-вашему, что произошло? Я выскажу свою версию: ядро зафиксировало спад на INT0 и выставился флаг. Т.к. глобально и локально прерывание разрешено, произошёл переход по соответствующему вектору с аппаратным снятием флага прерывания, которого вы не увидели.
Necroteeth писал(а):
не могли бы вы тогда объяснить суть установки единицы в бит INTF0? что при этом происходить будет
Суть: вы нажали кнопку, вошли в прерывание, флаг сбросился. Прерывания глобально запретились. Но из-за дребезга у вас произошёл ещё один спад и выставился флаг, но прерывания не произошло, т.к. оно запрещено глобально. Вы выходите из обработчика прерывания, глобально разрешаете прерывания и... Видите установленный флаг. И естессно, ещё раз обрабатываете то же самое прерывание, но теперь уже из-за дребезга.
Necroteeth писал(а):
и надо ли потом эту единицу оттуда убивать?
Перечитайте даташит и то, что я уже писал.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
я не о том, к чему такие извраты с программой? кто вас вообще научил делать временные задержки в прерывании?
никто меня не учил. морщу попу сам, методом проб и ошибок. я не утверждал, что делал это правильно. просто считал, что так удобнее отсчитать нужное время, которое в интернетах определяют как 200-250мс. Gudd-Head, спасибо за консультацию. пожалуй, и правда попробую поупражняться в техническом английском. надеюсь, это поможет
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт апр 07, 2011 19:28:05
Поставщик валерьянки для Кота
Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Пт май 23, 2008 19:32:22 Сообщений: 2401 Откуда: Россия, Волгоград
Рейтинг сообщения:0 Медали: 1
Necroteeth писал(а):
... которое в интернетах определяют как 200-250мс. ...
даже самая х..я китайская кнопка успокаивается за 100-120 мс, в 99,9% достаточно 50-60 мс для подавления дребезга. а временные задержки в прерывании не делай никогда, ты просто крадешь производительное время у процессора, за это время он столько полезного сможет сделать, ну, да я думаю, ты и сам до этого дойдешь, когда замутишь что-нибудь по-серьезней мигалки. удачи.
_________________ Чем дальше, тем больше становлюсь занудой...
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт апр 07, 2011 19:31:59
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19736 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
GP1 писал(а):
даже самая х..я китайская кнопка успокаивается за 100-120 мс, в 99,9% достаточно 50-60 мс для подавления дребезга.
Подтверждаю. На работе как-то игрался с тактовой кнопкой и цифровым осциллом, м.б. даже картинки остались.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт апр 07, 2011 21:13:43
Поставщик валерьянки для Кота
Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Пт май 23, 2008 19:32:22 Сообщений: 2401 Откуда: Россия, Волгоград
Рейтинг сообщения:0 Медали: 1
существуют различные способы, как правило конкретный метод определяется задачей, скажем определить факт нажатия - это одно, а различить короткое/длинное нажатие это совсем другое. чаще всего кнопки опрашивают по прерываню таймера, но попадаются и по внешним прерываниям, но реже.
_________________ Чем дальше, тем больше становлюсь занудой...
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт апр 07, 2011 21:14:25
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19736 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Necroteeth писал(а):
хорошо. а тогда такой вопрос - как грамотные люди осуществляют эту задержку на ассемблере?
Также, как и не на асемблере. Только не в прерывании.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения