Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 04.12.2007, 14:37  
rattlesnake
Прохожий
 
Регистрация: 03.10.2007
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
rattlesnake на пути к лучшему
По умолчанию Нажатие кнопки не отрабатывает...

Помогите начинающему..
И так имеем: ATMEGA8 к PB0 и PB1 подключены лампочки которые поочередно моргают.
Вешаю на PB2 кнопку.
Хочу: после нажатия кнопки на секунду лампочки потухли.
Явно ответ где-то на поверхности - плз, гляньте..
Код:
#include ‹avr/io.h›
#include ‹util/delay.h›
int main (void){
	while (1) {
// 2 бит в ноль те вход; 0 и 1 - выход
		DDRB=0b00000011;		
		PORTB=0x01;
		_delay_ms(500);
// ни один из трех вариантов не работает..
//		if ( bit_is_set(PINB,0x04) ) {
//		if ( bit_is_set(PORTB,0x04)  ) {
		if ( PINB2 == 0 ) {
		PORTB=0x00;
		_delay_ms(1000);
		}
		PORTB=0x02;
		_delay_ms(500);
	}
return 0;
}
ЗЫ. Пробывал разные значения вместо 0x04 - безрезультатно...
Реклама:
rattlesnake вне форума  
Непрочитано 04.12.2007, 15:17  
AndreiVV
Гражданин KAZUS.RU
 
Регистрация: 29.06.2006
Сообщений: 638
Сказал спасибо: 37
Сказали Спасибо 56 раз(а) в 41 сообщении(ях)
AndreiVV на пути к лучшему
По умолчанию

Цитата:
И так имеем: ATMEGA8 к PB0 и PB1 подключены лампочки которые поочередно моргают.
чего-то не видно чтобы они моргали и если это действительно лапочки то можно и мк спалить
Код:
int main (void){ 
  
      DDRB=0b00000001;// 0 бит   - выход              
 while (1) { 
       
 PORTB^=0x01; //изменяем значение на противоположное
  _delay_ms(500); 

 if ( PINB2 == 0 ) {//если нажата кнопка ждем 1с
    PORTB=0x00; 
    _delay_ms(1000); 
   } 
  } 
return 0; 
}
это только для одного светодиода второй сими добавьте
AndreiVV вне форума  
Непрочитано 04.12.2007, 15:36  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию

Сообщение от AndreiVV
Код:
int main (void){ 
 ...  
 PORTB^=0x01; //изменяем значение на противоположное
 ...
return 0; 
}
Менять значение на противоположное в атмелах экономичнее (во всех отношениях - регистров, времени) таким способом:
Код:
int main (void){ 
 ...  
 PINB.‹номер пина›=1; //изменяем значение на противоположное
 ...
return 0; 
}
tempora вне форума  
Непрочитано 04.12.2007, 15:41  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Нажатие кнопки не отрабатывает...

Сообщение от rattlesnake
Помогите начинающему..
Код:
int main (void){
	while (1) {
		...
// ни один из трех вариантов не работает..
//		if ( bit_is_set(PINB,0x04) ) {
//		if ( bit_is_set(PORTB,0x04)  ) {
Когда кнопка нажата, соответствующий ей бит в прочитанном байте, ну, никак не is_set... Действительно, на поверхности...
tempora вне форума  
Непрочитано 04.12.2007, 16:08  
rattlesnake
Прохожий
 
Регистрация: 03.10.2007
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
rattlesnake на пути к лучшему
По умолчанию

Оно, конечно, спасибо, но но у меня аналогичный код, и аналогичная проверка, но на кнопку не реагирует..
Может просто я схемку не правильно сделал (ну не бейте сильно - начинаю)

-- Прилагается рисунок: --

rattlesnake вне форума  
Непрочитано 04.12.2007, 16:14  
AndreiVV
Гражданин KAZUS.RU
 
Регистрация: 29.06.2006
Сообщений: 638
Сказал спасибо: 37
Сказали Спасибо 56 раз(а) в 41 сообщении(ях)
AndreiVV на пути к лучшему
По умолчанию

Код:
PINB.‹номер пина›=1; //изменяем значение на противоположное
это не изменяем значение на противоположное а просто установка 1 то есть значение не зависит от предыдущего значения
в моем варианте: было 0 -› станет 1, было 1 -› станет 0
в вашем варианте: было 0 -› станет 1,было 1 -› станет 1
AndreiVV вне форума  
Непрочитано 04.12.2007, 16:24  
AndreiVV
Гражданин KAZUS.RU
 
Регистрация: 29.06.2006
Сообщений: 638
Сказал спасибо: 37
Сказали Спасибо 56 раз(а) в 41 сообщении(ях)
AndreiVV на пути к лучшему
По умолчанию

Цитата:
Может просто я схемку не правильно сделал
1. светодиод обыно к + подключают(но не принципиально)
2.
Код:
if ( PINB2 == 0 )
=если ноль то, у вас никогда не будет нуля тк при нажатии на кнопку у вас будет + пит. тоесть 1. Надо подключить к GND а не к VCC и поставить pullup с вывода мк на VCC или вкл внутренний pullup
AndreiVV вне форума  
Непрочитано 04.12.2007, 16:42  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию

Сообщение от AndreiVV
Код:
PINB.‹номер пина›=1; //изменяем значение на противоположное
это не изменяем значение на противоположное а просто установка 1 то есть значение не зависит от предыдущего значения:
было 0 -› станет 1,было 1 -› станет 1
Очень советую попробовать, прежде, чем спорить.
Сообщение от AndreiVV
... у вас никогда не будет нуля тк при нажатии на кнопку у вас будет + пит.
Да, я тоже был уверен, что кнопка давит на массу.
tempora вне форума  
Непрочитано 04.12.2007, 17:18  
AndreiVV
Гражданин KAZUS.RU
 
Регистрация: 29.06.2006
Сообщений: 638
Сказал спасибо: 37
Сказали Спасибо 56 раз(а) в 41 сообщении(ях)
AndreiVV на пути к лучшему
По умолчанию

Цитата:
Очень советую попробовать, прежде, чем спорить
я не спорю просто поспешил с ответом, перепутал PINB с PORTB. Вот проверил, и значение не меняится

Прикрепленный файл: 9493012.rar
AndreiVV вне форума  
Непрочитано 04.12.2007, 17:40  
rattlesnake
Прохожий
 
Регистрация: 03.10.2007
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
rattlesnake на пути к лучшему
По умолчанию

Всем спасибо - все заработало:
1. повесил кнопку на GRD и через 10кОМ на МК.
2.
Код:
int main (void){
		DDRB=0b00000011;
		PORTB|=_BV(2);
	while (1) {
		PORTB=0x01;
		_delay_ms(250);
		PORTB=0x02;
		_delay_ms(250);
		if ( bit_is_clear(PINB, 2) ) {
		PORTB=0x00;
// что бы видно было..
		_delay_ms(250);
		_delay_ms(250);
		_delay_ms(250);
		_delay_ms(250);
		}
	}
return 0;
}
rattlesnake вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Опрос кнопки Electric111 Микроконтроллеры, АЦП, память и т.д 15 18.12.2007 22:48
Кнопки retcom Микроконтроллеры, АЦП, память и т.д 42 21.09.2007 07:03
Снова кнопки.... dosikus Микроконтроллеры, АЦП, память и т.д 34 10.08.2007 20:46
Антидребезг, нажатие , отжатие.... dosikus Микроконтроллеры, АЦП, память и т.д 16 20.06.2007 14:31


Часовой пояс GMT +4, время: 19:03.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot