// OK  le 15 /06 /11 sur 64MC802
// exemple de mise en oeuvre de convertion ADC
// scénario: automatic sample , trigerred  conv (déclenchement auto sur timer 3)
//	
// 1 capteurs sur AN2 à convertir 
// IT ADC sur timer 3 (automatique car AD1CON1bits.SSRC   = 0b010 = Conversion déclenchée par timer 3

#include "p33FJ64MC802.h"

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <timer.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_TimerIT( void );
extern void UART_puts(char * string);
extern  void InitClockNoSwitch();
extern void InitUART();
extern void InitPORT_AND_PIN();
extern void InitTimer3();



unsigned char BUFFER[30]={0};
unsigned int val;
unsigned char flagIT=0;
unsigned char scanCounter=0; // compteur de voie
unsigned char HelloMsg[7]="Bonjour";

// IT ADC déclenché automatiquement au rythme du timer 3
void __attribute__((interrupt, no_auto_psv)) _ADC1Interrupt(void)
{	
val=ADC1BUF0; // stockage capteur par capteur
flagIT=1;  // traitement différé			
IFS0bits.AD1IF = 0;		// Clear the ADC1 Interrupt Flag
PORTBbits.RB14=!PORTBbits.RB14; // debug
}

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

	

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

	UART_puts(HelloMsg);



    /* Infinite Loop */


    while ( 1 )
	{  
	

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

			}

	
	}	


		
	
	
}


