Помогите написать программу. Работа должна быть такой: при нажатой кнопке - вся матрица загорается. Саму програмку вроде написал. но она не работает. Где может быть ошибка?
проект в Proteus прикрепил ниже.
Ну кода маловато написано.
Первая ошибка - порт нужно переключить на вывод - записать 1 в соответствующий порт DDRx, например DDRB = 0x03 переводит биты 1 и 0 порта B на вывод.
Вторая - чтоб зажечь светодиод в матрице, нужно установить порт, к которому подключен катод в 0, а порт анода в 1.
Как-то так.
Ваш DSN я не смотрел (это протеус наверна - у меня этого г...на никогда не было). Я такое творчество не приветствую, тк следующие крики от Вас будут типа: "Спасите-памагите. В протеусе все работает, а в железе нет...".
Последний раз редактировалось coredumped Сб апр 28, 2012 20:47:21, всего редактировалось 1 раз.
Все порты назначены как входы.
А что у вас на порту кнопки, когда она не нажата?
1. У меня там "1". Ответ - смысл кнопки?
2. У меня там "0". Ответ-вопрос - откуда он там?
pyzhman писал(а):Все порты назначены как входы.
А что у вас на порту кнопки, когда она не нажата?
Совершенно верно. Кнопки обычно подключают так, чтоб замыкать порт на землю, а на порт ставят подтяжку (pull-up) к питанию. Подтяжка может быть внутренней (PORTD = 2 в Вашем случае) и внешней - в виде резистора 1...10кОм.
Это означает, что в то время, когда вход порта ни к чему не подключен(в нашем случае кнопка не нажата), на него подается "1" через внутренний резистор.
не,нитак
регистр DDRD отвечает за направление работы порта D тоесть на вход или на выход. нумерация битов в байте начинаеться справо на лево ОТ 0 ДО 7!
в AVR 1это выход а 0 это вход. тоесть если нам нужно установить 1,2,3 линии в порте D на вход, то мы пишем DDRD=0b11110001;
линии 0,4,5,6,7 на выход а линии 1,2,3 на вход
а регистр PORTD отвечает за состояние уровней на порту D тоесть 0 или 1
то есть в начале я указываю что изначально будет на пинах порта 1 или 0, при помоши "Port", и командой "DDR" указываю какие из них будут на ввод-вывод?!
pyzhman писал(а):лапка РВ1 настроена на выход, на ней висит "0".
А в AVR разве не 1 это ввод, а 0 вывод данных? По поводу подтяжки питания, это же при нажатии на кнопку оно должно подтянуть его, или там всегда должно быть питание?
При компиляции выбрасывает такую ошибку:
Если в DDRx сидит "1", то лапка становиться выводом. И наоборот. Если в PORTx "1" при "0" в DDRx, то лапка подтянута к питанию через ВНУТРЕННИЙ резистор. Если DDRx "1", то напряжение на лапке соответствует значению на PORTx.
Чтобы библиотека заработала, ее надо подключить во перв'ых строках программы:
проблемы с ошибками решил.
теперь никак не могу завести программу((
хочу сделать так чтобы на PortB поступал +, а на PortD -. И реакция на кнопку (Pin0, PortD) собственно и сам код: