initiation au microcontrôleursti2dvox.patgue.com/tsin/pdf/sti2d sin debuter avec...p.g lycée...
TRANSCRIPT
P.G Lycée Vaucanson
17 novembre 2014
STI2D SIN Debuter avec CodeVision.docx STI2D SIN Page 1
Mise en oeuvre des microcontrôleurs
ATMega
1 Pour préparer la session de travail
Pour préparer la session de travail il faut recopier sur son poste dans son
dossier c:\Travail_eleves\[REPERTOIRE A MON NOM le dossier Prog_CodeVision_depart_eleve
disponible sur le serveur.
2 Le schéma de départ
INIT_CodeVision.DSN
Ce schéma très simple nous montre l’interconnexion des entrées sorties à savoir quatre leds, un
afficheur LCD de 4 lignes de 20 caractères et quatre interrupteurs.
Une version en mode paysage est à la fin du document.
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9D
18
D0
7
E6
RW
5R
S4
VS
S1
VD
D2
VE
E3
LCD1
LM044L
PB0/ICP1/CLKO/PCINT014
PB1/OC1A/PCINT115
PB3/MOSI/OC2A/PCINT317
PB2/SS/OC1B/PCINT216
PD6/AIN0/OC0A/PCINT2212
PD5/T1/OC0B/PCINT2111
PD4/T0/XCK/PCINT206
PD3/INT1/OC2B/PCINT195
PD2/INT0/PCINT184
PD1/TXD/PCINT173
PD0/RXD/PCINT162
PB4/MISO/PCINT418
PB5/SCK/PCINT519
PB7/TOSC2/XTAL2/PCINT710
PB6/TOSC1/XTAL1/PCINT69
PC6/RESET/PCINT141
PC5/ADC5/SCL/PCINT1328
PC4/ADC4/SDA/PCINT1227
PC3/ADC3/PCINT1126
PC2/ADC2/PCINT1025
PC1/ADC1/PCINT924
PC0/ADC0/PCINT823
AVCC20
AREF21
PD7/AIN1/PCINT2313
ATMEGA88
BP1
Initiation au microcontrôleur
INIT_CodeVision.DSN
pour simuler en continu
D1LED-BLUE
D2LED-GREEN
D3LED-RED
D4LED-YELLOW
Mise en oeuvre de départ
BP2
BP3
BP4
P.G Lycée Vaucanson
17 novembre 2014
STI2D SIN Debuter avec CodeVision.docx STI2D SIN Page 2
3 Le premier projet utilisation du CodeWizard de CodeVision
Le logiciel Codevision est un EDI qui permet de programmer en langage c les microcontrôleurs Atmel. Il
est beaucoup moins performant que des outils comme AVRco que nous verrons plus tard. La version
utilisée ici est une version d’évaluation disponible sur le site en téléchargement.
Lancer le logiciel CodeVision version 2.04.4a
Création d’un nouveau projet : New \ Project
Choix du microcontrôleur :
P.G Lycée Vaucanson
17 novembre 2014
STI2D SIN Debuter avec CodeVision.docx STI2D SIN Page 3
Configuration des ports du microcontrôleur : il y a trois ports à configurer, nous ne configurons que
les ports pour les entrées sorties sur une broche individuelle :
Le port B est connecté sur l’afficheur LCD il est géré par un onglet
particulier donc il n’y a rien à configurer pour les bits de manière
individuelle.
Le port C est configuré pour les deux entrées PC2 et PC3 qui
reçoivent chacune un bouton poussoir.
PB0/ICP1/CLKO/PCINT014
PB1/OC1A/PCINT115
PB3/MOSI/OC2A/PCINT317
PB2/SS/OC1B/PCINT216
PD6/AIN0/OC0A/PCINT2212
PD5/T1/OC0B/PCINT2111
PD4/T0/XCK/PCINT206
PD3/INT1/OC2B/PCINT195
PD2/INT0/PCINT184
PD1/TXD/PCINT173
PD0/RXD/PCINT162
PB4/MISO/PCINT418
PB5/SCK/PCINT519
PB7/TOSC2/XTAL2/PCINT710
PB6/TOSC1/XTAL1/PCINT69
PC6/RESET/PCINT141
PC5/ADC5/SCL/PCINT1328
PC4/ADC4/SDA/PCINT1227
PC3/ADC3/PCINT1126
PC2/ADC2/PCINT1025
PC1/ADC1/PCINT924
PC0/ADC0/PCINT823
AVCC20
AREF21
PD7/AIN1/PCINT2313
ATMEGA88
BP1
BP2
P : PullUp pour fixer le potentiel haut de l’entrée quand l’interrupteur est ouvert.
in : la broche fonctionne en entrée logique
T : la broche fonctionne en entrée logique elle reçoit les deux niveaux logiques 0 et 1.
P.G Lycée Vaucanson
17 novembre 2014
STI2D SIN Debuter avec CodeVision.docx STI2D SIN Page 4
Le Port B est connecté aux leds et à deux entrées de type bouton poussoir :
PB0/ICP1/CLKO/PCINT014
PB1/OC1A/PCINT115
PB3/MOSI/OC2A/PCINT317
PB2/SS/OC1B/PCINT216
PD6/AIN0/OC0A/PCINT2212
PD5/T1/OC0B/PCINT2111
PD4/T0/XCK/PCINT206
PD3/INT1/OC2B/PCINT195
PD2/INT0/PCINT184
PD1/TXD/PCINT173
PD0/RXD/PCINT162
PB4/MISO/PCINT418
PB5/SCK/PCINT519
PB7/TOSC2/XTAL2/PCINT710
PB6/TOSC1/XTAL1/PCINT69
PC6/RESET/PCINT141
PC5/ADC5/SCL/PCINT1328
PC4/ADC4/SDA/PCINT1227
PC3/ADC3/PCINT1126
PC2/ADC2/PCINT1025
PC1/ADC1/PCINT924
PC0/ADC0/PCINT823
AVCC20
AREF21
PD7/AIN1/PCINT2313
ATMEGA88
D1LED-BLUE
D2LED-GREEN
D3LED-RED
D4LED-YELLOW
BP3
BP4
out : la broche fonctionne en sortie logique
out : valeur initiale de la sortie
P.G Lycée Vaucanson
17 novembre 2014
STI2D SIN Debuter avec CodeVision.docx STI2D SIN Page 5
Configuration de l’afficheur LCD :
Sauvegarde du projet attention à vérifier que vous êtes dans le bon répertoire.
choix du Port
choix du nombre de caractères par lignes
Nom générique du projet utilisé trois fois avec des types de fichiers différents.
P.G Lycée Vaucanson
17 novembre 2014
STI2D SIN Debuter avec CodeVision.docx STI2D SIN Page 6
Voilà le résultat de la génération automatique du châssis du programme de votre application quelques
ajouts ont été effectués après en utilisant l’éditeur de code :
/***************************************************** This program was produced by the CodeWizardAVR V2.04.4a Evaluation Automatic Program Generator © Copyright 1998-2009 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Version : Date : 10/10/2013 Author : Freeware, for evaluation and non-commercial use only Company : Comments: Chip type : ATmega88 Program type : Application AVR Core Clock frequency: 10,000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *****************************************************/ #include <mega88.h> #include <delay.h> #define Led_Rouge PORTB.1 #define ALLUME 0 #define ETEINT 1 // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x0B ;PORTD #endasm #include <lcd.h>
!! Insertion des procédures personnelles ici !!
Ajout de l’appel de la
bibliothèque des délais en mS et
µS
Les directives #define permettent de
rendre le programme plus lisible elles
se situent au début du programme.
P.G Lycée Vaucanson
17 novembre 2014
STI2D SIN Debuter avec CodeVision.docx STI2D SIN Page 7
// Declare your global variables here void main(void) { // Declare your local variables here // Crystal Oscillator division factor: 1 #pragma optsize- CLKPR=0x80; CLKPR=0x00; #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif // Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out // State7=T State6=T State5=P State4=P State3=1 State2=1 State1=1 State0=1 PORTB=0x3F; DDRB=0x0F; // Port C initialization // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=P State2=P State1=T State0=T PORTC=0x0C; DDRC=0x00; // Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T PORTD=0x00; DDRD=0x08; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh // OC0A output: Disconnected // OC0B output: Disconnected TCCR0A=0x00; TCCR0B=0x00; TCNT0=0x00; OCR0A=0x00;
Les choix de configurations des ports ont
été pris en compte.
Les instructions d’initialisation du
microcontrôleurs sont générées
automatiquement.
P.G Lycée Vaucanson
17 novembre 2014
STI2D SIN Debuter avec CodeVision.docx STI2D SIN Page 8
OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=FFh // OC2A output: Disconnected // OC2B output: Disconnected ASSR=0x00; TCCR2A=0x00; TCCR2B=0x00; TCNT2=0x00; OCR2A=0x00; OCR2B=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-14: Off // Interrupt on any change on pins PCINT16-23: Off EICRA=0x00; EIMSK=0x00;
P.G Lycée Vaucanson
17 novembre 2014
STI2D SIN Debuter avec CodeVision.docx STI2D SIN Page 9
PCICR=0x00; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=0x00; // Timer/Counter 1 Interrupt(s) initialization TIMSK1=0x00; // Timer/Counter 2 Interrupt(s) initialization TIMSK2=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; ADCSRB=0x00; // LCD module initialization lcd_init(20); L’initialisation est terminée zoom sur la partie fonctionnelle de notre code :
lcd_putsf("BIENVENUE"); lcd_gotoxy(0,1); lcd_putsf("EN STI2D SIN"); delay_ms(500); lcd_clear(); while (1) { // Place your code here // Clignotement de la LED ROUGE Led_Rouge=ALLUME; delay_ms(200); Led_Rouge=ETEINT; delay_ms(200); }; }
Ajoutez le
commentaire
de ces lignes
de codes !
P.G Lycée Vaucanson
17 novembre 2014
STI2D SIN Debuter avec CodeVision.docx STI2D SIN Page 10
Pour compiler et construire l’exécutable il faut cliquer sur le bouton :
Complément prise en compte des trois autres leds.
En recopiant le principe de la prise en compte de la Led rouge ajouter la gestion des trois autres leds.
Définir les équivalences pour les boutons poussoirs, voilà le modèle pour BP1 :
// définitions d'équivalences
// pour la meilleure
// gestion du programme :
#define BP1 PINC.3
#define BP2 ?
#define BP3 ?
#define BP4 ?
#define APPUYE 0
#define REPOS 1
#define ALLUME 0
#define ETEINT 1
On peut ajouter un test et un affichage de l’état de l’interrupteur :
// Test BP numéro 1
lcd_gotoxy(0,0);
lcd_putsf("PORT PC");
ConverHexa(3);
lcd_putchar(LSB);
if (BP1==APPUYE)
lcd_putsf(" APPUI ");
else
lcd_putsf(" REPOS ");
Tester ce code puis faites de même pour les trois autres boutons poussoirs.
P.G Lycée Vaucanson
17 novembre 2014
STI2D SIN Debuter avec CodeVision.docx STI2D SIN Page 11
Ecriture en hexadécimale sur l’afficheur LCD
Pour écrire en hexadécimal sur l’afficheur cette procédure reçoit un octet data et renvoie les deux
caractères ASCII de l’hexadécimal correspondant dans les variables globales MSB et LSB. Ce code est
à recopier avant la procédure main.
unsigned char MSB ='0';
unsigned char LSB ='0';
ConverHexa(unsigned char data) // D'après D.L
{
LSB = data & 0x0F ;
if (LSB > 9) LSB = (LSB + 'A' - 10);
else LSB = (LSB + '0');
MSB = data & 0xF0 ;
MSB = (MSB >> 4) ;
if (MSB > 9) MSB = (MSB + 'A' - 10);
else MSB = (MSB + '0');
}
P.G Lycée Vaucanson
17 novembre 2014
STI2D SIN Debuter avec CodeVision.docx STI2D SIN Page 12
Indique un document ressource
Retour au sommaire
Retour à la page courante
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9D
18
D0
7
E6
RW
5R
S4
VS
S1
VD
D2
VE
E3
LCD1
LM044L
PB0/ICP1/CLKO/PCINT014
PB1/OC1A/PCINT115
PB3/MOSI/OC2A/PCINT317
PB2/SS/OC1B/PCINT216
PD6/AIN0/OC0A/PCINT2212
PD5/T1/OC0B/PCINT2111
PD4/T0/XCK/PCINT206
PD3/INT1/OC2B/PCINT195
PD2/INT0/PCINT184
PD1/TXD/PCINT173
PD0/RXD/PCINT162
PB4/MISO/PCINT418
PB5/SCK/PCINT519
PB7/TOSC2/XTAL2/PCINT710
PB6/TOSC1/XTAL1/PCINT69
PC6/RESET/PCINT141
PC5/ADC5/SCL/PCINT1328
PC4/ADC4/SDA/PCINT1227
PC3/ADC3/PCINT1126
PC2/ADC2/PCINT1025
PC1/ADC1/PCINT924
PC0/ADC0/PCINT823
AVCC20
AREF21
PD7/AIN1/PCINT2313
ATMEGA88
BP1
Initiation au microcontrôleur
INIT_CodeVision.DSN
pour simuler en continu
D1LED-BLUE
D2LED-GREEN
D3LED-RED
D4LED-YELLOW
Mise en oeuvre de départ
BP2
BP3
BP4