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

C Discussion :

[PIC] Compilateur CCS C - initialiser struct bit à bit ?


Sujet :

C

  1. #41
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    Points : 61
    Points
    61
    Par défaut
    Bonjour,

    désolé je n'ai pas beaucoup donné de nouvelle

    j'arrive à recevoir les données de la souris

    je l'affiche meme sur un afficheur lcd.

    en effet pour bloquer la souris

    il faut mettre clk et data en haut comme indiqué sur le pdf que tu m'as passé

    je continue mon developpement

  2. #42
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 23
    Points
    23
    Par défaut
    bonsoir à tous,
    je cherche toujours à faire fonctionner les interruptions détectées sur un port complet (type "#INT_RB") mais je n'arrive pas la faire fonctionner
    j'utilise un 16f690 et voici le code

    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
    28
    29
    30
    31
    32
    33
    #include "C:\Documents and Settings\ph\Bureau\test int1.h"
     
    void main()
    {
     
       setup_adc_ports(NO_ANALOGS|VSS_VDD);
       setup_adc(ADC_OFF);
       setup_spi(FALSE);
       setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
       setup_timer_1(T1_DISABLED);
       setup_timer_2(T2_DISABLED,0,1);
       setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
       setup_oscillator(False);
    enable_interrupts(INT_RB);
       enable_interrupts(GLOBAL);
     
    while(1){
    output_bit(pin_c2,1);
    delay_ms(1000);
    output_bit(pin_c2,0);
    delay_ms(1000);
    }
    }
     
     
    #int_rb
    RB_isr() 
    {
    output_bit(pin_c3,1);
    delay_ms(1000);
    output_bit(pin_c3,0);
    delay_ms(1000);
    }

    est-ce que quelqu'un voit où ça coince??

  3. #43
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Points : 28
    Points
    28
    Par défaut
    Faut au minimum configurer RB<4-7> en entrées pour avoir une int sur RB.

    David.

  4. #44
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 23
    Points
    23
    Par défaut
    comment on fait?
    j'ai trouvé pour mettre en sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #USE fixed_io (B_outputs=PIN_B4, PIN_B7)
    mais si je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #USE fixed_io (B_inputs=PIN_B4, PIN_B7)
    il ne veut pas compiler

  5. #45
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Points : 28
    Points
    28
    Par défaut
    Je ne sais pas comment configurer les registres avec ton compilo...

    Cependant, normalement après un reset tous les ports sont en entrées, mais je ne sais pas comment travail ton compilo. Il vaut mieux repréciser la mise en entrée du port vu que cela ne coûte que deux instructions supplémentaires.

    En principe, un truc du genre "TRISB = 0xFF" doit fonctionner.

    P.S. fait de même pour passer le portc en sortie "TRISC = 0x00", car je ne suis pas certain que "output_bit(pin_c2,1)" configure correctement le registre TRIS

    David.

  6. #46
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    Points : 61
    Points
    61
    Par défaut
    Salut,

    je connais pas le 16f690
    mais ca doit ressembler au 16f628a

    1)
    Faut au minimum configurer RB<4-7> en entrées pour avoir une int sur RB.
    David a totalement raison

    tu as oublié de configuré les portb b en entrée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set_tris_b(0b11111111);
    une petite remarque
    si tu utilises le a et le c (dans le 16f628a, il n'y a que le a et b)

    tu utilises la meme instruction mais tu changes la lettre

    pour le port c c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set_tris_c(0b11111111);
    et pour notre ami david, et aussi pour spitz, vous pouvez utilisez des valeurs hexa donc :


    2)
    je ne suis pas sur à 100%
    mais tu dois définir d'abord le global et ensuite ton interruption specifique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ENABLE_INTERRUPTS(global);
    ENABLE_INTERRUPTS(INT_RB);
    3) ta méthode est mal déclarée :
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #int_rb
    RB_isr() 
    {
    output_bit(pin_c3,1);
    delay_ms(1000);
    output_bit(pin_c3,0);
    delay_ms(1000);
    }
    c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #int_rb
    void rb_isr() 
    {
    output_bit(pin_c3,1);
    delay_ms(1000);
    output_bit(pin_c3,0);
    delay_ms(1000);
    }

    Par contre j'ai avancé
    j'ai réussi à recevoir de la souris les données 0x00 et 0xaa
    et ensuite le pic envoie l'instruction 0xf4 et ma souris répond par un fabuleux 0xfa

    donc ca marche

    yeah

    ps: par contre j'ai fait un code tres sale
    il faut que j'améliore

    si tu veux, je pourrai le passer, ca pourrai t'aider

    a propos quand je t'ai demandé ton code, c'est parce que j'etais bloqué sur un truc con
    j'ai inversé le schema donc j'avais branché les mauvais fils de la souris.
    un truc à la con...

  7. #47
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    Points : 61
    Points
    61
    Par défaut
    encore une remarque

    Cependant, normalement après un reset tous les ports sont en entrées, mais je ne sais pas comment travail ton compilo. Il vaut mieux repréciser la mise en entrée du port vu que cela ne coûte que deux instructions supplémentaires.
    c'est faux (en tout cas avec le compilateur ccs, c'est pas garanti à 100% que les ports soient en entrées au démarrage, c'est aléatoire.

    donc set_tris_x est presque obligatoire

  8. #48
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par branqueira Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set_tris_b(0b11111111);
    Attention, ceci n'est pas du C standard. Le format binaire 0b[01[*]] est une extension de ton compilateur.
    Pas de Wi-Fi à la maison : CPL

  9. #49
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    Points : 61
    Points
    61
    Par défaut
    Citation:
    Envoyé par branqueira
    Code :
    set_tris_b(0b11111111);

    Attention, ceci n'est pas du C standard. Le format binaire 0b[01[*]] est une extension de ton compilateur
    oui oui

    c'est pour cela que le sujet du topic est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [PIC] Compilateur CCS C - initialiser struct bit à bit ?
    d'ailleurs david a fait la remarque à propos du tris

    il a indiqué cela :
    Cela est vrai... mais avec le concurrent de ccs

    il

  10. #50
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par branqueira Voir le message
    encore une remarque



    c'est faux (en tout cas avec le compilateur ccs, c'est pas garanti à 100% que les ports soient en entrées au démarrage, c'est aléatoire.

    donc set_tris_x est presque obligatoire
    Si, c'est garanti à 100% si le programmeur ne joue pas avec le registre TRIS!!!
    Ouvre le datasheet d'un PIC pour t'en convaincre...

    2)
    je ne suis pas sur à 100%
    mais tu dois définir d'abord le global et ensuite ton interruption specifique
    Cela n'a pas d'importance, et fort heureusement...
    Imagine simplement que tu veux bloquer en une instruction toutes les INTs, il suffit simplement d'agir sur le bit GIE, et en une autre instruction tu rétablis toutes les INTs.

    P.S. Je ne programme pas en C, mais post uniquement sur ce forum, vu que le sujet sur le protocole PS2 est intéressant...

    David.

  11. #51
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    Points : 61
    Points
    61
    Par défaut
    Si, c'est garanti à 100% si le programmeur ne joue pas avec le registre TRIS!!!
    Ouvre le datasheet d'un PIC pour t'en convaincre...
    tu as raison

    P.S. Je ne programme pas en C, mais post uniquement sur ce forum, vu que le sujet sur le protocole PS2 est intéressant...
    justement c'est toujours bien d'aller sur d'autres forum, pour avoir d'autres avis

  12. #52
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    Points : 61
    Points
    61
    Par défaut
    Bonjour,

    ca fait un moment que je suis pas venu.

    bilan :
    je recois bien les infos de la souris
    au demarrage.

    par contre bizarrement, je peux qu'envoyer vers la souris
    la commande F4
    pour toutes les autres commandes, je recois que FE
    quelqu'un a une idée

  13. #53
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Points : 28
    Points
    28
    Par défaut
    Salut,

    Gères tu la parité impaire???

    Car la commande H'F4' ne nécessite pas de positionner le bit de parité, vu que la donnée est déjà impaire et donc la réception est correcte côté souris...

    David.

  14. #54
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    Points : 61
    Points
    61
    Par défaut
    en principe oui
    j'ai fait une fonction qui permet de calculer la parité en fonction de l'info.

    mais c'est une piste, je vais verifier cela et je te tiens au courant, on ne sait jamais j'ai peut etre fait une connerie

  15. #55
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    Points : 61
    Points
    61
    Par défaut
    Bonjour,
    j'ai trouvé mon probleme

    et je vous explique
    on ne sait jamais si quelqu'un a le meme probleme

    quand on envoie une commande à la souris

    il n'y a pas de bit de start.

    alors que je l'avais mis

    donc l'octet d'info etait décalé.

    alors pourquoi F4 passait et pas les autres

    parce que si on decale l'info
    F4 devient E8 donc une commande qui existe.

    voila ouf j'ai reussi.
    je merite une pause

  16. #56
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Points : 28
    Points
    28
    Par défaut
    Salut,

    Si, il y a bel et bien un Start bit lors d'une émission en direction de la souris :

    DATA est en sortie et à l'état bas durant minimum 55µS, ce qui représente bel et bien le Start bit...

    Donc, la trame est composée de 11bits -> Start bit - D0 à D7 - Parity - Stop Bit.

    David.

  17. #57
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    Points : 61
    Points
    61
    Par défaut
    Si, il y a bel et bien un Start bit lors d'une émission en direction de la souris :

    DATA est en sortie et à l'état bas durant minimum 55µS, ce qui représente bel et bien le Start bit...

    Donc, la trame est composée de 11bits -> Start bit - D0 à D7 - Parity - Stop Bit.
    ben je suis d'accord avec toi car j'ai une doc qui me dit la meme chose que toi.

    mais j'ai aussi une autre doc pas qui dit le contraire.
    et depuis que j'ai enlever à l'emission en direction de la souris, le bit de start ca marche tres bien

    et j'ai recuperer aussi un code en assembleur c'est pareil pas de bit de start vers la souris

    donc...

  18. #58
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Points : 28
    Points
    28
    Par défaut
    Montre le lien qui indique qu'il n'y a pas de Start bit S.T.P. ...

    Cela fait pas mal de temps que je programme en Assembleur le PS2 (moins la souris, mais c'est la norme PS2...), et je n'ai jamais vu qu'il n'y avait pas de Start bit...

    Pour émettre en direction de la souris, l'unique solution est de forcer à l'état bas CLK et DATA (vu que c'est la souris qui gère CLK) ce qui permet à la souris de savoir que le PC veux émettre une instruction. Si la ligne Data est à l'état bas, c'est le Start bit...

    Si dans ton programme tu enlèves ce Start bit, la souris ne vois plus que tu veux lui envoyer une instruction...

    Donc, si dans ton programme tu enlèves à un endroit un Start bit, c'est qu'ailleurs dans ton programme il existe bel et bien (et donc ton programme est mal debuggé) sinon, impossible d'envoyer une instruction à la souris...

    David.

  19. #59
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    Points : 61
    Points
    61
    Par défaut
    non non
    je te crois
    meme moi je trouve cela bizarre
    tu dois avoir raison a propos de :

    [QUOTE]Donc, si dans ton programme tu enlèves à un endroit un Start bit, c'est qu'ailleurs dans ton programme il existe bel et bien [QUOTE]

    j'ai pensé à cela aujourd'hui et je pense que avant de faire appel à la fonction
    il est deja à l'etat bas, a vérifier

    en faites le document c'est pas clair, c'est en regardant le schema

    le doc c'est le pdf qu'on presente au debut de ce post et aussi
    l'explication de ce lien


    je pense que c'est implicate, si tu vois ce que je veux dire, c'est pour cela que dans le code que j'ai récuperer, il ne parle pas du bit start car il l'ignore (facon de parler)
    http://jpbachy.free.fr/Projets2005/P...is-Clavier.htm

  20. #60
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Points : 28
    Points
    28
    Par défaut
    Salut,

    j'ai pensé à cela aujourd'hui et je pense que avant de faire appel à la fonction
    il est deja à l'etat bas, a vérifier
    Oui, c'est comme cela que je programme le PS2...

    Par contre, au lieu de compter un cycle de CLK afin de l'ignorer, je place la valeur du Start bit sur la ligne DATA.

    Donc :
    -Soit tu ignores un cycle de CLK vu que "la demande d'envoi d'une instruction" nécessite de laisser la ligne DATA libre et donc on est déjà sur la valeur du Start bit. Pour ma part, ce n'est pas la solution, car c'est ajouter une routine pour ignorer un cycle CLK et du fait, la trame PS2 (bien que parfaitement correcte d'un point de vue électrique) ne respecte plus à la lettre une trame standard PS2.

    -Soit, afin de lever toute ambiguïté niveau programme au front suivant de CLK tu places sur la ligne DATA la valeur du Start bit. Pour moi, c'est la solution, vu que tu respectes à la lettre une trame de 12bits PS2 (12 car je compte l'ACK sur la ligne DATA en fin de trame).

    David.

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/02/2014, 08h08
  2. [Turbo Pascal] Compilateur Turbo Pascal pour Vista 64 bits
    Par issss dans le forum Turbo Pascal
    Réponses: 10
    Dernier message: 07/06/2009, 23h48
  3. Réponses: 2
    Dernier message: 07/01/2007, 10h06
  4. Entier : accès bit à bit
    Par slylafone dans le forum C++Builder
    Réponses: 16
    Dernier message: 14/06/2005, 20h34
  5. Réponses: 5
    Dernier message: 03/06/2005, 14h06

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