iB7HA

              Вы тренировались многие годы, чтобы оказаться там, 
              где сейчас находитесь. И на пройденном пути вам, 
              вероятно, пришлось не раз убеждать себя и окружающих 
              людей, что вы не тратите время впустую. Но теперь, 
              я надеюсь, дни, когда приходилось объяснять, 
              закончились, потому что вы -- спортсмены. 
              Вы настоящие спортсмены, следующие за своим мечтами.

              Лёкке Расмуссен (Lars Løkke Rasmussen)
              Премьер-министр Дании, Турнир Counter-Strike
              https://3dnews.ru/977744


## VMLAB: РЕТРО-СПЕКТИВА

# Установка.

  Установить VMLab (Install_VMLAB315.exe) в папку C:\VMLab
  
  Установить WinAvr C (WinAVR-20100110-install.exe) в папку C:\WinAVR
  
  Установить Help Viewer для Windows 10
  
    https://www.softpedia.com/get/System/OS-Enhancements
      /Help-Explorer-Viewer.shtml

# Использование

1. Схему не рисуют, а пишут на Spice( CancerEx).

2. Единственный усилительный элемент -- идеальный операционный усилитель, включен между GND и VDD. Соответственно, требуется смещение на входе, равное половине напряжения питания ( VDD / 2 ).

3. EДИНСТВЕННЫЙ ЦИФРОВОЙ элемент И-НЕ (штрих Шеффера, NAND). Все остальные элементы (включая триггеры), собираются на его основе.

4. Другие готовые компоненты:

  Resistor            R1   N1  N2  10K
  Grounded Capacitor  C1   N2  GND 1u (n)
  LED diode           D1-8 VDD N3
  Key                 K0-F N4  N5  [{NORMAL, LATCHED, MOMOSTABLE(time)}]
  
  Comparator
  D/A converter       X2 D2A8  i7 i6 i5 i4 i3 i2 i1 i0 outNode
  
  V-Sinewave          (offset, amplitude, frequency)       
  V-Pulse             Pulse with (front time, rear time)
  V-Slider            Interactive slider dependant voltage generator
  V-DigitalNRZ        Sequence of 0's and 1's


# Симуляция.

  Project -> New Project

Step 1. Select Project File name and location
  
  VMHello
  
  [ Enter name / browse / create directory ]

Step 2. Select Micro
  
  ATMega 8
  
  [v] Generate comments
  [v] Generate basic template code
  
Step 3. Select software location
  
  (*) GNU C Compiler (GCC /WinAVR) (must be installed, AVR only)
  
  [v] Let VMLAB to manage automatically makefile

Step 4. Add source code file

  VMHello.c [ <- Add this ]


# Использование Осциллографа.

  .plot v(V1) v(V2) .. v(VN)

  View -> Scope
  

# Заполнение файла проекта: 

  Нарисовать схему в CircuitMaker Student 6
  
  Перенумеровать узлы
  
    Options -> Show Node Numbers (F8)
    

# Большой пример:

  при нажатии на кнопку K0-7 на семисегментном дисплее включается цифра от 0 до 7
  
  1. В Logisim получить 7-битные двоичные коды для 0123456789
      a
     ---
   f|   |b
   g --- g
   e|   |c
     --- 
      d
      
   nr.   x3 x2 x1 x0  a b c d e f g   hex
                                  
    0    0  0  0  0   1 1 1 1 1 1 0   3F
    1    0  0  0  1   0 1 1 0 0 0 0   06
    2    0  0  1  0   1 1 0 1 1 0 1   5B
    3    0  0  1  1   1 1 1 1 0 0 1   4F
    4    0  1  0  0   0 1 1 0 0 1 1   66
    5    0  1  0  1   1 0 1 1 0 1 1   6D
    6    0  1  1  0   1 0 1 1 1 1 1   7D
    7    0  1  1  1   1 1 1 0 0 0 0   07
                                  
                sum   6 6 7 5 3 4 5 
                8-sum 2 2 1 3 5 4 3 

lift.prj
                
  ; ************************************************************
  ; PROJECT:
  ; AUTHOR:
  ; ************************************************************

  ; Micro + software running
  ; ------------------------------------------------------------
  .MICRO "ATmega8"
  .TOOLCHAIN "GENERIC"
  .GCCPATH   "C:\WinAVR"
  .GCCMAKE   AUTO
  .TARGET    "lift.hex"
  .SOURCE    "lift.c"

  .TRACE              ; Activate micro trace

  ; Following lines are optional; if not included
  ; exactly these values are taken by default
  ; ------------------------------------------------------------
  .POWER VDD=5 VSS=0  ; Power nodes
  .CLOCK 1meg         ; Micro clock
  .STORE 250m         ; Trace (micro+signals) storage time

  ; Micro nodes: RESET, AREF, PB0-PB7, PC0-PC6, PD0-PD7, ACO, TIM1OVF, ADC6, ADC7
  ; Define here the hardware around the micro
  ; ------------------------------------------------------------

  R0  VDD  in0 1K
  K0  in0  GND LATCHED
  X0  ND2  in0 in0 out0

  R1  VDD  in1 1K
  K1  in1  GND LATCHED
  X1  ND2  in1 in1 out1

  R2  VDD  in2 1K
  K2  in2  GND LATCHED
  X2  ND2  in2 in2 out2

  R3  VDD  in3 1K
  K3  in3  GND LATCHED
  X3  ND2  in3 in3 out3

  R4  VDD  in4 1K
  K4  in4  GND LATCHED
  X4  ND2  in4 in4 out4

  R5  VDD  in5 1K
  K5  in5  GND LATCHED
  X5  ND2  in5 in5 out5

  R6  VDD  in6 1K
  K6  in6  GND LATCHED
  X6  ND2  in6 in6 out6

  R7  VDD  in7 1K
  K7  in7  GND LATCHED
  X7  ND2  in7 in7 out7

  XSEVEN1 _led7cc out0 out0 out0 out0 out0 out0 GND  GND  GND
  XSEVEN2 _led7cc GND  out1 out1 GND  GND  GND  GND  GND  GND
  XSEVEN3 _led7cc out2 out2 GND  out2 out2 GND  out2 GND  GND
  XSEVEN4 _led7cc out3 out3 out3 out3 GND  GND  out3 GND  GND
  XSEVEN5 _led7cc GND  out4 out4 GND  GND  out4 out4 GND  GND
  XSEVEN6 _led7cc out5 GND  out5 out5 GND  out5 out5 GND  GND
  XSEVEN7 _led7cc out6 GND  out6 out6 out6 out6 out6 GND  GND
  XSEVEN8 _led7cc out7 out7 out7 GND  GND  GND  GND  GND  GND

  2. Построить Radio Buttons для 8 кнопок.

  Поправим код {1} под наши нужды:
  
Скопировать rotarybcd.cpp в rotary.cpp
Скопировать rotarybcd.rc в rotary.rc

Изменено: 

rotary.cpp

  ..
  DECLARE_PINS
     DIGITAL_OUT(P0, 1);
     DIGITAL_OUT(P1, 2);
     DIGITAL_OUT(P2, 3);
     DIGITAL_OUT(P3, 4);
     DIGITAL_OUT(P4, 5);
     DIGITAL_OUT(P5, 6);
     DIGITAL_OUT(P6, 7);
     DIGITAL_OUT(P7, 8);
  END_PINS
  ..
  void Soil(void) {
    unsigned int loop;
    for (loop = 0;loop < 8;loop++) SET_LOGIC(P0 + loop, 0);
    SET_LOGIC(P0 + VAR(value), 1);
  }
  
rotary.rc

   // Add, modify, delete,...
   //
   CONTROL "0", GADGET0, "button", BS_AUTORADIOBUTTON | BS_LEFT | 
                                   WS_CHILD | WS_VISIBLE | WS_TABSTOP, 
                                   8 + (DW*0), 10, DW, 9
   CONTROL "1", GADGET1, "button", BS_AUTORADIOBUTTON | BS_LEFT | 
                                   WS_CHILD | WS_VISIBLE | WS_TABSTOP, 
                                   8 + (DW*1), 10, DW, 9
   CONTROL "2", GADGET2, "button", BS_AUTORADIOBUTTON | BS_LEFT | 
                                   WS_CHILD | WS_VISIBLE | WS_TABSTOP, 
                                   8 + (DW*2), 10, DW, 9
   CONTROL "3", GADGET3, "button", BS_AUTORADIOBUTTON | BS_LEFT | 
                                   WS_CHILD | WS_VISIBLE | WS_TABSTOP, 
                                   8 + (DW*3), 10, DW, 9
   CONTROL "4", GADGET4, "button", BS_AUTORADIOBUTTON | BS_LEFT | 
                                   WS_CHILD | WS_VISIBLE | WS_TABSTOP, 
                                   8 + (DW*4), 10, DW, 9
   CONTROL "5", GADGET5, "button", BS_AUTORADIOBUTTON | BS_LEFT | 
                                   WS_CHILD | WS_VISIBLE | WS_TABSTOP, 
                                   8 + (DW*5), 10, DW, 9
   CONTROL "6", GADGET6, "button", BS_AUTORADIOBUTTON | BS_LEFT | 
                                   WS_CHILD | WS_VISIBLE | WS_TABSTOP, 
                                   8 + (DW*6), 10, DW, 9
   CONTROL "7", GADGET7, "button", BS_AUTORADIOBUTTON | BS_LEFT | 
                                   WS_CHILD | WS_VISIBLE | WS_TABSTOP, 
                                   8 + (DW*7), 10, DW, 9
}

Чтобы построить компонент "rotary.cpp", следует установить Borland C++ 5.5 Command Line Tools и настроить файлы bin\bcc32.cfg и bin\ilink32.cfg так, как это описано в readme.txt. Затем в VMLab закрыть все проекты,

  1. Component -> Create new -> Open: rotary.cpp
  
  2.                            Compile
  
Читать {2}.

Наш проект теперь нужно привести к следующему виду:

  ; ************************************************************
  ; PROJECT:
  ; AUTHOR:
  ; ************************************************************

  ; Micro + software running
  ; ------------------------------------------------------------
  .MICRO "ATmega8"
  .TOOLCHAIN "GENERIC"
  .GCCPATH   "C:\WinAVR"
  .GCCMAKE   AUTO
  .TARGET    "lift.hex"
  .SOURCE    "lift.c"

  .TRACE              ; Activate micro trace

  ; Following lines are optional; if not included
  ; exactly these values are taken by default
  ; ------------------------------------------------------------
  .POWER VDD=5 VSS=0  ; Power nodes
  .CLOCK 1meg         ; Micro clock
  .STORE 250m         ; Trace (micro+signals) storage time

  ; Micro nodes: RESET, AREF, PB0-PB7, PC0-PC6, PD0-PD7, ACO, TIM1OVF, ADC6, ADC7
  ; Define here the hardware around the micro
  ; ------------------------------------------------------------

  Xrot0 _rotary(0) out0 out1 out2 out3 out4 out5 out6 out7

  XSEVEN1 _led7cc out0 out0 out0 out0 out0 out0 GND  GND  GND
  XSEVEN2 _led7cc GND  out1 out1 GND  GND  GND  GND  GND  GND
  XSEVEN3 _led7cc out2 out2 GND  out2 out2 GND  out2 GND  GND
  XSEVEN4 _led7cc out3 out3 out3 out3 GND  GND  out3 GND  GND
  XSEVEN5 _led7cc GND  out4 out4 GND  GND  out4 out4 GND  GND
  XSEVEN6 _led7cc out5 GND  out5 out5 GND  out5 out5 GND  GND
  XSEVEN7 _led7cc out6 GND  out6 out6 out6 out6 out6 GND  GND
  XSEVEN8 _led7cc out7 out7 out7 GND  GND  GND  GND  GND  GND

# Проблемы

.prj 

  .MICRO "ATmega8"
  .TOOLCHAIN "GENERIC"
  .GCCPATH   "C:\WinAVR"
  .GCCMAKE   AUTO


# Ссылки

  {1}. http://www.amctools.com/cgi-bin/yabb2/YaBB.pl?num=1259960473

  {2}. ftp://87-97-139-78.kamensktel.ru/INFO/mikrokontroller
           /AVR/Vmlab/upgrad311/usercomp.pdf
