Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

PIC18 - Exemple programme DMA + USART MODE DMX.



  1. #1
    OliG

    PIC18 - Exemple programme DMA + USART MODE DMX.

    Voici un exemple de programme pour les derniers microcontrôleur type PIC18F25K42 ( avec DMA et USART en mode DMX)
    ce qui permet de generer des trames DMX sans consommation de cycle horloge ...

    Code:
    uint8_t DMX1[513];
    uint16_t i;
    uint16_t CTU1;
    uint8_t txLength;
    
    
    
    void main(void)
    {
    //
    asm ("BANKSEL PRLOCK");
    asm ("MOVLW 0x55");
    asm ("MOVWF PRLOCK");
    asm ("MOVLW 0xAA");
    asm ("MOVWF PRLOCK");
    asm ("BSF PRLOCK, 0");
    
      SYSTEM_Initialize();   
      INTERRUPT_GlobalInterruptEnable();
        //Initialize the Arrays
      
    for(i=0; i<514 ; i++)
    {
    DMX1[i] = i;
    
    //DMX_Console_Transmit (11, *Array1)
    
    
    
    }
      
    DMA1_Initialize(); 
    //Initialize DMA1
    DMA1SSA =  &DMX1; //Set source start address
    DMA1DSA = (uint8_t) &U1TXB; //Set destination start address to U1TXB
    DMA1CON1bits.SMR = 0b00; //Choose PFM space as source memory
    DMA1CON1bits.SMODE = 0b01; //Increment source address each transaction
    DMA1CON1bits.DMODE = 0b00; //Remain unchanged the destination address transaction
    DMA1SSZL = 0x00; //Set 9 bytes for source size
    DMA1SSZH = 0x02;
    DMA1DSZ = 0x01; //Set 1 byte for destination size
    DMA1CON1bits.SSTP = 0b1; //SIRQEN is clear after sending 9 bytes
    DMA1CON1bits.DSTP = 0b0; //No destination reload stop bit
    DMA1SIRQ = 28; //Choose U1TX as Transfer Trigger Source
    DMA1AIRQ = 31;
    DMA1CON0bits.DMA1SIRQEN = 1; //Source Trigger is allowed to start DMA transfer
    DMA1CON0bits.AIRQEN = 1;
    
    
    DMA1CON0bits.DMA1EN = 1; //Enable DMA
    
    while (0 == PIR2bits.DMA1DCNTIF){} //Wait after message transfer completed
    DMA1SSA =  &DMX1;
    
         INTERRUPT_GlobalInterruptEnable();
    
         DMX1[1]=255;
         TMR0_StartTimer();
    
        while (1)
        {        
                
                  
        if (PORTBbits.RB0) {
                         DMX1[1]=255;
                     }
        else
        {
            DMX1[1]=0; 
        }
        }
    }

    -----


  2. #2
    RISC

    Re : PIC18 - Exemple programme DMA + USART MODE DMX.

    Salut,

    Tu parles du DMX512 ?
    As-tu connecté ton PIC18F25K42 a un équipement DMX512 pour faire des tests ?

    a+
    Ma marotte ? les microcontrôleurs ;=)

  3. #3
    OliG

    Re : PIC18 - Exemple programme DMA + USART MODE DMX.

    Salut,

    Oui j'ai raccordé un équipement DMX512.
    A la sortie du pic (TX) j'utilise un MAX487 ( inutile d'une pin en plus pour générer le début de trame c'est l'avantage du K42)

    pour être plus complet voici la configuration de l'usart :

    U1CON0bits.MODE = 0b1010; // DMX mode
    U1CON0bits.TXEN = 1; // Enable transmit
    U1CON0bits.RXEN = 0; // Disable receive
    U1CON2bits.TXPOL = 0; // Data polarity is not inverted
    U1P1H = 0x01; // n-1 = 11-1
    U1P1L = 0xFE;
    // Initialize baud rate to 250k; Fosc = 64 MHz
    U1BRGL = 0x0F;
    U1CON2bits.STP = 0b10; // 2 Stop bits
    U1CON1bits.ON = 1; // Enable serial port


    et j'ai aussi analyser la trame DMA2.jpg

    Bàt;

Sur le même thème :

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/02/2014, 22h33
  2. [Hi-tech pic c] Problème USART en mode RX
    Par Tannite dans le forum Électronique
    Réponses: 8
    Dernier message: 14/10/2013, 09h51
  3. Réponses: 5
    Dernier message: 24/03/2012, 10h14
  4. configuration usart mode synchrone
    Par toutati dans le forum Électronique
    Réponses: 7
    Dernier message: 16/05/2010, 10h06
  5. [PIC18]-Mode SPI
    Par jorg1n dans le forum Électronique
    Réponses: 20
    Dernier message: 06/04/2009, 16h31