После забав с ардуино решил немного заглянуть глубже в мир микроконтроллеров. А именно заглянуть в ассемблер. Возник абсолютно нубский вопрос, но как-то ответа нигде не нашёл. Решил спросить тут. В Atmega 8 и 328 порт В имеет 8 выводов. Но если использовать внешний кварц PB6 и PB7 занимаются этим кварцем. Теперь собственно вопрос - если конфигурировать порт В на вход или на выход целиком это ни как не повлияет на работоспособность кварца?
Никак, при условии, что кварц используется (прописан во фьюзах). А вот если кварц не использовать, то эти пины можно использовать как обычные GPIO
Спасибо. Если я понял правильно - если фьюзами прописано тактирование от внешнего кварца, PB6 и PB7 не доступны программисту.
Можно и в ардуино высвободить эти два пина.Там ЕМНИП надо фьюзы другие и другой бутлоадер.Пошукаю ссылку где то видел но сам не пробовал.Типа так
Спасибо за консультацию. Возник следующий вопрос. Он немного не соответствует теме, но что-бы не плодить новые темы спрошу здесь. Взял я Atmega 8 и что-бы сильно не вникать в конфигурацию fuse-битов на страничке http://homes-smart.ru/index.php/oborudovanie/arduino/avr-zagruzchik создал Bootloader под свой камень и залил fuse в соответствии с полученными. Всё бы ничего, но эта конфигурация предусматривает место под загрузчик. В даташите прочитал следующее "При размещении векторов прерываний в области загрузчика к значениям, указанным в таблице, следует прибавить значение начального адреса области загрузчика." На данный момент у меня такая конфигурация Для того, что-бы программа начиналась с нулевого адреса, как я понял, бит BOOTRST на надо установить в 1 (снять галочку). А вот что делать с BOOTSZ1 b BOOTSZ0? Если где-то можно подробно прочесть о fuse-битах ткните пальцем. А то везде описание типа - эти биты отвечают за выделение памяти под загрузчик и всё.
так в апноутах всё есть. Вот здесь не понял: Так есть загрузчик или нет? Определяют размер области под загрузчик.
Когда на указанном сайте создаёшь Bootloader там так-же создаётся текстовый блок для файла boards.txt. В нём, кроме всех прочих параметров, указаны значения fuse-битов которые дудка из Arduino IDE должна загрузить в камень при записи загрузчика. В моём случае a8_8MHz.bootloader.low_fuses=0xbf a8_8MHz.bootloader.high_fuses=0xdc Вот эти значения я и залил используя AVRDUDEPROG. Загрузчик я не записывал, но битом BOOTRST он у меня объявлен. Следовательно адреса прерываний не совпадут со стандартными. Есть книга Евстифеева "Микроконтроллеры AVR семейства Mega" В ней говорится, что если BOOTRST = 1, то вектор сброса располагается в самом начале памяти программ по адресу $0000. в то-же время там приведена таблица теперь более конкретный вопрос - если BOOTRST = 1 то на эту таблицу можно забить и нам по барабану в каком положении BOOTSZ1 и BOOTSZ0?
На этом сайте косячные бутлоадеры и некоректные фьюзы.Под Мегу 8 по крайней мере.Я один раз попал больше не пользуюсь.Может уже и исправили. ТС спрашивал-мне не надо.Я могу и на асме написать.Насчет женщины это больше про регистры похоже.Это к Вам ближе
Не хочешь вникать - бросай это дело и возвращайся к ардуино. Хочешь работать с голыми контроллерами - придётся вникать по самые уши. По другому не бывает.
Я это уже понял. По этому и спрашиваю. Но, как и все спрашивающие на данном форуме, на конкретный простой вопрос получаю пространные рассуждения о совершенно левых вещах. В последнее время, к сожалению, это стало традицией форума. Посмотрите, к примеру, эту тему http://forum.amperka.ru/threads/Анти-дребезг-для-кнопок-с-разным-назначением.18036/ Человек попросил помощи с конкретным скетчем и во что это вылилось. Чем ему помогли высокообразованные гуру? Пришлось мне малограмотному самоучке связаться с ним в личке и подправить код. У меня ушло минут 15-20. Может я и не совсем идеально, с точки зрения некоторых корифеев, это сделал, но у человека есть работающий код нормально решающий его задачу. У некоторых началось обострение звёздной болезни и это может привести к вырождению форума. Грустно, он мне очень нравился.
Ну так давай обратимся к даташиту. А в нем написано, что область загрузчика занимает старшие адреса. Соответсвенно, если мы реснтимся на нулевой адрес, то и пофигу, какая область памяти отведена под загрузчик - мы в неё по ресету не попадаем.