Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн авг 01, 2011 17:26:09
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19640 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
vit007 писал(а):
Здрасть
Здрасть. Без комментариев вряд ли кто-то будет пытаться вникнуть в ваш код.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
reti ---------- замысел: 1. вход (первый-второй датчик) закидывается ед. в Temp (регистр) - работа первого прерывания увеличиваем число в Temp на ед. = 2 и выдача на порт ед. для кнопки звонка - работа второго прерывания 2. выход (второй-первый датчик) во втором прерывание увеличиваем 0 в Temp на ед., сравниваем с ед. = 0, переходим, минуя порты, в конец проги... Там в рег. Temp4 вводим ед. и ждем срабатывание первого прерывания В первом прерывание в Temp идет ед., а т.к. след операция разности, то отнимаем ед. Temp4...
По идеи моей в Temp должен быть 0, и если выходит еще один чел, то второе прерывание работает по принципу 2...
А у меня только может выйти беззвучно только один чел...
Компания MEAN WELL пополнила ассортимент своей широкой линейки светодиодных драйверов новым семейством XLC для внутреннего освещения. Главное отличие – поддержка широкого спектра проводных и беспроводных технологий диммирования. Новинки представлены в MEANWELL.market моделями с мощностями 25 Вт, 40 Вт и 60 Вт. В линейке есть модели, работающие как в режиме стабилизации тока (СС), так и в режиме стабилизации напряжения (CV) значением 12, 24 и 48 В.
Это означает пропустить следующую команду, если бит 0 в порту А установлен. Приобретаем или скачиваем книжку по контроллерам и узнаем назначения всех команд.
есть, но ни черта не понятно - слишком умно написано, подойдет пример использования команды, чтоб можно было скомпилировать и получить результат на железке - вот так что-то и пойму...
Приветствую уважаемые. Разбираюсь с памятью. То ли лыжи не едут, то ли... В общем очень нужна помощь. Если пошагово двигаться в AVR Studio, то программа выполняется как надо. Однако ни протеус, ни реальный контроллер не работают как надо. Идея программы следующая: после включения берутся данные из памяти, запускается шим с этими параметрами. При нажатии одной кнопки, увеличивается процент заполнения ШИМ, записывается в память. При нажатии другой кнопки, процент заполнения уменьшается, записывается в память.
p.s. что то типа плавного регулятора с памятью хочу получить.
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт авг 02, 2011 15:54:17
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19640 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Не очень понятно, зачем вы разрешаете/запрещаете прерывания, если у вас код всё равно с нулевого адреса начинается.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
// чтение порта D START: in temp, PinD ; чтение порта В subi temp,0b00010000 ; вычитаем из ttemp значение 0b00010000 (PD4) breq dekrement ; если нажата переходим на инкремент
Сильно не разбирался, но:
Чтение из порта, точнее с кнопки, следует реализовывать след. образом:
Код:
sbis PIND, PIND4 rjmp dekrement
этот код избавит Вас от лишнего гемороя с состоянием остальных пинов МК, и тем самым избавит от ошибок.
И сл. замечание, необходимо для кнопки реализовать алгоритм защиты от дребезга, дело в том, что МК работает быстро и Вы просто не в состоянии корректно отследить процесс нажатия и изменения данных в железе (не знаю как работает Ваш шпротеус, (ИМХО ненадо он совсем)).
Не очень понятно, зачем вы разрешаете/запрещаете прерывания, если у вас код всё равно с нулевого адреса начинается.
На всякий случай. где то читал, что надо. ну у меня в общем не нужно, но вроде и не мешает.
Rimsky писал(а):
Чтение из порта, точнее с кнопки, следует реализовывать след. образом:
Код:
sbis PIND, PIND4 rjmp dekrement
этот код избавит Вас от лишнего гемороя с состоянием остальных пинов МК, и тем самым избавит от ошибок.
пока накидал первое что пришло в голову. Потом бы все равно до чего нибудь подобного дошел. Спасибо за подсказку. Защита от дребезга у меня там есть временная задержка. А шпротеус, для оперативной отлажки. Не всегда охота МК программировать после каждого мелкого изменения программы. Но суть не об этом... может я чего не дописал, чтобы память использовалась нормально. может ей там где то какое то особое приглашение надо?
Блин.... Вот как это называется? Вчера мозг чуть не взорвался не мог понять почему не работает. Сегодня прихожу, запускаю схему а она работает..... Ну блин вчера та не работала. как такое возможно.....
Rimsky писал(а):
Код:
ldi r16, (1<<PD4)|(1<<PD6) ; подтягивающие резисторы на PD4, PD6 out DDRD, r16 ldi r16, ~((1<<PD4)|(1<<PD6)) ; настройка порта PD4, PD6 на ввход out DDRD, r16
Вам огромный респект и спасибо есть чего покурить. Прога почти работает вот тока почему то только в одну сторону (проверено в железе). и вместо sbis нужен sbic. Есть другой вопрос. В тех обучалках по которым я учился небыло ни слова про написания типа: ldi r16, ~((1<<PD4)|(1<<PD6)). Смысл этого в общем та понятен кроме ~ можно в двух словах про все это. и еще вопрос вместо
Код:
ldi r16, (1<<PD4)|(1<<PD6) ; подтягивающие резисторы на PD4, PD6 out DDRD, r16 ldi r16, ~((1<<PD4)|(1<<PD6)) ; настройка порта PD4, PD6 на ввход out DDRD, r16
нельзя просто написать?:
Код:
ldi r16, ~((1<<PD4)|(1<<PD6)) ; настройка порта PD4, PD6 на ввход out DDRD, r16
В тех обучалках по которым я учился небыло ни слова про написания типа: ldi r16, ~((1<<PD4)|(1<<PD6)). Смысл этого в общем та понятен кроме ~ можно в двух словах про все это. и еще вопрос вместо
В общем так, думаю будет понятно:
ldi r16, ~((1<<PD4)|(1<<PD6)), это равнозначно 0b10101111, знак ~ означает логическое отрицание (НЕ) или проще говоря инвертирование.
ldi r16, (1<<PD4)|(1<<PD6), это равнозначно 0b01010000
В общем случае, это запись константы, только нагляднее и понятнее для понимания. В хидере, это файл tn2313def.inc в вашем случае, есть все определения регистров SFR и ключевых адресов МК, так что и на ассемблере можно писать достаточно понятно.
Цитата:
нельзя просто написать?: Код: ldi r16, ~((1<<PD4)|(1<<PD6)) ; настройка порта PD4, PD6 на ввход out DDRD, r16
Можно и так, но в таком случае Вам будет необходимо к каждому пину на котором у Вас кнопки прицепить внешний подтягивающий резистор к + Uпит, чтобы обеспечить лог 1 на входе порта, а при нажатии кнопки, которая замыкает пин на землю на входе пина будет лог. 0, так мы определим, что кнопка нажата или отпущена.
Код:
sbis PIND, PIND4 rjmp DECREMENT_VALUE
sbis PIND, PIND6 rjmp INCREMENT_VALUE
В этом месте нужен именно sbis, поскольку 1, это состояние, когда кнопка не нажата, и соответственно программа летает в цикле.
Код:
out OCR1AH, ZERO out OCR1AL, ZERO
Вот это sorry, тупо переписал по Вашим мотивом, совершенно не к селу не к городу, лучше вместо этих строчек написать так out TCNT0, ZERO
P.S. Там я в исходнике конечно много намудрил, но думаю Вам полезнее самому разобраться что к чему, главной целью было показать почерк.
C ~ и остальным разобрался. просто и весьма удобно. Следующие вопросы. На что подтягивают внутренние резисторы? управление идет низким уровнем, значит логично предположить что подтягиваются к высокому уровню. Просто в моем понимании нажатая кнопка это подача высокого уровня на вход. Поэтому и подумал что sbic. Соответственно подтягивать нужно к низкому уровню. можно их подтянуть к 0?
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 10:11:26
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19640 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
qmix писал(а):
На что подтягивают внутренние резисторы? управление идет низким уровнем, значит логично предположить что подтягиваются к высокому уровню. Просто в моем понимании нажатая кнопка это подача высокого уровня на вход. Поэтому и подумал что sbic. Соответственно подтягивать нужно к низкому уровню. можно их подтянуть к 0?
Резистором подтягивают вывод контроллера к одному уровню, а кнопку ставить на другой уровень. В МК есть встроенные подтягивающие резисторы к "+" питания — очень удобно, не надо ставить внешние.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 10:18:50
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19640 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
qmix писал(а):
не мог понять вроде обе строчки настраивают портт да и не подтягивалось ничего на железе. может правильно сначала настраиваем порт на вход, но потом ему выводим высокий уровень, и он тогда подтягивается к высокому уровню....
В даташит ни разу не заглядывали?
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения