Программирование AVR Введение во встраиваемую электронику, часть 3 Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Введение во встраиваемую электронику, часть 3 Печать
Добавил(а) microsin   

Продолжение переводов руководства для начинающих от SparkFun [1]. Эта часть посвящена тактированию микроконтроллера, его работе от кварцевого (или керамического) резонатора. Вы также познакомитесь с фьюзами микроконтроллера.

Предыдующая часть: Введение во встраиваемую электронику, часть 2 (как программировать микроконтроллер).

На прошлом уроке Вы запустили свой первый проект - мигание светодиодом. Это был пожалуй самый трудный и ответственный шаг. Теперь мы сделаем так, что светодиод будет мигать намного чаще!

Вы загрузили код в микроконтроллер ATmega168 (или ATmega328P) и запустили его в работу, но почему он работает? И от чего зависит его скорость работы? Любой микроконтроллер всегда работает, получая такты от специального тактового генератора (oscillator). Этот генератор можно для наглядности представить себе как 'музыкальный ритм', который микроконтроллер использует для выполнения своего кода - с каждым ударом ритма выполняется одна команда. Без наличия тактовой частоты микроконтроллер не знает о том, когда нужно выполнить очередную команду, и когда тактовая частота некачественная или нестабильная, выполнение идет с непредсказуемой скоростью. У Вас должны быть такты определенного вида, и часто (это нужно для многих задач) эти такты должны быть очень точные и стабильные. Пробовали когда-нибудь танцевать под CD, который заедает, и пропускает куски мелодии? Это весьма сложно и неприятно!

Есть несколько способов подавать тактовую частоту (такты) на микроконтроллер. Микроконтроллер ATmega168 имеет для этого много настроек (все микроконтроллеры AVR имеют очень похожие настройки, которые могут весьма незначительно отличаться у разных типов AVR). Здесь приведен краткий обзор разных типов генераторов для получения тактовой частоты:

1. External RC (внешний генератор, частота которого определяется параметрами цепочки RC). Этот вариант генератора используется для чрезвычайно дешевых приложений. Подбором номинала резистора и конденсатора выбирается скорость циклов перезарядки конденсатора (постоянная времени RC-цепочки), от чего зависит полученная частота генератора. Я никогда не использовал такой способ генерации тактовой частоты.

2. Internal RC (внутренний RC-генератор, встроенный в микроконтроллер). Это очень удобный тип генератора тактов. Он имеется на большинстве современных микроконтроллеров AVR. Вы можете просто настроить (фьюзами) ATmega168 генерировать собственную тактовую частоту! Генератор и соответствующая RC-цепочка расположены на кристалле AVR. К сожалению такой генератор не очень точный.

3. External Oscillator (внешний кварцевый резонатор, от которого работает встроенный в микроконтроллер генератор). Это стандартный тип получения тактовой частоты, используемый чаще всего. Подключите кварцевый резонатор (его для краткости называют 'кварц') к 2 выводам генератора, и код будет выполняться с частотой кварцевого резонатора.

4. External Resonator (внешний керамический резонатор). То же самое, что и вариант с кварцевым резонатором, только здесь применяется более дешевый тип резонатора, у которого хуже допуск по частоте.

5. External Clock (подача внешней тактовой частоты). В этом варианте подается тактовая частота от внешнего генератора (например, собранного на логических элементах, или частота, сгенерированная другим микроконтроллером). Этот вариант полезен, когда нужно запустить несколько микроконтроллеров на одинаковой тактовой частоте. Я никогда не использовал этот вариант.

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

Примечание переводчика: на самом деле есть еще и 6 способ, синтез тактовой частоты с помощью ФАПЧ (PLL). Однако он имеет в основном профессиональное применение, и не во всех микроконтроллерах AVR имеется такая возможность.

Internal RC (внутренний калибруемый RC-генератор). Этот генератор, который сделала компания Atmel, по-настоящему хорош. По умолчанию с завода ATmega168 поставляется настроенной на частоту внутреннего генератора 1 МГц. Микроконтроллер ATmega168 (как и все AVR) может работать, выполняя 1 инструкцию на 1 машинный цикл, т. е. на 1 период тактовой частоты (прим. переводчика: есть инструкции ассемблера, которые выполняются за 2 цикла, но их не так много). Это означает, что каждый раз, когда генератор произвел очередной цикл (период) таковой частоты, выполняется одна команда программы микроконтроллера (в некотором приближении, так как некоторые инструкции занимают больше 1 цикла). Если мы использовали ATmega168 из магазина и не меняли фьюзы, то наш код мигания светодиодом будет работать на тактовой частоте 1 МГц, или 1 MIPS (million instructions per second, миллион инструкций в секунду). Только представьте себе - 1 миллион операций в секунду! Это просто поразительно. Так в чем состоит недостаток внутреннего генератора? Его допуск на частоту +/-5%, и максимальная скорость 8MHz. Допуск +/-5% означает, то Ваш ATmega168 может работать на скоростях от 1,000,000 * 1.05 = 1,050,000 IPS до 1,000,000 * 0.95 = 950,000 IPS, причем заранее точно значение частоты знать нельзя. Возможно, что такая неточность Вам не покажется значительной, но в цифровом мире она огромна! Кроме того, ATmega168 может работать с максимальной скоростью 20 МГц от внешнего кварца, в то время как максимальная скорость внутреннего генератора составляет 8 МГц. Так что если Вам действительно нужно разогнать микроконтроллер с максимальной скоростью (и/или с максимальной точностью), то придется подключить внешний кварцевый резонатор.

External Oscillator (внешний кварцевый резонатор, или просто кварц). Это наиболее часто используемый тип генератора. На фотографии показан стандартный кварцевый резонатор в усеченном корпусе HC49/US.

Crystal-HC49-US

Кварцы поставляются в различных корпусах, и бывают на разные частоты. Чаще всего встречаются частоты 20, 16, 15, 12, 10, 4 МГц. Также бывают частоты наподобие 14.7456 МГц, 9.216 МГц и 32.768 кГц - такие частоты используются потому, что они привязаны к стандартным скоростям обмена данными или предназначены для точного отсчета определенных интервалов времени. Например, если нужно достичь очень точно установленной скорости последовательного обмена данными 9600 bps, частота 9.216 МГц делится на 960, в результате получится 9600. Если использовать частоту 16 МГц, то не найдется целого делителя, чтобы получить 9600. Так что последовательный обмен данными будет очень точен при использовании частоты кварца 9.216 МГц, а при кварце 16 МГц всегда будет некоторая (хотя и незначительная) ошибка.

Внутри металлического корпуса прячется маленький кусочек кристалла кварца, размер которого и срез подобраны так, что он вибрирует на определенной частоте. Внутренний RC-генератор ATmega имеет точность +/-5%. В то же время кварц обычно имеет точность '+/-20ppm'. Аббревиатура ppm означает 'parts per million', т. е. точность +/-20 периодов на миллион! Таком образом, частота резонатора может быть в диапазоне от 15999680 до 16000320 Гц. Это эквивалентно точности +/-0.002%, так что кварц точнее внутреннего RC-генератора в 2500 раз.

Примечание: прошу прощение за то, что забиваю Вам голову скучными техническими подробностями, но это довольно важно. Понятия генератор (oscillator) и кварц (crystal) часто заменяют одно другим, что вносит путаницу. Показанный на фотографии резонатор не является собственно генератором, это просто кварцевый резонатор (кварц). Кварцы дешевы. Однако генераторы намного дороже (стоят примерно 2..4 доллара). В чем разница? Генератор требует подачи внешнего питания и сам вырабатывает импульсы выходной частоты. Эти импульсы могут использоваться для тактирования любых видов периферийных устройств и микроконтроллеров. Кварц полностью пассивный элемент, для работы которого требуется внешний драйвер (усилитель), только при их совместном использовании получается генератор. К счастью 99% микроконтроллеров имеют встроенные узлы драйвера для получения генератора, так что достаточно просто подключить снаружи дешевый кристалл к 2 внешним выводам микроконтроллера. Внутренний драйвер раскачает кварц, и микроконтроллер получит точный источник тактовой частоты.

Некоторые недостатки кварцев:

1. Кварцы немного дороже керамических резонаторов: $0.25 в сравнении с $0.10 для керамического резонатора.
2. Трудно сделать по-настоящему малогабаритный кварц (это сложнее, чем для керамического резонатора), так что для размещения кварца потребуется больше площади на печатной плате. Миниатюрные кварцы довольно дороги, и не очень широко распространены.
3. Кварцы требуют внешних нагрузочных конденсаторов, которые помогают запуску генерации. Без этих конденсаторов кварц может не заработать (хотя обычно работает нормально). Нагрузочные конденсаторы недороги, однако для них также нужна дополнительная площадь на печатной плате.

External Resonator (внешний керамический резонатор). По точности и цене керамические резонаторы занимают промежуточное положение между внутренним RC-генератором и кварцем.

Ceramic-Resonators

Резонатор сделан из кусочка пьезокерамики, так что он может колебаться на определенной резонансной частоте. К сожалению, эта технология не позволяет достичь высокой точности, поэтому стандартный допуск по частоте для керамических резонаторов составляет +/-0.5%. Так что резонаторы в 10 раз точнее внутреннего RC-генератора, но по точности сильно проигрывают кварцам.

Резонаторы имеют тенденцию быть дешевле, чем кварцы, также их частота обычно ниже, и размеры меньше. Резонаторы удобнее использовать, потому что не нужны нагрузочные конденсаторы - они уже встроены в резонатор (по этой причине у резонатора 3 вывода). Резонаторы можно изготовить очень маленькими по размеру, и они будут занимать на печатной плате совсем мало места.

Сделайте для себя выбор. Для большинства приложений внутренний генератор будет отлично работать! Но если Вы попробуете осуществить обмен данными по последовательному каналу связи, то точность 5% обычно недостаточна (нужна точность 1-2%). Я обычно для своих проектов использую кварцы, но для по-настоящему маленьких устройств использую керамические резонаторы. Приложения для цифровой радиосвязи требуют обычно кварцев из-за жестких требований к точности частоты. Частота любого генератора будет изменяться во времени (из-за эффекта старения), и на неё будет влиять изменение температуры.

Как упоминалось ранее, ATmega168 поставляется сконфигурированной на работу от внутреннего RC-генератора на частоте 1 МГц. Но мы сможем ускорить выполнение программы. Попробуем настроить ATmega168 для работы на частоте 16 МГц от внешнего кварца.

Какие еще дополнительные изменения в работе произойдут, когда ATmega168 будет работать на повышенной тактовой частоте? Нельзя будет работать на маленьких напряжениях питания (таких как 3.3V или 2.8V). Поскольку у нас напряжение питания 5V, то это неважно. Работающий на повышенных частотах 16..20 МГц микроконтроллер будет потреблять больше тока, чем при работе на 1 МГц. Это следует учитывать при разработке Вашей системы.

Подключите кварц на 16 МГц к выводам 9 и 10 микроконтроллера, как это показано на схеме. Также подключите к ним 2 конденсатора на 22 пФ, вторые выводы конденсаторов подключите на шину GND.

Crystal-connect-sch

Теперь нужно настроить ATmega168 на использование выводов 9 и 10 как выводов генератора, работающего от внешнего кварца. Это делается с помощью перепрограммирования фьюзов.

Прим. переводчика: если Вы загружаете код с помощью загрузчика (USB bootloader типа USBasp или UART bootloader Arduino), то в Вашей системе фьюзы уже настроены на использование внешнего кварца. Кроме того, загрузчик не позволяет менять значения фьюзов, это нужно делать с помощью внешнего ISP-программатора.

[Настроечные биты фьюзов (Fuse Bits)]

Это одна из самых трудных вещей, которые используются в AVR. Фьюзы позволяют производить самое низкоуровневое конфигурирование системы микроконтроллера. Путем установки или сброса этих бит можно полностью поменять работу и функционирование AVR. Я был много лет фанатом PIC, и конфигурационные биты PIC были очень просты. Вы просто кликали в удобное окошко Windows-программы, или могли менять биты конфигурации прямо в коде языка C. Никакой суеты, никаких проблем. Микроконтроллеры AVR в этом плане сильно отличаются, и Вы даже можете буквально повредить свой AVR, если запрограммируете биты защиты кое-как.

Два байта для настроек, которые есть в ATmega168, как раз и составляют эти 'fuse bits'. Если Вы этого еще не сделали, загрузите полный даташит на ATmega168 (сейчас он размером в целых 448 страниц!), и сохраните его на Рабочий Стол компьютера. Если Вы никогда до этого не читали даташит, не беспокойтесь! Вовсе не нужно изучать все эти 448 страниц, нужно только рассмотреть в нем нужную Вам необходимую часть.

Перейдите в раздел даташита "8. System Clock and Clock Options" (удобно пользоваться для этого оглавлением и закладками, которые по умолчанию появляются с левой стороны открытого PDF-документа). В подразделе "8.2 Clock Sources" Вы увидите, что есть много вариантов настройки тактовой частоты для ATmega168. Давайте сначала переключим работу внутреннего RC-генератора с частоты 1 МГц на частоту 8 МГц.

Таблица 8-1. Опции для настройки тактирования микроконтроллера.

Режим тактирования Фьюзы CKSEL3 .. CKSEL0
Маломощный генератор с внешним кварцем. 1111 .. 1000
Обычный режим генератора с внешним кварцем. 0111 ... 0110
Низкочастотный генератор с внешним кварцем. 0101 ... 0100
Внутренний RC-генератор на 128 кГц. 0011
Внутренний калиброванный RC-генератор. 0010
Внешний источник тактов. 0000
Зарезервировано. 0001

В самом начале секции 8.6 написано: "По умолчанию Internal RC Oscillator (внутренний RC-генератор) предоставляет частоту примерно 8.0 МГц. Поскольку эта частота зависит от напряжения питания и температуры, она может быть при необходимости очень точно откалибрована пользователем. Микроконтроллер поставляется с запрограммированным фьюзом CKDIV8. Дополнительную информацию см. в разделе System Clock Prescaler".

Запрограммированный бит CKDIV8 приводит к тому, что частота внутреннего генератора 8 МГц проходит через делитель частоты на 8, и в результате получается частота 1 МГц, на которой и работает микроконтроллер. Чтобы микроконтроллер работал на частоте 8 МГц, нужно отключить делитель на 8, для чего нам нужно поменять значение фьюза CKDIV8. Фьюз CKDIV8 находится в младшем байте фьюзов, см. таблицу ниже.

Таблица 27-9. Fuse Low Byte (младший байт фьюзов).

Low Fuse Byte № бита Описание Значение по умолчанию
CKDIV8 7 0 включает деление тактов на 8. 0 (запрограммировано)
CKOUT 6 0 включает вывод тактовой частоты на ножку порта PORTB0. 1 (не запрограммировано)
SUT1 5 Выбор времени запуска генератора. 1 (не запрограммировано)
SUT0 4 Выбор времени запуска генератора. 0 (запрограммировано)
CKSEL3 3 Выбор варианта работы тактового генератора. 0 (запрограммировано)
CKSEL2 2 Выбор варианта работы тактового генератора. 0 (запрограммировано)
CKSEL1 1 Выбор варианта работы тактового генератора. 1 (не запрограммировано)
CKSEL0 0 Выбор варианта работы тактового генератора. 0 (запрограммировано)

Значение байта фьюзов по умолчанию 0b.01100010. Новое значение байта фьюзов, в котором поменян бит CKDIV8, равно 0b.11100010.

Прим. переводчика: бит CKDIV8 находится в самом старшем бите 7 младшего байта фьюзов. Обратите внимание, что "запрограммированное" значение бита соответствует не лог. 1, а лог. 0. "Незапрограммированное" значение соответствует лог. 1. Почему так? Это вносит дополнительную путаницу в интерпретацию значения бит фьюзов. Все пошло от технологии EEPROM и FLASH - очищенная память имела всегда ячейки, заполненные единицами, и "программирование" битов ячейки соответствовало записи туда нулей. Чтобы уменьшить путаницу при вычислении бит фьюзов, старайтесь использовать шестнадцатеричные значения для байт фьюзов, и пользуйтесь для этого специальным онлайн ресурсом - калькулятором бит фьюзов [2].

С новым значением бита CKDIV8 микроконтроллер ATmega168 должен заработать от внутреннего RC-генератора на частоте 8 МГц, и мы увидим, что светодиод LED начнет мигать в 8 раз быстрее! Есть пара способов изменить фьюзы, но самый "прямой" метод сделать это через командную строку утилиты avrdude. Изменение фьюзов будет показано на примере использования программаторов от Olimex типа AVR-PG1 (подключается через последовательный порт RS-232) или AVR-PG2 (подключается через параллельный порт LPT).

# Чтобы прочитать фьюзы ATmega168 с помощью программатора AVR-PG1:
avrdude -p m168 -P COM1 -c ponyser -U lfuse:r:-:h -U hfuse:r:-:h
# Чтобы прочитать фьюзы ATmega168 с помощью программатора AVR-PG2: avrdude -p m168 -P lpt1 -c stk200 -U lfuse:r:-:h -U hfuse:r:-:h

После выполнения команды чтения фьюзов утилита avrdude сообщит их значение в шестнадцатеричном виде: High fuse = 0xDF (значение старшего байта фьюзов), Low fuse = 0x62 (значение младшего байта фьюзов).

Новое значение для младшего байта фьюзов должно быть E2 (шестнадцатеричное значение). Как я сформировал новое значение для байта фьюзов? Таблица 27-9. Fuse Low Byte из даташита показывает значение по умолчанию байта фьюзов, равное 0x62, что в двоичном виде составит 0b01100010. Чтобы изменить значение фьюза CKDIV8 на противоположное состояние ("незапрограммированное" состояние лог. 1), младший байт фьюзов должен изменить свой старший бит, и стать 0xE2, что в двоичном виде равно 0b11100010. Итак, чтобы переключить ATmega168 на работу от внутреннего RC-генератора на частоте 8 МГц, нужно выполнить следующую команду avrdude (конечно же, питание должен быть подключен программатор и подано питание на схему микроконтроллера):

# Запись младшего байта фьюзов ATmega168 с помощью программатора AVR-PG1:
avrdude -p m168 -P COM1 -c ponyser -U lfuse:w:0xE2:m
# Запись младшего байта фьюзов ATmega168 с помощью программатора AVR-PG2: avrdude -p m168 -P lpt1 -c stk200 -U lfuse:w:0xE2:m

После перепрограммирования бита фьюзов CKDIV8 светодиод будет мигать в 8 раз быстрее. Давайте продолжим изучение настроек младшего байта фьюзов, и переключим микроконтроллер на использование внешнего кварца на 16 МГц, после чего светодиод будет мигать еще в 2 раза быстрее.

Crystal-connect-breadboard

Примечание: на фотографии показана собранная схема с кварцем, однако нагрузочные конденсаторы 22 пФ для кварца тут не установлены. Имейте в виду, что это плохое решение, так как без них генератор может не запуститься.

Продолжим изучение настройки опций включения внешнего кварца. Перейдите снова в раздел даташита "8.2 Clock Sources". Таблица 8-1 Device Clocking Options Select (опции выбора тактирования) показывает разные варианты конфигурирования генератора, которые задают биты CKSEL3..CKSEL0 фьюзов.

Сейчас у нас состояние битов CKSEL3..CKSEL0 следующее:

CKSEL3 = 0
CKSEL2 = 0
CKSEL1 = 1
CKSEL0 = 0

Это значение включило внутренний RC-генератор. Чтобы включить использование кварца на 16 МГц, нужно поменять значение бита CKSEL2 на 1:

CKSEL3 = 0
CKSEL2 = 1
CKSEL1 = 1
CKSEL0 = 0

В результате получим новое значение младшего байта фьюзов 0xE6 (0b11100110). Выполните следующую команду, чтобы записать этот байт фьюзов:

# Запись младшего байта фьюзов ATmega168 с помощью программатора AVR-PG1:
avrdude -p m168 -P COM1 -c ponyser -U lfuse:w:0xE6:m
   
# Запись младшего байта фьюзов ATmega168 с помощью программатора AVR-PG2:
avrdude -p m168 -P lpt1 -c stk200 -U lfuse:w:0xE6:m

После выполнения этой команды заработает внешний кварц на 16 МГц, и светодиод начнет мигать еще быстрее. Если это не произошло, проверьте подключение кварца и внешних нагрузочных конденсаторов 22 пФ. По даташиту ATmega168 может работать на частоте до 20 МГц. Можно попробовать разогнать ядро AVR на частоте 30 и даже 40 МГц, и это возможно даже заработает. Однако я никогда не буду разрабатывать реальные системы с превышением рекомендованных в спецификации параметров.

Настало время "домашней работы". Предстоит научиться пользоваться мультиметром для измерения тока (см. [3]). Поскольку ток измеряется последовательным включением прибора (напряжение измеряется параллельным подключением), то Вам нужно найти такую цепь питания на Вашем макете, которую можно разорвать, чтобы туда подключить мультиметр в режиме измерения тока. Измерьте токи потребления в следующих ситуациях:

1. Когда ATmega168 в состоянии сброса (нажата кнопка S2).
2. Когда ATmega168 работает на частоте 1 МГц от внутреннего RC-генератора.
3. Когда ATmega168 работает на частоте 8 МГц от внутреннего RC-генератора.
4. Когда ATmega168 работает на частоте 16 МГц от внешнего кварца.

[Дополнительные замечания]

Для вычисления значения фьюзов в шестнадцатеричном формате пользуйтесь удобным калькулятором [2]. Несколько раз перепроверяйте себя, перед тем как записать новое значение фьюзов, чтобы случайно не вывести AVR из строя.

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

Почему регуляторы могут нагреваться? У нас используется очень простой линейный регулятор напряжения. Этот тип регулятора имеет на входе высокое напряжение (в нашем случае 9V), которое на выходе понижается до рабочего напряжения схемы (5V). Разница между этими напряжениями падает на микросхеме стабилизатора, и приводит к его нагреву из-за рассеивания мощности. Эта мощность называется мощностью потерь, и измеряется в Ваттах (Вт). Если входное напряжение стабилизатора 9V, выходное 5V, и система потребляет ток 50 mA от 5V, то мощность потерь составит:

(9 - 5) * 0.050 = 0.2 Вт или 200 мВт

200mW не приведет к большому нагреву регулятора. А что, если ток возрастет до ампера?

(9 - 5) * 1.000 = 4 Вт!

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

Как Вы можете заметить, потери можно снизить, если уменьшить входное напряжение стабилизатора. Почему нельзя просто использовать напряжение уровня порядка 5..6V? Дешевые линейные регуляторы 7805 требуют обязательного падения напряжения не ниже определенного уровня (это падение напряжения называют 'drop-out voltage'). Если падение напряжения на регуляторе будет меньше допустимого, то стабилизатор перестанет выполнять свои функции, и напряжение на выходе стабилизатора упадет ниже допустимого рабочего. Для LM7805 хорошим правилом является использование минимального напряжения 1.5V, так что для получения выходного напряжения 5V на входе должно быть как минимум 6.5V. Если вы подадите входное напряжение на стабилизатор меньше чем 6.5V (например, от 4 батареек AA), то выходное напряжение 5V не гарантируется. Каждый тип регулятора напряжения может иметь свое значение минимального drop-out voltage, поэтому проверяйте даташит. Некоторые регуляторы напряжения специально разработаны для получения низкого падения напряжения (так называемые регуляторы с фичей 'low drop-out voltage'), которое может доходить до 50mV! Наш стандартный 3.3V регулятор требует минимального входного напряжения 3.35V, чтобы получить на выходе чистые 3.3V.

Многие регуляторы имеют функцию внутреннего отключения для защиты от выхода из строя при коротком замыкании на выходе. Если Вы щелкнули выключателем и подали питание на стабилизатор, но индикационный светодиод (показывающий наличие питания) не загорелся, то возможно регулятор не может предоставить достаточно тока из-за наличия ошибок в монтаже (есть короткое замыкание, или Вы где-то перепутали полярность подключения). Скорее выключите свой макет и тщательно все проверьте.

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

Дальше в экспериментах будет использоваться кварц на 16 МГц.

Следующая часть: Введение во встраиваемую электронику, часть 4 (UART и последовательный обмен данными).

[Ссылки]

1. Beginning Embedded Electronics site:sparkfun.com.
2. Engbedded Atmel AVR® Fuse Calculator site:engbedded.com.
3. Руководство: как пользоваться мультиметром.
4Как определить тактовую частоту микроконтроллера?

 

Добавить комментарий


Защитный код
Обновить

Top of Page