20. Маломощные МК AVR



Автор: WildCatМаломощные микроконтроллеры AVR

С расширением линейки МК AVR, появилось множество новых моделей контроллеров для выполнения самых разных задач. Одним из направлений стал выпуск линейки ATTiny микроконтроллеров для небольших приложений с низким энергопотреблением. Сам производитель базирует их как "маломощные", но на самом деле это не совсем так. Посмотрим для примера на ATTiny13 в восьмилапом SMD исполнении. У него 1 килобайт программной памяти, 64 байта оперативной памяти и 64 байта EEPROM. Для использования нам доступны 5 лапок ввода/вывода. Хоть контроллер и называется Tiny, но он может работать на скорости до 20 МГц! И его можно программировать точно так же через SPI, как и старших собратьев.



Убедитесь, что вы прочитали даташит ATTiny13.

Соберем следующую схему:



Запустим TWinAvr и нажмем Config. Мы увидим настройки фузов для "чистого" ATTiny13:



По умолчанию ATTiny13 поставляется с включенным внутренним RC генератором частотой 9.6 МГц. При делении на 8 он дает тактовую частоту примерно 1.2 МГц. Вы можете убрать фуз CK8DIV, чтобы заставить работать контроллер на полной скорости.
Сам ATTiny может работать на частотах до 20 МГц. Для этого нужно установить фуз CKSEL в "00" и подключить внешний тактовый генератор к выводу 2 (PB2/CKLI).

Теперь давайте запрограммируем мигающий светодиод:
ledflasher.bas
'The ATTiny2313 is used.
$regfile = "ATtiny13.dat"
$crystal = 1200000

Config Portb = Output

Do
  Portb = 255
  Waitms 50
  Portb = 0
  Waitms 50
Loop

End
На самом деле ATTiny может гораздо больше. У него на борту есть 10-битный АЦП на выводах 1, 2, 3 и 7. Вот пример программы, считывающей значение АЦП с одного из каналов:
readadc.bas
'The ATTiny13 is used.
$regfile = "ATtiny13.dat"
$crystal = 1200000

Config Portb.2 = Output
Led Alias Portb.2
Config Adc = Single , Prescaler = Auto , Reference = Internal

Dim Adcin As Word

Open "comb.1:9600,8,n,1" For Output As #1
Open "comb.0:9600,8,n,1" For Input As #2
Start Adc

Do
  Set Led
  Waitms 500

  'get adc reading on channel 3 (pin 2 on attiny13)
  Adcin = Getadc(3)
  Print #1 , "adc ch#3: " ; Adcin
  Reset Led
  Waitms 500
Loop

End
Программный UART используется для отправки полученных данных в компьютер. Вы можете использовать терминал в Bascom для просмотра результатов. (Tools / Terminal emulator).
Хоть в программе и открыт порт comb.0 и настроен на вход, в программе он не используется. Но вы можете попробовать отправлять на него команды с терминала.
Вся эта программа заняла чуть больше 50% программной памяти, это с учетом библиотек для организации программного UART, которые сами по себе немаленькие. Так что для небольших приложений контроллеры ATTiny подходят идеально!

DECADALAB ALFA