예제 #1
0
파일: Main.c 프로젝트: kunal15595/pic
/*____________________________________________________________________________*/
int main (void)
{
    /*** LOCAL VARIABLES ***/    

    /*** CONFIGURE OSCILLATOR ***/
    SET_FreqOsc( FRCDIV_1MHZ );                         //Set frequency of 1 MHZ
    
    /*** CONFIGURE HARDWARE ****/
    Hardware_INIT();                                    //Initialise Hardware functions
    Hardware.ConfigPins_Default();                      //Configure Default Hardware for ELB

    /*** INITIALIZE PERIPHERAL ***/
    TIMER23_INIT(100, TMR_INT_PRI1);                    //Proivde timer period in millisecond
    UART1_INIT( M_9600Hz , M_BRGH_High , TX_INT_PRI0);  //Initialise UART1
    I2C1_INIT(400000, MI2C_INT_PRI0 );                  //Inilialize I2C1

    /*** APPLICATION CODE BEGINS ***/ 
    AMGP_INIT(READ_HEADER1,SEND_UART1USB);              //Select Header to mount sensor card and...
                                                        //...UART port to send data out (To be implemented, Modify this in AMGPSensor.h)
    AMGP.Config(Acc|Mag|Gyro|Pres);                        //Select the sensors to work with eg.(Acc|Mag|Pres)
    /*** ENTER ETERNITY ***/
    while(1)
    {
        /*** READ SENSOR DATA AFTER TIMER PERIOD ELAPSED ***/
        if(V_T23IntFlag_U8)                             // Timer period defined in the Timer init function...
        {                                               // ...the timer interrupt flag is set in ELB_ISR.c
            V_T23IntFlag_U8 = 0;                        // Clear the TIMER Interrupt flag variable
            AMGP.Read(Acc|Mag|Gyro|Pres|TempPres);      // Read selected Sensors Data
            AMGP.Send(Acc|Mag|Gyro|Pres|TempPres);      // Send sensors data Packet through selected UART

            V_Pitch_F32 = atan(AMGP.Data.AccY/AMGP.Data.AccZ); // Use sensors Data perfrom calcualtions
        }
    }
}
예제 #2
0
파일: Main.c 프로젝트: kunal15595/pic
int main(void)
{
    /*** LOCAL VARIABLES ***/

    /*** CONFIGURE OSCILLATOR ***/
    SET_FreqOsc( FRCDIV_8MHZ );                     //Set Frequency of Oscillator

    /*** CONFIGURE HARDWARE ****/
    Hardware_INIT();                                //Intialize Hardware
    Hardware.ConfigPins_Default();                  //Configure Hardware

    //NOTE: PPS Unlock & Lock Sequence not required when Using  Hardware.ConfigPins_Default()
     __builtin_write_OSCCONL(OSCCON & 0xbf);        //UNLCOK PPS
        Hardware.ConfigPins_PWM(USE2);              //Configure the PWM Pins to use
     __builtin_write_OSCCONL(OSCCON | 0x40);        //LOCK PPS

//      __builtin_write_OSCCONL(OSCCON & 0xbf);        //UNLCOK PPS
//    Hardware.ConfigPins_Motor(USE1|USE2);
//    __builtin_write_OSCCONL(OSCCON | 0x40);        //LOCK PPS

    MotA1 = C_ON; // Set state to OFF
    MotA2 = C_OFF; // Set state to OFF
    
    /*** INITIALIZE PERIPHERAL ***/
    CLKDIVbits.RCDIV0=0;     //clock divider to 0
    PWM2_INIT(PWMsrc_FOSC, 10);
//
    PWM2_SET_PulseWidth(5);                        //Set PWM1 Dutycycle Time 5 mSec
     //To Test, Probe the Pin1 of PWM connector J7

    LCD_INIT();                                     //Initialize LCD
//    LED1_DIR = DIR_OUT;                    // Set LED1 as Output
//    LED1 = C_OFF;                      	// Set state to OFF
//    RE5_IN;


    

    // AN0 input pin is analog

    AD1CON1 = 0x2202; // Configure sample clock source
    // and conversion trigger mode.
    // Unsigned Fraction format (FORM<1:0>=10),
    // Manual conversion trigger (SSRC<2:0>=000),
    // Manual start of sampling (ASAM=0),
    // No operation in Idle mode (ADSIDL=1),
    // S/H in Sample (SAMP = 1)
    AD1CON2 = 0; // Configure A/D voltage reference
    // and buffer fill modes.
    // Vr+ and Vr- from AVdd and AVss (VCFG<2:0>=000),
    // Inputs are not scanned,
    // Interrupt after every sample
    AD1CON3 = 0x0100; // Configure sample time = 1Tad,
    // A/D conversion clock as Tcy
    AD1CHS = 1; // Configure input channels,
    // S/H+ input is AN1,
    // S/H- input is Vr- (AVss).
    AD1CSSL = 0; // No inputs are scanned.
    IFS0bits.AD1IF = 0; // Clear A/D conversion interrupt.
    // Configure A/D interrupt priority bits (AD1IP<2:0>) here, if
    // required. Default priority level is 4.
//    IEC0bits.AD1IE = 1; // Enable A/D conversion interrupt
    AD1CON1bits.ADON = 1; // Turn on A/D
    AD1CON1bits.SAMP = 1; // Start sampling the input   

    //this just gives us a little delay between measurements
    U32 i = 0xFFFFF; //sets i to 1048575
    while (i--); //delay function

    AD1CON1bits.SAMP = 0; // End A/D sampling and start conversion
    // Example code for A/D ISR:


    
    
    
    
//    sensor_read = LATE;

    /*8** APPLICATION CODE BEGINS ***/
    v_PrintData_U16= 2013;                          // Store some Value to print


    /*** ENTER ETERNITY ***/
    while(1)
    {
//        MotA1 = C_ON; // Set state to OFF
//        MotA2 = C_OFF; // Set state to OFF

        
        /*** RECURRING CODE HERE***/
//        sprintf(A_Str_U8,"%d ", v_PrintData_U16);       // Print variable to string
//        LCD_WriteString(1, 0, A_Str_U8);                //print varible on Line1

//        sprintf(A_Str_U8,"BRIGOSHA TECH.");            // Print variable to string
//        LCD_WriteString(2, 2, A_Str_U8);               //print string on second line second column
        //Use TIMER Interrupts to perform time based tasks at fixed interval.
        //Use Peripheral Interrupts to perform event based tasks
        v_PrintData_U16++;

        AD1CON1bits.SAMP = 1; // start sampling...

        U32 i = 0xFFFF; //sets i to 1048575
        while (i--); //delay function

        AD1CON1bits.SAMP = 0; // start converting
        while (!AD1CON1bits.DONE){}; // conversion done?
        ADCValue = ADC1BUF0; // yes then get ADC value

        LCD_Clear();
        sprintf(A_Str_U8,"%u ", ADCValue);       // Print variable to string
        LCD_WriteString(2, 2, A_Str_U8);                //print varible on Line1
        //
    }

}