adaptateur souris DB9 < Atmega (arduino) > ps2
11 sujets de 1 à 11 (sur un total de 11)
-
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
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
Les photos du proto et du schema (en espérant que ca passe j’arrive pas à mettre des images en attache
Attachments:
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:
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Ç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 :
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