// OK testé 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 "ConfigSystem.h"  // definition des labels Fcy etc....
#include "../../../drivers/delay.h"
#include "../../../drivers/drvUART.h"



//config oscillateur
// PAS DE CLOCK SWITCH
_FOSCSEL(FNOSC_PRIPLL);								// Choix du oscillateur + PLL
_FOSC(FCKSM_CSDCMD & OSCIOFNC_OFF  & POSCMD_XT);	// Pas de basculement d'horloge
													// pas de OSC2
													// type d'oscillateur XT
_FWDT(FWDTEN_OFF); // watchdog off;



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



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

unsigned char HelloMsg[7]="Bonjour";

void __attribute__((interrupt, no_auto_psv)) _ADC1Interrupt(void)
{
IFS0bits.AD1IF = 0;		// Clear the ADC1 Interrupt Flag
// 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
IEC0bits.AD1IE = 0; 		// bloque IT
IFS0bits.AD1IF = 0;		// Clear the ADC1 Interrupt Flag
flagIT=1;
}

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

	

	InitClockNoSwitch();	// This is the PLL settings	
	InitPORT_AND_PIN();
	InitUART();
	Init_ADC_AutoSampleAutoConv();

	UART_puts(HelloMsg);



    /* Infinite Loop */

	AD1CON1bits.SAMP = 0; 		// Start converting
    while ( 1 )
	{  
		// declenchenment conv 
		// => lancement TAcq
		// fin auto Tacq => declenchenment conv etc..
		// a chaque conv changement auto de capteur car scan activé
		// lorsque 3 conv => IT déclenché
		// traitement différé de l'envoi sur RS232
		// tempo de 2 sec



	
		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);

			Delay(Delay_1S_Cnt); //delay BLOQUANT 1s pour demo uniquement
			Delay(Delay_1S_Cnt); //delay BLOQUANT 1s pour demo uniquement
			IEC0bits.AD1IE =1; 		// reautorise les IT
			AD1CON1bits.SAMP = 0; 		// Start converting
			}

	
	}	


		
	
	
}


