Периодически всплывает тема с муками динамической индикации и подобным вещами. В этой статье попробуем разобраться с альтернативными вариантами.
Попробуем уточнить суть часто встречаемой проблемы, во время использования ds18b20 + динамической индикации, из-за прерываний, данные с датчика температуры теряются. Конечно, ситуация не критическая и имеет множество решений. Если вникнуть в суть проблемы, то проблема в кривой библиотеке CAVR, которая из-за влияний прерываний, опрашивает не правильно датчик, но по своему авторов можно понять.
Вариантов, повторюсь, несколько. Можно использовать библиотеку, где не будут использоваться программные задержки, можно опрашивать датчик по UART, в конце концов взять другой датчик, с другим интерфейсом. Но можно и подойти с другой стороны — использовать статическую индикацию, вместо динамической.
Если копнуть еще глубже в эту сторону статической индикации, то существует проблема — нехватка ножек. Вполне очевидное решение, поменять используемый камень, на такой же с большим количеством ног, большим быстродействием. С текущим быстродействием и выбором камней у stm32 вполне достойный выбор. Но все таки попробуем рассмотреть ситуацию, когда камень по быстродействию и количеству интерфейсов подходит, а вот ножек не достаточно.
Первая же мысль — взять специализированную микросхему, например max7219 или подобную. Чем хорошо — можно подключить 8 семисегментников одновременно и управлять ими с помощью всего 3х ножек мк. Пожалуй, для управления более двух семисегментников, вариант вполне себе удачный, особенно учитывая, что можно взять готовые модули на 4 и 8 разрядов. Из минусов — возможность использования только для светодиодных индикаторов, высокая стоимость у местных барыг.
Следующий вариант, использование разновидностей стандартной логики, в основном сдвиговые регистры, дешифраторы. Хорошо тем что дешево и доставаемо, с возможность подключать каскадами, более универсально. Плохо — невысокая скорость работы. Например, если бы потребовалось подключить два семисегментника, то вполне достаточно взять два сдвиговых регистра hc595 и использовать всего 3 ножки мк.
Когда нужно много ножек и высокая скорость — использовать CPLD 🙂 Звучит как из пушки по воробьям, но ситуации разные бывают. Хорошо тем что гибко и быстро, плохо — дорого, более высокие требования к разводке, потребуется писать какой то софт и заливать в камень.
Различные расширители портов, например PCF8574. Вешаешь на i2c и выставляешь любое состояние ножек. Из бонусов — возможность читать состояние ножек. Универсально, но небольшое расстояние для i2c. Вполне годная штука, для не быстрого ногодрыга и кнопочек.
Ну и наконец, внезапно, поставить второй дешманский контроллер. Всегда был против двух мк на одной плате и до сих пор считаю это излишеством. Однако, недавно открыл для себя Stm8. Сравнивая цены на расширитель портов и самую простую стмку, все таки выбор сделал в пользу stm8.
В конце концов не удержался и взял такую платку. И подрыгал GPIO.
#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 ногий корпус это то что нужно для мелких поделок.
Добавить комментарий