Нет реакции МК на кнопку

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Открыл глаза
Сообщения: 78
Зарегистрирован: Вт мар 12, 2013 09:13:16

Сообщение lakec »

Здравствуйте уважаемые коты :)
Начал изучение контроллеров. Пишу прогу которая по нажатию кнопки переключает лампочки

Код: Выделить всё

#include <tiny2313.h>
#include <delay.h>

void main (void){
DDRB=0b11111111;
PORTB=0b11111111;

DDRD=0b00000000;
PORTD=0b00000011;

 if (PIND.1 == 1) { 

 PORTB.1 = 0;   // вкл светодиод
 delay_ms(50000); // пауза

};

 if (PIND.1 == 0) { 

 PORTB.0 = 0;   // вкл светодиод
 delay_ms(50000); // пауза

};
}
Появились вопросы, ответа на которые не могу найти в инете.
1. Нужно ли при установке порта на выход писать PORTB=0b11111111; или резюки подключаются при настройке порта на вход?
2. Почему МК не реагирует на кнопку? Горит только светодиод подключенный к PORTB.1
Спасибо
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

delay_ms(50000); // пауза 50 секунд так должно быть?
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 126
Зарегистрирован: Пн ноя 05, 2012 22:23:32
Откуда: Санкт-Петербург

Сообщение VanyaSV »

lakec писал(а): 1. Нужно ли при установке порта на выход писать PORTB=0b11111111; или резюки подключаются при настройке порта на вход?
Нужно. Порт по умолчанию включается на вход без резисторов
lakec писал(а): 2. Почему МК не реагирует на кнопку? Горит только светодиод подключенный к PORTB.1
А что конкретно должна делать ваша программа?
Переключать 2 светодиода по 2 кнопкам?
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

У вас однократно опрашиваются кнопки и по результату устанавливаются выходы. Попробуйте перед включением питания удерживать кнопки - убедитесь. Правда эти 50 сек :)) Чтобы постоянно держать управление надо бы циклически опрашивать кнопки, т.е. приментить хотя бы

Код: Выделить всё

while(1)
{
опрос кнопки
    {
    делаем светодиод
    }
опрос кнопки
    {
    делаем светодиод
    }
}
Docendo discimus
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 78
Зарегистрирован: Вт мар 12, 2013 09:13:16

Сообщение lakec »

С задержкой погорячился :)) да и действительно в цикл надо бы загнать опрос. Видимо из-за этого были проблемы

Код: Выделить всё

#include <tiny2313.h>
#include <delay.h>

void main (void){
DDRB=0b11111111;
PORTB=0b11111111;
DDRD=0b00000000;
PORTD=0b00000011;

  while (1) {
  if (PIND.1 == 1) { 
 PORTB.1 = 0;   // вкл светодиод 1
 PORTB.0 = 1;   // выкл светодиод 0
  delay_ms(5); // пауза
};

   
 if (PIND.1 == 0) { 
 PORTB.0 = 0;   // вкл светодиод 0
 PORTB.1 = 1;   // выкл светодиод 1
 delay_ms(5); // пауза
};
};
} 
так работает)) Поставил след. задачу. Есть одна кнопка и 3 (количество не важно) светодиода. Сделать так, чтобы при нажатии на кнопку один светик включался, другие не горят. И так поочередно (типа светофора, только переключаются кнопкой). Как такое сделать если у кнопки только два состояния (0 и 1)?
ЗЫ.Посоветуйте пожалуйста книгу или сайт с примерами программирования на си именно для микроконтроллеров. Те, что я находил слишком сложны для новичков.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Ответить

Вернуться в «Периферия»