#6 внутренности мк

Сентябрь 8, 2008

Image Hosted by ImageShack.us
Сразу должен сказать, что назначение и работу некоторых блоков я представляю себе плохо и поэтому писать про нее не буду особо. При работе на си оно и не надо.
МК состоит из нескольких главных блоков:
озу
пзу
алу
шина
периферия

В озу загружается и хранится изменяемый код или данные. Например значения в массивах или переменных. Если есть какой-то текст, то его лучше не загружать в память, а брать напрямую из флеш. ПЗУ есть сама флеш память, куда заливается прошивка. АЛУ - "процессор". Выполняет разные операции  с числами в регистрах общего назначения.
Шина - все блоки висят на одной шине и каждый блок имеет свой адрес.

Подробней про адреса.
Для обращения к какому-то блоку надо знать, на каком "этаже" он живет. Таким этажом будет его адрес. Обращение к блокам реализовано через регистры.
Все регистры 8 бит. Регистры по 16 бит делятся на 2 регистра по 8 бит и в конце имени имеют буквы L и H.
В файле avr/io.h адреса регистров замаплены на буквенные названия, что делает работу программиста более простой и повышает переносимость на другие мк без особого гимора.

Например в обычном пк есть адрес порта лпт 0х378. Если бы компиляторы имели определения порта, то мы могли бы использовать LPT1_OUT как адрес первого порта для вывода.
Для ввода в порт от внешнего устройства порт имеет еще один адрес. Это базовый адрес +1, т.к. 0х379.
Такой адрес можно замапить как LPT1_READ.
В мк все эти регистры уже определены и совпадают с даташитом.

Для примера возьмем порт С (вверху слева, где вывод сброса).
Если требуется зажигать светодиоды или дергать выводами, то надо использовать регистр PORTC и записывать туда нужное число от 0 до 255.
Если же надо прочитать из порта, то надо использовать регистр PINC. Писать в него никак нельзя.
Обычно начинающие путают эти 2 регистра и забывают про второй.

МК так же имеет дополнительные блоки, без которых он не может работать или работа его была бы неполноценной.
Например это несколько видов тактовых генераторов.
Изначально мега8 идет запрограммированной на внутренний генератор на резисторе и конденсаторе. Стабильность такого генератора много хуже кварцевой и его стоит использовать в простых проектах для мигания и кнопок. Так же можно соединить на низкой скорости по юарт. При комнатной температуре стабильности вполне хватит на 2400бод.

Мк можно тактировать от кварца или внешнего кварцевого генератора. Для переключения этих режимов есть специальные биты конфигурации, доступные в программаторе при прошивке. Выставлять их надо осторожно. При неправильной конфигурации мк может перестать работать с последовательным программатором и придется собирать параллельный.

Вторым полезным, но редко используемым устройством является сторожевой таймер WDT.
Работает он так: счетчик начинает считать после запуска таймера в программе. По ходу выполнения программы его надо сбрасывать и тогда он снова будет считать с нуля.
Если программа по каким-то причинам зависла, то счетчик досчитает до максимума и "нажмет" кнопку сброса.

Как видно из схемы, некоторые блоки периферии подключены к внешним выводам портов. При конфигурации мк внешние контакты будут подключены к внутренним блокам.
Однако в любой части программы можно отключить периферию и использовать пины как простые входы или выходы.
Например повесить светодиоды и кнопки на один порт и в определенный момент переводить порт то на вход, то на выход.

Рассмотрим подробнее периферию.
Порт С имеет 6 входов (в плоском корпусе и все 8) аналого-цифрового преобразователя.
Входов много, а вот сам ацп - один. Поэтому он не может одновременно обрабатывать 6 потоков.
В каждый момент времени ацп подключается при помощи мультиплекстора (mux) к нужным входам, считывает значение и преобразует в число от 0 до 1023. Преобразование длится некоторое время и после него происходит прерывание. АЦП можно использовать для аналоговых датчиков типа термо и фоторезисторов, фотодиодов, делителя напряжения для контроля заряда батарейки и даже подавать звук, чтобы записать на карту памяти. Качество такого звука вполне приемлимо для мк такого уровня и не хуже, чем в проводном телефоне.

интерфейс SPI - 3 провода, двухнаправленный последовательный синхронный. Может передавать и принимать, мк может быть ведущим или ведомым.
Основное назначение - внутрисхемное программирование самого мк или же мк управляет внешними устройствами типа ацп, цап, датчики, часы реального времени и прочее.

интерфейс TWI или i2c - 2 провода, последовательный двухнаправленный синхронный. Используется для управления внешними устройствами. Был разработан филипсом под торговой маркой i2c. Для избежания нарушений в атмеле его назвали two wire interface. Есть еще несколько названий этого протокола,
Используется в основном для управления синтезаторами частот, часы, термометры и подобные датчики.

интерфейс USART 1 провод для передачи и 1 для приема. Последовательный асинхронный и синхронный двухнаправленный.
Основное назначение - соединение мк между собой или с пк через ком порт. Напрямую подключать нельзя, т.к. требует ттл уровни. Используется мах232 или конвертер уровней на транзисторах.

В чем разница?
i2c параллельный и позволяет подвесить на 2 провода до 127 устройств.
Остальные 2 использует только соединение точка-точка.
Конечно, можно на усарт повесить параллельно еще 256 устройств, можно использовать его как миди интерфейс.

Аналоговый компаратор - используется редко. Можно использовать для детектирования уровней на выходе приемника цифровых сигналов. Но обычно в модулях приемников на 433мгц уже стоит мс компаратора и дает ттл уровень. Используется редко.

EEPROM - память. Используется для хранения разных пользовательских данных. Например значения частот или громкости при включении устройства.
Можно использовать как конфигуратор. Т.е. саму прошивку вы менять не можете, но автор написал, что если в первую ячейку записать 1, а во вторую 4, то мк будет работать с индикатором в 2 строки по 16 символов. А если написать в первую ячейку 2, то можно подключать однострочный на 8 символов.
Так же можно туда писать ключи или пароли, которые будут уникальными и служат для адресации одинаковых устройств в эфире или на общей шине.
В эту память можно писать напрямую из программатора, из файла через программатор или же из программы в мк.
Процесс записи и стирания требует времени и по окончанию генерирует прерывание.

Блок прерываний. Это такой "пульт", на который приходят сигналы о завершении каких-то действий. Тут же включаются прерывания каждого модуля.
Завершил ацп преобразование - подал сигнал на пульт. Закончилась запись в память - подал снова сигнал на пультр.
Началась передача по спи - прерывания выключены. Началась запись в память - никто не должен беспокоить.
Если в этот момент кто-то будет стучать извне, то мк не пустит его и данные от пришельца будут потеряны.
Приоритета в прерывании нет и это надо учитывать при написании программы и алгоритма.

Счетчики - самые часто используемые блоки в мк. Без счетчиков и мк не мк.
Они тоже генерируют разные типы прерываний и могут выполнять целую кучу действий по отсчету времени или событий.
Счетчики бывают 8 и 16 бит и считают от 0 до 255 и до 65535 соответственно.
А считают они тики - один такт генератора.

Тема прерываний и счетчиков будет описана в следущих постах, ибо это основа основ программирования мк. Непонимание этих тем повлечет непонимание работы самого мк.

категория: учим мк avr

ответить

Авторизация только через loginza.

Yandex Google Вконтакте Mail.ru Twitter Loginza MyOpenID OpenID