// KO  le 15 /06 /11 sur 64MC802
// exemple de mise en oeuvre de convertion ADC
// scénario: automatic sample , automatic conv
// 3 capteurs à convertir en utlisant le scénario scan: AN0,AN1,AN2 sur CH0
// IT qd les 3 conv ont été réalisés
// détail danns 16.10.2 A/D Conversions While Scanning Through All Analog Inputs

#include "p33FJ64MC802.h"

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <timer.h>


#include "ConfigSystem.h"  // definition des labels Fcy etc....
#include "delay.h"





_FOSCSEL(FNOSC_FRC);			
_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF  & POSCMD_XT);	// Clock Switching is enabled and Fail Safe Clock Monitor is disabled
													// OSC2 Pin Function: OSC2 is Clock Output
													// Primary Oscillator Mode: XT Crystal
_FWDT(FWDTEN_OFF); 


// les differentes configs on été eclatées dans des fichiers distinct
// meilleure visibilité
extern  void  Init_ADC_AutoSampleManualConv( void );
extern void UART_puts(char * string);
extern  void InitClock();
extern void InitUART();
extern void InitPORT_AND_PIN();
extern void InitTimer1();



unsigned char BUFFER[30]={0};
unsigned int CAPTEUR[3];
unsigned char flagIT=0;

unsigned char HelloMsg[7]="Bonjour";

void __attribute__((__interrupt__)) _T1Interrupt(void)
{	
	AD1CON2bits.SMPI= (3-1); 		// declenche IT à 3 conb
	IEC0bits.AD1IE = 1;			 	// IT ADC ON
	AD1CON1bits.SSRC   = 0b111;		// Conv Auto
	AD1CON1bits.ASAM   = 1;			// AUTO SAMPLING
	AD1CON1bits.SAMP = 0; 			// Start converting
    WriteTimer1(0);

	PORTBbits.RB15=!	PORTBbits.RB15;
    IFS0bits.T1IF = 0;    /* Clear Timer interrupt flag */
}  

void __attribute__((interrupt, no_auto_psv)) _ADC1Interrupt(void)
{
IEC0bits.AD1IE = 0; // IT ADC OFF
AD1CON1bits.SSRC   = 0b0;		// Conv Manuel

// 3 conversions ont été faite
// AN0 dispo dans ADC1BUF0
// AN1 dispo dans ADC1BUF1
// AN2 dispo dans ADC1BUF2
CAPTEUR[0]=ADC1BUF0; // ADC1BUF0 pointe vers l'adresse 0x320
CAPTEUR[1]=(ADC1BUF0+1); // ADC1BUF1 =0x321
CAPTEUR[2]=(ADC1BUF0+2);// ADC1BUF1 =0x322

IFS0bits.AD1IF = 0;		// Clear the ADC1 Interrupt Flag
flagIT=1;
PORTBbits.RB14=!	PORTBbits.RB14;
}

int main ( void )
{
	unsigned int ADCValue=0;

	

	InitClock();	// This is the PLL settings	
	InitPORT_AND_PIN();
	InitUART();
	Init_ADC_AutoSampleManualConv();
	InitTimer1();

	UART_puts(HelloMsg);



    /* Infinite Loop */


    while ( 1 )
	{  
	

		if (flagIT==1)
			{
			sprintf(BUFFER,"capt 0: %d \n", CAPTEUR[0]);
			UART_puts(BUFFER);
			sprintf(BUFFER,"capt 1: %d \n", CAPTEUR[1]);
			UART_puts(BUFFER);
			sprintf(BUFFER,"capt 2: %d \n", CAPTEUR[2]);
			UART_puts(BUFFER);

			}

	
	}	


		
	
	
}


