STM8S+SDCC+SPL: использование АЦП в режиме однократного замера - SINGLE MODE

разделы: STM8, дата: 7 августа 2016г.

В STM8S АЦП может быть двух типов: ADC1 и ADC2. Первый является полноценным АЦП, тогда как второй содержащийся в "скоростной" линейке чипов s207/s208/s007, имеет только два режима работы: разового и непрерывного замера.

STM8S может иметь до 16-и входных каналов, котрые выбираются битами CH[3:0] регистра ADC_CSR. Количество реальных каналов АЦП зависит от конкретной модели чипа.

Частота дискретизации АПЦ может быть установлена c fCPU/2 до fCPU/18.

Модуль АЦП первого типа имеет пять режимов работы: однократный замер - SINGLE MODE, непрерывное измерение - CONTINUOUS MODE, непрерывное измерение с записью результата в буфферные регистры - BUFFERED CONTINUOUS MODE, однократное сканирование - SINGLE SCAN MODE, непрерывное сканирование CONTINUOUS SCAN MODE.

Еще интересной возможность явяется возможность запуска АЦП от триггера таймера TIM1 или внешнего прерывания.

В режимах однократного или непрерывного замера возможно использование аналогового сторожа, когда понижение или повышение уровня сигнала ниже или выше заданного уровня, приводит установке флага AWD в регистре ADC_SCR.

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

Пример программы для чтения второго канала АЦП(PC4) и вывода результата через UART:

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

STM8S+SDCC+SPL: Использование встроенного бипера, калибровка LSI генератора, модуль автоматического пробуждения AWU

разделы: STM8, дата: 4 августа 2016г.

В STM8S имеется встроенный модуль для подключения пьезодинамика, который может генерировать звук с частотами 1, 2, 4 кГц. Он довольно простой, НО тактируется он от низкоскоростного генератора LSI, который перед использованием следует откалибровать, что уже не так просто.

В примерах стандартной периферийной библиотеке(далее SPL) имеется пример функции для калибровки LSI генератора, который может быть полезен всякий раз, когда требуется LSI.

Сам генератор LSI используется для тактирования низкоскоростной периферии, и первое что мне приходит в голову - это Auto Wakeup Unit (AWU) т.е. модуль автопробуждения. С помощью этого модуля можно пробуждать микроконтроллер из спящего режима по таймеру. Если здесь на примере attiny13a для подобной же цели использовался watchdog, то в STM8 имеется для этого специальный модуль AWU.

Но, обо всем по порядку. Устройство BEEP модуля представлено на картинке ниже:

Имеется всего один управляющий регистр непосредственно относящийся к BEEP модулю, в SPL он описан следующей структурой:

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

STM8S+SDCC+SPL: ШИМ на таймере TIM2

разделы: STM8, дата: 2 августа 2016г.

Из группы таймеров общего назначения (general purpose timers), в stm8s103f3p6 присутствует лишь TIM2, однако, его возможностей вкупе с TIM1, может оказаться вполне достаточно для большинства задач.

    В целом, устройство таймеров TIM2/TIM3 аналогично TIM4, рассмотренному ранее, но есть пара важных отличий:
  • Таймеры TIM2, TIM3, TIM5 являются 16-битными;
  • Таймеры имеют несколько каналов, которые могут работать как на вход, так и на выход;
  • Каналы настроенные на вход работают как каналы захвата;
  • Каналы настроенные на выход работают как каналы ШИМ.

Из-за этих каналов, группа регистров таймера TIM2 на первый взгляд может показаться раздутой, но если внимательно присмотреться и отбросить "канальные" регистры, то общая структура регистров будет схожа с набором регистров TIM4.

Правда не стоит забывать о том, что в корпусах с малым количеством выводов, некоторые каналы могут оказаться "альтернативными", т.е. включаться через Option bytes.

К примеру, на распиновке чипа stm8s103f3, в квадратных скобках, помечены альтернативные пины для каналов 1(AFR0) и 3(AFR1) таймера TIM2.

Регистры TIM2 в стандартной периферийной библиотеке(далее SPL) описываются следующей структурой:

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