système d`aide a la navigation presentation
Transcription
système d`aide a la navigation presentation
BACCALAUREAT STI GENIE ELECTRONIQUE PROJET DE CONSTRUCTION ELECTRONIQUE SYSTÈME D’AIDE A L A NAVIGATION TRAVAUX PRATIQUES MESURE DE LA VITESSE DU VENT ET DU BATEAU CALCUL DE LA DISTANCE PARCOURUE DU BATEAU PRE REQUIS : Les questions théoriques devront être réalisées en travail à la maison, les documents peuvent être récupérés à cette adresse : http://genie.electrique.pem.perso.sfr.fr/TEL1.htm Programmation du µC ATMEGA8535 en langage C. Etude théorique et pratique du système d’aide à la navigation. DOCUMENTATION ANNEXE : Documentation des Timers du µC ATMEGA8535» Documentations constructeur de capteur de vitesse ; MATERIEL NECESSAIRE : Générateur basse fréquence. Micro-ordinateur. Module de programmation AVRISP mk2 pour µC ATMEGA8535. Logiciel de développement CODEVISION AVR. Maquette de TP : AVR. Chronomètre ACTIVITES : Etudier le fonctionnement des "timers" afin de compter un évènement et en déduire une fréquence. Utiliser les "timers" pour mesurer la vitesse du vent et du bateau ainsi que la distance parcourue de celui-ci. PRESENTATION Ce TP est décomposé en 5 parties : ère La 1 partie permet de vérifier le bon fonctionnement du matériel (PC + CABLE + CARTE + AFFICHEUR). Ainsi par la suite si les résultats attendus ne donnent pas satisfaction, il faudra se concentrer uniquement sur votre programme. nd La 2 partie permet d’appréhender le fonctionnement du "timer0" et "timer1". La 3ème partie permet de mesurer la vitesse du vent. La 4ème partie permet de mesurer la vitesse et calculer la distance parcourue du bateau. ème La 5 partie permet d’aller plus loin en perfectionnant et adaptant les programmes précédents. Système d’aide à la navigation Page 1 / 11 1. VÉRIFICATION DU MATERIEL Récupérer par le réseau sur le PcProf dans le répertoire BAC 2011 le répertoire du TP timer. 1.1 Ouvrir le logiciel CodeVisionAVR puis ouvrir la fenêtre de programmation en cliquant sur l’icône 1.2 Sélectionner la référence du µContrôleur dans la liste pour « Chip : » en regardant sur celui-ci. 1.3 Cliquer sur File Load FLASH puis charger le fichier « test avr » qui se trouve dans le répertoire du TP. 1.4 Relier le PC à la carte AVR par le câble de programmation puis la mettre sous tension. 1.5 Cliquer sur Program Erase Chip puis sur Program FLASH. 1.6 Vérifier le fonctionnement de la carte : on placera la sortie TTL d’un GBF réglé sur 100 Hz sur l’entrée Freq. Si la carte ne fonctionne pas appeler le prof. 2. PRINCIPE DE FONCTIONNEMENT DES "TIMERS" 2.1 COMPTER UN EVENEMENT Le "Timer 0" est un compteur binaire 8 bits dont la valeur est contenue dans le registre TCNT0. Son horloge (TCK0) peut être orientée parmi différentes sources comme l’horloge système qui correspond à celle du quartz (CK) ou la broche PB0 configurée en entrée (T0). On choisit ces différentes possibilités en configurant le registre TCCR0. Ouvrez le fichier « Timer AT8535_V2.pdf » et repérer ces informations. Remarque importante : sur le schéma structurel annexe 1 de la carte AVR la broche PB0 est utilisée en sortie pour la LED0. Comme T0 doit être une entrée on commandera la résistance de pull up de cette entrée soit par le bouton poussoir SET connecté en PA0 soit par l’entrée fréquence connectée en PD6. 2.1.1 Si le registre de contrôle TCCR0 vaut 7 quelle est la configuration choisie ? 2.1.2 D’après le schéma structurel de la carte AVR, déterminer si le compteur s’incrémentera au moment de l’appui du bouton poussoir SET ou de son relâchement avec les lignes de code suivantes : PORTA=0x1F; // résistances de pull up pour les BP DDRA=0x00; // Port A en entrée PORTB=0x00; // Pas de résistance de pull up ou sortie à 0 DDRB=0x1E; // PB1 à PB4 configurées en sortie, PB0 et PB5 à PB7 en entrée PORTB.0 = ~PINA.0; // Activation résistance de pull up de l’entrée PB0 par BP SET 2.1.3 Quelle sera la valeur maximale que pourra contenir ce compteur. Exprimer cette valeur en décimale, binaire et hexadécimale. 2.1.4 Indiquer par des flèches sur la feuille réponse 1 à quelles lignes de programme correspondent les commentaires de l’encadré. 2.1.5 En déduire ce que fera ce programme en fonction du bouton poussoir SET. 2.1.6 Compléter le programme 1 et vérifier son bon fonctionnement. 2.1.7 Que se passe t-il une fois atteint la valeur maximale. 2.1.8 Modifier ce programme pour que le compteur s’incrémente au relâchement du bouton poussoir SET. Système d’aide à la navigation Page 2 / 11 2.2 DETERMINER UNE FREQUENCE Par définition, la fréquence est le nombre d’évènements répétitifs en 1 seconde. Nous avons vu précédemment que le "Timer0" peut compter un évènement, il correspondra donc à la fréquence en Hz si ce comptage se déroule pendant un temps d’une seconde précisément. On pourrait utiliser l’instruction « delay_ms(1000) » pour fixer le temps de mesure d’une seconde mais cela monopolise à plein temps le fonctionnement du microprocesseur et il ne peut rien faire d’autre pendant ce temps. Nous allons donc à la place utiliser le "Timer1" pour cette durée qui fonctionne sur le même principe que le "Timer0" comme vous pouvez le voir dans le fichier « Timer AT8535_V2.pdf ». 2.2.1 D’après ce fichier pdf le "Timer0" évolue sur 8 bits. Est-ce de même pour le "Timer1" ? 2.2.2 Quel est le nom du registre correspondant au contenu de ce Timer1. 2.2.3 Quelle sera la valeur maximale que pourra contenir ce compteur. Exprimer cette valeur en décimale, binaire et hexadécimale. 2.2.4 Déterminer la valeur binaire puis hexadécimale que devra contenir le registre de configuration TCCR1B en le complétant ci-dessous pour sélectionner comme horloge de comptage celle du quartz (horloge système CK) divisée par 210. Bit 7 0 Bit 6 0 Bit 5 0 Bit 4 0 Bit 3 0 Bit 2 Bit 1 Bit 0 2.2.5 Quelle sera alors la fréquence d’horloge du timer1 si la fréquence du quartz vaut 4 MHz. 2.2.6 Calculer alors le temps nécessaire pour que le timer1 compte de 0 à sa valeur maximale définie à la question 2.2.3. 2.2.7 Quelle sera la valeur en décimale, binaire et hexadécimale atteinte par le timer1 au bout d’une seconde ? 2.2.8 Compléter le programme 2 sur la feuille réponse 1. 2.2.9 Compléter le programme et vérifier son bon fonctionnement en connectant sur l’entrée Freq un générateur de signal rectangulaire 0-5v (sortie TTL) de fréquence 50 Hz puis 100 Hz. 2.2.10 Sachant que le "Timer0" évolue sur 8 bits, quelle sera la fréquence maximale théorique affichable ? 2.2.11 Vérifier cette valeur expérimentalement. 3. MESURE DE LA VITESSE DU VENT 3.1PRINCIPE ET CARACTERISTIQUES DU CAPTEUR DE VITESSE (ANEMOMETRE) 3.1.1 Traduisez en français les phrases colorisées du paragraphe intitulé "Description" de la documentation constructeur de l’anémomètre P2546A (voir le fichier au format pdf). 3.1.2 D’après le schéma structurel de la fonction FS41 de votre dossier technique du système d’aide à la navigation, quel est le niveau logique de la broche T0 du microcontrôleur si l’ILS (interrupteur à lame souple) est ouvert puis fermé ? 3.1.3 Représenter par un chronogramme l’allure du signal T0 pour un tour de rotation des coupelles de l’anémomètre. 3.1.4 Relevez sur la documentation de l’anémomètre la vitesse maximale mesurable du vent en m/s puis exprimez-la en km/h. 3.1.5 Relevez l’expression de la relation liant la vitesse du vent à la fréquence de commutation de l’ILS (interrupteur à lame souple). 3.1.6 Tracer alors en complétant les graphiques de la feuille réponse 2, la courbe représentant la fréquence de commutation de l’ILS en fonction de la vitesse du vent en m/s puis en km/h. 3.2 AFFICHAGE DE LA VITESSE DU VENT 3.2.1 Complétez le programme 3 de la feuille réponse n°2 permettant d’afficher la vitesse en m/s. 3.2.2 Saisir les parties à compléter, compilez et programmez le microcontrôleur. 3.2.3 A l’aide d’un générateur de signal rectangulaire 0-5v (sortie TTL), valider le graphique de la question 3.1.6 en fixant quelques fréquences correspondantes. 3.2.4 Modifier votre programme pour afficher la vitesse du vent en km/h puis valider le second graphique de la question 3.1.6. Système d’aide à la navigation Page 3 / 11 4. MESURE DE LA VITESSE ET DE LA DISTANCE PARCOURUE DU BATEAU 4.1 PRINCIPE ET CARACTERISTIQUES DU CAPTEUR La société "AIRMAR" est un important constructeur de produits électroniques équipant les bateaux. Vous trouverez dans le répertoire du TP TIMER des documents au format pdf correspondant à des capteurs et des informations sur le principe de ceux-ci. 4.1.1 Traduisez en français les phrases colorisées du paragraphe intitulé "Speed Sensors" de la page 17 du fichier "airmar_theory". 4.1.2 En vous aidant du lexique du dossier technique du système d’aide à la navigation ou d’internet, établir les conversions d’unités en complétant le tableau de la feuille réponse 3. 4.1.3 Relevez sur la documentation du capteur de vitesse S300 (modèle sans flasques (no fins)), la vitesse maximale mesurable en nœuds puis exprimez-la en km/h. 4.1.4 Relevez le nombre d’impulsions délivrées par ce capteur pour une distance parcourue de 1 mille nautique. En déduire le nombre d’impulsions pour 1 mètre et 1 km. Quelle est précisément la distance parcourue en mètre et en mille nautiques entre deux impulsions. 4.1.5 En supposant que la vitesse soit de 1 nœud, quel sera le nombre d’impulsions en 1 heure et en 1 seconde. Repérer cette dernière valeur arrondie sur la documentation. 4.1.6 En déduire la fréquence des impulsions pour la vitesse maximale. 4.1.7 Combien de temps en seconde faudra-t-il pour parcourir 1 mille nautique et 1km à la vitesse maximale. 4.2 AFFICHAGE DE LA VITESSE DU BATEAU 4.2.1 Complétez le programme 4 de la feuille réponse n°3 permettant d’afficher la vitesse en nœud. 4.2.2 Complétez, compilez et programmez le microcontrôleur. 4.2.3 A l’aide d’un générateur de signal rectangulaire 0-5v (sortie TTL), valider l’affichage de la vitesse maximale en fixant la fréquence correspondante déterminée à la question 4.1.6. 4.2.4 Modifier votre programme pour afficher la vitesse du bateau en km/h puis valider son bon fonctionnement. 4.3 AFFICHAGE DE LA DISTANCE PARCOURUE DU BATEAU 4.3.1 Complétez le programme 5 de la feuille réponse n°4 permettant d’afficher la vitesse en nœud et la distance parcourue en mille nautique. 4.3.2 Saisissez, compilez et programmez-le. 4.3.3 En fixant la fréquence correspondante à la vitesse maximale, chronométrer le temps mis pour une distance de 1 mille et valider avec celui déterminé à la question 4.1.7. 4.3.4 Modifier votre programme pour afficher la vitesse en km/h et la distance parcourue en kilomètre puis valider son bon fonctionnement avec un chronomètre. Système d’aide à la navigation Page 4 / 11 5. ADAPTION ET PERFECTIONNEMENT (POUR ALLER PLUS LOIN) 5.1.1 Proposez un programme permettant d’afficher la vitesse du vent (sans décimal) en nœud ou en km/h suivant l’appui ou le relâchement du bouton poussoir SET en respectant l’affichage suivant : X 0 Y 0 1 2 3 4 5 6 V i t e s s 1 7 8 9 e d u X X n o 10 e 11 12 13 14 15 v e n t : u d 5.1.2 Adapter ce programme si on remplace le modèle de l’anémomètre par le "AN4" puis le "WE14" (voir fichier pdf correspondant). 5.1.3 Adapter le programme de la question 4.3.4 si on remplace le modèle du capteur par le S61(voir fichier pdf correspondant). 5.1.4 Quel est alors le problème rencontré lors de la validation de ce dernier programme. Comment l’expliquer. Proposer une solution de remédiassions. Système d’aide à la navigation Page 5 / 11 Feuille Réponse n°1 Question 2.1.4 Programme 1 #include <mega8535.h> #include <lcd.h> #include <stdlib.h> #include <delay.h> Commentaires : #asm .equ __lcd_port=0x15 #endasm void main(void) { unsigned char chaine_caractere[4]={0}; PORTA=0x1F; DDRA=0x00; PORTB=0x00; DDRB=0x1E; lcd_init(16); TCCR0=0x07; TCNT0=250; OCR0=0x00; while (1) { PORTB.1 = PORTB.0 = ~PINA.0; itoa (TCNT0, chaine_caractere); lcd_gotoxy(0,0); lcd_putsf(" "); lcd_gotoxy(0,0); lcd_puts(chaine_caractere); delay_ms(20); } - // Programme principal. - // Boucle sans condition. - // Début du programme principal. - // Début de la boucle. - // Fin du programme principal. - // Fin de la boucle. - // Initialise l’afficheur lcd. - // Configure l’entrée d’horloge du timer0. - // Définit la broche "T0" en entrée. - // Charge les bibliothèques d’équivalences et de procédures. - // Attribue le portC pour commander l’afficheur lcd. - // Déclare une variable qui représentera le contenu du timer0. - // Charge la variable avec le contenu du timer0. - // Déclare une suite de caractères représentant un nombre à afficher sur l’afficheur lcd. - // Convertit le contenu numérique d’une variable en une suite de caractères ASCII correspondant. - // Place le curseur au début de la première ligne de l’afficheur lcd. - // Efface les 3 caractères de l’afficheur précédemment affichés. - // Attente permettant à l’œil de voir la valeur affichée. - // Affiche une suite de caractères ASCII sur le lcd. } Question 2.2.8 #include <mega8535.h> #include <lcd.h> #include <stdlib.h> Programme 2 #asm .equ __lcd_port=0x15 #endasm main() { unsigned char chaine_caractere[4]={0}; PORTD=0x00; DDRD=0x00; PORTB=0x00; DDRB=0x00; lcd_init(16); TCCR0=0x07; TCCR1A=0x00; TCCR1B= _ _ _ _ _; Commentaires à compléter: A compléter while(1) { PORTB.0 = PIND.6; if (TCNT1 >= _ _ _ _ _ ) { itoa (TCNT0, chaine_caractere); lcd_gotoxy(0,0); lcd_putsf(" "); lcd_gotoxy(0,0); lcd_puts(chaine_caractere); TCNT0=0; TCNT1=0; }; }; } Système d’aide à la navigation // Test si le Timer1 a atteint une durée d’une seconde. // . . . . . // . . . . . // . . . . . // . . . . . Page 6 / 11 Feuille Réponse n°2 Question 3.1.6 : Fréquence (Hz) Vitesse (m/s) Fréquence (Hz) Vitesse (km/h) Question 3.2.1 #include <mega8535.h> #include <lcd.h> #include <stdlib.h> Programme 3 #asm .equ __lcd_port=0x15 #endasm main() { unsigned int comptage; unsigned char chaine_caractere[6]={0}; DDRB=0x00; DDRC=0xFF; lcd_init(16); TCCR0=0x07; TCCR1A=0x00; TCCR1B= _ _ _ _ _; A compléter while(1) A compléter (voir question 3.1.5) { PORTB.0 = PIND.6; if (TCNT1>= _ _ _ _ _ ) { comptage=_ _ _ _ + _ _ _ _ * _ _ _ _ ; itoa (comptage, chaine_caractere); lcd_gotoxy(0,0); lcd_putsf(" "); //affiche 7 espaces pour effacer la valeur précédente. lcd_gotoxy(0,0); lcd_puts(chaine_caractere); lcd_putsf(" m/s"); TCNT0=0; TCNT1=0; }; }; } Système d’aide à la navigation Page 7 / 11 Feuille Réponse n°3 Question 4.1.2 1 mille nautique = . . . . . . . . . . . mètre. 1 nœud = . . . . . . . . . . . mille/heure = . . . . . . . . . . . km/h Question 4.2.1 Programme 4 #include <mega8535.h> #include <lcd.h> #include <stdlib.h> #asm .equ __lcd_port=0x15 #endasm main() { float vit_noeud; char chaine_caractere[10]={0}; PORTD=0x00; DDRD=0x00; PORTB=0x00; DDRB=0x00; lcd_init(16); TCCR0=0x07; TCCR1A=0x00; TCCR1B= _ _ _ _ _ _ ; while(1) { PORTB.0 = PIND.6; if (TCNT1>= _ _ _ _ _ ) { vit_noeud=TCNT0 / _ _ _ _ _ _ ; ftoa (vit_noeud,1, chaine_caractere); lcd_gotoxy(0,0); lcd_putsf(" "); lcd_gotoxy(0,0); lcd_puts(chaine_caractere); lcd_putsf(" noeud"); A compléter (voir question Q2_2_4) A compléter (voir question Q2_2_7) A compléter (voir question Q4_1_5) TCNT0=0; TCNT1=0; }; }; } Système d’aide à la navigation Page 8 / 11 Feuille Réponse n°4 Question 4.3.1 Programme 5 #include <mega8535.h> #include <lcd.h> #include <stdlib.h> #asm .equ __lcd_port=0x15 #endasm main() { float vit_noeud; float distance_mille = 0.0; char chaine_caractere[10] = {0}; PORTD=0x00; DDRD=0x00; PORTB=0x00; DDRB=0x00; lcd_init(16); TCCR0=0x07; TCCR1A=0x00; TCCR1B= _ _ _ _ _ ; while(1) { if (TCNT1 >= _ _ _ _ _ ) { PORTB.0 = PIND.6; vit_noeud = TCNT0 / _ _ _ _ _ ; ftoa (vit_noeud,1, chaine_caractere); lcd_gotoxy(0,0); lcd_putsf(" "); lcd_gotoxy(0,0); lcd_puts(chaine_caractere); lcd_putsf(" noeud"); // Pour afficher 100000 milles A compléter (voir question Q4_1_5) A compléter (voir question Q4_1_4) distance_mille = distance_mille + TCNT0 * _ _ _ _ _ ; ftoa (distance_mille,3, chaine_caractere); lcd_gotoxy(0,1); lcd_putsf(" "); lcd_gotoxy(0,1); lcd_puts(chaine_caractere); lcd_putsf(" mille"); TCNT0=0; TCNT1=0; }; }; } Système d’aide à la navigation Page 9 / 11 Annexe 1 JPI2C Extension I2C a b +5V 1 2 BornePWM PWM + GND2 R2 10k CapTempInt 2 SCL Tout SDA 1 Frequence A0 A1 A2 GND SDA +5V AnalogInter BU1 + Capteur Température I2C C103 C5 100n Buzzer 0 0 0 S0 S1 S2 S3 S4 0 +5V BPInc PA4 BPDec PA3 OK PA2 Echap PA1 SET PA0 1 2 3 4 5 6 7 8 9 10 ISP he10-10 TXD RXD +5V 0 0 OC2/PD7 ICP/PD6 OC1A/PD5 OC1B/PD4 INT1/PD3 INT0/PD2 TXD/PD1 RXD/PD0 TOSC2/PC7 TOSC1/PC6 PC5 PC4 PC3 PC2 PC1 PC0 XTAL2 XTAL1 TXD RXD D7 D6 D5 D4 10k D4 D5 D6 D7 EN R/W RS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 4MegHz C3 22p 0 S4 C4 22p S3 S2 0 S1 0 S0 D1 1N4148 +10V 1N4001 RA1 680 RESET ALIM 10V UA1 LM7805C VCC2 1 IN GND C2 1uF CA1 0 LEDA1 0 Système d’aide à la navigation OUT PT5V 3 CA2 330nF GND LCD 2X16 RLED4 330 RLED3 330 RLED2 330 RLED1 330 RLED0 330 LED4 LED3 LED2 LED1 LED0 +5V DA1 2 Vcc + RESET VSS VDD VO RS R/W E D0 D1 D2 D3 D4 D5 D6 D7 X1 +5V R4 4,7K 0 LCD D[7..4] at90s8535 0 0 12 PWM Frequence Buzzer SCL SDA 21 20 19 18 17 16 15 14 29 28 27 26 25 24 23 22 12 13 t VCC AVCC PA0/ADC0 PA1/ADC1 PA2/ADC2 PA3/ADC3 PA4/ADC4 PA5/ADC5 PA6/ADC6 PA7/ADC7 PB0/T0 PB1/T1 PB2/AIN0 PB3/AIN1 PB4/SS PB5/MOSI PB6/MISO PB7/SCK RESET AREF GND AGND AnalogExter 40 39 38 37 36 35 34 33 1 2 3 4 5 6 7 8 9 32 +5V 11 31 PA0 PA1 PA2 PA3 PA4 220 D5 1N4148 Entrée Analogique extérieure 10 30 P1 U1 1N4148 D4 R6 buzzer Q1 0 +5V BorneAnalogExter Rbuz 1.2k 100n 0 +5V LEDT t 220 D3 1N4148 0 7 6 5 DS1621 4 P2 10k 21 PTAnalogInter 1N4148 D2 R5 3 0 +5V +5V BorneFrequence R3 1.5k 8 SCL VCC R1 10k C1 10u Page 10 / 11 100nF 0 Annexe 2 PRESENTATION DES PORTS D'E/S DE L'AT90S8535 1 : DESCRIPTION Chacun des 4 ports d’interface parallèles de l’AT90S8535 sont accessibles au travers de 3 registres 8 bits. - Un registre de direction DDRx : Un « 1 » logique dans un de ses bits, configure la broche de port correspondante en sortie. Un « 0 » la configure en entrée. - Un registre de données entrantes PINx : L’état des bits de ce registre reflète les niveaux présents en entrée sur les broches correspondantes. - Un registre de données sortantes ou d’option, PORTx : l’état des bits de ce registre fixe le niveau des broches correspondantes qui sont configurées en sortie. Si les broches correspondantes sont configurées en entrée, un « 1 » logique dans un des bits du registre valide, la résistance de rappel interne au +VCC. 2 : DESCRIPTION DES Port A Port B Port C Port D REGISTRES Registre de Direction et adresse DDRA DDRB DDRC DDRD Registre de données entrantes et adresse PINA PINB PINC PIND Identification des bits des registres : Registre Bit 7 Bit 6 Bit 5 PORTx PORTx7 PORTx6 PORTx5 PINx PINx7 PINx6 PINx5 DDRx DDx7 DDx6 DDx5 Bit 4 PORTx4 PINx4 DDx4 Registre de données sortantes et adresse PORTA PORTB PORTC PORTD Bit 3 PORTx3 PINx3 DDx3 Bit 2 PORTx2 PINx2 DDx2 Nbre de bits 8 8 8 8 Bit 1 PORTx1 PINx1 DDx1 Bit 0 PORTx0 PINx0 DDx0 3 : CONFIGURATION DES BROCHES 0 1 X Bit du PINx 0 0 1 Bit du PORTx Bit du DDRx Chaque broche d’un port peut être configurée individuellement. Il suffit pour cela de positionner à 1 ou à 0 les bits des registres DDRx et PORTx. Direction XIN XIN X Entrée Entrée Sortie Configuration Sans Pull-Up. (XIN est l’image du niveau présent sur la broche) Avec Pull-Up. (XIN est l’image du niveau présent sur la broche) Sortie symétrique Push-Pull. X est le niveau délivré par la broche. La lecture du registre PINx donne l’état des broches du PORTx orientées en entrée. L’écriture dans le registre PORTx fixe l’état des broches configurées en sortie. (PINx n’est accessible qu’en lecture) Entrée avec résistance de rappel Entrée sans résistance de rappel VDD Sortie symétrique (Push-pull) R 1 ENTREE 1 1 VERS REGISTRE PINX ENTREE VERS REGISTRE PINX Système d’aide à la navigation VDD SORTIE Vers registre PORTx VSS Page 11 / 11