[Programmation] Créer une seconde liaison série avec PIC 18452
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Créer une seconde liaison série avec PIC 18452



  1. #1
    invitec54b6ea5

    Créer une seconde liaison série avec PIC 18452


    ------

    Bonjour, je souhaite créer une seconde liaison série de mon PIC 18f452, j'utilise le logiciel PIC C Compiler et le compilateur CCS. Apparemment on doit la créer grâce au soft...

    -----

  2. #2
    invite5637435c

    Re : Créer une seconde liaison série avec PIC 18452

    Bonsoir,

    vous pouvez vous inspirer de ce code ici:
    http://saeedsolutions.blogspot.com/2...t-banging.html

    Je ne connais pas CCS mais si il respecte la norme C ANSI c'est très facilement adaptable.
    Il faudra adapter les registres le cas échéant, le principe reste le même.

  3. #3
    invitea009bbe9

    Re : Créer une seconde liaison série avec PIC 18452

    Bonjour,

    J'utilise CCS, c'est assez loin du C ansi, dans la mesure où il y a beaucoup de fonctions spécifiques, notamment la gestion usart.
    Je vous joints la partie de code que j'ai utilisé pour faire un renvoie d'alarme. J'utilise un 18f4520, qui est très "cousin" avec le 452. Il y a juste la réception en RS232, l'émission est faite avec un 4680 programmé en assembleur. C'est "simple", on déclare la liaison série, puis la réception est gérée par une interruption, mais, on peut faire autrement et autre chose.

    Code:
    // Programme de gestion de renvoie d'alarme pour aquarium.
    // Réception du message à envoyer par la liaison I2C depuis le programme de gestion de l'aquarium.
    // Appel du N° mémorisé, envoie du message pendant 1mn
    //
    // Auteur: Jacques Menut
    //
    // Créée le 15/04/2012
    // Modifié le 14/02/2013
    //
    
    #include <18F4520.h> 
    
    #fuses INTRC_IO,NOFCMEN,NOIESO,PUT,NOBROWNOUT,NOWDT,WDT16384,NOPBADEN,MCLR,STVREN,NOLVP,NOXINST,NODEBUG,NOPROTECT,NOCPB,NOWRT,NOWRTC,NOWRTB,NOWRTD,NOEBTR,NOEBTRB
    #use delay(clock=4000000)
    #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7) 
    
    #include "driver_lcd2x8.c"
    
    #define  Inter_enr_mess   PIN_B0     //Inter Enregistrement Message 
    #define  BP_enr_mess  PIN_C1     //BP Enregistrement message PortB0
    #define  BP_N_Mess    PIN_C0     //BP N°message PortB1
    #define  ISD_Mosi     PIN_C5     //Mosi de ISD4002
    #define  ISD_Miso     PIN_C4     //Miso de ISD4002
    #define  ISD_Sclk     PIN_C3     //SCkl de ISD4002
    #define  ISD_Select   PIN_A5     //SS de ISD4002
    #define  HT_CE        PIN_E0     //CE de HT9200
    #define  HT_Clk       PIN_E1     //Clk de HT9200
    #define  HT_Data      PIN_E2     //data de HT9200
    #define  Inter_N_Tel  PIN_B1     //Inter enregistrement N° téléphonne 
    #define  Relais    PIN_C2     //relais ligne téléphonique
    #define  Lign_Tel  PIN_D6      //ligne téléphonique
    #define C1 PIN_A0   // D
    #define C2 PIN_A1   // E
    #define C3 PIN_A2   // F
    #define L1 PIN_A3   // G
    #define L2 PIN_A4   // H
    #define L3 PIN_A6   // J
    #define L4 PIN_A7   // K
    
    
    short sleep_mode,bSignal,bRep,Recept_alarm,wisd;
       //sleep_mode: bit gestion sleep/ bsignal: bit touche clavier active
       //bRep: bit touche clavier maintenue/ Recept_alarm: bit alarme reçue à envoyer
       //wisd: bit écriture ISD
    #bit TOIF = 0xFF2.2
    
    #bit TXEN = getenv("BIT:TXEN")
    #bit WUE = getenv("BIT:WUE")
    
    BYTE buffer;
    
    long address;   
    int powerup, Num_mess ;
    char stopisd, carx ;
    int *intl, *addresse ;
    char num_tel[10] ;
    char cCompter, Lign, L, Touche, S, i ;
    char RA1, RA2, R ;
    
    #include <numerotation_ht9200.c>
    #include <ISD4002.c>
    
    ///////////////////////////////////////////
    //*************INTERRUPTIONS***************
    ///////////////////////////////////////////
    
    
    #INT_EXT             //interruption RB0 (inter enregistrement message)
    void inter_message ()
    {
       sleep_mode=FALSE;
       delay_ms(25);
       S=0;
       clear_interrupt(INT_EXT);
       enable_interrupts(GLOBAL);
    }
    
    #INT_EXT1            //interruption RB1 (inter enregistrement N° Tel)
    void inter_num_tel ()
    {
       sleep_mode=FALSE;
       delay_ms(25);
       S=0;
       clear_interrupt(INT_EXT1);
       enable_interrupts(GLOBAL);
    }
    
    #INT_RDA             //interruption USART (réception N° message à envoyer)
    void serial_interupt ()
    {   
        sleep_mode=FALSE;
        delay_us(80);
        S=0;
        buffer=getc();
        Num_mess=buffer;
        
        if (R == 1)
          goto ser_int;
          
          if (RA1 < 2)
             RA1 ++;
          else
             RA2 ++;
    
    ser_int:
        Recept_alarm=TRUE;
        enable_interrupts(GLOBAL);
    }
    
    #INT_TIMER0
    void interrupt_horloge ()
    {    
       if(TOIF==1)
          { 
          // En fin de temporisation d'une durée de 32 ms 
          // bSignal passe à 1    
          if(cCompter<=2)
             ++cCompter;
          else bSignal=1;                     
          clear_interrupt(INT_TIMER0);  
          set_timer0(0xFF00);
          enable_interrupts(GLOBAL);
          }   
    }
    A+ si vous avez des questions.

    Jacques

  4. #4
    paulfjujo

    Re : Créer une seconde liaison série avec PIC 18452

    bonjour,


    Rajout d'une 3em liaison serie (software) sur un 18F46K22
    version (Sans la biblio MikroC ) et avec interruption
    La version proposée , utilise RB2 en emission TX et RB0 en reception RX
    Nota: On peut prendre n'importe quel autre bit , en sortie, pour la transmission
    mais le choix RB0 s'impose ici , sur la reception, pour benefitier d'un mode Interruption
    preferable à un mode " pooling" bloquant le programme.

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

    Re : Créer une seconde liaison série avec PIC 18452

    Salut,

    Les UARTs logicielles imposent toujours du temps réel au reste du système et compliquent singulièrement le développement sauf si la liaison est vraiment à basse vitesse (300 bauds).
    Le PIC18F45K22 est je pense compatible 100% au niveau des broches . Il possède 2 UARTs matérielles
    Une autre possibilité est de choisir un PIC18 plus récent qui permet en plus de choisir sur quelles broches on souhaite avoir les UARTs (PIC18F45K40 ou K42)

    a+

Discussions similaires

  1. [AIDE] Créer un proxy de liaison série
    Par invite6afde5d5 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 23/01/2018, 13h08
  2. Condensateur de liaison en série avec un AOP
    Par Solar8 dans le forum Électronique
    Réponses: 9
    Dernier message: 09/08/2011, 00h19
  3. Créer liaison "Serie"
    Par invite4e24a71d dans le forum Électronique
    Réponses: 9
    Dernier message: 23/01/2011, 18h23
  4. Gestion de la liaison série avec Qt
    Par invite9ae24df7 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 06/11/2009, 09h17
  5. Liaison série avec PIC16F873
    Par invite5aee2b41 dans le forum Électronique
    Réponses: 14
    Dernier message: 27/01/2006, 23h13
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...