Ассемблер (ASM) для AVR в вопросах и ответах
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Питанием решилось. Строка ничего не дала.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Здравствуйте. Возникла проблема при работе с DS18B20. В железе датчик не инициализируется (датчик рабочий, проверял схему и с новым - не работает). В протеусе все пашет, сверился по документации, интервалы времени правильные. Подскажите в чем может бы загвоздка? Код и схему в протеусе прилагаю
- Вложения
-
- DS18B20.zip
- Проект в студии и схема в протеусе
- (70.09 КБ) 191 скачивание
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Уважаемые коты!
Что скажете по поводу применения 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 их понимает, а вот ассемблер - нет. (Отсутствует подсветка и говорит, что неизвестная команда). Какие контроллеры работают с этими инструкциями?
Опыт и мудрость приходят с годами... К некоторым годы приходят одни...
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Ассемблер (ASM) для AVR в вопросах и ответах
... ИМХО если Atmel не вносит их в AVR Studio, наверное на то есть причины ... Например тест команды LAC Z,R17 на atmega8 дал результат dec YH dec ZL, а не то, что описано в руководстве ....VirZh писал(а):Что скажете по поводу применения 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 их понимает, а вот ассемблер - нет. (Отсутствует подсветка и говорит, что неизвестная команда). Какие контроллеры работают с этими инструкциями?
- Necroteeth
- Потрогал лапой паяльник
- Сообщения: 362
- Зарегистрирован: Вс окт 10, 2010 17:43:48
- Откуда: Воронеж
Re: Ассемблер (ASM) для AVR в вопросах и ответах
уважаемые коты!
программа является моим собственным вариантом бегущего огонька из обучалки: 4 программы индикации светодиодов переключаются между собой кнопкой на INT0.
один таймер отсчитывает время между переключениями светодиодов 200мс, а другой таймер включается по внешнему прерыванию и отсчитывает 250мс (программный антидребезг), после чего обнуляется и отключается.
проблема в том, что программа переключается периодически через одну. неужели задержки в 250мс мало или я все-таки где-то в тексте программы облажался?
программа является моим собственным вариантом бегущего огонька из обучалки: 4 программы индикации светодиодов переключаются между собой кнопкой на INT0.
один таймер отсчитывает время между переключениями светодиодов 200мс, а другой таймер включается по внешнему прерыванию и отсчитывает 250мс (программный антидребезг), после чего обнуляется и отключается.
проблема в том, что программа переключается периодически через одну. неужели задержки в 250мс мало или я все-таки где-то в тексте программы облажался?
- Вложения
-
- runfire_with_choose.asm
- (6.57 КБ) 259 скачиваний
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Necroteeth писал(а):проблема в том, что программа переключается периодически через одну. неужели задержки в 250мс мало или я все-таки где-то в тексте программы облажался?
Прерываение по уровню или фронту/спаду (или по обоим)?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Necroteeth
- Потрогал лапой паяльник
- Сообщения: 362
- Зарегистрирован: Вс окт 10, 2010 17:43:48
- Откуда: Воронеж
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Gudd-Head писал(а):Necroteeth писал(а):проблема в том, что программа переключается периодически через одну. неужели задержки в 250мс мало или я все-таки где-то в тексте программы облажался?
Прерываение по уровню или фронту/спаду (или по обоим)?
по спаду
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Necroteeth писал(а):по спаду
Перед самым выходом из прерывания флаг прерывания сбрасываете?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Necroteeth
- Потрогал лапой паяльник
- Сообщения: 362
- Зарегистрирован: Вс окт 10, 2010 17:43:48
- Откуда: Воронеж
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Gudd-Head писал(а):Necroteeth писал(а):по спаду
Перед самым выходом из прерывания флаг прерывания сбрасываете?
я не совсем понял... вы имели в виду GIFR что ли?
как у меня сделано: происходит прерывание INT0, при входе в его обработчик локально запрещается INT0, глобально разрешается все и запускается таймер Timer0 путем установки в TCCR0 значения прескалера.
зацикливаемся, пока не выставится регистр TimeIsOver в 1. это происходит в прерывании таймера 0, из которого мы возвращаемся в обработчик прерывания INT0 через reti.
после этого на единицу увеличивается переменная-счетчик Counter, показывающая текущую программу индикации, затем останавливается Timer0 и через reti возвращаемся в основной цикл.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Necroteeth писал(а):я не совсем понял... вы имели в виду GIFR что ли?
Да, его. Перед выходом из обработки прерывания по INT0 вы сбрасываете INTF0 (записью в него лог. "1")???
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Necroteeth писал(а):я не совсем понял... вы имели в виду GIFR что ли?
как у меня сделано: происходит прерывание INT0, при входе в его обработчик локально запрещается INT0, глобально разрешается все и запускается таймер Timer0 путем установки в TCCR0 значения прескалера.
зацикливаемся, пока не выставится регистр TimeIsOver в 1. это происходит в прерывании таймера 0, из которого мы возвращаемся в обработчик прерывания INT0 через reti.
после этого на единицу увеличивается переменная-счетчик Counter, показывающая текущую программу индикации, затем останавливается Timer0 и через reti возвращаемся в основной цикл.
Вот это глум
сам то-то понял что хотел сделать?
- Necroteeth
- Потрогал лапой паяльник
- Сообщения: 362
- Зарегистрирован: Вс окт 10, 2010 17:43:48
- Откуда: Воронеж
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Gudd-Head писал(а):Necroteeth писал(а):я не совсем понял... вы имели в виду GIFR что ли?
Да, его. Перед выходом из обработки прерывания по INT0 вы сбрасываете INTF0 (записью в него лог. "1")???
вот это обработчик прерывания INT0:
Код: Выделить всё
Choose: ldi Shift,0
ldi Temp,0b00000000 ;запрещаем INT0
Out GICR,Temp
sei
ldi TimeIsOver,0
ldi TEMP,0b00001101 ;запуск таймера антидребезга
out TCCR0,TEMP
Loop: cpi TimeIsOver,1 ;ждем срабатывания таймера
brne Loop
inc Counter
ldi TEMP,0 ;остановка таймера антидребезга
out TCCR0,TEMP
retiсопутствующий обработчик прерывания таймера0:
Код: Выделить всё
Delay: ldi TimeIsOver,1 ;выставляем флаг того, что таймер антидребезга досчитал до конца и возвращаемся в обработчик прерывания INT0
reti при симуляции я вообще не заметил никаких телодвижений со стороны регистра GIFR. выставлял вручную на пине INT0 в единицу - регистр не шелохнулся, и даже когда единицу сбросил (т.е. просимулировал отрицательный фронт сигнала) - регистр все равно никак не изменился, хотя программный указатель скакнул на метку обработчика прерывания. не могли бы вы тогда объяснить суть установки единицы в бит INTF0? что при этом происходить будет и надо ли потом эту единицу оттуда убивать?
GP1 писал(а):Вот это глум
сам то-то понял что хотел сделать?
я не глумился ни над кем. выше я выкладывал полный листинг программы с комментариями. а это всего лишь текстовое дополнение к нему было
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Necroteeth писал(а):я не глумился ни над кем. выше я выкладывал полный листинг программы с комментариями. а это всего лишь текстовое дополнение к нему было
я не о том, к чему такие извраты с программой?
кто вас вообще научил делать временные задержки в прерывании?
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Necroteeth писал(а):при симуляции я вообще не заметил никаких телодвижений со стороны регистра GIFR.
Верить симуляции — дело десятое.
Necroteeth писал(а):выставлял вручную на пине INT0 в единицу - регистр не шелохнулся, и даже когда единицу сбросил (т.е. просимулировал отрицательный фронт сигнала) - регистр все равно никак не изменился, хотя программный указатель скакнул на метку обработчика прерывания.
А как по-вашему, что произошло? Я выскажу свою версию: ядро зафиксировало спад на INT0 и выставился флаг. Т.к. глобально и локально прерывание разрешено, произошёл переход по соответствующему вектору с аппаратным снятием флага прерывания, которого вы не увидели.
Necroteeth писал(а):не могли бы вы тогда объяснить суть установки единицы в бит INTF0? что при этом происходить будет
Суть: вы нажали кнопку, вошли в прерывание, флаг сбросился. Прерывания глобально запретились. Но из-за дребезга у вас произошёл ещё один спад и выставился флаг, но прерывания не произошло, т.к. оно запрещено глобально. Вы выходите из обработчика прерывания, глобально разрешаете прерывания и... Видите установленный флаг. И естессно, ещё раз обрабатываете то же самое прерывание, но теперь уже из-за дребезга.
Necroteeth писал(а):и надо ли потом эту единицу оттуда убивать?
Перечитайте даташит и то, что я уже писал.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Necroteeth
- Потрогал лапой паяльник
- Сообщения: 362
- Зарегистрирован: Вс окт 10, 2010 17:43:48
- Откуда: Воронеж
Re: Ассемблер (ASM) для AVR в вопросах и ответах
GP1 писал(а):я не о том, к чему такие извраты с программой?
кто вас вообще научил делать временные задержки в прерывании?
никто меня не учил. морщу попу сам, методом проб и ошибок.
я не утверждал, что делал это правильно. просто считал, что так удобнее отсчитать нужное время, которое в интернетах определяют как 200-250мс.
Gudd-Head, спасибо за консультацию. пожалуй, и правда попробую поупражняться в техническом английском. надеюсь, это поможет
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Necroteeth писал(а):... которое в интернетах определяют как 200-250мс.
...
даже самая х..я китайская кнопка успокаивается за 100-120 мс, в 99,9% достаточно 50-60 мс для подавления дребезга.
а временные задержки в прерывании не делай никогда, ты просто крадешь производительное время у процессора, за это время он столько полезного сможет сделать, ну, да я думаю, ты и сам до этого дойдешь, когда замутишь что-нибудь по-серьезней мигалки.
удачи.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
GP1 писал(а):даже самая х..я китайская кнопка успокаивается за 100-120 мс, в 99,9% достаточно 50-60 мс для подавления дребезга.
Подтверждаю. На работе как-то игрался с тактовой кнопкой и цифровым осциллом, м.б. даже картинки остались.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Necroteeth
- Потрогал лапой паяльник
- Сообщения: 362
- Зарегистрирован: Вс окт 10, 2010 17:43:48
- Откуда: Воронеж
Re: Ассемблер (ASM) для AVR в вопросах и ответах
хорошо. а тогда такой вопрос - как грамотные люди осуществляют эту задержку на ассемблере?
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
существуют различные способы, как правило конкретный метод определяется задачей, скажем определить факт нажатия - это одно, а различить короткое/длинное нажатие это совсем другое.
чаще всего кнопки опрашивают по прерываню таймера, но попадаются и по внешним прерываниям, но реже.
чаще всего кнопки опрашивают по прерываню таймера, но попадаются и по внешним прерываниям, но реже.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Necroteeth писал(а):хорошо. а тогда такой вопрос - как грамотные люди осуществляют эту задержку на ассемблере?
Также, как и не на асемблере. Только не в прерывании.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
