Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AVR + Си + мультиплексор = Матрица
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
isx
А как можно реализовать такую идейку.
Надо используя 2 порта МК пустить их через мультиплексор. Один порт МК должен работать как вход а второй как выход (с высоким уровнем).
Принцип такой: Пускаем на первую ногу мультиплексора (который как выход работает) высокоуровневый сигнал. Затем считываем состояние всех входов второго мультиплексора (который работает как вход) поочерёдно. Затем пускаем на вторую ногу мультиплексора (который как выход работает) высокоуровневый сигнал. И снова считываем состояние всех входов второго мультиплексора (который работает как вход) поочерёдно (и так далее, а затем процесс повторяется.)

Код
for (mult=0;mult<=5;mult++){

PORTB &= 0b11100011;
PORTB |= mult << 2;
_delay_ms(1);

for(multt=0;multt<=5;multt++){

PORTB &= 0b11100011;
PORTB |= multt << 2;
_delay_ms(1);

// здесь сам процесс обработки сигнала, он не суть важен

};
}

Вот то что я набросал, но только не могу сделать так, чтоб менялись ноги МК и мультиплексор тогда, когда переходим ко второму "FOR".
alexeyv
А зачем вообще два цикла?
Navovvol
Чет я нифига не понял. Чего собственно добивался топикстартер от этих двух циклов FOR? И интересно, когда вы считываете входа?
Вообщем надо сделать так: добавить таймер, который уходит по сравнению или переполнению каждую 1 милисекунду на обработку прерывания, где увеличивает значение переменной счетчика. В основном цикле сравнивать счетчик с заданым значением (например 5) , если досчитал - выполнить "шаманство" с выходом на мультиплексор, без всяких FOR. По аналогии добавить считывание входов (например каждую милисекунду). Вообщем надеюсь мысль ясна. А то в одном цикле еще цикл, да в каждом программаная задержка на милисекунду - это уже слишком.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.