Découvrez notre Chaîne YouTube "Ingénierie et Projets"
Découvrez notre Chaîne Secondaire "Information Neuronale et l'Ingénierie du Cerveau"
Objectifs
- Savoir les spécifications du CAN
- Connaitre les registres du CAN
- Savoir changer la fréquence du CAN
- Savoir changer la tension de référence
- Savoir configurer les modes d’acquisitions
- Tout savoir sur le CAN avec des exemples pratiques!
- Développement d’une nouvelle bibliothèque avancée pour le convertisseur ADC
Datasheet ICI
Synthèse des spécifications (voir la page 365 du datasheet)
- Résolution 10 bits (0-1023)
- Erreur absolue 2.5-3 LSB
- Temps de conversion (Running Conversion) 13-260 µs (77-3.8 kHz)
- Fréquence (Single Conversion) 50-1000 kHz!!
- Bande passante analogique (entrée) 38.5 kHz
Les registres du convertisseur A/N
- Adresse Registre Page Fonction
- (0x7C) ADMUX 281 Contrôle
- (0x7B) ADCSRB 266 Contrôle
- (0x7A) ADCSRA 285 Contrôle
- (0x79) ADCH (MSB) 286 Données // 10=8+2
- (0x78) ADCL (LSB) 286 Données
Le registre ADMUX: Réf & Canal & Structure des données
Bit 7 6 5 4 3 2 1 0
REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0
ADMUX[7:6]: Configuration de la tension de référence
REFS1 REFS0 Fonction
- 0 0 AREF, Réf externe via le pin AREF
- 0 1 AVCC with external capacitor at AREF pin (Réf interne 5V)
- 1 0 Internal 1.1V Voltage Reference with external capacitor at AREF pin
- 1 1 Internal 2.56V Voltage Reference with external capacitor at AREF pin
ADMUX[5] ADLAR
- 0 ADCL <= données LSB (bits 0-7)&
ADCH <= données MSB (bits 8-9)& (mode normale) - 1 ADCL <= données LSB (bits 0-1)& (bits 7 et 8 du registres)
ADCH <= données MSB (bits 2-9)& (mode Anormale! A éviter)
ADMUX[0-4] 5 bits pour la Sélection du canal (A0, A1, …)
- 00000 => canal 0 (A0)
- 00001 => canal 1 (A1)
- 00010 => canal 2 (A2)
- 00011 => canal 3 (A3)
- …
Le registre ADCSRB: Trig & Modes
Bit 7 6 5 4 3 2 1 0
– ACME – – MUX5 ADTS2 ADTS1 ADTS0
ADCSRB[6]-ACME: Analog Comparator Multiplexer Enable (voir p.265)
0 Mode comparateur entrée (-) (AIN1) [AIN0 (+)] 1 Mode ADC (Mode normale)!!!!!!!!!!!!!!!!
ADCSRB[3]-MUX5: bits 5 pour la sélection des canaux
ADCSRB[0-2]-ADTS0-ADTS2: ADC Auto Trigger Source Selections
- 0 0 0 Free Running mode Mode par défaut, mode continu
- 0 0 1 Analog Comparator Trig externe, comparateur (AIN0, AIN1)
- 0 1 0 External Interrupt 0 Trig externe, pin
- 0 1 1 Timer/Counter0 Match A Trig interne/externe
- 1 0 0 Timer/Counter0 Overflow Trig interne/externe
- 1 0 1 Timer/Counter1 Match B Trig interne/externe
- 1 1 0 Timer/Counter1 Overflow Trig interne/externe
- 1 1 1 Timer/Counter1 Capture Event Trig interne/externe
Le registre ADCSRA: Activation & Interruption & Fréquence
7 6 5 4 3 2 1 0
ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0
ADCSRA[7]-ADEN: ADC Enable
ADCSRA[6]-ADSC: ADC Start Conversion
- Converssion unique: Il faut positionner le bit pour chaque lecture
- Mode continu: Positionner le bit une seule fois (25 cycles init Vs 13 cycles)
ADCSRA[5]-ADATE: ADC Auto Trigger Enable
1 Prise en compte du trig configuré dans ADCSRB[0-2] 0 Pas de trig (ADC off, valeur par défaut)
ADCSRA[4]-ADIF: ADC Interrupt Flag
Indicateur de fin de converssion (données pretes)
& géneration d’une interruption
ADCSRA[3]-ADIE: ADC Interrupt Enable
Activation de l’interruption du CAN
ADCSRA[0-2]-ADPS: ADC Prescaler Select (diviseur / fréquence)
bits Rapport de division
- 0 0 0 1/2
- 0 0 1 1/2
- 0 1 0 1/4
- 0 1 1 1/8
- 1 0 0 1/16
- 1 0 1 1/32
- 1 1 0 1/64
- 1 1 1 1/128
F_ACC=F_XTAL*Rapport de division
Exemple: L’horloge de l’oscillateur = à 4MHz
bits Rapport de division Fréquence
- 0 0 0 1/2 2 MHz (> 1MHz)
- 0 0 1 1/2 2 MHz (> 1MHz)
- 0 1 0 1/4 1 MHz (fréquence limite)
- 0 1 1 1/8 500 kHz
- 1 0 0 1/16 250 kHz
- 1 0 1 1/32 125 kHz
- 1 1 0 1/64 62 kHz
- 1 1 1 1/128 31 kHz
Fréquence réelle d’acquisition: Il faut 13 cycles d’horloge pour une seule acquisition! => FmaxReal=1MHz/13= 76.92 KHz
=> Bande analogique de 76.92/2 = 38.46 Khz !!1Mhz c’est bien mais la fréquence réelle est égale à 76.92 KHz!!Le registre ADCL & ADCH (voir la page 286)
ADCL (8 bits): LSB ANN
ADCH (8 bits): MSB
2 commentaires
Mahera · 2023-08-05 à 8:41 AM
Pourriez-vous m’envoyer des exemples de code qui ont marché? car je manipule maintenant le CAN d’arduino, et je suis un peu bloqué
ElecM · 2023-08-08 à 6:31 AM
Bonjour, je ne sais pas si j’ai encore le code! regarde les tutos …