|
Publicité ' | ||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : mai 2009 Messages : 7 ![]() |
J'ai un petit pb dans mon projet. Avant tout je tiens à dire que je suis débutant en programmation (ça fait 1 mois que j'y touche) donc soyez indulgent svp. Tout ce qui suit, a été fait en partie grâce au cours de Bigonoff (je n'ai pas tout lu non plus) que je remercie...
Je traduit en mot ce que j'ai programmé : J'ai demandé à mon PIC de faire 8 conversions analogique/digitale et d'en faire la moyenne. Cette moyenne je veux l'afficher sur deux 7 segments. Pour l'afficher j'ai programmé un TIMER qui toutes les 20 ms renvoie à l'adresse 0x08 de l'interruption. L'interruption consiste donc à afficher la valeur tens et ones sur les deux 7 segments de façon alternative. Donc toutes les 20 ms les cadrans des dixaines et des unités s'allumeront successivement pour afficher les valeurs stockées dans ones et tens. Seulement pendant une simulation, quand je fais "watch" dans MPLAB, Le PORTB, le PORTA et TABLAT restent à 0 ce qui veut dire que mon interruption ne se met pas en route et je ne comprends pas pourquoi... Pouvez vous m'aider? Voilà mon code: Code :
|
||
|
|
00
|
|
|
#2 |
|
Membre confirmé
![]() Inscription : mai 2009 Messages : 262 ![]() |
Simple remarque à titre informative : "Pourquoi utiliser MPLAB et son language complexe (mais puissant certes) alors qu'on peut utiliser PICC (Compilateur CCS) et tout faire dans un C des plus basique ?"
Le tout sachant qu'il suffit d'un export via MPLAB pour reprendre le .HEX et le balancer dans le PIC via ICD2 ... Pour ton problème, as-tu activer les registres du PIC indiquant que les Entrées/sorties qui t'intéressent sont des intérruptions ou des convertisseur A-N ? Si tu ne l'as pas fait, elles sont par défaut considérés comme des I/O standard. De plus, il faut un timer de minimum 50ms entre chaque convertion pour laisser le temps au multiplexeur de passer d'une ligne à l'autre (car le PIC n'a en réalité qu'un seul convertisseur). |
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : mai 2009 Messages : 7 ![]() |
Mon interruption est une interruption du timer0
Je fais juste un décompte du timer0 de 20ms, une fois le timer dépassé, l'interruption se met en route. Donc aucune incidence des pins sur l'interruption. J'ai néanmoins configuré mes pins de la façon dont je le souhaitais. Pour ce qui est des 50 ms entre chaque conversion c'est exactement ce que j'ai laissé. mon PIC doit faire 1 conversion toutes les 50 ms et huit fois de suite ce qui donne 400ms de conversion. Donc ces 400ms seront entrecoupées toutes les 20 ms de l'interruption affichage. Mais... Mon interruption ne fonctionne toujours pas.... :'( Je ne trouve pas ce que j'ai mal fait |
|
|
00
|
|
|
#4 |
|
Membre confirmé
![]() Inscription : mai 2009 Messages : 262 ![]() |
Question bete mais, es-tu sur de tes branchements ?
Un problème sur l'Oscilloscope et tout ton programme déconne. Mais je vais partir du principe que tu as déja transformé ta carte en guirlande de Led clignotante ![]() Sinon, à combien est cadencé ton PIC, ton Timer0 ? Es-tu sur qu'il tick quand tu le souhaite vraiment ? |
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : mai 2009 Messages : 7 ![]() |
Je n'ai fait aucun branchement encore ce n'est que de la simulation.
Donc pour le moment je me fiche de la cadence du PIC et du timer0 Je veux juste que mes registres se chargent en simulation... Une fois que mes registres se chargeront, je me préoccuperai de la cadence. Mais vraiment je sèche... |
|
|
00
|
|
|
#6 |
|
Membre confirmé
![]() Inscription : mai 2009 Messages : 262 ![]() |
Quel logiciel de simulation utilises-tu ?
Je sais que la suite Proteus as du mal avec la simulation et que les résultats ainsi obtenus peuvent etre faux ou absents. Si, tu simules avec MPLAB, as-tu spécifié la bonne cadence (HS, XT, etc...) ou le bon PIC à utiliser ? Ensuite utilise le débugger pour faire du pas à pas dans ton programme, tu veras quelles instructions ne marchent pas ! PS : si tu veut, tente d'écrire le programme en C via le log PICC. Tu gagneras énormement de temps ET ça sera plus facilement débuggable ! |
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : mai 2009 Messages : 7 ![]() |
Oui j'ai spéficié le bon PIC...
En fait j'utilise le Debugger, mais dans mon appli, l'interruption ne se met pas en route Tout tourne en boucle normalement, sauf qu'aucune interruption n'arrive donc le PORT B et C reste à 0. De ce fait aucun affichage n'est possible... |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : mai 2009 Messages : 7 ![]() |
PB résolu, le délai du timer0 était tellement grand que mon interruption ne se déroulait pas... le simulateur n'était pas assez rapide...
Merci de votre aide PS: Si quelqu'un sait comment faire varier une fréquence en fonction de la tension analysée dans le but de faire varier la fréquence d'un haut parleur, je ne dis pas non |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com