Dernière mise à jour :
16/03/2017
Présentation
Cette page est prête à recueillir vos questions restées sans réponse
après lecture du livre. Je les note au fur et à mesure,
afin de ne pas les oublier, mais y répond quand j'ai le temps.
Afin de me faciliter la tâche ainsi que la votre, je classe
les
questions par chapitre et non par ordre
d'arrivée. Voir aussi :
- Page Compléments
qui comporte de nouvelles idées et vidéos "tutoriels" qui s'appuyent
sur certains chapitres "pratiques" du livre.
- Page Corrections
qui recense les erreurs qui sont passées au travers des mailles du
filet.
- Page Avis
qui résume les retours (positifs et négatifs) des lecteurs.
Questions
-
Pascal A. (mail) - 16/03/2017
Page 141: vous dites que
l'interruption n'est déclenchée qu'une seule fois alors que toute les
conditions sont réunies pour retourner dans le programme d'interruption
comme cela est expliqué dans le cours de Bigonoff (16F84).
Si le bit indicateur d'état de l'interruption (INTF dans l'exemple en
question) n'est pas remis à zéro après traitement de l'interruption, le
programme retourne bien là où il avait été interrompu, mais aucune
interruption ultérieure ne peut se produire pour cet embranchement (ici
INTF lié à la broche RB0). Cela n'empêche pas d'autres sources
d'interruption de provoquer une nouvelle interruption.
Page 154: La RAZ du bit RBIF est
suivie d'une lecture du Port B alors que dans le Data Sheet
c'est l'inverse qui est préconisé.
Vous avez raison, le datasheet préconise que le bit RBIF soit remis à zéro
après
lecture du PORTB, et la rigueur voudrait que j'adopte cette méthode.
Ceci dit, le code proposé dans ce chapitre fonctionne aussi, bien
que l'ordre des deux routines soit inversé.
Page
217: Vous utilisez l'instruction ADC Read avec Vref+ et Vref-. Dans
l'aide de mickoPascal, il est mentionné que cette instruction ne
fonctionne pas avec les sources de référence externes.Cette
limitation a du exister dans d'anciennes versions de MikroPascal, et je
pense que l'aide en ligne n'a pas été mise à jour. Le code compilé avec
la routine ADC_Read tient bien compte de la tension de référence
externe (ici Vref+ sur RA3).
Page 272: Quelle est la différence entre ADC_Read et ADC_Get_Sample ?La
routine ADC_Read procède à une initialisation systématique du module
CAN avant la lecture effective de l'échantillon. La routine
ADC_Get_Sample (qui a été intégrée plus tard dans MP) ne fait que
lire l'échantillon et de ce fait est beaucoup plus rapide et
conseillée.
Julien P. (mail) - 11/05/2016
Bonjour,
je me permets de vous signaler une erreur dans votre ouvrage "les
microcontrôleurs PIC pour les débutants". 1ère édition, 1er tirage.
J'ai lu au moins 10 fois le passage et je pense que vous vous êtes
trompé sur un mot employé. Page 52, au point 5.2.1. "Petite parenthèse,
[...], mais à un rythme plusieurs fois inférieur. ..." Au lieu de
"inférieur", ce n'est pas plutôt "supérieur"? Bonne journée.
Bonjour
Julien, merci beaucoup de l'intérêt porté à mon livre. Supposons que le
quartz oscille à 1 MHz, ce qui correspond à une période de 1 us. Une
instruction qui réclame 4 cycles d'horloge demandera 4 us, ce qui
correspond à une fréquence de 250 kHz. La vitesse d'exécution de cette
instruction (250 kHz) est établie à un rythme 4 fois inférieur à celui
de la fréquence d'oscillation de l'horloge FOSC (1 MHz).
Guillaume G. (mail) - 31/01/2016
Bonjour
Rémy, je pense qu'il y'a une petite erreur page 57 de votre livre
chapitre 5.2. je cite : "Le 16F628A propose par exemple deux valeurs de
fréquences internes : 4 MHz et 37 kHz..." Il me semble que le datasheet
indique 48 kHz pour la fréquence interne la plus basse.
Bonjour
Guillaume, et merci pour votre retour. En effet, si on consulte le
datasheet du 16F628A daté de 2006, il est fait mention de deux
oscillateurs internes de 4 MHz et de 48 kHz. Mais si
on consulte
le datasheet du 16F628A daté de 2002, il est fait mention de deux
oscillateurs internes de 4 MHz et 37 kHz. C'est évidement
celui de
2002 que j'avais sous forme imprimée, entre les mains. Comme la valeur
de 48 kHz est plus récente et juste, je reporte cette remarque à la
page
Corrections.
Gilles N. (mail) - 28/03/2015
Bonjour Rémy, Une petite précision
SVP. PIC12F675,
convertisseur A/D, registre ANSEL. Les bits <6:4> règlent
la
fréquence d'horloge de la convertion. Par exemple, pour une fréquence
d'oscillation interne à 4 MHz du PIC, quelle est la sélection idéale de
ANSEL bits <6:4> ? Pouvez-vous m'expliquer succintement.
Dans
l'exemple de votre livre, vous mettez ces trois bits à 000 soit Fosc/2
pour un PIC16F88. Cette fonction me cause des soucis. Je ne comprends
pas bien. Merci d'éclairer ma lanterne. Cordialement, Gilles.
Bonjour Gilles et merci pour le livre. Pour un fonctionnement correct
du CAN intégré au PIC, la durée d'acquisition de l'échantillon doit
durer un certain temps, en fait le temps nécessaire au condensateur
mémoire de se charger. Le document constructeur (datasheet) du 12F675
indique que ce temps d'acquisition Tad doit être de 1,6 us au minimum.
Avec une horloge de 4 MHz, on peut avoir ADCS2:ADCS0 = 001 (Tad = 2 us)
ou ADCS2:ADCS0 = 101 (Tad = 4 us). On peut bien sûr adopter un temps
d'acquisition plus long mais cela consomme du temps pour rien. Quand on
utilise l'horloge interne du PIC, la routine ADC_Init de MikroPascal
ajuste automatiquement les 3 bits idoines du registre ANSEL. Si vous
utilisez une routine maison, vous devez spécifier manuellement la
valeur de ces trois bits.
Pascal A. (mail) - 25/02/2014
Bonjour Rémy, j’ai relevé deux erreurs
(à confirmer) dans votre excellent livre :
1) Page 78 : il me semble que la ligne
de code PORTA.1 := 0 devrait se trouver en-dessous du end de la
deuxième boucle.
2)
Page 79 : il me semble que le mot supérieur doit être remplacé par
inférieur : "sans que le watchdog ne provoque de reset est un peu
supérieur à 2s".
Encore bravo pour votre livre. Bien
cordialement.
Bonjour Pascal et merci pour vos compliments, je suis heureux si mon
livre vous plaît.
1)
le code est juste, mais l'indentation peut laisser penser que la ligne
PORTA.1 := 0 fait partie de la seconde boucle while, ce qui n'est pas
le cas. Cette ligne n'est exécutée que si on relâche rapidement SW1,
c'est-à-dire avant que le watchdog entre en action. Le terme "end"
auquel vous faites allusion s'applique à "if" et non "while".
2) Je
comprends ce que vous avez compris. En fait, la durée avant activation
du watchdog est voisine de 2,3 s, elle est donc un peu supérieure à 2
s. Mais il faut réagir avant ces 2,3 s, c'est là que le terme inférieur
devrait être employé.