ATtiny2313: порты ввода-вывода

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 4
Зарегистрирован: Пн ноя 07, 2016 11:51:01

Сообщение evgen_kz »

Всем привет!
Помогите, пожалуйста, с таким заданием.

К порту D микроконтроллера подключены кнопки (7 шт). Нажатие кнопки должно обеспечить "высвечивание" её номера (начиная от единицы) в двоичном коде на цепочке светодиодов, подключённых к порту B.

Подскажите, как это можно осуществить?
Реклама
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

Сообщение Vov123 »

Изображение
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15655
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

evgen_kz писал(а):Всем привет!
Помогите, пожалуйста, с таким заданием.

... Нажатие кнопки должно обеспечить "высвечивание" её номера (начиная от единицы) в двоичном коде на цепочке светодиодов, подключённых к порту B.

Подскажите, как это можно осуществить?
цепочка последовательно включенных светиков на один вывод МК?
:wink:
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Сообщение alex_ »

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

void main()
{
  DDRB=0b01111111; // настроен на выход
  DDRD=0;          // на вход, но можно было и не писать
  while(1)
  {
    PORTB=PIND;    // считаем из D порта и скопируем в B порт
  }
}
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18769
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

alex_ писал(а):

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

void main()
{
  DDRB=0b01111111; // настроен на выход
  DDRD=0;          // на вход, но можно было и не писать
  while(1)
  {
    PORTB=PIND;    // считаем из D порта и скопируем в B порт
  }
}
жестоко :facepalm:
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Сообщение a_skr »

alex_ писал(а):

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

void main()
{
  DDRB=0b01111111; // настроен на выход
  DDRD=0;          // на вход, но можно было и не писать
  while(1)
  {
    PORTB=PIND;    // считаем из D порта и скопируем в B порт
  }
}
Неправильно. Нужно же номер кнопки в двоичном коде. И было бы логично кнопки на корпус.

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

PORTD = 0x7F;
DDRB  = 0x07;
while(1)
{
  if((PIND & (1<<0)) == 0) PORTB = 1;
  if((PIND & (1<<1)) == 0) PORTB = 2;
  if((PIND & (1<<2)) == 0) PORTB = 3;
  if((PIND & (1<<3)) == 0) PORTB = 4;
  if((PIND & (1<<4)) == 0) PORTB = 5;
  if((PIND & (1<<5)) == 0) PORTB = 6;
  if((PIND & (1<<6)) == 0) PORTB = 7;
}
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18769
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

ну вот и еще один горе-студент зачёт получил...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Родился
Сообщения: 4
Зарегистрирован: Пн ноя 07, 2016 11:51:01

Сообщение evgen_kz »

a_skr писал(а):
alex_ писал(а):

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

void main()
{
  DDRB=0b01111111; // настроен на выход
  DDRD=0;          // на вход, но можно было и не писать
  while(1)
  {
    PORTB=PIND;    // считаем из D порта и скопируем в B порт
  }
}
Неправильно. Нужно же номер кнопки в двоичном коде. И было бы логично кнопки на корпус.

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

PORTD = 0x7F;
DDRB  = 0x07;
while(1)
{
  if((PIND & (1<<0)) == 0) PORTB = 1;
  if((PIND & (1<<1)) == 0) PORTB = 2;
  if((PIND & (1<<2)) == 0) PORTB = 3;
  if((PIND & (1<<3)) == 0) PORTB = 4;
  if((PIND & (1<<4)) == 0) PORTB = 5;
  if((PIND & (1<<5)) == 0) PORTB = 6;
  if((PIND & (1<<6)) == 0) PORTB = 7;
}
Спасибо за помощь. Но а можно это реализовать как то графически в Algorithm Builder?
Не могу понять как можно отобразить while
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

evgen_kz писал(а):графически в Algorithm Builder
Изображение
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Сообщение alex_ »

evgen_kz писал(а):Спасибо за помощь.
Если помогло плюсани товарищу :))
Родился
Сообщения: 4
Зарегистрирован: Пн ноя 07, 2016 11:51:01

Сообщение evgen_kz »

alex_ писал(а):
evgen_kz писал(а):Спасибо за помощь.
Если помогло плюсани товарищу :))
Не нажимается "+", идет загрузка и все на этом....

Добавлено after 2 minutes 14 seconds:
oleg110592 писал(а):
evgen_kz писал(а):графически в Algorithm Builder
Изображение
Спасибо за помощь.
Еще такой вопрос, а как сделать если не нажата кнопка, чтобы и светодиод не горел, т.к. горит последняя нажатая комбинация?
И необходимо, чтобы порт D был включен в режим ввода.
Последний раз редактировалось evgen_kz Сб ноя 12, 2016 11:40:13, всего редактировалось 1 раз.
Друг Кота
Аватара пользователя
Сообщения: 6332
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

не '+' на клаве, а кнопка '+' в соответствующем сообщении :(
билдеровскими протезами никогда не пользовался, но по смыслу "если D = 0хFF, то 0 -> PORTB" - добавить еще одно условие.
Изображение
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

Изображение
порт D после сброса включен в режим ввода
Ответить

Вернуться в «AVR»