Перейти к содержанию

Вопросы от начинающих по МК


Рекомендуемые сообщения

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов
  • Создана
  • Последний ответ

Топ авторов темы

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Эм... Приспичило меня разделить порт D на Atmega - На половинки, т.е. половину разрядов на ввод, а половину на вывод. Как это написать? и как дальше работать с портом вывода отдельно не затрагивая порт ввода, т.е. допустим если я раньше писал.

DDRD = 0xFF;
DDRB = 0x00;
if(PORTB == 0b01111111)
{
PORTD = 0x00;
}

то как мне тут сделать?

допустим мы половину порта как ввод половину как вывод

DDRD = 0x0F;
if(??? == ???)
{
??? = ???;
}

как тут писать условия для ввода и вывода?

Изменено пользователем Arthur
Ссылка на комментарий
Поделиться на другие сайты

Hongfa для различных применений в Компэл. Большой выбор в наличии!

Компания HONGFA - это не только крупнейший в мире производитель электромеханических реле, но также производитель конденсаторов, вакуумных прерывателей, трансформаторов и низковольтного коммутационного оборудования. На складе КОМПЭЛ регулярно поддерживаются около 100 самых популярных позиций электромеханических реле. Реле Hongfa могут заместить многие изделия производства недоступных брендов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Тренды и лучшие решения для разработки зарядных станций в России

К 2029 году в России прогнозируется увеличение числа зарядных станций до 40 000. При этом отечественный рынок электротранспорта имеет климатические, потребительские и географические особенности. Для успешной разработки и построения инфраструктуры станций заряда в России идеальным вариантом является использование решений и электронных компонентов китайских производителей – лидеров индустрии электротранспорта и возобновляемой энергетики, которые уже представлены в КОМПЭЛ. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

if (PORTD == 0b00000000)

Ссылка на комментарий
Поделиться на другие сайты

Секреты депассивации литиевых батареек FANSO EVE Energy

Самыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Ну да, если там будет не ноль то условие не сработает. Так и задумано и было бы забавно если бы было иначе.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

так вот я и спрашиваю как организовать ввод и вывод. так что бы можно 1-4 разряды отдельно, а 5-8 разряды отдельно. и производить с ними отдельные операции

Ссылка на комментарий
Поделиться на другие сайты

Так просто бери и работай. Надо установить отдельный вывод - устанавливай, надо прочитать - читай.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

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

if (PORTD == 0b00000000)

используйте маску для незначащих пинов

if (PORTD&(0b11110000) == 0b00000000)

Ссылка на комментарий
Поделиться на другие сайты

День добрый. Прошу помощи в проверке кода , потому что в симуляторе не правильно работает, сам проверял вроде верно. Всем заранее спасибо за участие

post-178726-0-79903200-1403767605_thumb.jpg

Ссылка на комментарий
Поделиться на другие сайты

Для начала скажите чего хотите от программы, и как именно она не так работает. Код надо не фотографировать, а скопировать и вставить в сообщение, воспользовавшись кнопкой "код" над окном ввода сообщения. Желательно весь. Если симулируете программу, то проект симулятора тоже желательно прикрепить к сообщению.

Ссылка на комментарий
Поделиться на другие сайты

код сюда переписать в облом ... :(

код переписать не в облом дело в том что Android не хочет вставлять файл только фото или видео сделанное сразу же.

Для начала скажите чего хотите от программы

от программы хочу чтобы я нажал кнопку светодиод загорелся нажал еще раз светодиод погас. Как в простом уроке, только дело в том что при нажатии на любую кнопку всючается светодиод симулятор протеус Изменено пользователем Braimik
Ссылка на комментарий
Поделиться на другие сайты

Вот код, в архиве есть и проект в протеусе и в атмел студио

#include

int main(void)

{

DDRL |= ~(0 << PL0);

DDRL |= ~(0 << PL1);

DDRL |= ~(0 << PL2);

DDRL |= ~(0 << PL3);

DDRL |= ~(1 << PL4);

DDRL |= ~(1 << PL5);

DDRL |= ~(1 << PL6);

DDRL |= ~(1 << PL7);

while(1)

{

while ((PINL&(1 << PL0)) ==1) {}

if ((PINL&(1 << PL4)) ==0)

{

PORTL |= (1 << PL4);

}

else

{

PORTL &= ~(1 << PL4);

}

while ((PINL&(1 << PL0)) ==0) {}

while ((PINL&(1 << PL1)) ==1) {}

if ((PINL&(1 << PL5)) ==0)

{

PORTL |= (1 << PL5);

}

else

{

PORTL &= ~(1 << PL5);

}

while ((PINL&(1 << PL1)) ==0){}

while ((PINL&(1 << PL2)) ==1) {}

if ((PINL&(1 << PL6)) ==0)

{

PORTL |= (1 << PL6);

}

else

{

PORTL &= ~(1 << PL6);

}

while ((PINL&(1 << PL2)) ==0){}

while ((PINL&(1 << PL3)) ==1) {}

if ((PINL&(1 << PL7)) ==0)

{

PORTL |= (1 << PL3);

}

else

{

PORTL &= ~(1 << PL3);

}

while ((PINL&(1 << PL3)) ==0){}

}

}

КОд.zip

Ссылка на комментарий
Поделиться на другие сайты

DDRL |= ~(0 << PL0);

DDRL |= ~(0 << PL1);

DDRL |= ~(0 << PL2);

DDRL |= ~(0 << PL3);

DDRL |= ~(1 << PL4);

DDRL |= ~(1 << PL5);

DDRL |= ~(1 << PL6);

DDRL |= ~(1 << PL7);

Что это за извращение? Особенно DDRL |=~(0<<PL2) Сомневаюсь, что хотели добиться именно установки всех битов в 1, для этого существуют более простые способы. А если хочется выставить нужные биты так либо DDRL=0b00001111; либо, что нагляднее, DDRL=(1<<0 | 1<<1 | 1<<2 | 1<<3);
while ((PINL&(1 << PL0)) ==1)
Снова плохая идея: лучше проверять на равенство или неравенство нулю, потому что для любого другого порта (PL1 хотя бы) такой способ уже не сработает.
от программы хочу чтобы я нажал кнопку светодиод загорелся нажал еще раз светодиод погас.
А зачем тогда такая простыня кода, если это делается строк в 10?

Вы это в родном симуляторе Студии прогоняли вообще, по шагам?

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Вы это в родном симуляторе Студии прогоняли вообще, по шагам?

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

Ссылка на комментарий
Поделиться на другие сайты

Я не спорю, синтаксически это может быть правдой, но неужели код while ((PINL&(1 << PL2)) ==1) {} работает как предполагается по логике программы? По идее условие в цикле всегда будет false, соответственно этот участок будет проигнорирован (максимум, займет несколько тактов).

Если интересует только одна кнопка - зачем вообще остальные обрабатывать?

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Если интересует только одна кнопка - зачем вообще остальные обрабатывать?

мне нужно всего 12 кнопок. и чтобы каждая кнопка отвечала за свой светодиод. а сейчас получается что при нажатии на любую кнопку включается 1 либо 2 светодиод. как исправить и сделать что все работало как задуманно?

Ссылка на комментарий
Поделиться на другие сайты

Либо ловить прерывания PCINT, если контроллер их умеет, либо ставить флаги на каждый диод. Например, при первом проходе бесконечного цикла выводы PL1, PL3, PL7 оказались 0, остальные - 1. Тогда ставим флаги светодиодов 1, 3, 7. При следующем проходе в 0 установились PL2, PL3, PL5. Тогда флаг 3 диода не трогаем, выставляем флаг 2 и 5, флаг 1 и 7 сбрасываем, меняя состояние диода.

Или, что проще, сохраняем предыдущее состояние кнопок и сравниваем с текущим. А по нарастающему или спадающему фронту (как удобнее) меняем состояние диода.

P.S. У меня получилось 13 строк кода. Если с форматированием и комментариями - 17. Архив запаролен, так что не подглядывайте пока не напишете свое.

code.rar

Изменено пользователем COKPOWEHEU

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Либо ловить прерывания PCINT,

Спасибо за подсказку. Это получается мне выставлять прерывание после каждого цикла? То есть если я БУДУ использовать прерывание то включив pl1 он будет гореть и дальше при включении ol2? Пока я его не выключю. В протеусе проверяли?

Ссылка на комментарий
Поделиться на другие сайты

Я реализовал самый простой способ - через хранение предыдущего состояния, на PORTA кнопки, на PORTB - диоды, без защиты от дребезга. Демонстрация концепции. В родном симуляторе Студии все работает, в протеусе тоже. На счет PCINT не в курсе, на тех ли оно портах, на которых кнопки. Да и не уверен, что это будет проще и надежнее, чем простейший способ. Из преимуществ разве что асинхронная обработка, как и для любого прерывания.

Это получается мне выставлять прерывание после каждого цикла?
Э-э-э.. Вы вообще в курсе, что такое прерывания?

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

]Э-э-э.. Вы вообще в курсе, что такое прерывания?

не про то подумал. попробую может получится. после настройки постов ставим прерывание на порты с кнопками?

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...