Bonjour,
Un PIC est-ce qu'il peut etre partiellement défectueux.Je devais la poser comme cela ma question .
Merci
-----
Bonjour,
Un PIC est-ce qu'il peut etre partiellement défectueux.Je devais la poser comme cela ma question .
Merci
Bonsoir,
Autrement dit si le PIC fait clignoter une LED ce n'est pas une certitude pour dire qu'il est bon a 100%.
J'essaie de prendre les devants pour ne pas galerer.Sinon est ce qu'il y'a une procédure à suivre pour vérifier un PIC.
merci pour votre patience et votre indulgence.
Dernière modification par ogre31 ; 21/09/2016 à 23h47.
Pour vérifier à 100 % un µC on peut concevoir un banc de contrôle automatique.
Mais ce sera lourd, très lourd, . . .
Bonjour,
ok, donc dans le doute changer de Pic.
Désoler aussi de vous ennuyer avec une autre question elementaire , sur le shéma joint je n'ai pas saisi le role du bouton poussoir.La led clignote sans ce bouton, j'ai utiliser le source de bigonoff pour ecarter la probabilité de l'erreur de code.
merci
Il doit servir quelque part ou plus tard dans le cours.
Et le code doit indiquer s'il sert ou pas dans l'immédiat.
bonsoir,
Effectivement,je suis revenu au cours rapidement et il me semble que je me suis un peu précipité .
Merci
Le port qui reçoit le bouton poussoir doit avoir une résistance de pull-up vu que c'est une entrée et ainsi assurer un niveau stable à 1 quand le BP n'est pas sollicité.
Soit tu en mets une en externe, soit tu actives le pull-up interne (mettre RBPU=0 dans le registre OPTION REG)
Bonjour,
oui en effet c'est ce qu j'ai trouvé apres..
Bon,je suis en passe de terminer les cours, c'est tellement passionnant qu'il faudrait que je me calme, je termine la progression puis je reviendrai avec mes question.
Merci infiniment a tous.
bonjour,
Dans l'exemple de bigonoff r34 cette ligne ne génère une erreur
#DEFINE LED_MASK B’00000100’ ; Masque d’inversion de la led
le message est :
Error[113] E:\_BIGONOFF\TP RED\INTERRUPTION\MYINTER.ASM 138 : Symbol not previously defined (B’00000100’)
Au niveau des define j'ai mis
#DEFINE LED_MASK b'00000100' ; Masque d’inversion de la led;
La ligne 138, dans le traitement de l'interruption, contient :movlw LED_MASK B’00000100’ ; bit positionné = bit à inverser.
merci
Il faut un B dans le define pas un b.
Et il suffit d'écrire:
Code:movlw LED_MASK;
Bonjour,
Ok ca marche, est ce que je doit retenir que c'est sensible a la casse ou juste que les binaires doivent etre notés
B'xxxxxxx' et non b'xxxxxxxx'
Merci pour votre aide
Re
Sur MPLABX 3.20 on peut paramétrer l'éditeur concernant la casse.
Bonsoir,
Non l'erreur ne venait pas de la casse, mais de l'exemple de bigonoff ou alors j'ai pas su lire l'explication.Mais je pense que c'est une erreur.
il y'a un define sous cette forme - #DEFINE LED_MASK B’00000100’ (j'ai marqué la ligne de xxxxxxxxxx)
a mon avis le 2 binaire n'a pas lieu d'etre.
( c'est la page 141 La Programmation des PIC par Bigonoff r34 )
****************************** ***************Code:;********************************************************************** ; INTERRUPTION RB0/INT * ;********************************************************************** ;---------------------------------------------------------------------- ; inverse le niveau de RA2 à chaque passage ;---------------------------------------------------------------------- intrb0 movlw B'00000100' ; bit positionné = bit à inverser BANK0 ; car on ne sait pas sur quelle banque ; on est dans une interruption (le programme ; principal peut avoir changé de banque). Ce n’est ; pas le cas ici,mais c'est une sage précaution xorwf PORTA , f ; inverser RA2 return ; fin d'interruption RB0/IN Notez qu’à ce stade notre LED est définie par la ligne #DEFINE LED PORTA , 2 ; LED Il nous suffit donc de changer cette ligne pour placer notre Led sur une autre pin, sans intervenir dans notre programme. Par contre, ça ne fonctionnera plus au niveau de l’inversion de la sortie. L’idéal est donc d’utiliser également un define pour le masque en début de programme : #DEFINE LED PORTA , 2 ; LED #DEFINE LED_MASK B’00000100’ ; Masque d’inversion de la led xxxxxxxxxxxxxxxxxxxxxxx Et ensuite de remplacer la ligne movlw B'00000100' ; bit positionné = bit à inverser par movlw LED_MASK ; bit positionné = bit à inverser
J'aimerai bien avoir votre avis, je pense avoir remarqué d'autres erreurs mais vu mon niveau je crois que c'est prétentieux de ma part.
merci a tous pour votre aide,que j’apprécie énormément.
Dernière modification par gienas ; 14/10/2016 à 15h58. Motif: Ajouté balise code
Je t'ai donné la réponse en #41 donc oui tu n'es pas très attentif
Bonjour à tous
Il y a un "piège" en effet, auquel on ne pense pas toujours.
#DEFINE expression_1 expression_2
n'est que du traitement de texte, dans tous les éditeurs C, qui consiste, lors d'une première passe, à remplacer toutes les occurrences de expression_1 par expression_2 en y respectant scrupuleusement la casse.
Ce n'est qu'après cette "correction" que la compilation commence vraiment.
Tu comprendras aisément, je pense, que ce que tu pensais équivalent, ne l'est pas du tout.
Bonjour,
ben non Hulk28, c'est ton message qui m'a sauvé et m'a permis d'avancer.
Apres je me devais de comprendre mes erreurs.
j’aimerais bien q'un modo supprime le message que je n'ai pas pu modifier.
Je risque d’être banni et d’être PIQUE à mort.
Merci à tous
Dernière modification par ogre31 ; 25/09/2016 à 18h27.
Pour la casse il faut juste bien penser qu'en programmation elle est importante, ensuite ça dépend des compilateurs pour leur tolérance sur les déclarations de variables.
Bonsoir,
J'ai pratiquement terminé la lecture de la 1°partie, et j'ai repris la lecture depuis le début, cela m'a permis de comprendre bien des choses.
J'ai compris le rôle de tous les registre mais le registre FSR reste flou, quel rôle joue t-il.Je sais qu'on y trouve des info pour l'adressage...... ce n'est très tres claire pour moi.
Merci
L'adressage indirect est pourtant bien expliqué.
Dans FSR on met une adresse, le contenu de la mémoire à cette adresse se trouve dans INDF.
Dixit le BIG :
Le contenu de INDF est traduit par le PIC® comme étant le contenu de
l’emplacement mémoire pointé par FSR.
bonsoir,
merci pour la prise en charge rapide de ma question.
Oui , je pense avoir les modes d'adressage,peux-tu me donner un p'tit exemple d'utilisation de ce registre, parcequ'il y'a une autre question qui concerne l'initialisation de ce registre
init1
1-clrf INDF ; effacer ram
2-incf FSR,f ; pointer sur suivant
3-btfss FSR,6 ; tester si fin zone atteinte (>=40)
4-goto init1 ; non, boucler
5-btfss FSR,4 ; tester si fin zone atteinte (>=50)
6-goto init1 ; non, boucler
Je n'ai pas saisi les lignes 3 et 4, pas BTFSS mais plutôt le 6 et le 4 qui suivent FSR.
merci
Re bonsoir,
en complément de ma question précédente :
Est ce qu'il fait référence à l'adresse en cours de manipulation ou de traitement, par exemple dans
movfw l'adresse contenu dans FSR est -ce c'est celle de f (movFw) ?
merci pour votre patience.
C'est un programme pour mettre à 0 une zone en mémoire RAM.init1
1-clrf INDF ; effacer ram à l'adresse pointée par FSR
2-incf FSR,f ; pointer sur suivant
3-btfss FSR,6 ; tester si fin zone atteinte (>=40)
4-goto init1 ; non, boucler
5-btfss FSR,4 ; tester si fin zone atteinte (>=50)
6-goto init1 ; non, boucler
Je n'ai pas saisi les lignes 3 et 4, pas BTFSS mais plutôt le 6 et le 4 qui suivent FSR.
- tant que le bit 6 de FSR est à 0 on efface à l'adresse suivante (1ère boucle)
- quand FSR,6 est à 1 (b'111 111' ou h'3f') on surveille le bit4 (2ème boucle)
- quand SFR,4 est à 1 on continue la suite du programme
On a donc effacé la RAM dans la zone de b'0' à b'10010000'
Bonsoir,
Soyez patient avec moi s'il vous plait parce qu’il faut que je saisisse sinon je vais avancer en boitant et je n'aime pas.
Donc ok je me suis trompé sur la commande, pour terminer avec ma question précédente je vais la reprendre. Dans "movwf" est que FSR contient l’adresse de "f".
Pour l'initialisation de la ram "btfss FSR,6" et "btfss FSR,4"
1-Pourquoi en 2 boucles
2- Pourquoi le bit 6 et 4.
Merci pour votre patience
1) Parce que c'est une méthode qui prend peu de place. Ne pas oublier qu'il s'agit d'un cours où l'auteur développe toutes les fonctions à étudier au fur et à mesure. Il ne faut donc pas se poser trop de questions au début et effectuer l'apprentissage comme il vient.
2) On veut mettre à 0 la RAM de b'0' à b'10011111'
La 1ère boucle traite de b'0' à b'01111111' -> 1ère occurence où bit6 est à 1.
Après l'incrémentation suivante on met à 0 l'adresse b'10000000' puis on passe dans la boucle suivante jusqu'à ce que le bit4 passe à 1, c'est à dire jusqu'à l'adresse b'10011111'
Tu n'aurais pas sauté des lignes ?
Bonsoir,
Voila Ce que j'ai trouvé, et pour moi c'est plus logique, effacer les 68 octets en une seule boucle.
extrait ,ci dessous, de: http://fabrice.sincere.pagesperso-or...c/fsr_indf.htm
------------------------------
Il s'agit d'effacer les 68 octets d'usage général de la mémoire RAM, situés aux adresses 0x0C à 0x4F :
...Code:movlw 0x0C movwf FSR ; on charge l'adresse de début (0x0C) debut clrf INDF ; effacement du contenu du registre pointé par FSR incf FSR, f ; on incrémente l'adresse movlw 0x50 ; adresse de fin + 1 (0x50) subwf FSR, W btfss STATUS, Z ; on teste si (FSR) = 0x50 goto debut ; non : on recommence suite
------------------------------------------------
Merci pour ta patience
Dernière modification par gienas ; 14/10/2016 à 15h57. Motif: Ajouté balise code