exploitation de données de l'uart du PIC16LF1937
Répondre à la discussion
Affichage des résultats 1 à 24 sur 24

exploitation de données de l'uart du PIC16LF1937



  1. #1
    Creezys

    initialisation du PIC16LF1937


    ------

    Bonjour;

    je vous prie de m'aider à ce que mon initialisation des PORTS du PIC16LF1937 soit correcte, car en programmant en C à l'aide de MIKROC for PIC, même en utilisant "TRISA=0XFF;" et "TRISB=0XFF;" pour les mettre en entrée ainsi que " TRISE = 0" pour sortie j'arrive pas à les faire fonctionner je vois pas où est le problème. la seule chose que j'ai pu remarqué sur ces trois ports que se sont des ports analogique/numérique à la fois, si le problème vient de ceci et sa nécessitera quelque chose à ajouter pour initialiser, aidez moi je suis bloqué dedans, à noter que l'utilisation de ces ports est imposé.

    -----

  2. #2
    spown

    Re : initialisation du PIC16LF1937

    ANSEL = 0; // analogue ou digital pins
    ANSELH = 0;

    Sinon , sans code et sans schéma, on peut rien savoir ' why it dosen't work'

  3. #3
    Creezys

    Re : initialisation du PIC16LF1937

    Bon désolé pour le manque d'information sur mon problème, alors voici une part du schéma sous isis ainsi que le programme écrit sous mikroC for pic, pour les deux registre que vous m'avez proposé le mikroC ne les reconnais pas.

    Pour expliquer le sujet un peu le PIC en question m'a été imposé comme exercice,alors:
    - le port A doit contenir trois pins en entrées ceux représentés par les boutons poussoirs, et de trois sorties qui vont alimenter des leds.
    - le port B doit être entièrement en entrées pour qu'il reçoit les bits fournies par le DIP-switch qui permet à l'utilisteur d'entrer un mot de passe, et le PIC le comparera avec celui enregistré si oui il allume la led "MAN/AUTO" sur port E.
    - le port E doit être en sortie.
    Images attachées Images attachées
    Fichiers attachés Fichiers attachés

  4. #4
    Creezys

    Re : initialisation du PIC16LF1937

    Voilà je vous ai fournis les informations complètes, priére de me filer un coup de main car je suis vraiment en stop!!!
    Merci d'avance!!

  5. A voir en vidéo sur Futura
  6. #5
    kevin8z

    Re : initialisation du PIC16LF1937

    Dans la doc de ton PIC, partie 12.0 IO ports tout est expliqué. C'est un problème de configuration car comme dis on peut utiliser certaine broche en entrée analogique ou IO nulérique.

  7. #6
    Creezys

    Re : initialisation du PIC16LF1937

    wi j'ai bien vu le datasheet mais j'ai pas pu traduire ce qui est écrit en un langage C supportable par le mikroC c'est pour ceci que je demande de l'aide et Merci!!

  8. #7
    Creezys

    Re : initialisation du PIC16LF1937

    le problème c'est que j'utilise les registres donnés "TRISx = 0XFF" pour entrée et "TRISx = 0" pour sortie mais ça fonctionne que en sortie quand j'essaye de les faire fonctionner en sortie ça ne marche pas.

  9. #8
    kevin8z

    Re : initialisation du PIC16LF1937

    Regarde les registres ANSELx.

  10. #9
    Creezys

    Re : initialisation du PIC16LF1937

    J'ai essayé de mettre ANSELA et ANSELE à "0" mais sa fonctionne toujours pas voici un tout petit programme pour allumage de led sur PORTE tant que PORTA=1.
    Merci pour votre aide;
    Images attachées Images attachées
    Fichiers attachés Fichiers attachés

  11. #10
    spown

    Re : initialisation du PIC16LF1937

    TU programmes avec mikroelectronika ? si oui, il y a des registres à initialiser au début.

    Et oublie cette affaire de simulation. il y pas mieux qu'une vraie maquette d'essaie et des vrais outils.

    Code:
    void main() {
    PORTE = 0;
    ANSELE = 0;
    TRISE = 0;
    while(1)
    {
     LATE = 1;
     delay_ms(1000);
     LATE = 0;
     delay_ms(1000);
     }
    }

  12. #11
    gabuzo

    Re : initialisation du PIC16LF1937

    Citation Envoyé par Creezys Voir le message
    J'ai essayé de mettre ANSELA et ANSELE à "0" mais sa fonctionne toujours pas voici un tout petit programme pour allumage de led sur PORTE tant que PORTA=1.
    Merci pour votre aide;
    Avec un schéma pareil, (la led directement en sortie, pas de pull-up en entrée etc...) ça serait étonnant que ça fonctionne, même en simulation. (j'ai pas regardé le soft)
    Je suis Charlie

  13. #12
    Creezys

    Re : initialisation du PIC16LF1937

    bonjour;
    ben pour les résistances de pull-up en simulation oui, mais il faut savoir que sans brancher la LED nous pouvons déjà voir un point rouge qui s'allume et représente la donné en sortie du pin, car les pull-up ne sont pas utilisé avec tout les ports. alors sa n'a pas de relations avec les résistances de pull-up car j'ai essayé même avec et ça ne fonctionne pas.

    Pour que je m'en passe de la simulation, ça ce n'est pas possible déjà car la simulation nous donne une petite vision sur ce que nous ferons ainsi qu'en ne risque rien en simulant, pour le matériel je ne l'ai pas encore mais il faut que je simule le tout avant.

    le programme que vous m'avez fournis fonctionnera sans doute car la direction en sortie fonctionne impeccablement, le problème réside dans la direction des ports en entrées.

    MERCI!!

  14. #13
    Creezys

    Re : initialisation du PIC16LF1937

    toujours Bloqué prière de m'aider à exploiter les ports du pic 16LF1937 en entrée, je vous serai reconnaissant.
    Merci

  15. #14
    RISC

    Re : initialisation du PIC16LF1937

    Salut,
    Ce n'est pas parce que que c'est de la simulation qu'il faut bacler le schéma...
    Ecoute les conseils et améliore ton schéma : ajoute une résistance en série pour la led.
    Ajoute une résistance en série (10K) sur la broche MCLR entre MCLR et Vdd.
    Si tu ne prends pas en compte les conseils qui te sont donnés, tu n'auras aucune réponse...ou toujours les même questions
    a+

  16. #15
    Creezys

    Re : initialisation du PIC16LF1937

    Merci pour vous tous de m'avoir aider, bon maintenant ça marche super bien, et a vrai dire je dois apprendre à bien écouter les conseils je présente mes sincères excuses, et encore une fois MERCI!!!

  17. #16
    Creezys

    Re : exploitation de données de l'uart du PIC16LF1937

    bonjour cher forumeurs;
    toujours sur le même PIC 16LF1937, bon j'ai à envoyer une commande depuis ce dernier, la recevoir avec un PIC 18F4520, et retransmettre l'action à faire tout ceci en exploitant l'uart via TX et RX c'est à dire que les données seront en série. le problème que j'ai rencontré se résume dans le fait que quand j'envoi une seule commande comme en cliquant un bouton poussoir sur PIC16LF le 18F dois me donner l'action de clignoter une LED sur le pic 16LF, pour ceci c'est bon c'est déjà fait et ça marche mais quand j'ai plus qu'une commande sa devient flou je peux plus gérer, et voici mon schèma ISIS ainsi que les deux programmes implantés sur les 2 pics, si vous pouvez bien m'aidez.

    le but sera comme suit en enfonçant le BP1(bouton) le 16LF doit transmettre le code entrée par le DIPswitch au PIC18F celui ci va comparer le code avec celui enregistrer si c'est le même il envoie au 16LF l'action de clignoter la led rouge, -("ceci est déja fait et je n'ai pas de problème dessus")!-, si le code est validé et la LED rouge clignote et on appuie le BP2, le 16LF doit envoyé au 18F que le bouton 2 a été appuyer une fois pour que le 18F renvoi au 16LF que la première LED verte (Etat1) doit être allumé si on ré-appuie Etat1 s'éteint et la deuxième led verte (Etat2) s'allume si on ré-appuie la troisième s'allume et la deuxième s'éteint si on appuie encore en refait le cycle.
    Code:
     P18F4520
    char DIP,etat;
    void main() {
     TRISD = 0;
     PORTD = 0;
     TRISB = 0;
     PORTB = 0;
     UART1_Init(9600);               // Initialize UART module at 9600 bps
     Delay_ms(200);                  // Wait for UART module to stabilize
     while(1){
      if (UART1_Data_Ready()) {     // If data is received,
       DIP = UART1_Read();     // read the received data,
       if (DIP == 0b10101010) {     // If data is received,
        UART1_Write(0XFF);       // and send data via UART
        delay_ms(200);
        etat = UART1_Read();
        if (etat == 1){
         UART1_Write(1);       // and send data via UART
         delay_ms(200);
         }
        else if ( etat == 2){
         UART1_Write(2);       // and send data via UART
         delay_ms(200);
         }
        else {
         UART1_Write(3);       // and send data via UART
         delay_ms(200);
         }
       }
       else{
        UART1_Write(0);       // and send data via UART
        delay_ms(200);
       }
      }
     }
    }
    Code:
    P16LF1937
    char DIP,cmd1_rd,etat_rd;
    int etat;
    void main() {
    TRISA = 0xFF;
    ANSELA = 0;
    PORTA = 0;
    TRISB = 0xFF;
    ANSELB = 0;
    PORTB = 0;
    TRISD = 0;
    ANSELD = 0;
    PORTD = 0;
    TRISE = 0;
    ANSELE = 0;
    PORTE = 0;
    UART1_Init(9600);               // Initialize UART module at 9600 bps
    Delay_ms(200);                  // Wait for UART module to stabilize
     while(1){
      if (PORTA.B0 == 1){
       DIP = PORTB;
       UART1_Write(DIP);
       Delay_ms(200);
       if (PORTA.B1 == 1){
        etat = etat + 1;
        Delay_ms(250);
        if (etat == 1){
         UART1_Write(1);
         Delay_ms(200);
         }
        else if (etat == 2){
         UART1_Write(2);
         Delay_ms(200);
         }
        else if (etat == 3){
         UART1_Write(3);
         Delay_ms(200);
         }
        else
         etat = 0;
        }
       if (UART1_Data_Ready()) {     // If data is received,
        cmd1_rd = UART1_Read();     // read the received data,
        delay_ms(200);
        etat_rd = UART1_Read();     // read the received data,
        if(cmd1_rd == 0XFF){
         LATE.B0 = 1;
         delay_ms(250);
         LATE.B0 = 0;
         delay_ms(250);
         }
        else
         LATE.B0 = 0;
        if(etat_rd == 1){
         PORTD.B0 = 1;
         PORTD.B1 = 0;
         PORTD.B2 = 0;
         }
        else if(etat_rd == 2){
         PORTD.B0 = 0;
         PORTD.B1 = 1;
         PORTD.B2 = 0;
         }
        else{
         PORTD.B0 = 0;
         PORTD.B1 = 0;
         PORTD.B2 = 1;
         }
       }
      }
     }
    }
    Images attachées Images attachées  

  18. #17
    Creezys

    Re : exploitation de données de l'uart du PIC16LF1937

    j'ai vraiment besoin de votre aide prière de me filer un coup de main dessus je suis bloqué; Merci à tous

  19. #18
    gabuzo

    Re : exploitation de données de l'uart du PIC16LF1937

    Citation Envoyé par Creezys Voir le message

    ...mais quand j'ai plus qu'une commande sa devient flou je peux plus gérer...
    Si y'avait que ça qui était flou...
    Je suis Charlie

  20. #19
    Creezys

    Re : exploitation de données de l'uart du PIC16LF1937

    Bonjour,

    toujours pas de réponses ni indications pour que ça m'éclairci le chemin, je sais que ce n'est pas aussi facile mais je demande seulement de l'aide car je suis vraiment bloqué je pourrai pas continuer.

    MErci

  21. #20
    RISC

    Re : exploitation de données de l'uart du PIC16LF1937

    Salut,

    Lorsqu'un programme utilise trop de if / elseif / else cela devient compliqué à comprendre. Je te recommande d'utiliser la structure switch / case qui est plus lisible et facile à maitriser.

    a+

  22. #21
    kevin8z

    Re : exploitation de données de l'uart du PIC16LF1937

    c'est normale ça :

    PORTD.B0 = 0;
    PORTD.B1 = 0;
    PORTD.B2 = 1;

    c'est pas plutôt :

    PORTD.D0 = 0;
    PORTD.D1 = 0;
    PORTD.D2 = 1;
    Pareil pour les autres ports.

    Je peut peut être me tromper, je ne sais pas quel compilateur tu utilise.

  23. #22
    RISC

    Re : exploitation de données de l'uart du PIC16LF1937

    Salut,

    Et en plus en sortie il faut utiliser LATx au lieu de PORTx...

    a+

  24. #23
    Creezys

    Re : exploitation de données de l'uart du PIC16LF1937

    Bonsoir;
    Pour le syntaxe "PORTx.B0" c'est propre au compilateur MikroC pro for PIC, sinon je vais essayer de rectifier selon vos indications et voir ce que ça donne, et merci pour votre aide!!

  25. #24
    RISC

    Re : exploitation de données de l'uart du PIC16LF1937

    Salut,

    La syntaxe existe dans ton compilateur puisque tu l'a utilisée dans certaines parties de ton programme :
    Code:
        else
         LATE.B0 = 0;
        if(etat_rd == 1){
         PORTD.B0 = 1;
         PORTD.B1 = 0;
         PORTD.B2 = 0;
         }
        else if(etat_rd == 2){
         PORTD.B0 = 0;
         PORTD.B1 = 1;
         PORTD.B2 = 0;
         }
        else{
         PORTD.B0 = 0;
         PORTD.B1 = 0;
         PORTD.B2 = 1;
    Mais il faut remplacer à la fin de ton programme tous les PORTx.xy = .... par des LATx.xy = ....

    a+

Discussions similaires

  1. Identifier données reçues par l'UART
    Par NeZo dans le forum Électronique
    Réponses: 7
    Dernier message: 05/04/2012, 10h32
  2. Exploitation de données
    Par tpscience dans le forum Physique
    Réponses: 1
    Dernier message: 04/07/2011, 10h11
  3. Centrale intertielle exploitation des données
    Par invite6c3797e6 dans le forum Électronique
    Réponses: 5
    Dernier message: 25/05/2011, 15h47
  4. Comment envoyer des données au PC sans UART
    Par invitec6f46d45 dans le forum Électronique
    Réponses: 1
    Dernier message: 09/04/2009, 09h52
  5. [Biologie Moléculaire] Exploitation de données sur la respiration mitochondriale
    Par invite217f3aaa dans le forum Biologie
    Réponses: 0
    Dernier message: 08/04/2008, 11h56
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...