Bonjour,
Je me permet de poster ce message en doublon avec un autre forum d'electronique dans le but d'avoir le plus d'avis possible sur la question, j'espere ne pas violer une regle de la charte en faisant ceci.
(http://www.abcelectronique.com/forum...ad.php?t=68001)
j'ecris un message sur ce forum car j'ai un petit souci concernant l'ecriture d'un programme en C pour la gestion de pluseurs pwm en software sur un pic18f252.
Le but de ce programme est de pouvoir gerer autant de pwm que désiré (en etant bien sur limité par la vitesse d'execution) mais toutes definies par une meme frequence (et donc un seul timer).
Je pense m'en etre sorti pour ce qui est de la programmation de l'algo et du programme en general mais un probleme que je n'avais pas anticipé met un peu de plomb dans l'aile à mon programme.
En effet, pour mettre successivement à 1 ou à 0 les pins associés a mes pwms je voulais utiliser un tableau de pointeurs vers les bits des pins (pensant que les booleens me sauveraient). Ainsi dans ce tableau, j'aurais pu avoir acces aux bits des buffers des pins et je n'aurais plus eu a me soucier dans l'algo des noms des ports etc... ca m'aurait meme permis (et c'est le but) de pouvoir utiliser des pins de ports differents pour les differentes sorties de mes pwms.
Or, au moment de compiler j'ai eu l'agreable surprise de m'apercevoir que les booleens n'existent pas en C18 (eheh) et ensuite qu'il etait impossible de recuperer l'adresse (et donc de creer un pointeur) vers les bits des structures des ports.
En fait je m'apercois que c'est apparement une caracteristique intrinseque du C puisqu'il semble interdit de recuprer l'adresse de champs de bits.
Bref, je me retrouve donc un peu coincé dans cette logique et je ne sais plus trop comment faire pour arriver a gerer ce probleme.
Voila l'exemple de ce que j'avais programmé et que je comptais faire :
// Associate port pins to pointers used in pwm functions
pwm_pins[0]=&(LATBbits.LATB0);
pwm_pins[1]=&(LATBbits.LATB1);
pwm_pins[2]=&(LATBbits.LATB2);
// Start with all the pins at 0 (so we go to the new cycle block in the interruption)
*(pwm_pins[0])=0;
*(pwm_pins[1])=0;
*(pwm_pins[2])=0;
Ainsi, à chaque index du tableau correspondait une pwm (pour lequel je stocke dans d'autres tableaux le duty cycle etc...) et j'avais sous le meme index dans ce tableau directement le pin du port a modifier.
Voila mon probleme et j'aurais voulu savoir si quelqu'un avait une idée pour pouvoir conserver ce systeme d'index pour acceder aux pins sans forcement faire un switch a chaque interruption sur l'index et les noms de pins...
merci pour votre aide, n'hesitez pas a me demander plus de lignes de codes ou des details concernant le reste du programme...
merci d'avance pour votre aide
Romain.
-----