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

Попробуем уточнить суть часто встречаемой проблемы, во время использования 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 ногий корпус это то что нужно для мелких поделок.

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

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

Последние комментарии
  • Загрузка...
Счетчик
Яндекс.Метрика