Cours:TP printempsM4209 TP 6c Corr : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
m
m
Ligne 1 : Ligne 1 :
 
+
<accesscontrol>Acces:Prof</accesscontrol>
  
 
Ceci est le corrigé du TP [https://fr.wikiversity.org/wiki/Very_High_Speed_Integrated_Circuit_Hardware_Description_Language/Travail_pratique/TPs_ATTiny861_avec_Altera#TP6c_:_R.C3.A9alisation_du_r.C3.A9glage_de_l.27heure_de_r.C3.A9veil_par_le_processeur Réalisation du réglage de l'heure réveil par le processeur].
 
Ceci est le corrigé du TP [https://fr.wikiversity.org/wiki/Very_High_Speed_Integrated_Circuit_Hardware_Description_Language/Travail_pratique/TPs_ATTiny861_avec_Altera#TP6c_:_R.C3.A9alisation_du_r.C3.A9glage_de_l.27heure_de_r.C3.A9veil_par_le_processeur Réalisation du réglage de l'heure réveil par le processeur].

Version du 9 décembre 2019 à 16:35

Il s’agit d’une page protégée.

Ceci est le corrigé du TP Réalisation du réglage de l'heure réveil par le processeur.

Voici une ressource complète de la correction du TP6c : TinyReveilLCDTP6C.zip

Devoir surveillé de Decembre 2019

Vous allez partir de la correction du TP6c qui est donnée : TinyReveilLCDTP6C.zip.

Cette version est un peu améliorée pour l'occasion : vous avez la possibilité de suivre l'évolution de la machine d'états de la sonnerie du réveil à l'aide de trois leds vertes :

  • complètement à droite allumée quand on est dans l'état Off
  • deuxième led en partant de la droite allumée quand on est dans l'état Armed
  • troisième led en partant de la droite allumée quand on est dans l'état Ringing

Réalisation du projet et premières questions

Le fichier C qui est compilé avec la correction est le suivant :

#include "avr/io.h" 
#undef F_CPU 
#define F_CPU 16000000UL 
#include "util/delay.h" 

void incrementHHMM(uint16_t *hh_mm) {
  (*hh_mm)++;
      if ((*hh_mm & 0x000F) > 0x0009)
      *hh_mm += 0x0006;
      if ((*hh_mm & 0x00F0) > 0x0050)
      *hh_mm += 0x00A0;
      if ((*hh_mm & 0x0F00) > 0x0900)
      *hh_mm += 0x0600;
      if ((*hh_mm & 0xFF00) > 0x2300)
      *hh_mm = 0x0000;
}
 
void decrementHHMM(uint16_t *hh_mm) {
  (*hh_mm)--;
      if ((*hh_mm & 0x000F) == 0x000F)
      *hh_mm -= 0x0006;
      if ((*hh_mm & 0x00F0) == 0x00F0)
      *hh_mm -= 0x00A0;
      if ((*hh_mm & 0x0F00) == 0x0F00)
      *hh_mm -= 0x0600;
      if ((*hh_mm & 0xFFFF) > 0x2359)
      *hh_mm = 0x2359;
}

int main (void) {
   unsigned char ch=128; 
   uint16_t hh_mmSonnerie = 0x0123, hh_mmCourante=0;
   PORTA=0;
   while(1) { 
     // chenillard (non actif)
     //PORTA = ch;
     ch >>= 1; 
     if (ch == 0) ch = 128;
// gestion incrementation heure réveil
     if (PINA & 0x01) {
        incrementHHMM(&hh_mmSonnerie);
        _delay_ms(10);
     }
// mise à jour heure courante
     hh_mmCourante = ADCH;
     hh_mmCourante <<= 8;
     hh_mmCourante += ADCL;

// sortie Heure sonnerie sur afficheur
     PORTB = hh_mmSonnerie;
     DDRB = hh_mmSonnerie >> 8;
          
   } 
   return 0; 
 }

Répondre aux questions suivantes :

  • Faire le projet et constater le fonctionnement
  • si la ligne
     uint16_t hh_mmSonnerie = 0x0123, hh_mmCourante=0;
    
    est changée en
     uint16_t hh_mmSonnerie = 0x0645, hh_mmCourante=0;
    
    , pouvez vous donner l'heure de réveil (de sonnerie) qui apparaîtra sur l'écran LCD ?
  • quelle touche est responsable de l'incrémentation de l'heure réveil si PINA lit les 8 switchs de poids forts ?
  • pouvez-vous ajouter la décrémentation de l'heure réveil en utilisant une autre touche et faire constater à l'enseignant

Modification matérielle

LAB VHDL Tiny861 12.png

On désire utiliser le mécanisme de sonnerie qui est présent dans le code source de la correction. Il s'agit d'un composant appelé "SequSonnerie" qui est présent dans le fichier "lcd16x2_ctrl_demo.vhd". Ce mécanisme est complètement indépendant du processeur et l'on désire maintenant donner la possibilité au processeur d'interagir avec lui :

  • Le processeur procédera à l'armement en écrivant dans le registre ADCL conformément au schéma
  • La sonnerie sera lue à l'aide du registre PORTA conformément au schéma

L'ensemble des modifications est en rouge sur le schéma.

Faire constater à l'enseignant la compilation correcte de votre partie matérielle.

Modification logicielle

A partir des modifications matérielles réalisées dans la section précédente, on vous demande :

  • de modifier votre programme pour que l'utilisation de sw2 arme ou pas le réveil (faire constater avec les leds vertes)
  • de modifier le programme pour que lorsque la sonnerie est activée par votre automate, vous allumez une led rouge à l'aide du PORTA et que cette led rouge qui représente la sonnerie s'éteigne quant vous désarmez le réveil.
  • de modifier le programme pour avoir un réglage séparé des heures et des minutes.