G459S

    -- Back to the future?*
    -- Вперед, в прошлое!
    *) Robert Zemeckis, 1985
    
Строим часы на Аrduino
----------------------

Индикатор построим на светодиодах:

     ####    ####       ####    #### 
    .    #  .    #     #    .  #    #
    .    #  .    #  #  #    .  #    #
     ####    ####       ####    #### 
    #    .  .    #  #  .    #  .    #
    #    .  .    #     .    #  .    #
     ####    ####       ####    #### 

Общепринятыми являются следующие имена сегментов семисегментного индикатора:

    a  ####  a
    f #    # b
      #    #
    g  ####  g
    e #    # c
      #    #
     d #### # h

Нарисуем фонт:

    биты:              MSB-> 76543210 <-LSB
    имена сегментов:         hgfedcba
    изображаемые символы:               
    hex    dec   Oct    bin   char  names      
    0x00     0     0    0000  0     --fedcba      a  ####  a
    0x01     1     1    0001  1     -----сb-      f #    # b
    0x02     2     2    0010  2     -g-ed-ba        #    #
    0x03     3     3    0011  3     -g--dcba      g  ####  g
    0x04     4     4    0100  4     -gf--cb-      e #    # c
    0x05     5     5    0101  5     -gf-dc-a        #    #
    0x06     6     6    0110  6     -gfedc-a       d #### # h
    0x07     7     7    0111  7     -----cba
    0x08     8    10    1000  8     -gfedcba
    0x09     9    11    1001  9     -gf-dcba      a  ####  a
    0x0a    10    12    1010  A     -gfe-cba      f #    # b
    0x0b    11    13    1011  b     -gfedc--        #    #
    0x0c    12    14    1100  c     -g-ed---      g  ####  g
    0x0d    13    15    1101  d     -g-edcb-      e #    # c
    0x0e    14    16    1110  E     -gfed--a        #    #
    0x0f    15    17    1111  F     -gfe--ba       d #### # h
    0x10    16    20   10000  G     --fedc-a
    0x11    17    21   10001  h     -gfe-c--
    0x12    18    22   10010  i     ---ed--a      a  ####  a
    0x13    19    23   10011  j     ----dc-a      f #    # b
    0x14    20    24   10100  k(H)  -gfe-cb-        #    #
    0x15    21    25   10101  L     --fed---      g  ####  g
    0x16    22    26   10110  M(II) --fe-cb-      e #    # c
    0x17    23    27   10111  n     -g-e-c--        #    #
    0x18    24    30   11000  o     -g-edc--       d #### # h
    0x19    25    31   11001  P     -gfe--ba
    0x1a    26    32   11010  q     -gf--cba
    0x1b    27    33   11011  r     -g-e----      a  ####  a
    0x1c    28    34   11100  S     -gf-dc-a      f #    # b
    0x1d    29    35   11101  t     -gfe-cb-        #    #
    0x1e    30    36   11110  U     --fed---      g  ####  g
    0x1f    31    37   11111  v     --fe-cb-      e #    # c
    0x20    32    40  100000  W     -gfedcb-        #    #
    0x21    33    41  100001  x     ---e-c--       d #### # h
    0x22    34    42  100010  y     -g-edc--
    0x23    35    43  100011  Z     -g--d--a
    0x24    36    44  100100 ' '    --------

Чтобы сэкономить количество ножек Arduino, используем только часть фонта от 0 до 9. На изображение одной цифры потребуется 4 пина (0000 по 1001) 4 индикатора "сожрут" 16 ножек, что вполне приемлимо (на плате Arduino Uno есть 14 цифровых и 6 аналоговых пинов, чего хватит в избытке для показа часов и минут). Чтобы построить перекодировщик поля "bin" предыдущей таблицы в поле "names", нарисуем таблицу истинности работы создаваемого девайса. 

       x3 x2 xI xO    g  f  e  d  c  b  a
                                  
    O   O  O  O  O    0  1  1  1  1  1  1
    I   O  O  O  I    0  0  0  0  1  1  0
    2   O  O  I  O    1  0  1  1  0  1  1
    3   O  O  I  I    1  0  0  1  1  1  1
    4   O  I  O  O    1  1  0  0  1  1  0
    5   O  I  O  I    1  1  0  1  1  0  1
    6   O  I  I  O    1  1  1  1  1  0  1
    7   O  I  I  I    0  0  0  0  1  1  1
    8   I  O  O  O    1  1  1  1  1  1  1
    9   I  O  O  I    1  1  0  1  1  1  1
    A   I  O  I  O    1  1  1  0  1  1  1
    B   I  O  I  I    1  1  1  1  1  0  0
    C   I  I  O  O    1  0  1  1  0  0  0
    D   I  I  O  I    1  0  1  1  1  1  0
    E   I  I  I  O    1  1  1  1  0  0  1
    F   I  I  I  I    1  1  1  0  0  0  1

Если нам не нужны шестнадцатиричные цифры AbcdEF, для создания таблицы истинности можно использовать состояния "don't care", logisim опознает их как "x":

       x3 x2 xI xO    g  f  e  d  c  b  a
                                  
    O   O  O  O  O    0  1  1  1  1  1  1
    I   O  O  O  I    0  0  0  0  1  1  0
    2   O  O  I  O    1  0  1  1  0  1  1
    3   O  O  I  I    1  0  0  1  1  1  1
    4   O  I  O  O    1  1  0  0  1  1  0
    5   O  I  O  I    1  1  0  1  1  0  1
    6   O  I  I  O    1  1  1  1  1  0  1
    7   O  I  I  I    0  0  0  0  1  1  1
    8   I  O  O  O    1  1  1  1  1  1  1
    9   I  O  O  I    1  1  0  1  1  1  1
    A   I  O  I  O    x  x  x  x  x  x  x
    B   I  O  I  I    x  x  x  x  x  x  x
    C   I  I  O  O    x  x  x  x  x  x  x
    D   I  I  O  I    x  x  x  x  x  x  x
    E   I  I  I  O    x  x  x  x  x  x  x
    F   I  I  I  I    x  x  x  x  x  x  x
                                  
                      6  6  4  7  9  8  8
                      
А теперь, обещаное в начале путешествие на машине времени.

1847 - 1920. Пишем систему булевых уравнений, упрощаем картами Карно, полученный результат оформляем с помощью надфилей в виде часового механизма, передвигающего колеса с надписанными цифрами (как в игровом автомате "однорукий бандит").

1920 - 1950. Пишем систему булевых уравнений, упрощаем картами Карно, на основе полученного результата рисуем схему соединения электровакуумных ламп, используем газоразрядные индикаторы.

1950 - 1980. Теоретическую часть решаем на компьютере, полученную схему паяем на транзисторах, чуть позже (1962) на микросхемах*3 (7400 (155ЛА3)).

1980 - 2000. Пишем программу, симулирующую поведение нашего девайса под имеющийся (микро)контроллер. (ATMega-8P в корпусе DIP 0.75 USD на AliExpress или 2 EUR в OomiPood. Цены по состоянию на 20160405)

2000 - сегодня. Дешевле просто сходить в магазин, но если любопытно разобраться, выбираем понравившийся ретро-стиль и тратим на него все свое свободное время.

Период 1950 - сегодня можно также детализировать по применяемым языкам программирования: 

  машинные коды
  ассемблер
  С
  С++
  Python, Java, C#
  ..
  искусственный интеллект (обясняем задачу так, как человеку-работнику)

Опять-же выбираем понравившийся язык.

Востребованным же видом работ все чаще становится умение продолжить начатый проект. (Например отладка -- развитие SimulIDE, добавить новый plugin в VMLab, создать новый fork от LogiSim и т.п.)

Ссылки:
-------

1. logisim-evolution
  https://github.com/reds-heig/logisim-evolution
  http://reds-data.heig-vd.ch/logisim-evolution/logisim-evolution.jar

2. http://msdl.cs.mcgill.ca/people/yentl/files/logisim2devs_report.pdf

3. https://ru.wikipedia.org/wiki/Интегральная_схема

4. http://cyberalaska.cs.uaf.edu/blogs/archives/61

5. http://www.hobbytronics.co.uk/bluetooth-module-connection
