Добрый день! Начал работать с микроконтроллерами совсем недавно. В общем, по нажатию кнопки необходимо поменять состояние вывода. Задача тривиальнейшая. Но код в симуляторе не работает. Либо я очень сильно туплю, любо одно из двух. Прямо вера в жизнь теряется. Подскажите, если не сложно, где я не прав. Контроллер ATMEGA128. Кнопка висит на первой ноге порта С. Меняется состояние первой ноги порта F.
о, спасибо! заработало!!! А тогда еще вопрос. Кнопку нажимаю - состояние вывода порта F меняется на 1. Отпускаю - все равно 1. А как сделать так, чтобы после отпускания кнопки состояние вывода порта F менялось на 0? Или тут надо делать какую - нибудь задержку, а потом принудительно сбрасывать?
Если так сделать, то получится наоборот - разомкнуто +, замкнуто -. Чтобы сделать замкнуто +, разомкнуто -, надо 1 контакт кнопки посадить на +, второй через резистор на землю и второй контакт до резистора соединить с PC0. И подтягивать этот вход к питанию не надо. Просимулировал - вроде работает
Заголовок сообщения: Re: Не меняется состояние вывода.
Добавлено: Пт мар 02, 2012 10:43:39
Поставщик валерьянки для Кота
Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Ср май 11, 2011 21:37:45 Сообщений: 1995 Откуда: Цветочный город
Рейтинг сообщения:0
Prosperous писал(а):
Если так сделать, то получится наоборот - разомкнуто +, замкнуто -. Чтобы сделать замкнуто +, разомкнуто -, надо 1 контакт кнопки посадить на +, второй через резистор на землю и второй контакт до резистора соединить с PC0. И подтягивать этот вход к питанию не надо. Просимулировал - вроде работает
это верно, однако цель МК как раз в том, что для решения задачи вместо аппаратной обвязки по максимуму используются программные средства. поэтому логичнее отказаться от внешних компонентов (резистора), а для того, чтобы "при нажатии был плюс" использовать программную инверсию сигнала. хотя для программы что плюс, что минус (правильнее - 1 или 0) все равно, все это ЧИСЛА, и с ними можно делать все, что угодно.
_________________ битва с дураками проиграна, победители торжествуют. слава победителям!
_________________ Загружая на вход компьютера "мусор", на выходе получим "мусор^32". PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Выполняя проверку по if вы ставите условие что будет если вывод в 1. Но перехода в состояние 0 необходимо тоже описать, иначе получается так. МК ждет пока нет 1 на входе, затем перкидывает вывод и все - больше не возвращается в состояние 0
_________________ Загружая на вход компьютера "мусор", на выходе получим "мусор^32". PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
2Meteor Так а вроде Мастер Ломастер выше привел пример, когда условия не нужны. И вроде все работает. (правда я не очень понял как). Вы предлагаете вернуть обратно условия? (как писал pyzhman, так и он, вроде, согласился, что у Мастер Ломастера оптимальнее). Или я чего то недопонимаю?
Заголовок сообщения: Re: Не меняется состояние вывода.
Добавлено: Пт мар 02, 2012 14:08:49
Поставщик валерьянки для Кота
Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Ср май 11, 2011 21:37:45 Сообщений: 1995 Откуда: Цветочный город
Рейтинг сообщения:0
я вам поясню, как работает на примере поясню.
представьте себе, что вам кто-то дает карточку белого или красного цвета, а вы должны показать кому-то третьему точно такую же. есть вариант, когда вы берете карточку, определяете ее цвет, затем выбираете из своих карточек нужную и показываете ее третьему. я же вам предложил вариант, когда вы берете карточку и не глядя на нее сразу ее же и показываете - вам оно надо, какого она цвета?
вариант с if-else - это вариант с АНАЛИЗОМ, т.е. смотрим на карточку, думаем и т.д. мой вариант - БЕЗ АНАЛИЗА: передаем не глядя и не думая.
в вашем примере с кнопкой все просто: что считали с одного порта, то же самое вывели и на другой. не глядя
разумеется, бездумный (мой) вариант не пригоден для случая, когда получив белую карточку вы должны поставить на подоконник герань, а получив красную - поставить 33 холодных утюга понимаете о чем я?
_________________ битва с дураками проиграна, победители торжествуют. слава победителям!
))) Да, предельно. В моем случае по поводу условий проверки можно не заморачиваться, поэтому ваш вариант подходит оптимально. А в будущем обязательно буду условиями пользоваться
В общем на этом история не закончилась Постепенно наращиваю код программы и столкнулся вот с чем. По задумке, при нажатии на кнопку, первая нога порта F формирует высокий уровень сигнала, который подается на ногу внешнего прерывания другого контроллера. После обработки прерывания второй контроллер инициирует передачу данных по SPI (он мастер). Первый контроллер принимает данные и выводит их на ноги порта Е. Проблема в том, что после написания функции SPI - slave, первый вывод порта F опять таки не хочет менять свое состояние. Как они взаимосвязаны ума не приложу.
2pyzhman Я понимаю, что вызываю чувства типа "Господи, ну что за ДЕБИЛ!" Думаю мне можно сделать скидку на отсутсвие опыта Хотелось бы прояснить на счет
Код:
PORTC=0x01;
Выше я писал, что в моем варианте подключения кнопки, такую строку, вроде как, можно не писать. Возможно я ошибаюсь. Если же принципиально важно написание такой строки, то (я ее дописал, раскомментировал PORTE = SPI_receive(); и просимулировал) состояние вывода порта F не изменилось. А вот когда эта строка закоментирована - работает.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения