LLP1 MICROCONTROLEUR MICROCONTROLEUR 68HC11F1 Algorithmique appliqué au traitement du signal B.HOAREAU Lycée Louis Payen

Embed Size (px)

Text of LLP1 MICROCONTROLEUR MICROCONTROLEUR 68HC11F1 Algorithmique appliqué au traitement du signal...

  • Page 1
  • Page 2
  • LLP1 MICROCONTROLEUR MICROCONTROLEUR 68HC11F1 Algorithmique appliqu au traitement du signal B.HOAREAU Lyce Louis Payen
  • Page 3
  • LLP2 Sommaire Prsentation technique du controlboyF1 F-prog1: Allumer / teindre une led. Configuration E/S dun port. F-prog2: Allumer - teindre une led si appui sur capteur 1 F-prog3: Allumer - teindre une led si appui sur capteur 1 ET 2 F-prog4 : Allumer - teindre une led si appui sur capteur 1 OU 2 F-prog5 : Utilisation d'un masque F-prog6 : Clignotement conditionnel F-prog7 : Clignotement conditionnel 2 F-prog8 : Gnrer une squence en utilisant un tableau F-prog9 : Compter des impulsions et afficher sur leds F-prog10 : Gnrer un signal de rapport cyclique variable
  • Page 4
  • LLP3 F-anal1 : Raliser une conversion Analogique Numrique (CAN) Notion sur les interruptions et principe gnral de mise en oeuvre F-timer2 : Utiliser le timer pour gnrer des impulsions F-compt3.bas : Compter des impulsions par interruptions (interruption sur A7 et interruption pour gestion de dbordement comptage (overflow) F-compt4.bas : Mesurer une largeur dimpulsion F-TOC : Timer Output Compare (TOC) : gnrer un signal carr haute ou basse frquence sous interruption F-TIC : Timer Input Capture (TIC) : mesurer une largeur dimpulsion ou une priode F-CNA : mise en uvre du triple CNA 8 bits max 512
  • Page 5
  • LLP4 Informations Techniques Carte ControlboyF1 Microcontrleur 68HC11F1 16Mhz EEPROM 32k RAM 32k Liaison Rs232 Connecteur A : PortA 8 entres ou sorties logiques Connecteur B : PORTB : 8 sorties logiques Darlington 500mA.50V. Connecteur C : PORTC : 8 entres numriques optocouples Connecteur D : PORTD : 4 entres ou sorties logiques PORTG : 2 entres ou sorties logiques Connecteur E : PORTE : 8 entres analogiques (CAN rsolution 8 bits). Peut tre utilis aussi comme des entres logiques traditionnelles. Connecteur F : PORT N : 4 entres logiques 3 sorties analogiques avec CNA 8 bits (Max 512) Connecteur LCD : PORTM :6 sorties logiques PORTN :4 entres logiques Connecteur X : Extension bus du 68HC11F1 : Gnd,Vcc,Rst,Irq,Xirq,R/W,E,CSIO2,D0 D7, A0 A3
  • Page 6
  • LLP5 Fprog1 : Allumer / teindre une led. Configuration E/S dun port #include "startcf1.bas" DDRD = 0' Port D en entre DDRA = %00001111 ' A0 A3 en sortie A4 A7 en entre ' programme principal ' Prog1 : Allumer - teindre une led do PORTA.0 =0 ' allumer tempo(200) PORTA.0 =1 ' Eteindre tempo(200) loop boucler do ' fin du programme principal ' Sous programmes et fonctions : function tempo(cnt) int i, k for cnt=cnt to 0 step -1 for i=0 to 100 next return 0 end function
  • Page 7
  • LLP6 F-prog2: Allumer - teindre une led si appui sur capteur 1 ' programme principal ' Prog2 : Allumer - teindre une led si appui sur capteur 1 PORTA = %00001111 ' Initialisation (teindre leds) do If PORTA.4 = 0 then PORTA.1 = 0 ' allumer led rouge else PORTA.1 = 1 ' teindre led rouge end if loop ' fin du programme principal Algo : Si capteur 1 appuy alors allumer led rouge sinon teindre led rouge
  • Page 8
  • LLP7 ' programme principal ' Prog3: Allumer - teindre une led si appui sur capteur 1 et 2 PORTA = %00001111 ' Initialisation (teindre leds) do If PORTA.4 = 0 and PORTA.5 = 0 then PORTA.1 = 0 ' allumer led rouge else PORTA.1 = 1 ' teindre led rouge end if loop ' fin du programme principal Prog3 : Allumer - teindre une led si appui sur capteur 1 ET capteur 2
  • Page 9
  • LLP8 ' Prog4 : Allumer - teindre une led si appui sur capteur 1 OU 2 PORTA = %00001111 ' Initialisation (teindre leds) do If PORTA.4 = 0 OR PORTA.5 = 0 then PORTA.1 = 0 ' allumer led rouge else PORTA.1 = 1 ' teindre led rouge end if loop ' fin du programme principal Prog4 : Allumer - teindre une led si appui sur capteur 1 OU 2
  • Page 10
  • LLP9 ' Prog5 : Utilisation d'un masque PORTA = %00001111 ' Initialisation (teindre leds) do If PORTA.4 = 0 then PORTA = PORTA AND %11110101 ' allumer led 2 et Led 4 else PORTA = PORTA OR %00001010 ' teindre led 2 et led 4 end if loop ' fin du programme principal Prog5 : Utilisation d'un masque Modifier un bit sans toucher aux autres
  • Page 11
  • LLP10 ' programme principal ' Prog6 : Clignotement conditionnel PORTA = %00001111 ' Initialisation (teindre leds) do do while PORTA.4 = 0 tant que capteur appuy PORTA.0 = 0 allumer led tempo(100) PORTA.0 = 1 Eteindre led tempo(100) loop Boucler do loop ' fin du programme principal Prog6 : Clignotement conditionnel
  • Page 12
  • LLP11 ' programme principal ' Prog7 : Clignotement conditionnel 2 PORTA = %00001111 ' Initialisation (teindre leds) do do while PORTA.4 = 0 PORTA.0 = 0 tempo(100) PORTA.0 = 1 tempo(100) loop PORTA.1 = 0 tempo(100) PORTA.1 = 1 tempo(100) loop ' fin du programme principal ' Prog7 : Clignotement conditionnel 2 Tant que capteur activ, faire clignoter led verte sinon faire clignoter led rouge
  • Page 13
  • LLP12 #include "startcf1.bas" Byte T(5), j dclaration du tableau DDRD = 0' Port D en entre DDRA = %00001111 ' A0 A3 en sortie A4 A7 en entre T(0) = %00001010 Initialisation T(1) = %00000110 T(2) = %00000101 T(3) = %00001001 ' programme principal ' Prog8 : Gnrer une squence en utilisant un tableau ' PORTA = %00001111 ' Initialisation (teindre leds) do for j = 0 to 3 J sincrmente de 0 3 PORTA = T(j) Affectation du tableau T(j) au port A tempo(400) next j loop ' fin du programme principal ' Prog8 : Gnrer une squence en utilisant un tableau
  • Page 14
  • LLP13 ' programme principal ' Prog9 : Compter des impulsions et afficher sur leds ' PORTA = %00001111 ' Initialisation (teindre leds) do do loop until PORTA.4 =1 Attendre capteur ouvert do loop until PORTA.4 =0 Attendre capteur ferm compteur = compteur + 1 PORTA = compteur XOR %00001111 Inverse pour affichage tempo(100) ' cause des rebonds loop ' fin du programme principal Prog9 : Compter des impulsions et afficher sur leds
  • Page 15
  • LLP14 Byte j int T, Th DDRD = 0' Port D en entre DDRA = %00001111 ' A0 A3 en sortie A4 A7 en entre T = 500 Th = 100 ' programme principal ' Prog10 : Rapport cyclique variable ' Si T1 appuy, TH augmente 100% ' Si T2 appuy, TH diminue 0% PORTA = %00001111 ' Initialisation (teindre leds) do PORTA.1 = 0 tempo(Th) PORTA.1 = 1 tempo(T-Th) if PORTA.4 = 0 and Th=10 then Th = Th-10 end if loop ' fin du programme principal Prog10 : Gnrer un signal de rapport cyclique variable
  • Page 16
  • LLP15 #include "startcf1.bas" byte b, c DDRD = 0' Port D en entre DDRA = %00001111 ' A0 A3 en sortie A4 A7 en entre lcdinit() print "CONVERSION" ' programme principal OPTIONS.7 = 1' Valider CNA do c = analogin(0)' Conversion sur E0 print "CAN=", c Affichage sur LCD tempo(200) loop ' fin du programme principal '******************************* analog in ************************************ function analogin(ch)' ch= 0 pour E0 7 pour E7 ADCTL = ch ' lance le CNA do loop until ADCTL.7=1' attendre return ADR' registre contient le resultat end function F-ANAL1 : Raliser une Conversion Analogique Numrique (CAN)
  • Page 17
  • LLP16 Notion sur les interruptions et principe gnral de mise en oeuvre Lorsque le microprocesseur excute les instructions du programme principal, il peut tre interrompu par un signal interne (timer) ou externe (Patte PA7) pour excuter une tche spcifique appele routine dinterruption (ou sous programme dinterruption). A la fin de lexcution de la routine, le processeur reprend lexcution du programme principal l ou il lavait quitt. Lintrt principal dune interruption est de raliser des tches (comptage, gnration de signaux ) sans utiliser tout le temps machine. Par exemple, pour compter des impulsions on a vu dans lexemple du programme F-Prog9 quil faut dtecter le front montant du signal : le microprocesseur passe 98% de son temps attendre larrive de limpulsion. De mme, pour gnrer un signal carr par exemple, le processeur va passer tout son temps attendre (temporisations temps haut et temps bas du signal) alors quil pourrait faire mille autres choses ! Attention : les interruptions ne rsolvent pas les problmes dalgorithmique La configuration consiste 1- Faire les paramtrages ventuels 2- Valider linterruption (masque 1) 3- Valider flag 4- CLI (I=0 du registre CCR) A la fin de la routine dinterruption il faut nouveau valider le flag afin dautoriser une nouvelle interruption. Lorsquune interruption est gnre, elle ne doit pas elle mme tre interrompue (le drapeau flag est automatiquement positionn par le microcontrleur)
  • Page 18
  • LLP17 F-timer2 : Utiliser le timer pour gnrer des impulsions ' Utilisation du Timer ' Clignoter led ROUGE basse frquence sous interruption ' Pour modifier le timer (CboyF1 16mhz): ' PACTTL.1 PACTL.0 (dtermine le temps entre 2 interruptions timer ) ' 0 0 2,05 ms ' 0 1 4,1 ms ' 1 0 8,2 ms ' 1 1 16,4 ms #include "startcf1.bas" byte t, passage, flag ' Configuration DDRD = 0' Port D en entre DDRA = %01001111 ' A0 A3 en sortie A4,A5,A7 en entre A6 en sortie Paramtrage interruption PACTL.1 = 1 ' selectionner la vitesse (16,4ms sur cboyF1 16Mhz) PACTL.0 = 1 ' en fonction de ce qu'on souhaite ' Voir tableau en haut du programme TMSK2.6 = 1' Validation interruption timer (masque 1) TFLG2.6 = 1 flag dinterruption timer cli' autoriser les interruptions (affecte bit I du CCR)
  • Page 19
  • LLP18 ' initialisation passage = 0 flag = 0 Programme principal do PORTA.0 = 0 ' Allumer led verte tempo(200) PORTA.0 = 1 teindre led verte tempo(200) loop ' Fonction interruption du TIMER : interrupt function rtiint at $FFF0 adresse spcifique interruption timer passage=passage+1