first commit
This commit is contained in:
86
ATMEGA_TEST_ADC/ATMEGA_TEST_ADC.ino
Executable file
86
ATMEGA_TEST_ADC/ATMEGA_TEST_ADC.ino
Executable file
@@ -0,0 +1,86 @@
|
||||
#include <avr/io.h>
|
||||
#include <avr/interrupt.h>
|
||||
|
||||
//*********************************************//
|
||||
//********* Prototypes de fonctions ***********//
|
||||
//*********************************************//
|
||||
|
||||
//Initialise l'ADC et démarre une première conversion
|
||||
void initAdc();
|
||||
|
||||
|
||||
//*********************************************//
|
||||
//********* Variables globales ***********//
|
||||
//*********************************************//
|
||||
|
||||
//ADC variables
|
||||
volatile uint16_t adc = 0;
|
||||
|
||||
|
||||
//*********************************************//
|
||||
//********* Programme principal ***********//
|
||||
//*********************************************//
|
||||
int main(void){
|
||||
|
||||
initAdc();
|
||||
|
||||
DDRB |= 1<<DDB0;
|
||||
|
||||
sei(); //Activer les interruptions
|
||||
|
||||
while(1){
|
||||
|
||||
if(adc > 0){
|
||||
PORTB |= 1<<PORTB0;
|
||||
}
|
||||
else{
|
||||
PORTB &= ~(1<<PORTB0);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
//*********************************************//
|
||||
//********* Interruptions ***********//
|
||||
//*********************************************//
|
||||
|
||||
//Interruption lorsqu'une conversion de l'ADC se termine
|
||||
//Conversion en boucle
|
||||
ISR(ADC_vect){
|
||||
|
||||
//Lire le resultat
|
||||
adc = ADC;
|
||||
|
||||
//Démarrer une nouvelle conversion
|
||||
ADCSRA |= 1<<ADSC;
|
||||
|
||||
}
|
||||
|
||||
//*********************************************//
|
||||
//********* Fonctions ***********//
|
||||
//*********************************************//
|
||||
|
||||
//Initialise l'ADC et démarre une première conversion
|
||||
void initAdc(){
|
||||
|
||||
//Activer l'ADC via ADEN dans ADCSRA
|
||||
ADCSRA |= 1<ADEN;
|
||||
|
||||
//Selectionner la référence de voltage via REFSn dans ADMUX
|
||||
//Rien à faire car utilisation de AREF, donc REFS0 et RES1 = 0
|
||||
|
||||
//Sélectionner le premier convertisseur via MUX dans ADMUX
|
||||
//Rien à faire car l'on souhaite commencer par ADC0, donc MUX3...0 = 0
|
||||
|
||||
//Activer l'interruption sur conversion terminée via ADIE dans ADCSRA
|
||||
ADCSRA |= 1<<ADIE;
|
||||
|
||||
//Paramétrer le prescaler de l'ADC à 64 :horloge 8Mhz -> horloge ADC de 125kHz
|
||||
ADCSRA |= 1<<ADPS1 | 1<<ADPS2;
|
||||
|
||||
//Démarrer une première conversion
|
||||
ADCSRA |= 1<<ADSC;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user