Доброго времени суток. Решил обновить свои знания по мк, купил большой ATmega8515-16PU, установил Atmel Studio 7 для кода, и eXtreme Burner для прошивки (программатор USBASP).
Задал себе простую боевую задачу - читать значение на нулевом пине порта Ц. Если там логическая единица - выдавать напряжение на нулевой пин порта Д, чтобы зажечь СИД. Быстро набросал простенькую программу для этого (без цикла, сбрасываю мк и перезапускаю в нем прогу снимая с него питание). Вот такой у меня получился код:
На порте Ц, в самой схеме, у меня даже никаких проводов нет, никакого сигнала, когда я запущу прошивку, диод должен быть потушен. Ок, прошиваю, запускаю - горит, сволочь! Но я тоже не лыком шит, смекаю, что в мк скорее всего стоит подтяжка к питанию встроенная. Начинаю шарить доку, нахожу вот такой текст:
Ага, значит нужно установить PUD бит в регистре SFIOR. Нахожу таблицу для SFIOR, и таблицу в разделе I/O Ports:
Ок, выставляю 2-ой бит в SFIOR регистре в 1, согласно таблице на первой картинке:
SFIOR |= 0x04; //0b00000100; Устанавливаю 2-й бит в регистре SFIOR через маску.
Смотрю на регистры DDRC и PORTC в рамках таблицы из второй картинки. Для нулевого пина оба бита стоят 0, подтяжка должна быть выключена.
Прошиваю, смотрю на диод - все равно горит, сволочь! В качестве эксперимента - подключаю нулевой пин порта Ц в землю (сбрасываю напряжение, как если-бы подтяжка была включена), перезапускаю, диод гаснет.
Финальный код программы:
Собственно, вопрос: Что же, черт его дери, происходит с этим мк, и как мне вырубить эту подтяжку?
P.S Если включить участок кода проверяющий PINC в цикл, мк вообще начинает беситься. Вне зависимости от каких-либо манипуляций СИД тускло светится, когда должен быть погашен, и светится ярко при сбросе нулевого пина порта Ц в землю =(