dimanche 3 mars 2013

Simuler un système complet avec ISIS

Vérifier qu'un système (programme+circuit) fonctionne c'est possible avec Proteus, un logiciel de Labcenter Electronics. Ce logiciel permet, entre autres, la création de schémas et la simulation électrique mais aussi, grâce à des modules additionnels, ISIS est également capable de simuler le comportement d'un microcontrôleur (PIC, Atmel, 8051, ARM, HC11...) et son interaction avec les composants qui l'entourent.

Se procurer le logiciel (il existe une démo) : labcenter.com

Pour vous montrer un peu comment il fonctionne, nous allons simuler un compteur d'impulsion avec affichage sur écran LCD en utilisant un Atmega328, le pic de l'Arduino (tiens tiens !).

Etape 1 : écrire le programme et le compiler avec le logiciel Arduino

On pourrait passer par un autre logiciel, peut-être plus pratique, mais cela nous évites de réinstaller quoique ce soit.
Le but étant de faire simple, on utilise deux exemples que l'on bidouille l'un dans l'autre: HelloWord et StateChangeDetection. Ce qui donne :
// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const int buttonPin = 0;
// Variables will change:
int buttonPushCounter = 0;   // counter for the number of button presses
int buttonState = 0;         // current state of the button
int lastButtonState = 0;     // previous state of the button 

void setup() {
  pinMode(buttonPin, INPUT);
  
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("Compteur:"); // "counter"
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // Print the number
  lcd.print(buttonPushCounter);
  // print the number of seconds since reset:
  buttonState = digitalRead(buttonPin);

  // compare the buttonState to its previous state
  if (buttonState != lastButtonState) {
    // if the state has changed, increment the counter
    if (buttonState == HIGH) {
      // if the current state is HIGH then the button
      // wend from off to on:
      buttonPushCounter++;
    }
  }
  // save the current state as the last state, 
  //for next time through the loop
  lastButtonState = buttonState;
}

Rien de compliqué, si vous avez besoin de commentaire, laissez m'en un justement...

Etape 2 - Récupérer le fichier .hex

Nous, simples mortels, sachons lire et écrire en C (le language Arduino). Mais il en est autrement pour les microcontrôleurs et les ordinateurs de manière générale. Le logiciel fait la conversion entre C et hexadécimal au moment du téléversement sur le PIC. Pour la simulation, nous avons besoin du fichier encodé, en hexa donc.
Pour le récupérer, c'est un peu casse-tête. D'abord il faut enregistrer le programme et le compiler. Pendant cette opération, il est envoyé dans les fichiers temporaires de l'ordinateur. Cherchez où ce cache (c'est bien le cas de le dire) ce dossier. Sous Windows 8 c'est : C:\Users\Théophile\Local Settings\Temp" (oui je m'appelle Théophile).
Une fois dans ce dossier des fichiers temporaires, classez les fichiers par date et par ordre décroissante. Votre fichier .hex ce trouve dans le premier dossier, en tête, commençant par "build" (pour ce tuto le miens réponds au doux nom de "build9199467709888312371.tmp").
Copiez-le ailleurs.

Etape 3 - Réaliser le montage virtuel

Sélection des composants

Pour sélectionner un composant, cliquer sur "P" dans Devices.
Dans la base de donnée, préparer les composants suivant :
  • Atmega328p
  • PG24064F (l'afficheur 16*2)
  • RES10K
  • BUTTON
  • Un condensateur (capacitor) 10nF

Réaliser le circuit

C'est intuitif, je vous laisse découvrir comment faire : placer les composants et reliez-les comme sur mon schéma :
Ces circuits sont la combinaisons des deux exemples (à retrouver ici et ) , soient:
J'ai juste ajouter un petit filtre sur le bouton pour supprimer les rebonds.

Pour savoir comment se nomme chaque broche, on utilise une carte du microcontrôleur :

Configurer l'ATmega328

Il faut configurer l'ATmega328. Double-cliquez dessus. Dans l'absolut, il faut régler la vitesse d'horloge mais là on ne se sert pas du timer donc on peut laisser les valeurs par défaut  Il vous suffit donc de sélectionner votre fichier .hex.
Ok pour sauvergarder.

Simuler

Lancez la simulation. Cliquez plusieurs fois sur le boutons poussoirs et admirez !



N'ayant détaillé que très peu, n'hésitez pas à poser des questions. Télécharger les fichiers.

10 commentaires:

  1. Bonjour , j'ai pas trouvé le fichier .hex sous windows 7

    RépondreSupprimer
  2. Je pense que le chemin est le même que sous Windows 8. Avez-vous trouvé le dossier ?

    RépondreSupprimer
    Réponses
    1. moi aussi j'ai pa pu recupérer le fichier .hex svp aidez moi !

      Supprimer
    2. suivez ce lien
      http://www.youtube.com/watch?v=cPXO8CbYlKw

      Supprimer
  3. Je n'ai pas essayé la méthode ci-dessous mais je suppose qu'elle fonctionne. Dites-moi si vous ne trouvez pas !

    Ouvrir l'explorateur de fichier, et entrer le chemin suivant :
    C:\WINDOWS\TEMP
    L'accès en lecture/écriture de ce dossier nécessite d'être administrateur.
    Ensuite, suivre les instructions données dans l'article ci-dessus.

    Si vous avez un doute entre plusieurs fichiers, essayez-les tous.

    RépondreSupprimer
  4. HC-SR04 Ultrasonic Arduino Library svp j'ai besoin de cette biblio pour smuler mon projet

    RépondreSupprimer
  5. SVP , lorsque j'ai lancé la simulation un message erroné a affiché
    Invalid opcode 0x9419 at PC=0x0CA2
    C'est quoi ce problème ?

    RépondreSupprimer
    Réponses
    1. @ Rami
      Un problème de matériel qui ne correspond pas au logiciel (adresse d’écrire le programme ne correspond pas ).
      Je pense que vous n'avez pas bien choisi le type de carte avant de compiler votre programme arduino
      pour le faire appuyez sur outils -> type de carte après sélectionnez arduino uno et en principe c'est bon
      donc il vous reste à refaire la config (rechercher le fichier .hex ...)

      Supprimer
  6. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer
  7. Je viens de trouver un moyen beaucoup plus simple pour trouver l'adresse du fichier .hex :
    1) Fichier/Préférence
    2) Cocher "compilation" en face de "Afficher les résultats détaillés pendant ;"
    3) L'adresse apparaîtra directement lors de la compilation.

    RépondreSupprimer