Parlons Arduino > Trucs & astuces

Techniques de mise au point

<< < (2/3) > >>

Thierry:
On ne peut pas vraiment dire que c'est plus simple... C'est juste autre chose.

Le but de ce type d'émulation est de parvenir à compiler le fichier .ino, en faisant en sorte que les entrées et sorties soient gérées par d'autres que par l'Arduino. Il y a plusieurs problématiques :

1 Arriver à compiler
  Le source .ino suppose la présence de fichiers include comme Arduino.h, serial.h et d'autres qu'il faut reproduire localement. C'est par exemple mon bout de code comme tu dis. Ensuite, et comme tout ne sera pas parfaitement identique, il faut pouvoir délimiter les zones à compiler dans le cas "émulation", et celles à compiler dans le cas "production". C'est l'utilisation des defines du C VISUALSTUDIO pour moi ou PC pour Marc-Henri.

2 Emulation des boutons
  Quoi de mieux que le clavier et la souris pour évoquer des boutons ou des potars. L'émulation passe par un retour d'événements selon la touche frappée... C'est plus simple dans mon cas puisque j'ai ajouté une classe ButtonCommanderKeyboard à ma librairie, qui n'existe que pendant la compilation VisualStudio !

3 Emulation des sorties
  A vrai dire, ce n'est pas vraiment nécessaire. Du temps de la mise au point de UAD, je n'avais pas pris la peine d'émuler quoi que ce soit. Se mettre dans une situation donnée et regarder le comportement sous debuggeur pour comprendre ce qui se passe est déjà en soi un grand pas en avant... Par contre pour LcdUi qui me permet de créer une interface utilisateur sur un écran Lcd, j'ai vraiment émulé cet écran avec une fenêtre windows (voir image plus haut) et j'en ai profité pour ajouter une console série qui réagit aux ordres de Serial.print !

Tout ça suppose que tu te trouve un environnement de travail comme un Gcc, un Eclipse ou Visual Studio Community gratuit sous Windows, et que tu te codes ce dont je viens de parler. Evidemment on est disposés à t'aider dans cette démarche...

DDEFF:
Z'etes sûrs qu'il fallait mettre ça dans la rubrique "débuter" ??  ???
Je vais tâter de Visual Studio, pour voir un peu.
Merci

savignyexpress:
Bonsoir à tous,

Voici une nouvelle technique de mise au point, l'envoi d'une trame de bits sur oscilloscope. J'ai un oscilloscope analogique de presque 40 ans d'âge sans possibilité de mémorisation et je me suis demandé comment l'utiliser pour afficher des séquences binaires pour la mise au point.

L'image ci-après montre le résultat obtenu, pour le moment avec un programme de test basé sur une instruction _delay_us, à remplacer par une routine d'interruption pilotée par un timer pour un timing plus précis. La résolution horizontale est de 50 us / division, la résolution verticale est de 2 V / division. La valeur affichée est: 11010000.



Le principe est de commencer par une impulsion à 5 V, ensuite les 1 sont représentés par 3 V et les 0 par 0 V.
L'impulsion de 5 V permet de voir où le nombre affiché commence.
Le trigger de l'oscilloscope est réglé pour se déclencher entre 3V et 5V, si on le règle plus bas, les bits représentés par 3 et 0 V se mélangent. Ainsi le trigger ne se déclenche qu'au début de l'affichage de la valeur.

Il suffit d'une broche du microcontrôleur et 2 résistances: 2.2 K entre la sortie et 5 V,  3.3 K entre la sortie et la masse.

En C, sans librairie Arduino, j'ai défini la broche reliée à l'oscilloscope.

--- Code: ---#define OSCILLO _BV(PB1)

--- Fin du code ---

Arduino

--- Code: ---#define OSCILLO  13

--- Fin du code ---

Affichage de l'impulsion initiale
Configurer la broche en sortie.
Écrire un 1.


--- Code: ---DDRB |= OSCILLO;
PORTB |= OSCILLO;

--- Fin du code ---

Arduino

--- Code: ---pinMode (OSCILLO, OUTPUT);
digitalWrite (OSCILLO, HIGH);

--- Fin du code ---

Afficher un 0
Configurer la broche en sortie.
Ẽcrire un 0.


--- Code: ---DDRB |= OSCILLO;
PORTB &= ~OSCILLO;

--- Fin du code ---

Arduino

--- Code: ---pinMode (OSCILLO, OUTPUT);
digitalWrite (OSCILLO, LOW);

--- Fin du code ---

Afficher un 1
Broche en entrée, sans résistance pullup interne.
Le diviseur de tension constitué par les résistances maintient la broche à 3.3 / 5.5 de 5 V, soit 3 V.


--- Code: ---DDRB &= ~OSCILLO;

--- Fin du code ---

Arduino

--- Code: ---pinMode (OSCILLO, INPUT);

--- Fin du code ---

Cette technique est peut-être moins nécessaire avec un Arduino où les serial.print permettent de tracer l'exécution, mais sur les petits Attiny elle peut s'avérer utile.

Bonne fin de semaine à tous.

Julaye:
Bonjour,

Utiliser un simulateur d'Arduino (cf https://windowsreport.com/fr/meilleurs-simulateurs-arduino/) ?

Virtronics est pas mal (pas à pas et breakpoint dans le programme) mais il est payant dès que le projet dépasse 200 lignes.

Hope this helps

Tony04:

--- Citation de: DDEFF le novembre 10, 2015, 01:46:29 pm ---Z'etes sûrs qu'il fallait mettre ça dans la rubrique "débuter" ??  ???

--- Fin de citation ---

Bonjour,

je profite de ce fil pour donner mon modeste avis et suis totalement d'accord avec toi Denis.

Suite à pas mal d'échanges avec plusieurs "anciens" utilisateurs, je crois que les débutants sont partis depuis longtemps.
Locoduino est désormais surtout utilisé par des "PROS".

C'est très positif pour le site, mais combien de passionnés de trains ne trouvent plus leur compte et vont chercher ailleurs les réponses à leurs questions.

Ne serait-il pas temps de créer 1 SUPER Locoduino ?

Des avis sur ce sujet (qu'il faudra peut-être déplacer) ?

Cordialement
Antoine   

Navigation

[0] Index des messages

[#] Page suivante

[*] Page précédente

Utiliser la version classique