adaptateur souris DB9 < Atmega (arduino) > ps2

11 sujets de 1 à 11 (sur un total de 11)

  • darkmiky

      #208868

      Bonsoir la communauté amiga.

      J’ai codé et je me suis fabriqué un adaptateur souris ps2 pour amiga (à base d’atmega 328p) en ayant une vingtaine en stock.

      L’adaptateur et le code ne sont pas nickel, car je suis parti au hasard (le nom ds routine par exemple est inversé dans le code, et le code n’est pas commenté) . Toujours est il, il fonctionne bien mieux (vive l’optique), que mes souris à boule amiga d’origine. J’en ai fait trois, et cela me convient.

      Je voulais savoir si vous étiez intéressé par le code et le schéma, que je vous le mette à dispo. (il faut que je fasse un schéma propre de la platine)

      L’atmega est programmé sur une board arduino, et ensuite il est posé en indépendant sur un pcb (de test).

      Il suffit d’un quartz 16Mhz, deux condensateurs 10 nF, un atmega 16 ou 32, un db9 mâle, un ps2 femelle. (4Euros de matériel, morceau de pcb compris)

      Il ne fonctionne cependant qu’avec les souris compatible ps2 (donc toutes les ps2 même sans fils) et les usb supportant le protocole ps2.

      Si vous êtes intéressé, je tacherai de mettre sur ce poste le code (grâce à la lib ps2 d’arduino) ainsi qu’un schéma de brochage direct (juste de l’atmega, donc sans l’arduino.)

      Cordialement

      Marco

        #209492

        Merci !

        Je serai interesse’ au code + brochage des AT Mega

        Cordialment,

         

        Marco

         

         

         

        Patrice

          #209493

          Tres intéressé bravo

          Faites l'amour pas la vaisselle

          darkmiky

            #209541

            bonsoir,

            je vais essayer de vous joindre les photos de l’adaptateur, de son schéma fait main, et un fichier texte contenant le code pour l’arduino

            concernant l’arduino j’ai utilisé un quartz externe en horloge, mais pour ceux qui ont un bootloader sur horloge interne, le quartz et les condensateurs ne sont pas obligatoire

            cordialement

            mike

            darkmiky

              #209542

              Les photos du proto et du schema (en espérant que ca passe j’arrive pas à mettre des images en attache

               

               

               

              Attachments:

              darkmiky

                #209547

                et le code (il vous faut la lib arduino ps2) testé sur la version 10.5 arduino (désolé ca ne passe pas non plus en fichier joint)

                *************code***************

                #include <ps2.h>

                /*
                * Pin 5 data pin PS2, pin 6 clock pin PS2
                */
                PS2 mouse(6, 5);

                const int AmHPin = 13;
                const int AmHQPin = 12;
                const int AmVPin = 11;
                const int AmVQPin = 10;
                const int AmB1 = 9;
                const int AmB2 = 8;
                const int AmB3 = 7;

                void HGau() {
                digitalWrite(AmHPin, HIGH);
                digitalWrite(AmHQPin, HIGH);
                digitalWrite(AmHPin, LOW);
                digitalWrite(AmHQPin, LOW);

                }

                void HDrt() {
                digitalWrite(AmHQPin, HIGH);
                digitalWrite(AmHPin, HIGH);
                digitalWrite(AmHQPin, LOW);
                digitalWrite(AmHPin, LOW);

                }

                void Vhaut() {
                digitalWrite(AmVPin, HIGH);
                digitalWrite(AmVQPin, HIGH);
                digitalWrite(AmVPin, LOW);
                digitalWrite(AmVQPin, LOW);

                }

                void Vbas() {
                digitalWrite(AmVQPin, HIGH);
                digitalWrite(AmVPin, HIGH);
                digitalWrite(AmVQPin, LOW);
                digitalWrite(AmVPin, LOW);

                }

                void mouse_init()
                {
                mouse.write(0xff);
                mouse.read();
                mouse.read();
                mouse.read();
                mouse.write(0xf0);
                mouse.read();
                }

                void setup()
                {
                pinMode(AmHPin, OUTPUT);
                pinMode(AmHQPin, OUTPUT);
                pinMode(AmVPin, OUTPUT);
                pinMode(AmVQPin, OUTPUT);
                pinMode(AmB1, OUTPUT);
                pinMode(AmB2, OUTPUT);
                pinMode(AmB3, OUTPUT);

                // Serial.begin(9600);
                // Serial.print(« mikeeeeee »);
                mouse_init();
                }

                void loop()
                {
                char mstat;
                char mx;
                char my;

                mouse.write(0xeb);
                mouse.read();
                mstat = mouse.read();
                mx = mouse.read();
                my = mouse.read();

                // Serial.print(mstat);
                // Serial.print(« \tX= »);
                // Serial.print(mx, DEC);
                // Serial.print(« \tY= »);
                // Serial.print(my, DEC);
                // Serial.println();
                // delay(20); /* twiddle */
                if (mx < 0) {
                HDrt();
                //Serial.print(« mike horiz droit »);
                }

                if (mx > 0) {
                HGau();
                //Serial.print(« mike horiz gauche »);
                }

                if (my < 0) {
                Vhaut();
                //Serial.print(« mike vert haut »);
                }

                if (my > 0) {
                Vbas();
                //Serial.print(« mike vertical bas »);
                }

                if(mstat == 8) {
                digitalWrite (AmB1, HIGH);
                digitalWrite (AmB2, HIGH);
                digitalWrite (AmB3, HIGH);
                // Serial.print(« MIKEEEE 000 »);
                }

                if(mstat == 9) {
                digitalWrite (AmB1, LOW);
                digitalWrite (AmB2, HIGH);
                digitalWrite (AmB3, HIGH);
                // Serial.print(« MIKEEEE 100 »);
                }

                if(mstat == 12) {
                digitalWrite (AmB1, HIGH);
                digitalWrite (AmB2, HIGH);
                digitalWrite (AmB3, LOW);
                // Serial.print(« MIKEEEE 010 »);
                }

                if(mstat == 10) {
                digitalWrite (AmB1, HIGH);
                digitalWrite (AmB2, LOW);
                digitalWrite (AmB3, HIGH);
                // Serial.print(« MIKEEEE 001 »);
                }

                if(mstat == 13) {
                digitalWrite (AmB1, LOW);
                digitalWrite (AmB2, HIGH);
                digitalWrite (AmB3, LOW);
                // Serial.print(« MIKEEEE 110 »);
                }

                if(mstat == 11) {
                digitalWrite (AmB1, LOW);
                digitalWrite (AmB2, LOW);
                digitalWrite (AmB3, HIGH);
                // Serial.print(« MIKEEEE 101 »);
                }

                if(mstat == 14) {
                digitalWrite (AmB1, HIGH);
                digitalWrite (AmB2, LOW);
                digitalWrite (AmB3, LOW);
                // Serial.print(« MIKEEEE 011 »);
                }

                if(mstat == 15) {
                digitalWrite (AmB1, LOW);
                digitalWrite (AmB2, LOW);
                digitalWrite (AmB3, LOW);
                // Serial.print(« MIKEEEE 111 »);
                }

                //Serial.println();

                }

                Attachments:

                darkmiky

                  #209550

                  Hgau, HDrt, Vhaut, Vbas sont les routines pour le mappage de la direction de la souris vers l’amiga, mais elles sont inversées, j’ai pas retouché le code ensuite.
                  J’ai laissé commentée la partie debug en mode sérial, sur la platine arduino, qui me servait à savoir ou j’en étais et si la lecture de la souris ps2 était bonne.

                  En espérant que cela puisse vous servir.
                  Testé sur 1 A500, 2 A600, 1 A1200 et une cd32, aucun soucis.

                  Le troisième bouton devrait logiquement fonctionner (clique molette) mais ne connaissant d’appli amiga qui l’utilise je n’ai pas testé

                  le roulement de la molette lui ne fonctionne pas

                  J’ai fait ce montage que pour pouvoir avoir une souris correct et optique sur amiga, ayant à dispo un bon nombre d’atmega.

                  Tout est libre, je me suis basé sur la library PS2 de l’arduino et de l’article d’obligement décrivant le fonctionnement d’une souris amiga.

                  Cordialement.
                  Mike

                  darkmiky

                    #209570

                    oups petit détails, les prises db9 et ps2 sur le schéma sont vues coté soudure

                    Marco

                      #209582

                      Bravo et merci !

                      J`ai une douzaine de Amtel mega mais dans ce format:

                       

                      Tu peut le flasher ou je trouve un adaptateur ?

                       

                      Amicalment,

                       

                      Marco

                       

                       

                      darkmiky

                        #209583

                        Ça fonctionne aussi si tu le programme d un arduino, suffit de corréler les pin

                        Si tu as un arduino de base (genre arduino duemilanove) tu trouves facilement comment brocher et programmer un arduino sur breadboard

                        L atemga étant le même il suffit juste de brocher correctement

                        Je n ai que de l atmega 2560 dans ce format et il se programme aussi facilement suffit du bon bootloader :

                        Marco

                          #209596

                          Merci Darkmiky pour toutes tes explications.

                          Je vais mequiper pour cercher a lintegrer meme a l`interieur de la souris.

                          Le top c`est de creer un fichier gerbeur pour faire un mini circuit imprimee avec du SMD aufin de faciliter le montage.

                          Amicalment,

                          Marco

                           

                           

                           

                           

                           

                        11 sujets de 1 à 11 (sur un total de 11)

                        • Vous devez être connecté pour répondre à ce sujet.

                        Forums AmigaOS, MorphOS et AROS Matériel adaptateur souris DB9 < Atmega (arduino) > ps2

                        Amiga Impact