IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VHDL Discussion :

Interface clavier PS/2


Sujet :

VHDL

  1. #1
    Candidat au Club
    Homme Profil pro
    Hobbyist
    Inscrit en
    Mars 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Hobbyist

    Informations forums :
    Inscription : Mars 2015
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Interface clavier PS/2
    Bonjour à tous

    Je suis en train de reconstruire un ordinateur 8bit des années 80 et j'aurais besoin d'un coup de main pour la partie FPGA.
    http://www.fabf.fr/index.html
    Malheureusement je ne suis pas doué en VHDL et je déteste sa syntax

    J'ai actuellement une interface PS/2 qui fonctionne sur mon DE1 mais qui ne permet pas d'être reliée comme telle à la machine.
    En effet lors de l'appuie sur une touche l'interface renvoie le code (là tout est normal)
    Si je relâche la touche l'interface renvoie F0 puis à nouveau le code de la touche.

    Ce dont j'aurais besoin c'est que le programme me renvoie "11111111" lorsque la touche est relâchée.

    Voici les fichiers que j'utilise, si une bonne âme pouvait m'aider, merci par avance.
    keyboard.rar

  2. #2
    Futur Membre du Club
    Homme Profil pro
    rêveur
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : rêveur

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    L’entité vhdl ps2_keyboard dont tu donne le code ne s’occupe absolument pas des mots qui circulent sur l’interface. Sont seul rôle est de dé-sérialisé les données.

    Sinon, dire que «*l’interface renvoi…*» n’a pas beaucoup de sens, une interface ne renvoi rien du tout. C’est ton clavier qui se comporte comme ça.

    Je ne comprend pas bien ton setup, tu parle de PS2, de DE-1, de «*la machine*», sans expliciter qui fait quoi et comment. Un peu de détail sur ce que tu essayes de faire aiderait sans doute à y voir plus clair.

  3. #3
    Membre actif Avatar de cedd70
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Mars 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 154
    Points : 263
    Points
    263
    Par défaut
    Tu oublieras pas déclarer la variable ps2_code_tmp ( de la même façon que ps2_code).
    Ca devrait marcher
    Mais le problème tu ne peux pas appuyer deux fois sur la même touche .. avec le code la

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    --determine if PS2 port is idle (i.e. last transaction is finished) and output result
      PROCESS(clk)
      BEGIN
        IF(clk'EVENT AND clk = '1') THEN           --rising edge of system clock
     
          IF(ps2_clk_int = '0') THEN                 --low PS2 clock, PS/2 is active
            count_idle <= 0;                           --reset idle counter
          ELSIF(count_idle /= clk_freq/18_000) THEN  --PS2 clock has been high less than a half clock period (<55us)
              count_idle <= count_idle + 1;            --continue counting
          END IF;
     
          IF(count_idle = clk_freq/18_000 AND error = '0') THEN  --idle threshold reached and no errors detected
            ps2_code_new <= '1';                                   --set flag that new PS/2 code is available
    	if (ps2_word(8 DOWNTO 1) =x"F0") then
    		ps2_code<=x"FF";
    	elsif (ps2_word(8 DOWNTO 1) = ps2_code_tmp) then
    		ps2_code  <= x"FF";
    	else
    		ps2_code_tmp<=ps2_word(8 DOWNTO 1);
            	ps2_code <= ps2_word(8 DOWNTO 1);                      --output new PS/2 code
    	end if;
          ELSE                                                   --PS/2 port active or error detected
            ps2_code_new <= '0';                                   --set flag that PS/2 transaction is in progress
          END IF;
     
        END IF;
      END PROCESS;

  4. #4
    Membre actif Avatar de cedd70
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Mars 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 154
    Points : 263
    Points
    263
    Par défaut
    Le code la fonctionne tout le temps normalement
    Le x"F0" est important pour la machine ? Car il ne sera pu affiché


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
      PROCESS(clk)
      BEGIN
        IF(clk'EVENT AND clk = '1') THEN           --rising edge of system clock
     
          IF(ps2_clk_int = '0') THEN                 --low PS2 clock, PS/2 is active
            count_idle <= 0;                           --reset idle counter
          ELSIF(count_idle /= clk_freq/18_000) THEN  --PS2 clock has been high less than a half clock period (<55us)
              count_idle <= count_idle + 1;            --continue counting
          END IF;
     
          IF(count_idle = clk_freq/18_000 AND error = '0') THEN  --idle threshold reached and no errors detected
            ps2_code_new <= '1';                                   --set flag that new PS/2 code is available
    	if (ps2_word(8 DOWNTO 1) = x"F0") then
    		ps2_code<=ps2_code_tmp;  
    	else
    		ps2_code_tmp<=ps2_word(8 DOWNTO 1);
    		ps2_code<= x"FF";
    	end if;
          ELSE                                                   --PS/2 port active or error detected
            ps2_code_new <= '0';                                   --set flag that PS/2 transaction is in progress
          END IF;
     
        END IF;
      END PROCESS;

Discussions similaires

  1. [Python 3.X] Détecter la pression de touches du clavier SANS interface graphique.
    Par AlexMazAlex dans le forum Programmation multimédia/Jeux
    Réponses: 0
    Dernier message: 17/06/2015, 14h19
  2. [Débutant] Contrôle clavier interface visual studio et arduino
    Par stvv10 dans le forum VB.NET
    Réponses: 9
    Dernier message: 20/05/2015, 20h15
  3. Saisie clavier sur une interface
    Par Latimer dans le forum EDT/SwingWorker
    Réponses: 2
    Dernier message: 01/05/2014, 11h49
  4. interface vers un clavier MIDI
    Par pierre.castellotti dans le forum Général Python
    Réponses: 4
    Dernier message: 11/12/2012, 21h35
  5. Evenement clavier sur toute l'interface
    Par Guybrush dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 08/02/2005, 12h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo