STM8L051F3: режимы GPIO, тактирование, энергопотребление

разделы: STM8, дата: 23 апреля 2016г.

В этот раз разберемся с портами I/O, научимся управлять рабочей частотой чипа и измерим потребление тока в Active режиме.

Я буду использовать режимы работы GPIO в AVR в качестве переводчика, для понимания терминологии SMT8.

Управление GPIO в STM8 похоже на AVR, но, как бы сказать, более логично с точки зрения здравого смысла. Однако, что бы разобраться с режимами GPIO в STM8 придется выучить новый термин: Open Drain. Замечу, что ничего нового в этом термине нет для освоивших GPIO в AVR.

Итак, в AVR портом GPIO можно было управлять двумя регистрами I/O: DDRx и PORTx; Третий регистр - PINx, был доступен только для чтения, и он ничем не управлял.

В STM8 для управления портом GPIO служат уже три регистра: Px_DDR, Px_ODR, Px_CR1. Регистр Px_IDR аналогичен PINx - он ничем не управляет. Регистр Px_CR2 служит для установки прерывания и режима тактирования GPIO, к нашей теме отношение тоже не имеет

Если в AVR только DDRx определял режим работы PORTx, то в STM8 для этого служат Px_DDR и Px_CR1, причем второй в Open Drain режиме имеет приоритет над первым.

    Как не сложно подсчитать, три регистра дают комбинацию из 8 состояний GPIO:
  • Выход Push-pull или PP: (CR1=1 && DDR=1) => тогда состояние ODR задает режим GPIO. При логической единице порт подключен к шине питания, иначе - к земле.
  • Вход Pull-up или точнее  WPU(weak pull-up) (CR1=1 && DDR=0)  значение ODR в этом состоянии ни на что не влияет. Соответствующий пин порта можно напрямую замыкать на землю, Проходящий ток у меня составил 88 мкА. Слабовато, да.
  • Вход Floating или HiZ или высокоимпедансный вход. (CR1=0 && DDR=0). Здесь все ясно, думаю. Это не плюс и не минус. Значение ODR в этом состоянии также ни на что не влияет.
  • Выход. Open Drain или OD. (СR1=0 && DDR=1) Последний режим GPIO сочетает в себе режимы: вход Floating(HiZ) и выход Push-Pull. При ODR=1, порт переключается в floating/HiZ режим, при ODR=0 подключается с земле.

Читать дальше

MSP430: быстрый старт с бюджетом в 150р.

разделы: MSP430, дата: 20 апреля 2016г.


Чип MSP430g2453IPW28 распаяный на адаптере TSSOP28-DIP28

Чипы AVR заслужили хорошую репутацию отчасти тем, что содержат АЦП даже в самых младших моделях микроконтроллеров. Аббревиатура MSP430 не случайно ассоциируется с DSP, данные чипы при вполне разумной стоимости могут нести в себе 16-битные или даже 24-битные сигма-дельта АЦП, а также есть целая линейка CC430 микроконтроллеров c радиомодулем(!) на борту. MSP430 (расшифровывается как Mixed Signal Processor) имеет 16-битную архитектуру что позволяет обрабатывать данные с АЦП за один прием, не обрезая их до 8-бит как на AVR. Данные микроконтроллеры изначально разрабатывались как малопотребляющие. Причем настолько малопотребляющие, что ввелась новая концепция устройств с одной батарей для всего жизненного цикла устройства. Семейства MSP430x5xx и MSP430x6xx включают в себя модуль DMA. Одним словом, это еще одна достойная замена устаревающим AVR.

Читать дальше

STM8: знакомство с архитектурой через дизассемблирование Blink

разделы: STM8, АССЕМБЛЕР, дата: 18 апреля 2016г.

Думаю, что настало время познакомиться с STM8 поближе. Для тестирования я буду использовать чип STM8S103F3P6, но все сказаное в равной степени будет относится и к STM8L051F3P6. В плане общей архитектуры различия между ними минимальны, совпадают даже адреса регистров GPIO.

Так как ассемблер STM8 является наследником STM7, то при каких-то неясных моментах может помочь методичка ХАИ по STM7 "Проектирование встроенных систем на микроконтроллерах STMicroelectronics". Методичка написана на русском языке.

Код STM7 совместим с STM8, обратное неверно.

    Главные отличия STM8 от STM7:
  • Адресная шина стала 24-битной вместо 16-битной в STM7, как следствие, регистр PC изменил разрядность с 16-и до 24-и бит ;
  • Индексные регистры X, Y стали 16-битными вместо 8-битных в STM7;
  • Регистр указателя стека SP стало возможно использовать как индексный регистр.

Итак. В прошлый раз, когда я скомпилировал Blink для чипа stm8s103f3p3 с помощью компилятора SDCC, то на выходе получил несколько файлов:

leds.asm  leds.c  leds.cdb  leds.ihx  leds.lk  leds.lst  leds.map  leds.rel  leds.rst  leds.sym

Полагаю, что настало время, заглянуть в содержимое файла leds.asm чтобы узнать из чего же состоят программы stm8s и так ли хорош черт как заявляют его пресс-релизы. Но сперва, я приведу программу blink к более классическому виду:

Читать дальше

ATtiny13A: режимы энергосбережения, фьюзы и программный UART

разделы: AVR, ATtiny13A, дата: 10 апреля 2016г.

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

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

Справедливости ради стоит заметить, что ATtiny13 с пониженным энергопотреблением имеют индекс V. А чипы с технологией picoPower, снабжаются индексом P. Что же до ATtiny13A, согласно документации, его потребление в обычном режиме, при питании 1.8V и частоте 1МГц - 160 микро ампер. В Idle режиме при тех же условиях - 24 микро ампер. Питание 1.8В я не собираюсь использовать, меня больше интересует потребление при 3.3В.

Мой мультиметр фирмы Mastech, модель: M830BZ. Это не весть что, но если измерять потребление различных чипов одним прибором, выводы сделать можно будет.

Для работы с режимами энергосбережения в avr-gcc есть библиотека avr/sleep.h. Переводной мануал по данной библиотеке можно почитать здесь. Я же пойду по традиционному пути ковыряния регистров.

В качестве исходного примера возьмем blink из старого поста:

Читать дальше