Микроконтроллер и компьютерная клавиатура (Урок 2)

Поділитися
Вставка
  • Опубліковано 8 бер 2017
  • Тема: работа протокола PS/2, прием данных на микроконтроллер аvr. Принимаем данные с клавиатуры на микроконтроллер, программа написана в Atmel Studio 6.2 на си. Урок для начинающих с подробными и наглядными объяснениями.
    Программа для микроконтроллера -diysamodelki.ru/images/Klava_O...
    Разъём PS/2 6 P Mini DIN - ali.pub/jmx02
    Переходник для клавиатуры USB на RS/2 - ali.pub/5429q

КОМЕНТАРІ • 53

  • @user-jr9of3jl5x
    @user-jr9of3jl5x 7 років тому

    Спасибо за Ваш труд, Александр. Очень интересно и грамотно... Ещё раз спасибо, ждем продолжения :)

  • @sound_cloud2752
    @sound_cloud2752 5 років тому

    Спасибо за отличные уроки!

  • @Ganch26
    @Ganch26 7 років тому

    коротко и понятно, класс!

  • @_Iokanaan_Marusidze_
    @_Iokanaan_Marusidze_ 7 років тому

    Можете указать ссылки на материалы которыми вы руководствовались при подготовке предыдущего и этого урока по оной теме ?
    заранее благодарю !

  • @supercelt3
    @supercelt3 7 років тому

    Очень интересный урок, спасибо! А в каких например своих устройствах можно применить клава + МК?

    • @user-mj8ux1bn2c
      @user-mj8ux1bn2c  7 років тому

      Когда есть большое меню настроек. Нужно прописывать имена датчикам, послать SMS c gsm модуля и т.д.

  • @ruslankovtun6584
    @ruslankovtun6584 4 роки тому

    Передача данных очень похожа на i2c интерфейс который есть апарратно встроенным в атмега, для сложных проэктов изучайте stm32, за такие же деньги как атмел вы получаете больше частоту и портов.

  • @NIKOLAY_PSHONIA
    @NIKOLAY_PSHONIA 7 років тому

    Александр спасибо за ваш труд, все ваши уроки смотрю/учу. Возможно для некоторых будет не понятно почему
    первый CASE 11. потом 0-7, 8, 9. Я разобрался. CASE 10 - не используется (есть протоколы 2 стоповых бита).

    • @user-mj8ux1bn2c
      @user-mj8ux1bn2c  7 років тому

      Самое главное что поняли ), но можно и по другому все реализовать, это только пример.

    • @NIKOLAY_PSHONIA
      @NIKOLAY_PSHONIA 7 років тому

      Я к тому что новичкам бывает трудно понять логику - просьба рассказывайте по подробнее.

    • @user-es5td5sp6h
      @user-es5td5sp6h 7 років тому

      Вы говорите, "когда данные чётные-нулевой бит всегда установлен в 1".
      Но например чётное число 4=b00000100.Поясните пожалйста

    • @user-mj8ux1bn2c
      @user-mj8ux1bn2c  7 років тому

      5:15 все же объяснил. Число 4, бит 0 в 0, четное число это 0.

    • @user-es5td5sp6h
      @user-es5td5sp6h 7 років тому

      мне не совсем понятна правильность этих строчек
      case 8:
      if (PIND & (1

  • @user-tc7bp3ke6x
    @user-tc7bp3ke6x 7 років тому +1

    Александр здраствуйте) БЛагодарю вас за ваши уроки,именно они были первыми в освоении микроконтроллеров) Всегда просматривал ваши уроки не регистрируясь. Начал собирать светодиодную бегущую строку,все без проблем,пока не решил что надо сделать ввод символов с компьютерной клавиатуры,появились проблемы,не получается реализовать. Взял ваш код и попробовал реализовать на atmega 8,все подогнал под нее,кроме кварца,его я заменил на 8мгц внутресхемный. Выставил фьюзы ,в коде дописал через дефайн частоту. Не работает. Менял три клавиатуры,к линиям clok и dan припаивал подтягивающие резисторы,чего у вас на схеме нет...вобщем много чего перепробовал,в коде светодиоды выводил в приеме стопового бита,при нажатии на любую клавишу он загорался,а в бесконечном цикле к default выставлял другой светодиод,он загорается сразу даже без клавы(все верно так как программа выполняет действия). Замучался и решил зарегатся и обратится к вам за помощью,возможно то что я хочу ваш код который писали для 16 меги не катит на 8 мегу,вобщем не прокатит,подскажите пожалуста,может я туплю в чем то мелочном(и как может оказатся важном). Буду очень благодарен если выделите время для чайника . Столько прошел,и вот на финише такой гоп стоп(

    • @user-mj8ux1bn2c
      @user-mj8ux1bn2c  7 років тому

      Я не использую атмегу 8 и за отсутствия отладчика в ней. Но если вы все прерывания подправили, должно все работать. Попробуйте поработать с atmega16, программа рабочая.

    • @user-tc7bp3ke6x
      @user-tc7bp3ke6x 7 років тому

      Настройка прерываний идентичны,вплоть до пина. 16 меги нет. Что программа рабочая не сомневаюсь,я с++ изучал ,дописал в начале прототип функции и все. Но почему не работает не понятно. Думал клава может выделывается,три пробовал без измен... Народ на тинке 2313 такое проделывает,но там на бейсике пишут,подробно,но блин языка не знаю. А вы в своих сборках подтягивающие резисторы используете по 4 кОм для связи клавы с контроллером?

    • @user-mj8ux1bn2c
      @user-mj8ux1bn2c  7 років тому

      Резисторы не использую

    • @user-tc7bp3ke6x
      @user-tc7bp3ke6x 7 років тому

      Спасибо) Буду пробовать другие коды)

  • @kirillv6255
    @kirillv6255 5 років тому

    Подскажите пожалуйста, я не совсем понял как реализуется передача скан-кода состоящего из нескольких байт? Каждый байт передается по отдельности? Например, правый Ctrl имеет скан-код E0 14. При нажатии передается: стартовый бит, E0, бит четности, стоп, затем опять стартовый бит, 14, бит четности, стоп? Или же два байта передаются за одну посылку: старт, E014, бит четности, стоп.

    • @kirillv6255
      @kirillv6255 5 років тому

      На свой глупый вопрос отвечаю сам, вдруг кому понадобится. :-)
      Каждый байт пересылается по отдельности, стартовый бит, 8 бит данных, бит контроля четности и стоповый бит. И так для каждого байта в посылке.

  • @victorsi1992
    @victorsi1992 6 років тому +1

    Ссылка на сайт с проектом, не работает.

  • @alexpavlov7495
    @alexpavlov7495 7 років тому

    добрый день. Можно ли реализовать передачу данных на SPI интерфейсе?

    • @user-mj8ux1bn2c
      @user-mj8ux1bn2c  7 років тому

      Клавиатуры нет, а так можно.

  • @user-ms2tw1vp4k
    @user-ms2tw1vp4k 4 роки тому

    Проверка бита четности вызывает вопросы. По сути если бит четности не совпадает то необходимо остановить процесс приема данных и направить запрос на повтор передачи последнего бита. А в программе данный момент упущен.

  • @user-ms2tw1vp4k
    @user-ms2tw1vp4k 4 роки тому

    Вопрос к более опытным программистам. Возможно ли написание данной программы не в Atmel Studio на языке Си, а в Arduino (IDE)? Или я затеял не возможное? Если не возможно, то почему?

    • @user-mj8ux1bn2c
      @user-mj8ux1bn2c  4 роки тому +1

      Конечно можно писать на си а в Arduino . Более того, в Atmel Studio 7 ,Arduino встроенная

    • @user-ms2tw1vp4k
      @user-ms2tw1vp4k 4 роки тому

      @@user-mj8ux1bn2c просто столкнулся с проблемой. При работе с digitalRead не все биты считываются. Бывают пропуски. Заместо 11 бит получаю 9-10.
      Думаю есть смысл на прямую к портам обращаться.

  • @evgenyye
    @evgenyye 7 років тому +4

    а насколько сложнее создать аналагичную систему на usb?

    • @user-mj8ux1bn2c
      @user-mj8ux1bn2c  7 років тому +3

      Я не пробывал, но в ближайшее время такой проект предстоит реализовать.

    • @lunokhodtoy
      @lunokhodtoy 5 років тому

      Намного, ардуинка такого даже не осилит.

  • @vladimirluckin5459
    @vladimirluckin5459 6 років тому

    case 0 ... 7:
    temporary_data_keyboard=temporary_data_keyboard>>1; // битовый сдвиг в право
    if (PIND &(1

  • @user-if1pj2kk2q
    @user-if1pj2kk2q 4 роки тому

    Где программа для микроконтроллера???

  • @user-ms2tw1vp4k
    @user-ms2tw1vp4k 4 роки тому

    Ссылка для скачивания программы не доступна. :(. Возможно её включить в комментарий?

    • @user-mj8ux1bn2c
      @user-mj8ux1bn2c  4 роки тому +1

      Нужно посмотреть осталось программа, если да то ссылку обновлю

    • @user-ms2tw1vp4k
      @user-ms2tw1vp4k 4 роки тому

      @@user-mj8ux1bn2c комментарии дольше хранятся

  • @IvannZ_Ru
    @IvannZ_Ru 3 роки тому

    кто может скинуть код

  • @MrKr1k
    @MrKr1k 7 років тому

    А что будет, если клавиатура подключена до того как контроллер запущен?

    • @user-mj8ux1bn2c
      @user-mj8ux1bn2c  7 років тому

      Не будет ответа 0xAA

    • @MrKr1k
      @MrKr1k 7 років тому

      Александр, а можно ли тогда узнать подключена ли клавиатура?

    • @user-mj8ux1bn2c
      @user-mj8ux1bn2c  7 років тому +1

      Да, есть команда, в следующем уроке рассмотрим.

  • @jimvideo1651
    @jimvideo1651 2 роки тому

    чуть мозг не треснул ))

  • @user-tc7bp3ke6x
    @user-tc7bp3ke6x 7 років тому

    Народ кто пробовал код интегрировать в атмегу8?
    Решил проверить 0хАА приходящий от клавы проверяя каждый бит, накопировал
    case 0,case 1,case 2 и т.д
    case 0 ... 7: // принимаем 8 бит данных
    if (PIND & (1

  • @user-ms2tw1vp4k
    @user-ms2tw1vp4k 4 роки тому

    Написал скетч для Arduino Uno. Может кому пригодится?
    /*
    * Программа по обработке компьютерной клавиатуры.
    * 5-DIN PS\2
    * +5 В. - питание плюс - коричневый провод - красный провод.
    * GND. - питание минус - серый провод - коричневый провод.
    * Rx. - выход тактового генератора - желтый провод - желтый провод.
    * Tx. - данные - красный провод - серый провод .
    */
    volatile unsigned char action_int = 10; // Счетчик текущего бита.
    volatile unsigned char bit_action=1; // Текущее состояние линии данных
    volatile unsigned char simvol; // Выводимый символ
    volatile unsigned char simvol1; // Записываемый символ
    volatile boolean bit_chet=1; // Бит четности
    volatile boolean chet=0; // Результат получения байта
    volatile int Rx = 2; // CLK - Линия тактовых импульсов
    volatile int Tx = 3; // Data - Линия данных
    void setup() {
    // начальные разовые настройки:
    Serial.begin(9600);
    pinMode(Rx, INPUT);
    pinMode(Tx, INPUT);
    digitalWrite(Rx, HIGH);
    digitalWrite(Tx, HIGH);
    delay(1000);
    Serial.println("START");
    attachInterrupt(0, keyboard_input, FALLING);
    }
    void loop()
    {
    if (simvol > 0)
    {
    Serial.print(chet);
    Serial.print(" - ");
    Serial.println(simvol, HEX);
    simvol = 0;
    }
    }

    void keyboard_input()
    {
    bit_action = digitalRead(Tx);
    switch (action_int)
    {
    case 10: // обработка стартового бита
    if (bit_action == 0)
    {
    action_int = 0;
    bit_chet = HIGH;
    }
    break;
    case 0 ... 7: //Прием восьми бит
    if (bit_action == 1)
    {
    bit_chet = !bit_chet; //Счет бита четности
    simvol1 |= (1

  • @user-dx8jv6uf9v
    @user-dx8jv6uf9v 2 роки тому

    Сопли жуёт все видео