electronica:avr:start

Ардуино | Электроника

AVR микроконтроллеры

как запрограммировать ардуино мини про http://www.kakprosto.ru/kak-916192-kak-zaprogrammirovat-arduino-pro-mini-s-pomoschyu-programmatora

Как в Atmel studio избавится от дребезга контактов?

Алгоритм 1, аппаратный Написать - ничего. Увеличить номинал подтягивающего резистора до 47-100К и поставить параллельно кнопке конденсатор 0.1uF.

Алгоритм 2, программный Для исправной кнопки (с активным переключением):

  1. дребезг замыкания порядка 1 мс
  2. дребезг размыкания отсутствует в принципе

Т.о.:

  1. при обнаружении 0 считать, что кнопка замкнута
  2. при обнаружении 1 принимать, что она разомкнута только в том случае, если ранее (не менее 1 мс) было считано состояние 1.

Алгоритм 3, для Самых Ленивых Периодически считывать состояние кнопки (каждые 0.1-10мс), завести переменную с состоянием считанного значения и переменную текущего состояния.

  1. если предыдущее и считанное значение совпадают, то это = ЗНАЧЕНИЕ. Если не совпадают, то шаг «б» пропускается (но текущее значение сохраняется в «текущее»)
  2. если есть «значение» (пункт а), то сравнить его с текущим значением переменной. Если совпадает, то изменения состояния нет. Если изменилось, то есть изменение состояния - надо что-то делать.

работа с портами

За работу порта отвечает 3 регистра:

  • PORTx
  • PINx
  • DDRx

ATTINY10

Отличия

Интерфейс заливки прошивок TPI. В отличие от обычного последовательного программирования через ISP уменьшено на один проводник количество подключаемых проводков. Теперь достаточно сигналов TPI data, TPI clock и Reset. Судя по описанию очень удобно реализовано высоковольтное программирование — нужно просто при отключенной ножке ресет во фьюзах подать на неё 12 Вольт, вместо подачи нуля при обычном последовательном программировании, если я правильно понял. То есть ножку ресет можно отключать без проблем.

Фьюзы состоят из одного байта конфигурации, где используются всего три бита:

  • CKOUT — Output external clock
  • WDTON — Watch dog timer always on
  • RSTDISBL — Disable external reset

Регистры:

CCP — Configuration Change Protection Register.

Это защитный регистр — предохранитель. Теперь он отдельный. Как понятно из расшифровки защищает от изменения регистры конфигурации. Дается четыре такта для возможности изменения. Защищаемые регистры: CLKMSR, CLKPSR, WDTCSR

CLKMSR — Clock Main Settings Register

Раньше были SKSELы во фьюзах, теперь просто защищенный регистр. Неужели. В ATtiny10 это внешний источник, внутренний на 8 мегагерц, внутренний на 128 Килогерц. Управляются двумя битами CLKMS1 и CLKMS0

CLKPSR – Clock Prescale Register

Делилка частоты. как и раньше защищенный регистр, работает только через CCP а не отдельно в CLKPR как раньше. По дефолту как всегда деление на 8

VLMCSR — VCC Level Monitoring Control and Status register Хорошая вещь! Это развитие Brown Reset монитора питания. Теперь его можно настроить на прерывание и выбрать пороги из 1.4 1.6 2.5 3.7 Но минус в узком выборе настроек, таблица Table 8-4. из даташита расстраивает.

PUEB — Port B Pull-up Enable Control Register Включалка пулл-ап резисторов. Добавился отдельно к обычным регистрам ввода-вывода.

регистры, отвечающие за тактирование, защищены от записи. Чтобы изменить их содержимое надо в CCP записать значение 0xD8, это даст 4 такта на работу с этими регистрами, причём в течение этих 4 тактов любые прерывания игнорируются. Правильно делать так:

CCP = 0xD8; CLKMSR = (1«CLKMS0); CLKPSR = (1«CLKPS0);

В Atmel AVR принята следующая нотация: сброшенный в ноль fuse bit считается активным, т.е. включенным.

на примере ATMEGA168PA

Конфигурационных ячеек 4 байта. LOCK - блокировка доступа

EXTENDED
  • BOOTSZ1 Select boot size
  • BOOTSZ0 Select boot size
  • BOOTRST Select reset vector
HIGH
  • RSTDISBL External reset disable
  • DWEN debugWIRE Enable
  • SPIEN Разрешить внутрисхемное программирование
  • WDTON Watchdog Timer Always On
  • EESAVE Сохранять содержимое EEPROM при стирании кристалла
  • BODLEVEL2 Порог монитора питания
  • BODLEVEL1 Порог монитора питания
  • BODLEVEL0 Порог монитора питания
LOW
  • CKDIV8- Деление тактовой частоты на 8
  • CKOUT Clock output
  • SUT1 Выбор времени запуска
  • SUT0 Выбор времени запуска
  • CKSEL3 Выбор тактового сигнала
  • CKSEL2 Выбор тактового сигнала
  • CKSEL1 Выбор тактового сигнала
  • CKSEL0 Выбор тактового сигнала

Описание бит

OCDEN — fuse разрешает работу схемы внутреннего отладчика (On Chip Debug ENable). Не оставляйте установленным этот бит в коммерческих продуктах! Иначе вашу программу можно будет считать из памяти МК.

JTAGEN — fuse бит разрешает работу интерфейса программирования-отладки JTAG. По сравнению с SPI-интерфейсом, JTAG обладает расширенными возможностями. Не рекомендуется без необходимости оставлять этот бит установленным, т. к. в этом случае потребляемый МК ток возрастает.

SELFPRGEN — бит, разрешающей программе МК производить запись в память программ, т. е. производить самопрограммирование.

DWEN — fuse бит, разрешающий работу DebugWire - это интерфейс отладки по одному проводу. Не рекомендуется оставлять его установленным в коммерческих изделиях.

EESAVE — fuse бит, после установки которого при стирании памяти МК содержимое EEPROM данных будет сохраняться нетронутым, т. е. не будет стерто.

SPIEN — fuse бит, разрешающий работу интерфейса внутрисхемного программирования МК по SPI. Этот бит может быть легко переустановлен при помощи параллельного программатора (или JTAG, если таковой разрешен и имеется в МК). Все МК выпускаются с установленным битом SPIEN, снять его по интерфейсу SPI невозможно.

WDTON — fuse бит, после установки которого сторожевой таймер WDT включается сразу после подачи питания и не может быть отключен программно. Если бит не установлен, то включением и отключением WDT можно управлять программно.

Группа fuse битов BODLEVEL. Может быть либо один такой бит, либо несколько, тогда они нумеруются, начиная с нуля. Значение этих fuse битов определяет порог срабатывания схемы BOD — детектора уровня питающего напряжения, при снижении напряжения питания ниже этого уровня произойдет «сброс» МК.

BODEN — fuse бит, включающий схему аппаратного детектора недопустимого уровня питающего напряжения, т.е. схему BOD.

RSTDISBL — fuse бит, отключающий сигнал внешнего сброса от вывода микроконтроллера и подключающий к нему схему порта ввода-вывода. Этот бит имеется только в тех МК, у которых вывод аппаратного сброса RESET совмещен с одинм из портов ввода-вывода. Ошибочная установка этого fuse бита может отключить RESET и вы не сможете больше прошивать по ISP. Не устанавливайте этот бит, если намерены продолжать работать с МК при помощи последовательных программаторов. «Оживить» МК с установленным RSTDISBL можно только параллельным программатором и не для всех МК.

CKDIV8 — fuse бит, включающий предварительное деление частоты кварцевого (или иного имеющегося) тактового генератора на 8. То есть при включенном этом бите и применении кварцевого резонатора на 8 МГц реальная тактовая частота МК составит1 МГц.

CKOUT — fuse бит, разрешающий вывод тактовой частоты на один из выводов МК (для тактирования других устройств).

SUT1 и SUT0 — fuse биты, управляющие режимом запуска тактовых генераторов МК. Связаны с нижеописываемыми битами, определяющими тип и частоту тактового генератора, причем связь весьма хитрая и запутанная. При ошибочной их установке возможны ситуации неустойчивого запуска генератора или неоднократного сброса МКв процессе подачи на него питания.

CKOPT — бит, определяющий режим работы встроенного генератора тактовой частоты для работы с кварцевыми резонаторами. Реально изменяет коэффициент усиления встроенного инвертора в схеме генератора и, следовательно, - выходное напряжение на ножке XTAL2. Ошибочная установка может приводить к неустойчивому запуску кварцевого генератора, вплоть до возбуждения его не на той гармонике, что надо (из-за этого бита кварц запускался или только при питании МК напряжением не выше 3,6В, или только после прикосновения к выводу XTAL1 пинцетом)

Группа битов CKSEL0…CKSEL3 — fuse биты, комбинация которых определяет тип и частоту работающего тактового генератора. Всего возможно до 16 комбинаций, однако не все определены для всех типов МК. Ошибочная установка комбинации этих битов может сделать МК «мертвым» — он не будет работать в схеме без подачи тактового сигнала на ножку XTAL1.

PLLCK — fuse бит, разрешающий использование встроенного синтезатора частоты для тактированияядра МК.

BOOTRST — fuse бит, определяющий адрес, с которого будет начато исполнение программы после сброса — если бит установлен, то начало программы будет не с адреса 0000h (как обычно), а с адреса области загрузчика (Boot Loader).

Группа fuse битов BOOTSZ — два fuse бита, определяющие размер области памяти программ, выделяемой для загрузчика (Boot Loader). Комбинация этих битов, в частности, определяет точку начала исполнения программы после сброса, если установлен бит BOOTRST.

Наиболее частые ошибки при настройке фюзов: 1. Установка фюза RSTDISBL. Ошибочная установка этого fuse бита отключает RESET, и Вы не сможете больше прошивать по ISP. Для этого потребуется последовательный программатор или что-то попроще для сброса фьюзов к заводским настройкам. 2. Неправильная установка CKSEL0, CKSEL1, CKSEL2, CKSEL3. Эти фьюзы определяют источник тактирования микроконтроллера. Если Вы случайно выбрали не ту частоту внутреннего RC генератора, это не смертельно. Программирование через ISP будет возможным, и вы сможете исправить ситуацию. А если случайно установить тактирование от внешнего источника, RC цепочки или кварцевого резонатора, а у Вас таких в схеме нет, то программирование по ISP тоже станет невозможным. По сути, микроконтроллер будет ожидать тактирования от несуществующей схемы. Как выйти из этого положения? Очень просто - дать микроконтроллеру источник тактирования и исправить фьюзы. Чаще всего устанавливают CKSEL все нули - тактирование от внешнего генератора. В этом случае можно собрать схему, генерирующую меандр (частота особой роли не играет, главное, чтобы она лежала пределах возможности микроконтроллера) и подать на ногу XTAL1. После чего микроконтроллер можно будет прошить через ISP. Первое, что надо сделать, - сбросить фьюзы к заводским настройкам. Если CKSEL все установлены в 1 - тактирование от внешнего кварца. Навесьте кварц после чего микроконтроллер снова будет доступен через ISP.

- Калькуляторы Фьюзов. Иногда очень полезная штука:

http://payalo.at.ua/c_fuse/calc.html

  • /home/c12628/integrarium.ru/www/data/pages/electronica/avr/start.txt
  • Последнее изменение: 2022/08/25 08:52
  • truadmin