TP convertisseur analogique-numérique



Documents pareils
STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Etudier l influence de différents paramètres sur un phénomène physique Communiquer et argumenter en utilisant un vocabulaire scientifique adapté

Carte ARDUINO UNO Microcontrôleur ATMega328

SYSTEME DE PALPAGE A TRANSMISSION RADIO ETUDE DU RECEPTEUR (MI16) DOSSIER DE PRESENTATION. Contenu du dossier :

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

PIC EVAL Dev Board PIC18F97J60

1. PRESENTATION DU PROJET

ANALYSE TRAMEs LIAISON SERIE

INTRODUCTION A L ELECTRONIQUE NUMERIQUE ECHANTILLONNAGE ET QUANTIFICATION I. ARCHITECTURE DE L ELECRONIQUE NUMERIQUE

I- Définitions des signaux.

Numérisation du signal

TP Modulation Démodulation BPSK

La programmation des PIC en C. Les fonctions, les interruptions.

AMICUS 18 (2ème partie) 4) Présentation du logiciel Amicus IDE

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

TS 35 Numériser. Activité introductive - Exercice et démarche expérimentale en fin d activité Notions et contenus du programme de Terminale S

La conversion de données : Convertisseur Analogique Numérique (CAN) Convertisseur Numérique Analogique (CNA)

Partie Agir : Défis du XXI ème siècle CHAP 20-ACT EXP Convertisseur Analogique Numérique (CAN)

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

Régler les paramètres de mesure en choisissant un intervalle de mesure 10µs et 200 mesures.

Conférence sur les microcontroleurs.

Temps Réel. Jérôme Pouiller Septembre 2011

LOGICIEL DC4D MONITOR

Fiche technique CPU 314SC/DPM (314-6CG13)

MACHINE A SOUDER MANUEL D UTILISATION

! analyse du fonctionnement

Livret Phoenix-M. Par Georges Khaznadar, Lycée Jean Bart, Dunkerque d'après Phoenix Programmer's Manual

Spécialité Professionnelle. Patrick Boulandet

Le multiplexage. Sommaire

0 20mV; 0 40mV; 0 80mV; 0 160mV; 0 320mV; 0 640mV; 0 1,28V; 0 2,56V 0 5V; 0 10V

Une carte pour vos projets

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Dossier technique. Présentation du bus DMX et Utilisation des options EL13 / EL14 ERM AUTOMATISMES INDUSTRIELS 1 LE PROTOCOLE DMX 2

Master4Light. Caractérisation Optique et Electrique des Sources Lumineuses. Equipement 2-en-1 : source de courant et spectrophotomètre

Introduction à MATLAB R

Chapitre 13 Numérisation de l information

Oscilloscope actif de précision CONCEPT 4000M

IV- Comment fonctionne un ordinateur?

CONVERTISSEURS NA ET AN

Réalisation d un réseau de capteurs de température sans fil basé sur le protocole ZigBee

Introduction au langage C

V- Manipulations de nombres en binaire

SEO 200. Banc d étude du positionnement angulaire d une éolienne face au vent DESCRIPTIF APPLICATIONS PEDAGOGIQUES

Mini_guide_Isis_v6.doc le 10/02/2005 Page 1/15

Encoder Encoder 1 sur 15. Codification fil par étage 15 étages max. + 2 flèches + signal de mouvement. Raccordements 0.1 mm²...

- MANIP 2 - APPLICATION À LA MESURE DE LA VITESSE DE LA LUMIÈRE

Fonctions de la couche physique

Ordinateurs, Structure et Applications

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Logiciels DSPiy. DSPiyStudio logiciels et format des fichiers. incomplet

Transmission d informations sur le réseau électrique

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

TERMINAL D AUDIO CONFERENCE ANALOGIQUE USB VOIP NOTICE

UE 503 L3 MIAGE. Initiation Réseau et Programmation Web La couche physique. A. Belaïd

Les structures. Chapitre 3

Bases de programmation. Cours 5. Structurer les données

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

DAC. avec interface USB audio et préampli stéréo Casque CONVERTISSEUR DIGITAL VERS ANALOGIQUE. Guide d utilisation V1.1 Jan 2011

MANUEL D INSTRUCTION

Initiation. àl algorithmique et à la programmation. en C

Cours de Systèmes d Exploitation

Mesures de temps de propagation de groupe sur convertisseurs de fréquence sans accès aux OL

Chap17 - CORRECTİON DES EXERCİCES

Projet audio. Analyse des Signaux ELE2700

Conception de circuits numériques et architecture des ordinateurs

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Transmission de données. A) Principaux éléments intervenant dans la transmission

Systèmes de transmission

Equipement. électronique

Débuter avec PsoC ou PsoC niveau 0

Chapitre 10. Les interfaces Comparable et Comparator 1

Rosemount 333 HART Tri-Loop


Les techniques de multiplexage

MICROCONTROLEURS PIC PROGRAMMATION EN C. V. Chollet - cours-pic-13b - 09/12/2012 Page 1 sur 44

Description du logiciel Modbus RTU

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Informatique Générale

Projet de synthèse de l'électronique analogique : réalisation d'une balance à jauges de contrainte

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

Système de sécurité de périmètre INTREPID

Cours d Algorithmique et de Langage C v 3.0

1 Recherche en table par balayage

CENTRALE DE SURVEILLANCE EMBARQUEE MULTIMEDIA

COMMUNICATION ENTRE DEUX ORDINATEURS PAR LASER MODULE EN CODE MORSE OU BINAIRE.

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

La programmation des ATMEL AVR

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Chapitre 22 : (Cours) Numérisation, transmission, et stockage de l information

MultiMedia Board. Système de développement. Manuel utilisateur. pour PIC32MX4

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

QUESTION 1 {2 points}

Précision d un résultat et calculs d incertitudes

Solutions pour la mesure. de courant et d énergie

Objet : Alimentation pour ordinateur portable et autre. Alimentation Schéma 1

NAGRA VI Enregistreur numérique six pistes

Transcription:

TP convertisseur analogique-numérique É. Carry, J.-M Friedt 22 février 2016 1 Généralités sur le convertisseur analogique-numérique Un convertisseur analogique-numérique fait le lien entre le monde des grandeurs continues (analogiques) et des grandeurs discrétisées (numériques). Il convertit une valeur V comprise entre 0 et V re f, la tension de référence, en une valeur numérique b comprise entre 0 et 2 N 1 pour un encodage sur N bits, selon b = V V re f 2 N 1 (1) Dans le cas de l Atmega32U4, N = 10. Quelle est la résolution du convertisseur si V re f = 3,3 V? De nombreux microcontrôleurs annoncent une multitude de canaux de conversion analogique numérique, alors qu en pratique un unique convertisseur voit ses entrées multiplexées : seule une conversion peut avoir lieu à un instant donné. Des conversions multiples de divers canaux (entrées) sont nécessairement séquentielles, sauf dans le cas particulier de plusieurs convertisseurs physiques (cas du STM32F1xx qui comporte deux convertisseurs par exemple). En s inspirant du schéma de la carte électronique, identifier la broche correspondant au canal 0 du convertisseur analogiquenumérique (ADC0). De même, quel canal de convertisseur est associé à la broche sérigraphiée A0 sur la carte Olimex?. Le convertisseur analogique-numérique équipant l ATMega32U4 fonctionne par approximations successives. Son fonctionnement est détaillé dans le chapitre 24 de [1], tandis que la figure 24-1 de [1] illustre l architecture générale du convertisseur. On y notera en particulier la présence d un convertisseur numérique-analogique (DAC) chargé de générer, par rapport à la tension de référence AREF, une tension qui se compare à la tension inconnue à identifier. Une méthode de dichotomie naturelle pour trouver le mot binaire représentant la tension inconnue permet de programmer successivement le DAC avec des versions de plus en plus précises du mot qui finira par être l estimation de la tension (ADCH/ADCL). Noter aussi la présence du multiplexeur routant l unique sortie vers les 15 entrées possibles, incluant la masse, une référence de tension ou une diode faisant office de capteur grossier de température. La référence interne de température des microcontrôleurs est tout juste bonne à détecter une variation relative de température ou une sortie de la gamme de fonctionnement. Elle ne peut en aucun cas être utilisée à des fins métrologiques [1, section 24.6.1]. Citer un autre type de convertisseur analogique-numérique. Quel est l avantage de chaque méthode? 1 2 Affichage Tout au long de ces exercices nous aurons besoin de formater un affichage d une valeur codée sur 16 bits afin de l afficher sur un terminal. Le nombre binaire v doit être convertir en chaîne de caractères s qui sera affichée par la fonction USB_writestr(char *). Proposer une fonction affiche(unsigned short, char*) qui, de la valeur fournie comme entier codé sur 16 bits, génère la chaîne de caractères affichable qui représente cette valeur en hexadécimal. Une sonde de températe LM335 2 est connectée, sur le circuit supportant les afficheurs 7-segments, à la broche A0 de la carte Olimex. Nous désirons mesurer sa température. La tension délivrée par ce composant est de 10 mv/ C. 3 Mode polling Le mode le plus simple du convertisseur est de lancer une conversion, attendre que la conversion s achève, et lire le résultat dans le registre approprié. Dans cet exemple, nous configurons la tension de référence comme étant la tension d alimentation. Il s agit d un choix confortable mais potentiellement peu judicieux en terme de stabilité de la mesure. En effet, une tension d alimentation mal régulée induira une variation de b dans Eq. 1 si V re f varie et ce, même en l absence de fluctuation de V. L alternative est d utiliser une référence interne de 2,56 V de stabilité indépendante de la qualité de 1. http://www.analog.com/library/analogdialogue/archives/39-06/architecture.html 2. www.ti.com/lit/ds/symlink/lm335.pdf 1

l alimentation mais de dynamique plus faible, ou une tension de référence externe fournie sur la broche AREF (42). Comme dans la majorité des microcontrôleurs actuels, une des voies du multiplexeur d ADC (MUX=0x27 [1, p.309]) permet de lire une indication de température, ici en sélectionnant aussi la tension de référence interne de 2,56 V. Listing 1 Conversion sur ADC0 par polling 1 // potentiometre entre GND/3.3V pour les extremes et ADC0=A5 2 // ou sonde de temperature de la carte 7-segments (LM235) 3 //http://maxembedded.com/2011/06/20/the-adc-of-the-avr/ 4 5 #include <avr/io.h> //E/S ex PORTB 6 #define F_CPU 16000000UL 7 #include <util/delay.h> // _delay_ms 8 #include "affiche.h" 9 #include "VirtualSerial.h" 10 11 extern USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface; 12 extern FILE USBSerialStream; 13 14 void adc_init() 15 { DIDR0=0xff; // http://www.openmusiclabs.com/learning/digital/atmega-adc 16 ADMUX = (1<<REFS0 1<<REFS1); // AREF = AVcc 17 // ADC Enable and prescaler of 128 : 16 MHz/128=125 khz 18 ADCSRA = (1<<ADEN) (1<<ADPS2) (1<<ADPS1) (1<<ADPS0); 19 } 20 21 unsigned short adc_read(uint8_t ch) 22 { 23 ch &= 0x07; // ch\in[0..7] 24 ADMUX=(ADMUX & 0xF8) ch; // clears the bottom 3 bits before ORing 25 26 ADCSRA = (1<<ADSC); // start single convertion 27 while(adcsra & (1<<ADSC)); // poll jusqu'a fin de conversion 28 return (ADC); 29 } 30 31 int main(void){ 32 unsigned short res=0; 33 char s[7]; 34 SetupHardware(); 35 CDC_Device_CreateStream(&VirtualSerial_CDC_Interface, &USBSerialStream); 36 GlobalInterruptEnable(); 37 38 DDRB =1<<PORTB5; 39 DDRE =1<<PORTE6; 40 PORTB = 1<<PORTB5; 41 PORTE &= ~1<<PORTE6; 42 43 adc_init(); 44 s[4]='\r'; s[5]='\n'; s[6]=0; 45 46 while (1){ 47 PORTB^=1<<PORTB5;PORTE^=1<<PORTE6; 48 _delay_ms(500); 49 res=adc_read(7); 50 affiche(res,s); 51 fputs(s, &USBSerialStream); 52 // les 3 lignes ci-dessous pour accepter les signaux venant du PC 53 CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); 54 CDC_Device_USBTask(&VirtualSerial_CDC_Interface); 55 USB_USBTask(); 56 } 57 return 0; 58 } Proposer le Makefile qui exploite la fonction affiche() pour afficher le résultat de la conversion. Une fois le convertisseur configuré, nous avons uniquement à lancer un ordre de début de conversion (bit ADSC ADC 2

Start Conversion) en prenant soin d avoir défini le canal sur lequel se fait la mesure, puis d attendre le message de fin de conversion. Après avoir vérifié que la carte est alimentée en 5 V (cavalier à côté du port USB), placer un fil alternativement entre A0 et GND, A0 et 3,3V, A0 et 5 V. Quelles sont les valeurs renvoyées par l ADC? Afin d afficher des séquences de mesures stockées en format hexadécimal (que Matlab et GNU/Octave ne savent pas lire par load, nous pourrons par exemple utiliser f=fopen("fichier.dat"); d=fscanf(f,"%x"); (Fig. 1). 630 620 fer a souder mesure (bits) 610 600 fer a souder 590 bombe givrante 580 0 100 200 300 400 500 600 echantillon (u.a.) FIGURE 1 Mesure de température par la sonde LM335. Pour utiliser un ADC au dessus de 7, penser à activer la fonction analogique correspondante (registre DIDR2) et noter que MUX5 se trouve dans un autre registre que les 5 premiers bits de configuration du canal. 4 Acquisition d un signal «rapide» : utilisation de la carte son Une carte son de PC est un générateur idéal de signaux périodiques, facilement accessible. La seule subtilité consiste à transposer le signal en tension puisque l ADC de l Atmega32U4 n accepte que des tensions positives. Le circuit de la Fig. 2 propose une solution certes peu élégante, mais fonctionnelle. Comment faudrait-il améliorer le circuit pour ne pas être dépendant de l impédance de sortie de la carte son et de l impédance d entrée de l ADC?. 800 100 Hz 200 Hz 440 Hz 750 gnuradio companion 3,3V 700 ADC1 tension (ADC) 650 600 550 500 1100 1150 1200 1250 1300 temps (u.a.) FIGURE 2 Gauche : utilisation de gnuradio-companion pour générer un signal périodique à échantillonner par l ADC1 de l Atmega32U4. Droite : résultat de la mesure. Comment acquérir les données au plus vite afin d identifier la fréquence d échantillonnage? Quelle est la fréquence d échantillonnage du signal? Un extrait du programme utilisé pour générer les courbes de la Fig. 2 (droite) est proposé ci-dessous. Il se base sur l exemple en mode polling de gestion de l ADC. On notera que la carte son est connectée à l entrée ADC1. 1 [...] 3

2 int main(void){ 3 unsigned short res[256]; 4 int k; 5 char s[7]; 6 7 [...] 8 while (1){ 9 PORTB^=1<<PORTB5;PORTE^=1<<PORTE6; 10 _delay_ms(100); 11 for (k=0;k<256;k++) res[k]=adc_read(1); 12 for (k=0;k<256;k++) {affiche(res[k],s); USB_writestr(s);} 13 } 14 return 0; 15 } En cas de dysfonctionnement, vérifier au moyen de alsamixer que l amplitude du signal de sortie n est pas au minimum et que la sortie audiofréquence est active. On pourra aussi s affranchir de l interface graphique de gnuradio-companion pour générer le signal audiofréquence sur la carte son en utilisant la commande play -n synth 3 sin 440 pour générer continument une sinusoïde de fréquence 440 Hz. Ce mode de fonctionnement attendre la fin de conversion en sondant l état d un bit de statut (polling) gaspille des ressources de calcul en bouclant pour attendre que la conversion prenne fin, alors que d autres opérations pourraient prendre place entre temps, surtout avec un convertisseur aussi lent que celui annonçant un débit de 15 ks/s (ou 13 cycles d horloge de l ADC candencé entre 50 et 200 khz [1, p.296] 200/13=15 ks/s). Nous allons donc nous intéresser au cas où nous lançons un ordre de conversion puis vaquer à nos occupations, le microcontrôleur nous prévenant par interruption de la disponibilité de la donnée. 5 Mode interruption Plus efficace, au lieu de boucler en sondant le registre de statut du convertisseur analogique-numérique, nous sommes informés par une interruption de la fin de conversion. Ce mode de fonctionnement permet en particulier d endormir le microcontrôleur en attendant la fin de conversion (économie d énergie), ou de lancer d autres tâches pendant que le convertisseur effectue son travail. Listing 2 Conversion sur ADC0 détectée par interruption 1 // http://www.avrfreaks.net/forum/tut-c-newbies-guide-avr-adc 2 #define F_CPU 16000000UL 3 #include <avr/io.h> 4 #include <avr/power.h> 5 #include <avr/interrupt.h> 6 #include <avr/wdt.h> 7 #include <util/delay.h> // _delay_ms 8 #include "affiche.h" 9 #include "VirtualSerial.h" 10 11 extern USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface; 12 extern FILE USBSerialStream; 13 14 volatile char flag=0; 15 16 ISR(ADC_vect) {flag=1;} 17 18 void adc_init() 19 {ADMUX = (1 << REFS0); // Set ADC reference to AVCC 20 ADCSRA = (1<<ADEN) (1<<ADPS2) (1<<ADPS1) (1<<ADPS0); // no MUX for ADC0 21 ADCSRA = (1 << ADIE); // Enable ADC Interrupt 22 } 23 24 int main (void) 25 {volatile unsigned short res; 26 char s[7]; 27 s[4]='\r'; s[5]='\n'; s[6]=0; 28 29 SetupHardware(); 30 CDC_Device_CreateStream(&VirtualSerial_CDC_Interface, &USBSerialStream); 4

31 GlobalInterruptEnable(); 32 33 adc_init(); 34 sei(); 35 36 while (1) 37 {ADCSRA = (1<<ADSC); // start single conversion 38 if (flag!=0) {res=adc;flag=0; // fin de conversion grace a interrupt 39 affiche(res,s);fputs(s, &USBSerialStream); 40 } 41 _delay_ms(100); 42 // les 3 lignes ci-dessous pour accepter les signaux venant du PC 43 CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); 44 CDC_Device_USBTask(&VirtualSerial_CDC_Interface); 45 USB_USBTask(); 46 } 47 } Nous prenons soin de déclencher les interruptions en général (sei()), et de rapatrier la donnée lue dans le registre ADC (10 bits) lorsqu un drapeau est transféré du gestionnaire d interruption au programme principal indiquant la disponibilité de la donnée. Vérfier le bon mode de fonctionnement de cette méthode de mesure Estimer la fréquence d échantillonnage en observant le nombre de points acquis sur un signal de référence émis par la carte son du PC. Modifier le programme pour maximiser la bande passante de mesure. Comme pour la lecture sur une carte son, il est courant de charger de façon automatique un tableau de données et d informer le programme principal de la disponibilité de cette masse de données plutôt qu interrompre l exécution du programme principal pour chaque nouvelle donnée acquise. Modifier le gestionnaire d interruption afin de remplir un tableau de N = 256 éléments et tester dans le programme principal l indice du tableau pour n en afficher le contenu que lorsque le N ième élément a été acquis. 6 Échantillonnage périodique sur timer L ADC peut être déclenché de façon périodique par un timer : ce mode de fonctionnement permet de respecter une condition fondamentale du traitement spectral du signal, à savoir l acquisition périodique des échantillons. Diverses sources de déclenchement sont possibles, telles que décrites sur l extrait de datasheet de la Fig. 3. Listing 3 Conversion sur ADC0 déclenchée par timer 1 // http://www.avrfreaks.net/forum/atmega32u4-starting-adc-conversion-timer4 2 #include <avr/io.h> //E/S ex PORTB 3 #include <avr/wdt.h> 4 #include <avr/power.h> 5 #include <avr/interrupt.h> 6 #define F_CPU 16000000UL 7 #include <avr/interrupt.h> 8 #include <util/delay.h> // _delay_ms 9 #include "affiche.h" 10 #include "VirtualSerial.h" 11 12 extern USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface; 13 extern FILE USBSerialStream; 14 15 EMPTY_INTERRUPT(TIMER4_OVF_vect); 16 17 volatile unsigned short adc,flag; 18 19 ISR(ADC_vect) 20 {adc = ADC; 21 flag = 1; 22 } 23 24 void adc_init() 25 { ADMUX = (1<<REFS0); // quelle tension de reference? quelle canal? 26 ADCSRB = (1<<ADTS3); // quelle source de declenchement de la mesure? 27 ADCSRA = (1<<ADEN) (1<<ADSC) (1<<ADATE) (1<<ADIE) (1<<ADPS2) (1<<ADPS1) (1<<ADPS0); 5

FIGURE 3 Sources de déclenchement de l ADC notamment liées aux divers timers. 28 } 29 30 int main(void) 31 { char s[7]; 32 s[4]='\r'; s[5]='\n'; s[6]=0; 33 34 SetupHardware(); 35 CDC_Device_CreateStream(&VirtualSerial_CDC_Interface, &USBSerialStream); 36 GlobalInterruptEnable(); 37 38 TCCR4B = (1<<CS43) (1<<CS42) (1<<CS41) (1<<CS40); // quel prescaler? 39 TIMSK4 = (1<<TOIE4); // quel taux de raffraichissement de l'interruption timer? 40 TC4H = 3; OCR4C = 0xFF; // Set TOP (overflow limit) to 0x3FF (= 1023) 41 42 adc_init(); 43 sei(); 44 45 while (1) 46 { 47 if (flag) { 48 flag = 0; 49 affiche(adc,s); fputs(s, &USBSerialStream); 6

50 // les 3 lignes ci-dessous pour accepter les signaux venant du PC 51 CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); 52 CDC_Device_USBTask(&VirtualSerial_CDC_Interface); 53 USB_USBTask(); 54 } 55 } 56 } 1. Calculer et valider la fréquence d échantillonnage périodique de la conversion. Pour ce faire, répondre aux diverses questions parsemant les commentaires du code. 2. Quelle est la référence de tension utilisée pour la mesure? ce choix est-il judicieux? 3. Quel est le canal d ADC mesuré? Comment activer la lecture sur le canal 1 qui est connecté au jack qui va à la carte son? 4. Quelle est la source de déclenchement de la mesure (configuration de ADCSRA quel timer et selon quelle configuration)? 5. Modifier la fréquence de déclenchement du timer et vérifier l impact sur la mesure. En particulier, configurer l ADC pour échantillonner à 1 khz et exciter une sinusoïde périodique à 100 Hz sur la carte son. 6. Quelle est la fréquence maximale accessible par cette méthode? 7

Nous constatons cependant que la fréquence maximale accessible est 8 khz. Dans l exemple ci-dessous, nous avons choisi CS43=0, CS42=0, CS41=1 et CS40=1 pour obtenir une fréquence d échantillonnage de 4 khz, qui se traduit bien par 9 points/période lors de l acquisition d un signal représentant une sinusoïde à 440 Hz. Compte tenu de l instabilité de la bibliothèque de communication par USB, on sauvera les données dans le fichier toto au moyen de minicom -C toto. Au lieu de lire une unique valeur dans un scalaire adc, remplir dans l interruption un tableau de valeurs, qui sera lu par le programme principal une fois plein. Cette opération a pour vocation de s affranchir de la limitation sur la fréquence d acquisition induite par le temps de communication. Bonus : passer le microcontrôleur en mode veille entre deux conversions analogique-numériques afin de réduire la consommation électrique du microcontrôleur. Pour ce faire, on s inspirera de la documentation disponible à http://www.nongnu.org/avr-libc/user-manual/group avr sleep.html. Attention : l interruption du timer 4 permet de sortir du mode veille mais entre en conflit avec la communication par USB. Penser, dans ce mode, à communiquer au travers de l USART (port RS232). Appendice : réglage du niveau sonore L utilisation de la carte son implique d activer la sortie audio et de régler le niveau sonore. L outil pour ce faire est alsamixer. Si pulseaudio est le pilote audio utilisé, il faut passer en mode alsa en sélectionnant la carte son par F6. On vérifiera en particulier que les sorties ne sont pas inhibées (Mute). Références [1] Atmel, 8-bit Microcontroller with 16/32K Bytes of ISP Flash and USB Controller ATmega16U4 & ATmega32U4, disponible à www.atmel.com/images/doc7766.pdf (version 776F AVR 11/10) 8