Важная информация

User Tag List

Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 29 из 29

Тема: Электромеханический суперкомпьютер имени 1 апреля 2018 года

  1. #21
    Member Аватар для Patison
    Регистрация
    03.02.2017
    Адрес
    с. Троицкое, Омская обл.
    Сообщений
    105
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    30
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sergei Frolov Посмотреть сообщение
    Схему релейного калькулятора "Вильнюс" видели?
    Нет, не видел. Хотелось бы взглянуть. Почему-то вспомнились мои лабораторные работы, когда я учился на первом курсе института в 1979 году. На аналоговых вычислительных машинах напряжение было, кажется до 100 В, хотя ток маленький. И часто нас при неосторожной коммутации било током результатов вычислений.
    Однако, вернемся к нашим баранам, то есть к теме.

    Сегодня 1 Мая, праздник Весны и Труда. Жизнь только начинается. Все расцветает.

    Я провел тест на скорость работы релейной схемы Logic1:



    Алгоритм работы управляющего компьютера построен так, что при успешном прохождении очередного цикла, состощего из 16 проверок по вышеприведенной таблице, он уменьшает на 10 миллисекунд интервал между измерениями в следующем цикле. Как только будут обнаружены ошибки, в следующем цикле интервал измерений увеличивается. И так до тех пор, пока ошибки на перестанут появляться. При этом программный таймер некоторое время после того, как ошибки исчезнут, окончательно тестирует схему.
    При нескольких запусках у меня Delay варьировалась от 12 до 20 мс. Это - суммарное время прохождения сигнала от входов X0..X3 через все логические элементы до выхода Y3 по самой длинной цепочке схемы.
    Последний раз редактировалось Patison; 01.05.2018 в 10:33.

  2. #22
    Veteran
    Регистрация
    30.08.2005
    Адрес
    Питер
    Сообщений
    1,212
    Спасибо Благодарностей отдано 
    85
    Спасибо Благодарностей получено 
    56
    Поблагодарили
    38 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patison Посмотреть сообщение
    Нет, не видел. Хотелось бы взглянуть.
    http://electronika-5.ru/calc/index.php?page=doc_calc
    Собираю в коллекцию советские калькуляторы и компьютеры.
    Мой сайт: http://www.leningrad.su/museum/

  3. #23
    Member Аватар для Patison
    Регистрация
    03.02.2017
    Адрес
    с. Троицкое, Омская обл.
    Сообщений
    105
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    30
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sergei Frolov Посмотреть сообщение
    Что-то я там принципиальной электрической схемы не углядел. Может быть плохо смотрел?

    Сегодня Праздник Великой Победы!!!
    Нужно сделать что-то полезное. Выкладываю мой скетч для Arduino UNO, который рулил схемой на представленных выше двух видео:

    /*
    Релейная логическая схема Logic1 на основе релейных модулей 5V с оптической развязкой.
    Перемычку на всех релейных модулях ставим между средним и левый контактом с надписью "H".
    Входной разъем:
    DC- подключаем к GND;
    DC+ подключаем к +5V;
    IN подключаем к PIN Arduino.
    */
    //#define FuncTest // Тест на правильность функционирования логической схемы.
    #define SpeedTest // Тест на скорость работы.

    #ifdef FuncTest
    #define logicDelay 300 // Время ожидания прохождения сигналов по всей релейной логической схеме.
    #define cycleDelay 2000 // Задержка между шагами цикла.
    #endif // FuncTest

    #ifdef SpeedTest
    #define plusDelta 1 // Значение на сколько миллисекунд нужно увеличивать currDelay.
    #define minusDelta 10 // Значение на сколько миллисекунд нужно уменьшать currDelay.
    #define startDelay 300 // Стартовое значение currDelay.
    #define CycleMaxSpeedCountMax 100 // Максимальное количество циклов при максимальной скорости работы без ошибок.
    bool errFound; // = False - ни одной ошибки с начала работы программы не было найдено; = True - ошибки были.
    int currCycleMaxSpeedCountMax; // Текущее значение CycleMaxSpeedCountMax.
    #endif // SpeedTest

    int currDelay; // Текущее значение времени ожидания прохождения сигналов по всей релейной логической схеме.

    int x0 = 2; // Пин 2.
    int x1 = 3; // Пин 3.
    int x2 = 4; // Пин 4.
    int x3 = 5; // Пин 5.
    int y3 = 6; // Пин 6.

    byte xxxx; // x0, x1, x2, x3, представленные одним байтом, где x3 - младший бит 0, x0 - бит 3.

    int currErrorsCount; // Счетчик количества ошибок в текущем цикле.
    int totalErrorsCount; // Счетчик общего количества ошибок с начала запуска программы.
    int currCycleCount; // Текущее значение цикла.

    void setup() {
    pinMode(x0, OUTPUT);
    pinMode(x1, OUTPUT);
    pinMode(x2, OUTPUT);
    pinMode(x3, OUTPUT);
    pinMode(y3, INPUT);

    xxxx = 0;
    totalErrorsCount = 0;
    currCycleCount = 0;

    #ifdef FuncTest
    currDelay = logicDelay;
    #endif // FuncTest

    #ifdef SpeedTest
    currDelay = startDelay;
    errFound = false;
    currCycleMaxSpeedCountMax = 0;
    #endif // SpeedTest

    Serial.begin(9600); // Для вывода результатов работы схемы.
    Serial.println("Program Start");
    }

    void loop() {
    if (xxxx == 0) {
    #ifdef SpeedTest
    if (currCycleMaxSpeedCountMax == 0) {
    #endif // SpeedTest
    Serial.println("");
    Serial.print("Start Cycle N ");
    Serial.print(currCycleCount, DEC);
    Serial.print(". Current Delay ");
    Serial.println(currDelay, DEC);
    #ifdef SpeedTest
    }
    #endif // SpeedTest
    currErrorsCount = 0;
    }

    #ifdef FuncTest
    // Вывод текущего значения входных сигналов x0, x1, x2, x3.
    Serial.print("xxxx = ");
    Serial.print(xxxx, HEX);
    Serial.print(" ");
    #endif // FuncTest

    setX0123(xxxx); // Установить новое значение входных сигналов релейной логической схемы.
    delay(currDelay); // Время ожидания прохождения сигналов по всей релейной логической схеме.

    switch (xxxx) {
    case 0x0:
    resultPrint(digitalRead(y3), HIGH);
    break;
    case 0x1:
    resultPrint(digitalRead(y3), HIGH);
    break;
    case 0x2:
    resultPrint(digitalRead(y3), HIGH);
    break;
    case 0x3:
    resultPrint(digitalRead(y3), LOW);
    break;
    case 0x4:
    resultPrint(digitalRead(y3), HIGH);
    break;
    case 0x5:
    resultPrint(digitalRead(y3), HIGH);
    break;
    case 0x6:
    resultPrint(digitalRead(y3), HIGH);
    break;
    case 0x7:
    resultPrint(digitalRead(y3), LOW);
    break;
    case 0x8:
    resultPrint(digitalRead(y3), HIGH);
    break;
    case 0x09:
    resultPrint(digitalRead(y3), HIGH);
    break;
    case 0xa:
    resultPrint(digitalRead(y3), HIGH);
    break;
    case 0xb:
    resultPrint(digitalRead(y3), LOW);
    break;
    case 0xc:
    resultPrint(digitalRead(y3), HIGH);
    break;
    case 0xd:
    resultPrint(digitalRead(y3), LOW);
    break;
    case 0xe:
    resultPrint(digitalRead(y3), HIGH);
    break;
    case 0xf:
    resultPrint(digitalRead(y3), LOW);
    break;
    default:
    break;
    }

    #ifdef FuncTest
    delay(cycleDelay); // Задержка между шагами цикла.
    #endif // FuncTest

    // Инкремент входных сигналов x0, x1, x2, x3.
    xxxx++;
    if (xxxx > 0xf) {
    xxxx = 0x0;

    #ifdef SpeedTest
    if (currCycleMaxSpeedCountMax == 0) {
    #endif // SpeedTest
    // Вывод количества обнаруженных ошибок.
    Serial.print("Cycle Errors Count = ");
    Serial.println(currErrorsCount, DEC);
    Serial.print("Total Errors Count = ");
    Serial.println(totalErrorsCount, DEC);
    #ifdef SpeedTest
    }
    #endif // SpeedTest

    #ifdef SpeedTest
    if (errFound == true)
    currCycleMaxSpeedCountMax++;
    if (currCycleMaxSpeedCountMax >= CycleMaxSpeedCountMax) {
    Serial.println("");
    Serial.print("Delay ");
    Serial.println(currDelay, DEC);
    while (true) {};
    }
    if (errFound == false) {
    if (currErrorsCount == 0) {
    // Ускоряем работу логической схемы.
    if (currDelay > 0) {
    currDelay = currDelay - minusDelta;
    }
    }
    }

    if (currErrorsCount > 0) {
    currCycleMaxSpeedCountMax = 0;
    errFound = true;
    // Замедляем работу логической схемы.
    if (currDelay < startDelay) {
    currDelay = currDelay + plusDelta ;
    }
    }
    #endif // SpeedTest */

    currErrorsCount = 0; // Обнуление количества ошибок цикла.
    currCycleCount++; // Инкремент счетчика циклов.
    }
    }

    // Функция вывода в терминал результата одной итерации.
    // y3 - полученное из внешней схемы значение (HIGH или LOW).
    // res - ожидаемое значение (HIGH или LOW).
    void resultPrint(byte y3, byte res) {
    if (y3 == res) {
    #ifdef FuncTest
    if (y3 == HIGH)
    Serial.println("Ok: Y3 = 1");
    else
    Serial.println("Ok: Y3 = 0");
    #endif // FuncTest
    } else {
    // Инкремент счетчиков ошибок.
    currErrorsCount++;
    totalErrorsCount++;
    #ifdef FuncTest
    if (y3 == HIGH)
    Serial.println("Error: Y3 = 1");
    else
    Serial.println("Error: Y3 = 0");
    #endif // FuncTest
    }
    }

    // Функция вывода x0, x1, x2, x3 во внешнюю релейную логическую схему.
    void setX0123(byte X0123) {
    if ((X0123 & 0x1) == 0)
    digitalWrite(x3, LOW);
    else
    digitalWrite(x3, HIGH);

    if ((X0123 & 0x2) == 0)
    digitalWrite(x2, LOW);
    else
    digitalWrite(x2, HIGH);

    if ((X0123 & 0x4) == 0)
    digitalWrite(x1, LOW);
    else
    digitalWrite(x1, HIGH);

    if ((X0123 & 0x8) == 0)
    digitalWrite(x0, LOW);
    else
    digitalWrite(x0, HIGH);
    }
    Из текста скетча видно, что нужно закомментировать первый #define и раскомментировать второй, либо сделать все наоборот для выбора одного из режимов работы схемы Logic1. Для контроля нужно в Arduino IDE запустить монитор порта на скорости 9600 бод.
    Последний раз редактировалось Patison; 09.05.2018 в 21:02.

  4. #24
    Master Аватар для siemensC35
    Регистрация
    13.10.2017
    Адрес
    г. Днепр, Украина
    Сообщений
    770
    Спасибо Благодарностей отдано 
    149
    Спасибо Благодарностей получено 
    131
    Поблагодарили
    111 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patison Посмотреть сообщение
    Что-то я там принципиальной электрической схемы не углядел. Может быть плохо смотрел?
    3 и 4 снизу

    - - - Добавлено - - -

    схема 67 года не канонічна, нужно 6ц21)

  5. #25
    Member Аватар для Patison
    Регистрация
    03.02.2017
    Адрес
    с. Троицкое, Омская обл.
    Сообщений
    105
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    30
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сегодня праздник!!!. Открылся для движения легковых автомобилей Крымский Мост. Надо это отметить.

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

    Давайте попробуем хотя бы частично преодолеть физические ограничения данного способа построения логических схем. Для этого вначале посмотрим, какие виды кодирования логического сигнала существуют.
    1. Кодирование логической единицы с помощью высокого уровня напряжения любой полярности в единственном проводнике, а нуля с помощью нулевого уровня.
    2. Кодирование логической единицы с помощью высокого положительного уровня напряжения в единственном проводнике, а нуля с помощию высокого отрицательного напряжения.
    3. Кодирование логической единицы высоким положительным уровнем напряжения в первом проводнике и высоким отрицательным уровнем во втором проводнике. Кодирование логического нуля высоким отрицательным уровнем напряжения в первом проводнике и высоким положительным уровнем во втором проводнике.
    4. Кодирование логической единицы высоким положительным уровнем напряжения в первом проводнике и нулевым уровнем во втором проводнике. Кодирование логического нуля нулевым уровнем напряжения в первом проводнике и высоким положительным уровнем во втором проводнике.
    Разумеется, существуют и другие виды кодирования. Но нам пока будет достаточно перечисленных.

    Выберем четвертый вариант. Изобразим релейные схемы логических элементов, основанных на двухпроводном кодировании.

    Вот схема 2AND на реле с ее таблицей истинности:



    Схема 2OR:



    NOT:



    Для преобразования однопроводного кодирования согласно первого варианта в четвертый нам потребуется конвертор:

    Последний раз редактировалось Patison; 16.05.2018 в 10:14.

  6. #26
    Veteran Аватар для Kakos_nonos
    Регистрация
    26.12.2010
    Адрес
    Кубань
    Сообщений
    1,152
    Спасибо Благодарностей отдано 
    31
    Спасибо Благодарностей получено 
    37
    Поблагодарили
    22 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я тоже рисовал такие схемы, интересовался релейными компьютерами, много листов изрисовал :-)
    Для меня камнем преткновения была организация адресной шины, и адресного регистра, ведь его надо уметь инкрементировать и устанавливать, если jmp.
    Больше всего мне нравился релейный компьютер tim8, у него всего 130 реле, при этом у него полноценное АЛУ (правда, последовательное, то есть 8 команд надо выполнить, чтоб сложить два числа), он может делать циклы и прочие штуки (Программа находится на бумаге, которая ходит туда-сюда)
    На 3:36 тест


    - - - Добавлено - - -

    Компьютеры на релюшках - уже усталело, вот новый тренд - компьютер на ПЗУшках :-) Сорри за оффтоп :-)

  7. #27
    Member Аватар для Patison
    Регистрация
    03.02.2017
    Адрес
    с. Троицкое, Омская обл.
    Сообщений
    105
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    30
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Что-то устал я от праздников. Точнее от их количества.
    Поэтому сегодня просто изображу схему, которую собираюсь построить на основе вышеописанных модулей.
    Это схема Logic1 2, которая имеет точно такую же таблицу истинности, как и Logic1:



    Схема предполагается двухтактной. В первом такте на входные цепи одновременно подаются все исходные аргументы.
    После суммарной задержки, примерно равной максимальной задержке срабатывания самого медленного модуля
    во втором такте управляющий компьютер должен считать результат с выхода Y3.
    Последний раз редактировалось Patison; 02.06.2018 в 09:52.

  8. #28
    Guru
    Регистрация
    14.05.2015
    Адрес
    г. Харьков, Украина
    Сообщений
    2,940
    Спасибо Благодарностей отдано 
    150
    Спасибо Благодарностей получено 
    302
    Поблагодарили
    171 сообщений
    Mentioned
    4 Post(s)
    Tagged
    1 Thread(s)
    Увы общий формат форума вышел из рамок моего любимого места , более тут не бываю.

  9. #29
    Veteran
    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,041
    Спасибо Благодарностей отдано 
    931
    Спасибо Благодарностей получено 
    224
    Поблагодарили
    121 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Тема забавная! Слежу.

    В схеме Logic1 2 двойной сигнал проходит сквозь цепочку логических элементов без ветвлений. Что будет, если мы уберём диоды из нутров элементов? А ничего не изменится. Диоды нужны только там, где сигнал разветвляется.

    Нашёл небольшую помарку. (см. картинку)
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	2-AND2_corr.JPG 
Просмотров:	61 
Размер:	35.1 Кб 
ID:	65456  

Страница 3 из 3 ПерваяПервая 123

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 35
    Последнее: 03.12.2020, 00:05
  2. Игры 2018 года
    от Black Cat / Era CG в разделе Игры
    Ответов: 67
    Последнее: 10.01.2019, 15:39
  3. Загрузка файла по имени
    от newart в разделе Программирование
    Ответов: 18
    Последнее: 08.05.2017, 17:01
  4. AY Emul имени С. Бульбы
    от fk0 в разделе Музыка
    Ответов: 8
    Последнее: 25.10.2005, 10:46

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •