Site de G. Laroche |
FAQ
et utilitaires pour
microcontroleur AVR |
![]() |
WinAVR | Compilateur C |
![]() |
PonyProg | Logiciel de programmation AVR ISP utilisable avec la carte de programmation AVR ISP ci dessous |
carte programmateur AVR ISP port parallèle |
FAQ sur les micro contrôleur AVR ATMEL ATmega8, ATmega32, etc ..
Cette page est le résultat des problèmes rencontrés lors de l'étude des cartes proposées sur ce site.
SIGNAL
/ INTERRUPT
Le comportement des macros SIGNAL et INTERRUPT pour les drivers
d'interruption est différent :
INTERRUPT autorise de nouvelles interrution dès le début de la
fonction par l'instruction "sei". Si cette fonctionnalité est
utile pour traiter tout de suite une nouvelle interruption, elle peut toutefois
poser un problème si l'interruption en cours de traitement n'est pas
encore acquitée.
SIGNAL autorise une nouvelle interruption uniquement à la fin du traitement
de l'interruption en cours.
Exemple : driver de réception RS232 :
#include <avr/signal.h>
SIGNAL(SIG_UART_RECV)
{
// RS232 receive process
}
Les chaînes
de caractères et le mapping mémoire
Lorsque vous utilisez des chaînes de caractères
(pour le debug par exemple), par défaut elles sont recopiées en
mémoire RAM depuis la zone de constantes en mémoire flash pendant
la phase d'initialisation.
Pour éviter cette recopie en mémoire RAM, vous pouvez utiliser
les macros PGM_P et PSTR du fichiers <avr/pgmspace.h> afin d'accèder
directement dans l'espace programme en flash.
PGM_Pdéfinit un pointeur sur un caractere en mémoire flash
PGM_P définit une chaîne de caractères en mémoire
flash
Exemple : affichage trace de debug :
#include <avr/pgmspace.h>
...
PrintfStr(PSTR("Memorisation Frequence:"));
...
void PrintfStr( PGM_P data ); // Emission d'une chaine de caracteres depuis la flash
Sélection de
l'horloge (Quartz/horloge interne)
Par défaut les µP ATmega sont configurés
pour utiliser une horloge interne de 1MHz.
Si vous utilisez un quartz ou une horloge externe il est necessaire de reconfigurer
les bits 'fusibles' CKOPT, CKSEL3, CKSEL2, CKSEL1 et CKSEL0
La valeur "1" correspond à un bit non programmé (bit
non sélectionné dans la fenêtre ponyprog)
La valeur "0" correspond à un bit programmé (bit sélectionné
dans la fenêtre ponyprog)
Exemple de configuration pour un quartz de 16 MHz (ou >3MHz):
CKOPT | CKSEL3 | CKSEL2 | CKSEL1 | CKSEL0 |
0
|
1
|
1
|
1
|
1
|
Exemple de configuration pour un quartz de 2.432MHz (ou <3MHz):
CKOPT | CKSEL3 | CKSEL2 | CKSEL1 | CKSEL0 |
0
|
1
|
1
|
0
|
1
|
Utilisation des résistances
de pull-up internes
Les µP ATmega disposent de résistances de pullup
intégrées.
Ces résistances internes peuvent être toutes désactivées en positionnant à 1 le bit PUD du registre SFIOR.
Chaque résistance peut aussi être désactivée individuellement en positionnant à 0 le bit du registre PORT correspondant à l'entrée utilisée.
Le tableau ci dessous résume les conditions d'activations des résistances
de pull up:
DDxn
|
PORTxn
|
PUD (in SFIOR)
|
I/O
|
Pull up
|
commentaires
|
0 | 0 | X | input |
NO
|
haute impédance (Tri state Hi-Z) |
0 | 1 | 0 | input |
Yes
|
Pxn source de courrant si l'entrée est au niveau bas |
0 | 1 | 1 | input |
NO
|
haute impédance (Tri state Hi-Z) |