// KO  le 15 /06 /11 sur 64MC802
// exemple de mise en oeuvre de convertion ADC
// 4 capteurs à convertir:
// AN4 sur CH0,AN0 sur CH1,AN1 sur CH2,AN2 sur sur CH3
// scénario: automatic sample , trigger timer (declenchement auto des convertions sur IT timer)
// overflow timer => 4 conv séquentielles des voies
// IT ADC qd les 4 conv ont été réalisés
// stockage dans un tableau de mesures
// détail  datasheet 16.3.5.2 EXTERNAL CONVERSION TRIGGER
// détail dans datasheet  16.3.6 Multi-Channel Sample Conversion Sequence


#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_Multivoies( void );
extern void UART_puts(char * string);
extern  void InitClock();
extern void InitUART();
extern void InitPORT_AND_PIN();
extern void InitTimer3();// ATTENTION: modification du source pour initialiser timer3 (exemple precedent avec timer1)



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

unsigned char HelloMsg[7]="Bonjour";
/*
void __attribute__((__interrupt__)) _T3Interrupt(void)
{	
    WriteTimer3(0);
	PORTBbits.RB14=!PORTBbits.RB14; // debug
    IFS0bits.T3IF = 0;    
}  
*/

void __attribute__((interrupt, no_auto_psv)) _ADC1Interrupt(void)
{

  WriteTimer3(0);
// 4 conversions ont été faite
// AN4(CH0) dispo dans ADC1BUF0
// AN0(CH1) dispo dans ADC1BUF1
// AN2(CH2) dispo dans ADC1BUF2
// AN3(CH3) dispo dans ADC1BUF3
CAPTEUR[0]=(ADC1BUF0+1); // stocke AN0
CAPTEUR[1]=(ADC1BUF0+2); // stocke AN1
CAPTEUR[2]=(ADC1BUF0+3);// stocke AN2
CAPTEUR[2]=(ADC1BUF0);// stocke AN4

PORTBbits.RB15=!PORTBbits.RB15; // debug

IFS0bits.T3IF = 0; 
IFS0bits.AD1IF = 0;		// Clear the ADC1 Interrupt Flag
flagIT=1;
}

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

	

	InitClock();	// This is the PLL settings	
	InitPORT_AND_PIN();
	InitUART();
	InitTimer3();
	Init_ADC_Multivoies();


	UART_puts(HelloMsg);



    /* Infinite Loop */


    while ( 1 )
	{  
	
		PORTBbits.RB14=!PORTBbits.RB14;
		if (flagIT==1)
			{
			sprintf(BUFFER,"capt 0 AN0: %d \n", CAPTEUR[0]);
			UART_puts(BUFFER);
			sprintf(BUFFER,"capt 1 AN1: %d \n", CAPTEUR[1]);
			UART_puts(BUFFER);
			sprintf(BUFFER,"capt 2 AN2: %d \n", CAPTEUR[2]);
			UART_puts(BUFFER);
			sprintf(BUFFER,"capt 3 AN4: %d \n", CAPTEUR[3]);
			UART_puts(BUFFER);

			}

	
	}	


		
	
	
}


