Содержание
Урок 1. Первый проект
Урок 2. Управление кнопками
Урок 3. Подключение LCD
Урок 4. Использование ШИМ
Урок 5. Таймеры
Урок 6.1. Статическая индикация
Урок 6.2. Динамическая индикация
Урок 7.1. Генерация звука
Урок 7.2. Генерация звука. Продолжение
Урок 8.1. Передача данных через UART
Урок 8.2. Передача данных через UART. Продолжение»
Урок 9. Передача данных через SPI
Урок 10. Изучение АЦП. Простой вольтметр
Урок 11. Получение синуса при помощи ШИМ
Урок 12. Измерение температуры
Урок 13. Внешние прерывания.
Урок 14. Использование отладчика
Урок 15.1. Управление инкрементальным энкодером
Урок 15.2. Управление громкостью, при помощи энкодера
Урок 16. Управление RGB светодиодом
Урок 17. Использование ИК
Урок 18.1. Знакомство с графическим дисплеем
Урок 18.2 Вывод изображения на графический дисплей
Урок 18.3 Вывод русскоязычного текста
Урок 19. Формирование сигнала, при помощи ЦАП (R2R)
Урок 20. Опрос матричной клавиатуры
Урок 21. Сторожевой таймер
Урок 22.1 Воспроизведение wav. Введение.
Урок 22.2 Воспроизведение wav. Продолжение.
Урок 23.1 Работа с внешней памятью
Урок 23.2 Работа с файловой системой Fat

Периодически всплывает тема с муками динамической индикации и подобным вещами. В этой статье попробуем разобраться с альтернативными вариантами.

Попробуем уточнить суть часто встречаемой проблемы, во время использования ds18b20 + динамической индикации, из-за прерываний, данные с датчика температуры теряются. Конечно, ситуация не критическая и имеет множество решений. Если вникнуть в суть проблемы, то проблема в кривой библиотеке CAVR, которая из-за влияний прерываний, опрашивает не правильно датчик, но по своему авторов можно понять.

Вариантов, повторюсь, несколько. Можно использовать библиотеку, где не будут использоваться программные задержки, можно опрашивать датчик по UART, в конце концов взять другой датчик, с другим интерфейсом. Но можно и подойти с другой стороны — использовать статическую индикацию, вместо динамической.

Если копнуть еще глубже в эту сторону статической индикации, то существует проблема — нехватка ножек. Вполне очевидное решение, поменять используемый камень, на такой же с большим количеством ног, большим быстродействием. С текущим быстродействием и выбором камней у stm32 вполне достойный выбор. Но все таки попробуем рассмотреть ситуацию, когда камень по быстродействию и количеству интерфейсов подходит, а вот ножек не достаточно.

Первая же мысль — взять специализированную микросхему, например max7219 или подобную. Чем хорошо — можно подключить 8 семисегментников одновременно и управлять ими с помощью всего 3х ножек мк. Пожалуй, для управления более двух семисегментников, вариант вполне себе удачный, особенно учитывая, что можно взять готовые модули на 4 и 8 разрядов. Из минусов — возможность использования только для светодиодных индикаторов, высокая стоимость у местных барыг.

Следующий вариант, использование разновидностей стандартной логики, в основном сдвиговые регистры, дешифраторы. Хорошо тем что дешево и доставаемо, с возможность подключать каскадами, более универсально. Плохо — невысокая скорость работы. Например, если бы потребовалось подключить два семисегментника, то вполне достаточно взять два сдвиговых регистра hc595 и использовать всего 3 ножки мк.

Когда нужно много ножек и высокая скорость — использовать CPLD 🙂 Звучит как из пушки по воробьям, но ситуации разные бывают. Хорошо тем что гибко и быстро, плохо — дорого, более высокие требования к разводке, потребуется писать какой то софт и заливать в камень.

Различные расширители портов, например PCF8574. Вешаешь на i2c и выставляешь любое состояние ножек. Из бонусов — возможность читать состояние ножек. Универсально, но небольшое расстояние для i2c. Вполне годная штука, для не быстрого ногодрыга и кнопочек.

Ну и наконец, внезапно, поставить второй дешманский контроллер. Всегда был против двух мк на одной плате и до сих пор считаю это излишеством. Однако, недавно открыл для себя Stm8. Сравнивая цены на расширитель портов и самую простую стмку, все таки выбор сделал в пользу stm8.

В конце концов не удержался и взял такую платку. И подрыгал GPIO.
stm8

#include "stm8s.h"

int main( void )
{
  GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST);
  
  while(1)
  {
       for(int i = 0; i < 32000; i++);
       GPIO_WriteHigh(GPIOB, GPIO_PIN_5);
       for(int i = 0; i < 32000; i++);
       GPIO_WriteLow(GPIOB, GPIO_PIN_5);
    
  }
}

Что можно сказать по количеству фарша, камни более похожи на atmega. Из сред разработки - IAR. Нужен программатор SWIM, но т.к. являюсь обладателем STLINK, то это проблемой не стало. В целом цена и 20 ногий корпус это то что нужно для мелких поделок.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Счетчик
Яндекс.Метрика