Bonjour,
J'essaye de faire fonctionner les ADC sur mon ATMega 328p mais je n'y arrive pas... Je ne vois pas ce que je rate, voici mon code :
J'ai changé les Fuses pour obtenir une horloge de 8Mhz, donc mon prescaler doit être correct... Si vous voyez une erreur je suis preneur...Code:#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; }
D'après moi mon port PB0 devrait passer à l'état haut, mais mon voltmètre m'indique 0...
Merci !
-----