Один бесплатный значок. Нужно отобразить вывод для пользователя?

Я работаю с голубым бобом. У меня есть устройство, которое записывает данные на SD-карту при длительном нажатии кнопки и переключает то, что будет записано (из списка из 5 пунктов) при коротком нажатии кнопки.

Вывод, распечатанный как на SD-карту, так и на последовательный порт, выглядит следующим образом:

12:38, 7/15/15, subway
12:55, 7/15/15, subway
12:38, 7/15/15, bus
12:55, 7/15/15, rail

и т. д. По сути, это отметка времени, а затем значение из этого списка:

char* modes[]= {"walking", "subway", "bus", "railroad", "other"};

Это отлично работает. Но у компонента очень мало контактов:

  • 5 SCK — подключен к SD-карте.
  • 4 MISO — подключено к SD-карте.
  • 3 MOSI — подключено к SD-карте.
  • 2 SS — подключено к SD-карте.
  • 1 – кнопка ввода, требуется долгое и короткое нажатие
  • 0 --
  • A1 SDA --- подключен к часам реального времени для отметки времени
  • A0 SCL --- подключен к RTC (часам реального времени) для отметки времени.

У меня есть один бесплатный ЦИФРОВОЙ PIN-код. Мне нужно сообщить пользователю, что он выбрал. Это можно было бы сделать с помощью 5 светодиодов, которые загорались бы рядом с выбором пользователя, или, может быть, отображать текст? Это портативный предмет, поэтому сервопривод, указывающий на выбор пользователя, может оказаться слишком ненадежным.

Я провел небольшое исследование сдвиговых регистров. Кажется, им всем нужно минимум 3 цифровых контакта. Если бы я мог сделать это с помощью 2, я мог бы переделать кнопку...

Идеи?

, 👍1

Обсуждение

Вы рассматривали азбуку Морзе? ;), @Majenko

Используйте SPI для отправки данных в сдвиговый регистр (или несколько) для управления светодиодами или 7-сегментными дисплеями и т. д. Свободный вывод становится сигналом фиксации сдвиговых регистров. SPI — это шина, используйте ее как шину., @CrossRoads


3 ответа


Лучший ответ:

2

С 7-сегментным дисплеем все в порядке, но на нем отображаются 4 цифры. Это не совсем 5 светодиодов. В любом случае на этой плате есть чип, и если вы собираетесь купить еще один чип, вы также можете приобрести Attiny и использовать его. Просто подключите последовательный вход (так же, как на 7-сегментной плате).

На Attiny имеется 8 контактов, 3 из которых будут зарезервированы: Vcc, Gnd, Reset. В результате у вас остается 5 для связи и 5 светодиодов. Итак, используйте один контакт для входящего последовательного порта или два контакта для SDA/SCL, а оставшиеся 3 контакта используйте для светодиодов. Вы можете использовать Charlieplexing, чтобы использовать 3 контакта для подсветки до 6 светодиодов.

Схема Чарлиплексирования

Для интереса я составил пример на своем Uno (он по-прежнему использует только 3 контакта для подсветки 6 светодиодов).

Демо-версия Charliplexing

На схеме установлены резисторы 3 x 100 Ом. Один полностью скрыт светодиодами (идет от среднего желтого провода к средним контактам светодиодов).

Код:

const byte X1 = bit (2);   // D2 на Уно
const byte X2 = bit (3);   // D3 на Уно
const byte X3 = bit (4);   // D4 на Уно

const byte patterns [7] [2] = {
// ПОРТ ГДР
  { 0,   0, }, // все выключено
  { X1, X1 | X2 }, // LED1: X1 вкл., X2 выкл., X3 HiZ
  { X2, X1 | X2 }, // LED2: X1 выключен, X2 включен, X3 HiZ
  { X2, X2 | X3 }, // LED3: X2 вкл., X3 выкл., X1 HiZ
  { X3, X2 | X3 }, // LED4: X2 выключен, X3 включен, X1 HiZ
  { X1, X1 | X3 }, // LED5: X1 вкл., X3 выкл., X2 HiZ
  { X3, X1 | X3 }, // LED6: X3 вкл., X1 выкл., X2 HiZ
};

void setup ()
  {
  }  // конец настройки

void loop ()
  {
  for (int i = 0; i < 7; i++)
    {
    DDRD = patterns [i] [1];
    PORTD = patterns [i] [0];
    delay (500);
    }  // конец цикла for
  }  // конец цикла

Код отображает каждый из 6 светодиодов (плюс все выключенные) поочередно. Для каждого из них он настраивает DDR (регистр направления данных) и PORT (выходной регистр) соответствующим образом для включения нужного светодиода.

Он работает отлично, за исключением того, что вам, возможно, придется экспериментально определить, какой светодиод какой.

,

4

Похоже, что у вас есть I²C на плате, вы могли бы использовать рюкзак с ЖК-дисплеем I²C, например, из выходных панелей, если у вас уже есть ЖК-дисплей, это означает, что вы можете использовать RTC и отображение на шине I²C и, возможно, многое другое.

Кажется, вы упомянули еще один вариант: светодиоды, вы все равно можете использовать шину I²C, использовать расширитель ввода-вывода, подключить к нему светодиоды и адресовать их через I²C. Вы можете использовать PCF8575 (16 входов/выходов), так как существуют библиотеки Arduino. Для этого есть прорывы. Или вы можете сделать свой собственный из другого AVR, например, из линейки ATTiny, там, кажется, 5 светодиодов.

Пример шины I²C:
(источник: ermicro.com)

Похоже, вы хотите использовать ШИМ, вы можете использовать микросхему драйвера точки/полосы, например LM3914 принимает аналоговое значение и отображает его в виде точки на полосе светодиодов, пример ниже:

ИС также может работать при напряжении до 3 В.

Вам нужно будет добавить фильтр нижних частот, чтобы преобразовать ШИМ в плавное аналоговое значение. . Вы добавите это вместо входной схемы (D1 и C1):

Если у вас возникли какие-либо затруднения с LM3914, в Google есть немало руководств.

,

l2C использует два контакта в дополнение к питанию и земле - оба упомянутых вами варианта требуют столько же контактов, сколько сдвиговый регистр. Возможно, мне просто придется перепроектировать...., @futurebird

Я отдаю вам должное за помощь, но, возможно, мой вопрос должен был быть более ясным., @futurebird

@futurebird I2C использует те же два контакта, что и вы, это шина? Вы можете использовать как RTC, так и опцию отображения вместе. Что в этом плохого?, @RSM

l2C использует два контакта в дополнение к питанию и земле - вы используете одни и те же два контакта. Каждое устройство на шине I2C имеет свой адрес. Этот ответ был вполне осуществим., @Nick Gammon

Может ли он работать при 3,3 В? Компонент представляет собой устройство с напряжением 3,3 В, а проект питается от батареи (невозможно добавить источник питания)., @futurebird

@futurebird — Да, микросхема может работать от 0 до 3,3 В, [техническое описание](http://www.ti.com/lit/ds/symlink/pcf8575c.pdf), @RSM

Пиковый детектор оригинальной схемы '3914 может нормально работать в качестве ФНЧ., @Ignacio Vazquez-Abrams

@IgnacioVazquez-Abrams — ок, хорошая мысль, +1, продолжайте в том же духе, @RSM


0

Я нашел решение! Коммутационная панель с 7-сегментным дисплеем.

I

Это работает при напряжении 3,3 В, что критично для голубого боба. Я думаю, что сервопривод может быть самым креативным решением.

Я все еще убежден, что должен быть какой-то способ использовать ШИМ...

,

Похоже, что эта конкретная плата (может) использовать асинхронный последовательный порт, поэтому однопроводное решение (плюс питание и земля) будет использовать последовательный выход для управления ею., @Nick Gammon

Если вы собираетесь использовать эту плату, вы также можете использовать на ней MCU и сбросить компонент., @Ignacio Vazquez-Abrams

У компонента очень хороший BLE (Bluetooth). Я бы не хотел отказываться от этой функции., @futurebird