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

User Tag List

Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 14 из 14

Тема: Джойстик от денди.

  1. #11
    Activist Аватар для doc_fbi
    Регистрация
    06.06.2013
    Адрес
    г. Москва
    Сообщений
    237
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    интересно а зачем для спектрума такой изврат ???
    я просто отрезал внутренний контроллер и припаялся напрямик к кнопкам - все
    хоть синклер хоть кемпстон.... что хочешь.
    Зачем глаз через зад оперировать?

  2. #12
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,933
    Спасибо Благодарностей отдано 
    78
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    115 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну дык резать то оно всегда лехче, чем отмеривать -)) Просто бывает удобно юзать джойстик денди по прямому назначению, то есть подключая его непосредственно в денди. А когда нужно, в спек. Универсальность короче сохраняется.

  3. #13
    Member Аватар для Raven
    Регистрация
    05.04.2010
    Адрес
    Наро-Фоминск
    Сообщений
    123
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А я в юности решил вопрос радикально
    И платка с разъемом цела, и спектрумист доволен
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	KempPad3.jpg 
Просмотров:	453 
Размер:	43.8 Кб 
ID:	44170   Нажмите на изображение для увеличения. 

Название:	KempPad1.jpg 
Просмотров:	454 
Размер:	81.2 Кб 
ID:	44171  

  4. #14
    Member Аватар для Lapu-Leen
    Регистрация
    11.05.2019
    Адрес
    г. Углич
    Сообщений
    89
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Всех С Наступающим!

    В свете выхода новой игры Delta's Shadow имеющей возможность использования 8-ми кнопочного Kempston, возникло желание задействовать в своём Пентагоне ранее свободные линии этого интерфейса. А дабы не встраивать в корпус разъём DB9 решил подключить джойстик Dendy через переходник DB9 -> ОНЦ-ВГ-4-5-16В и плату Arduino Nano. В инете нашёл несколько примерно одинаковых скетчей считывающих данные о нажатие кнопок и отправляющих готовый байт в COM порт, собственно на их базе и был написан мой вариант скетча. К слову, ни один из скетчей не заработал с продающимися в магазинах новодельными джойстиками для Dendy, просматривая сигналы на логическом анализаторе понял, что необходима пауза в 10-20мс между пакетами сигналов Clock и Latch, с добавленной задержкой между опросами джойстик начал выдавать биты состояния кнопок. Что бы не отвыкать от привычного управления ( в Delta's Shadow на кнопке "Огонь" стоит "Прыжок") сделал две переключаемых конфигурации кнопок, переключение между ними комбинациями кнопок: "START" + "Вверх" обратное переключение "START" + "Вниз". Схема подключения я думаю будет понятна из комментариев в скетче.

    Скрытый текст

    #include <Arduino.h>

    const int data = 2;
    const int latch = 3;
    const int clock = 4;

    const int TICK = 12;
    bool up1=true;
    bool up2=true;
    bool mode=false; // переключатель конфигурации джойстика

    void init_joystick(int data, int latch, int clock)
    {
    pinMode(data, INPUT);
    pinMode(clock, OUTPUT);
    pinMode(latch, OUTPUT);
    pinMode(5, OUTPUT); // D4 кнопка А
    pinMode(6, OUTPUT); // D5 кнопка B
    pinMode(7, OUTPUT); // D6 кнопка C
    pinMode(8, OUTPUT); // D7 кнопка START
    pinMode(9, OUTPUT); // D3 кнопка вверх
    pinMode(10, OUTPUT); // D2 кнопка вниз
    pinMode(11, OUTPUT); // D1 кнопка влево
    pinMode(12, OUTPUT); // D0 кнопка вправо


    digitalWrite(clock, HIGH);
    }

    int get_keys_state_joystick(int data, int latch, int clock)
    {


    digitalWrite(latch, LOW);
    digitalWrite(clock, LOW);

    digitalWrite(latch, HIGH);
    delayMicroseconds(TICK);
    digitalWrite(latch, LOW);

    int keys_state = 0;

    for (int i = 0; i < 8; ++i) {



    keys_state += digitalRead(data) * (1 << i);

    digitalWrite(clock, HIGH);
    delayMicroseconds(TICK);
    digitalWrite(clock, LOW);
    delayMicroseconds(TICK);


    }

    delayMicroseconds(10000);
    return keys_state;
    }

    void setup()
    {
    init_joystick(data, latch, clock);


    }

    void loop()
    {

    int bit_STATE = get_keys_state_joystick(data, latch, clock);

    if ( bitRead((bit_STATE), 4)!=true & bitRead((bit_STATE), 3)!=true)

    {
    mode= true;
    }

    if ( bitRead((bit_STATE), 3)!=true & bitRead((bit_STATE), 5)!=true)

    {
    mode= false;
    }




    // кнопка A огонь
    if( bitRead((bit_STATE), 0))
    {
    if ( mode)
    {
    digitalWrite(8, HIGH);

    }
    else
    {
    digitalWrite(5, HIGH);
    }
    }
    else
    {
    if ( mode)
    {
    digitalWrite(8, LOW);

    }
    else
    {
    digitalWrite(5, LOW);
    }

    }



    //кнопка B прыжок c дублированием кнопки вверх если mode не активен

    if( bitRead((bit_STATE), 1))
    {
    if(mode)
    {
    digitalWrite(5, HIGH);

    }
    else
    {
    up2=true;
    }

    }
    else
    {
    if(mode)
    {
    digitalWrite(5, LOW);
    }

    else
    {
    up2 = false;
    }
    }






    //кнопка С смена костюма
    if( bitRead((bit_STATE), 2))
    {
    digitalWrite(6, HIGH);


    }
    else
    {
    digitalWrite(6, LOW);

    }



    // кнопка START пауза/ выход
    if( bitRead((bit_STATE), 3))
    {
    digitalWrite(7, HIGH);


    }
    else
    {
    digitalWrite(7, LOW);

    }



    // кнопка вверх
    if( bitRead((bit_STATE), 4))
    {
    up1=true;


    }
    else
    {
    up1=false;

    }


    if((mode&up1!=true)|(mode!=true&up1!=true|up2!=true ))
    {
    digitalWrite(9, LOW);
    }
    else
    {
    digitalWrite(9, HIGH);
    }


    // кнопка вниз

    if( bitRead((bit_STATE), 5))
    {
    digitalWrite(10, HIGH);


    }
    else
    {
    digitalWrite(10, LOW);

    }

    //кнопка влево
    if( bitRead((bit_STATE), 6))
    {
    digitalWrite(11, HIGH);


    }
    else
    {
    digitalWrite(11, LOW);

    }

    //кнопка вправо
    if( bitRead((bit_STATE), 7))
    {
    digitalWrite(12, HIGH);


    }
    else
    {
    digitalWrite(12, LOW);

    }


    }
    [свернуть]


    Последний раз редактировалось Lapu-Leen; 31.12.2020 в 22:51.
    "Робик"
    "Ленинград 48К"
    "Пентагон-48К"
    "Пентагон-128К" +AY+Kempston+ FDD эмулятор
    "Atari 65XE"+SIO2Arduino+AstartA

Страница 2 из 2 ПерваяПервая 12

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

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

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

Похожие темы

  1. Это Денди?
    от Atari в разделе Nintendo
    Ответов: 19
    Последнее: 25.03.2011, 17:38
  2. Джойстик для MSX
    от geners в разделе MSX
    Ответов: 13
    Последнее: 25.04.2009, 03:20
  3. Джойстик для C64
    от AlexBel в разделе Commodore 16/64/128
    Ответов: 14
    Последнее: 30.11.2008, 20:36

Ваши права

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