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

User Tag List

Страница 23 из 23 ПерваяПервая ... 1920212223
Показано с 221 по 222 из 222

Тема: PS/2 адаптер клавиатуры для Специалиста

  1. #221
    Пользователь Специалиста Аватар для fifan
    Регистрация
    30.05.2007
    Адрес
    г. Лянтор, Сургутского р-на, ХМАО
    Сообщений
    3,619
    Благодарностей: 728
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я думаю нужно снять видео чтоб все меня поняли. Я написал не моргание при нажатии клавиши, а вообще глюк с морганием почти всего поля. Глюк идёт несмотря на то, что ни одна клавиша не нажата.
    https://nick-name.ru/forum/Fifan.gif
    Сайт про ПК "Специалист" и его клоны http://www.spetsialist-mx.ru/
    Web site about computer Spetsialist and its clones http://www.spetsialist-mx.ru/ (yet only in Russian)

  2. #222
    Member Аватар для Serg6845
    Регистрация
    30.12.2018
    Адрес
    г. Москва
    Сообщений
    104
    Благодарностей: 23
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от fifan Посмотреть сообщение
    Переместил исходники проекта на свой сайт.
    кстати - собрал адаптер, выяснил что из 6 имеющихся клавиатур работают две. полез в исходники, нашел пару багов в части работы с железом PS/2.
    собственно вот:

    //---------------------------------------------------------------------------
    // Низкоуровневые функции протокола PS/2

    #define ps2_setClock0() { PORTD.PS2_CLOCK = 0; prepared_ddrd |= (1 << PS2_CLOCK); DDRD.PS2_CLOCK = 1; }
    #define ps2_setClock1() { prepared_ddrd &= ~(1 << PS2_CLOCK); DDRD.PS2_CLOCK = 0; }

    // DataIn и DataOut не нужны - выходы с ОК, 0==Out, In==1
    #define ps2_setData0() { PORTD.PS2_DATA = 0; prepared_ddrd |= (1 << PS2_DATA); DDRD.PS2_DATA = 1; }
    #define ps2_setData1() { prepared_ddrd &= ~(1 << PS2_DATA); DDRD.PS2_DATA = 0; }

    //#define ps2_setData0() { PORTD.PS2_DATA = 0; }
    //#define ps2_setData1() { PORTD.PS2_DATA = 1; }

    #define ps2_waitClock0() { while(PIND.PS2_CLOCK); }
    #define ps2_waitClock1() { while(PIND.PS2_CLOCK==0); }
    #define ps2_waitClock() { ps2_waitClock1(); ps2_waitClock0(); }
    #define ps2_data() PIND.PS2_DATA
    #define ps2_wait() (PIND.PS2_DATA || PIND.PS2_CLOCK)

    и вот:

    // Отправить байт клавиатуре
    // Вход: v_a - байт

    void ps2_send() {
    // ps2_setDataOut();
    ps2_setData0();
    delay_us(20);
    ps2_setClock1();
    delay_us(10);
    v_j=0;
    ps2_waitClock0();
    for(v_i=0; v_i<8; v_i++) {
    delay_us(10);
    if(v_a&1) { ps2_setData1(); v_j++; } else ps2_setData0();
    v_a >>= 1;
    ps2_waitClock();
    #asm
    WDR
    #endasm
    }
    // Бит четности
    delay_us(10);
    if(v_j&1) { ps2_setData0(); } else { ps2_setData1(); }
    ps2_waitClock();
    // Стоповый бит
    delay_us(10);
    ps2_setData1();
    ps2_waitClock();

    // Пропуск ACK
    // ps2_setDataIn();

    // Лишний waitClock, из-за него не работали старые клавы
    // ps2_waitClock();

    if(ps2_data()) reboot(); // Ошибка клавиатуры. Перезагружаем её.
    ps2_waitClock1();
    ps2_transmitMode();
    #asm
    WDR
    #endasm
    }

  3. Этот пользователь поблагодарил Serg6845 за это полезное сообщение:
    perestoronin (02.01.2019)

Страница 23 из 23 ПерваяПервая ... 1920212223

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

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

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

Похожие темы

  1. Ответов: 143
    Последнее: 02.01.2017, 21:51
  2. Адаптер Z80->ZX-BUS
    от zst в разделе Unsorted
    Ответов: 12
    Последнее: 05.10.2011, 11:35
  3. CD адаптер
    от alexsan в разделе БК-0010/0011
    Ответов: 2
    Последнее: 12.09.2011, 20:54
  4. Изучается спрос на плату для Специалиста
    от Павел Рябцов в разделе Барахолка (архив)
    Ответов: 109
    Последнее: 30.11.2010, 11:16
  5. Продается Лик (клон Специалиста)
    от KALDYH в разделе Барахолка (архив)
    Ответов: 1
    Последнее: 20.02.2010, 15:29

Ваши права

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