Передать к компьютеру Scan-code CTRL по Atmega8515 по PS2

Тема в разделе "Микроконтроллеры AVR", создана пользователем Logika, 30 май 2019.

Метки:
  1. Logika

    Logika Нерд

    Здравствуйте, задача передать компьютеру код клавиши CTRL когда отпускаю клавишу. С начало питаюсь передать нажатия клавиши (она требует только один байт ) но пока без результативно.
    Использую простой код для генерации импульсов (задержка циклический). Кабель рабочий несклько раз проверил ))/
    Код (C++):
        /*
            28.05.2019 Create PS2
            Athor Malkhazi
        */


        #define F_CPU 8000000L
        #include <avr/io.h>
        #include <util/delay.h>
        //#include <avr/interrupt.h>
        #include <C:/WinAVR-20100110/lib/gcc/avr/4.3.3/include/stdbool.h>


        #define CLK   PA0
        #define DATA  PA1
        #define LED   PD7

       
          unsigned int delay =  50;                                         // delay
          volatile unsigned char t10  =  0b1100010001;        // 17  h
          volatile unsigned int ctr  =  0b1100010100;            // 20  h14 00010100
          volatile unsigned int sbros = 0b1110101010;         // reset

        //=========== own functions declare ===========
            void init(void);
            void sendByte(unsigned char shift, unsigned int d);
            void repear(void);
            void go(unsigned int t);

        //----------- END OWN FUNCTIONS ------

        //=========== interrupts ============
        //-------- END INTERRUPTS -----------
       
        int main(void){
            init();
       
            while(1){

         /*----if pressed button then send byte----*/          
            if( (PIND>>0) ){

                    PORTD |= (1<<LED);

                    _delay_ms(1000);
                   
                    repear();
                    go(ctr);  

                    PORTA = 0xFF;



                    PORTD &= ~(1<<LED);
                   
                } //end if

            } // END LOOP BASIC
        return 0;
        }

        //---------------
        void init(void){
            // PORT

            /*---setting for send data---*/
            DDRA = 0xFF;        
            PORTA = 0xFF;

            /*---Before Sending turn on Led-----*/
            DDRD = 0xFF;
            PORTD = 0x00;
       
        }// end init


    //================================================================================

        /*---Set High or low------*/
        void sendByte(unsigned char shift, unsigned int d){
            if ( (d>>shift) & 1 ){
                PORTA |= (1<<DATA);  // shift right if True set PIN OUT 1
            }else{
                PORTA &= ~(1<<DATA); // if False set PIN POT  0      
            }
            _delay_us(5);            // delay
            return;
       
        }//END

        /*---PIN data goes LOW and read this bit -----*/
        void repear(void){

            PORTA &= ~(1<<DATA);      // DATA PIN Low
            _delay_us(delay);                // delay    
            PORTA &= ~(1<<CLK);        // CLK PIN LOW
            _delay_us(delay);                // delay
            PORTA |= (1<<CLK);           // CLK PIN HIGH
            _delay_us(delay);               // delay again
            return;
        }//END


        /*-----------*/
        void go(unsigned int t){

            for (unsigned char k = 0; k < 10; k++){
                    sendByte(k, t);
               
                    /*-----after set DATA PIN OUT read this bit------*/
                    PORTA &= ~(1<<CLK);
                    _delay_us(delay);
                    PORTA |= (1<<CLK);
                    _delay_us(delay);      
            }
            return;  
        }//end
     
     

    Вложения:

    • sendByte.jpg
      sendByte.jpg
      Размер файла:
      281,3 КБ
      Просмотров:
      416