bonjour,
je souhaite me mettre a la programmation sur les pic , quel langage est le mieux adapté pour les pic ?
le basic ?
le C ?
l'assembleur ?
j'ai deja developpe sur les atmel avec ces langages.
Merci de votre aide.
-----
bonjour,
je souhaite me mettre a la programmation sur les pic , quel langage est le mieux adapté pour les pic ?
le basic ?
le C ?
l'assembleur ?
j'ai deja developpe sur les atmel avec ces langages.
Merci de votre aide.
Bonjour,
personnellement j'ai commencer par l'assembleur (voir les cours de bigonoff c'est la bible !) je pense que c'est indispenssable pour comprendre comment ça marche ,puis je suis passé au basic que je trouve beaucoup plus facile
http://www.oshonsoft.com/picgetstarted.html
pour les petits programmes que je réalise (voir mon site )
cordialement
Alain
Décider de faire, c'est bien . Décider quand, c'est mieux !
Bonsoir,
On ne peut pas dire qu'un langage est meilleur qu'un autre. Tout dépend de ce que tu veux faire et de tes facilités avec tel ou tel langage.
Pour ce qui est de l'assembleur, il faut bien connaître les instructions et registres du PIC pour coder correctement. Le langage est fastidieux mais c'est le langage le plus proche de la puce. Tu gagnes en rapidité. Si tu dois coder un programme complexe, ça va être plutôt rébarbatif mais j'ai déjà vu des sacrés programmes en assembleur. Pour maîtriser l'assembleur des PICs, LA référence est sans aucun doute le manuel de Bigonoff : http://www.abcelectronique.com/bigon....php?par=1af41. Le manuel est en bas de page.
A propos du C, le langage est interprété. Il est beaucoup plus lisible pour toi mais doit être compilé pour le PIC. La compilation implique une génération automatique de l'assembleur à partir du C pas toujours bien optimisée mais c'est beaucoup plus agréable à coder. Au niveau des compilos, il y a entre autres en gratuit CC5X pour la famille 16F (limité à 1ko de code ce qui est déjà bien pour commencer) et HI-TECH PICC (limitation de durée à 3 mois). Le site http://hhollard.club.fr/prog_pic_c.htm permet de se faire la main avec CC5X. Sinon il y a les compilateurs de Microchip. Je crois que la famille 18F est optimisée pour le C.
Pour ce qui est du Basic, je ne l'ai jamais utilisé et je l'ai rarement vu appliqué au PIC.
Tu peux aussi mixer du C et de l'assembleur.
J'espère t'avoir un peu éclairé.
Greg.
merci pour vos reponses.
Bonjour,
Surtout pas ce compilateurpuis je suis passé au basic que je trouve beaucoup plus facile
http://www.oshonsoft.com/picgetstarted.html
pour les petits programmes que je réalise (voir mon site )
C'est vrai que le prix est intéressant , l'interface est très pratique et que son simulateur est intéressant mais plein d'erreurs sur le compilateur, l'auteur ne répond pas.
Bonne continuation
bonjour,
j'utilise ce basic pour les pic type 12F675,16F88, et je n'ai encore rencontré aucun probleme ,c'est vrai que mes programme sont simples,si tu pouvais ne donner un exemple d'erreur de compilation (pour connaitre ses limites et tenter de comprendre pourquoi ).
cordialement
Alain
Décider de faire, c'est bien . Décider quand, c'est mieux !
d'après moi, c'est indispensable, même si l'on code en C ....
je me permet de corriger une inexactitude : le C est un langage compilé (il est traduit en langage machine par le compilateur). Le Basic est un language interprété (les instructions sont exécutées directement par un programme qui se trouve sur la machine.) Le JAVA est entre les deux : le code source est d'abord "compilé" pour donner du bytecode qui est interprété sur la machine cible.
c'est une très bonne idée je trouve.
En résumé : ça dépends de ton projet. Assembleur : plus fastidieux, mais plus rapide et plus compact. C : plus facile et plus vite codé.
Bonjour
Reponse a la reponse,
Les basic ne sont pas tous interpretés!!
Pic basic , proton en ce qui concerne les pic sont compilés
Visual basic 6.0 peut generer de l'interpreté ou du compilé
Sinon, pour repondre a la question de base, le C est un très bon langage.
Je developpe sur microcontroleur et en particulier les pic (16,18,24)
( c'est mon job ) et le C est largement utilisé ( en 10 ans de developpement su Micro, un seul code en asm,!!) . Le C permet de faire des codes puissants et LISIBLES. Quand a la rapidité d'execution, les optimiseur des compilateurs font très bien leur boulot. Un code assembleur normal sera moins rapide q'un code C optimisé, et si on optimise le code assembleur, cela devient totalement illisible !!
De plus, si on souhaite maitriser le timing d'une partie de code, il suffit d'inserer du code ASM dans le programme C, Les compilateurs permettant cette manip.
Bonjour,
16F877bonjour,
j'utilise ce basic pour les pic type 12F675,16F88, et je n'ai encore rencontré aucun probleme ,c'est vrai que mes programme sont simples,si tu pouvais ne donner un exemple d'erreur de compilation (pour connaitre ses limites et tenter de comprendre pourquoi ).
cordialement
Alain
4Mhz
Tiens:
le compilateur dit:Code:Define CLOCK_FREQUENCY = 4 Symbol pinout = PORTB.1 Config pinout = Output Dim t As Byte \'demi periode Dim tb As Byte \'demi periode Dim th As Byte \'demi periode t = 200 Const t2 = 400 \'periode Dim i As Byte Dim bit_a_emmetre As Bit Dim data As Byte Dim correctifh(7) As Byte Dim correctifb(7) As Byte \'correctifh(0) = 38 \'correctifb(0) = 46 correctifb(1) = 13 correctifh(1) = 52 correctifb(2) = 13 correctifh(2) = 55 correctifb(3) = 19 correctifh(3) = 67 correctifb(4) = 19 correctifh(4) = 82 correctifb(5) = 18 correctifh(5) = 83 correctifh(6) = 91 correctifb(1) = 18 correctifb(7) = 17 correctifh(7) = 0 correctifh(0) = 38 correctifb(0) = 41 \'Dim t As Word Goto debut \'routine send0: pinout = 0 th = t - correctifh(i) tb = t - correctifb(i) WaitUs tb pinout = 1 WaitUs th Goto return_emmit send1: th = t - correctifh(i) tb = t - correctifb(i) pinout = 1 WaitUs th pinout = 0 WaitUs tb Goto return_emmit debut: data = 0 start: pinout = 0 WaitUs t pinout = 1 WaitUs t2 pinout = 0 WaitUs t data_start: For i = 0 To 7 Select Case i Case 0 bit_a_emmetre = data.0 Case 1 bit_a_emmetre = data.1 Case 2 bit_a_emmetre = data.2 Case 3 bit_a_emmetre = data.3 Case 4 bit_a_emmetre = data.4 Case 5 bit_a_emmetre = data.5 Case 6 bit_a_emmetre = data.6 Case 7 bit_a_emmetre = data.7 EndSelect If bit_a_emmetre = 0 Then Goto send0 Else Goto send1 Endif return_emmit: Next i pinout = 0 End
error in line 37: argument\'18\' is not a valid byte type constant
lorsque je l'ai supprimé il me dit (line 38 bad expression) (la ligne 38 est vide)
lorsque je redémarre tout ça donne un autre msg d'erreur plus bete
mon programme parait bizzare et bete(la select case et les correctifs)
en fait c'est parce que lorsque je lui dit PORTB.i il ne comprend pas
et les correctifs c'est parceque c'est ces routines prédéfinies ne sont pas optimisés(trop gourmandes en temps) je dois donc corriger l'erreur des tempo pour que ca soit précis
ça fait presque un moi que j'ai reporté ce bug mais il ne répond pas. Il n'a pas honte de m'envoyé ses SPECIAL OFFER blabla...
tiens un autre:
LINE2 syntax error!!!Code:Dim correctifsb(8) As Byte Dim correctifsh(8) As Byte correctifsh(0) = 38 correctifsh(1) = 52 correctifsh(2) = 55 correctifsh(3) = 67 correctifsh(4) = 82 correctifsh(5) = 89 correctifsh(6) = 91 correctifsh(7) = 14 \'\'\'\'\'\'\'\'\'\'\' correctifsb(0) = 41 correctifsb(1) = 13 correctifsb(2) = 13 correctifsb(3) = 19 correctifsb(4) = 19 correctifsb(5) = 5 correctifsb(6) = 14 correctifsb(7) = 13 Define CLOCK_FREQUENCY = 4 Symbol pinout = PORTB.1 Config pinout = Output Dim t As Byte \'demi periode Dim tb As Byte \'demi periode Dim th As Byte \'demi periode t = 200 Const t2 = 400 \'periode Dim i As Byte Dim bit_a_emmetre As Bit Dim data As Byte Goto debut \'routine send0: pinout = 0 th = t - correctifsh(i) tb = t - correctifsb(i) WaitUs tb pinout = 1 WaitUs th Goto return_emmit send1: th = t - correctifsh(i) tb = t - correctifsb(i) pinout = 1 WaitUs th pinout = 0 WaitUs tb Goto return_emmit debut: data = 0 start: pinout = 0 WaitUs t pinout = 1 WaitUs t2 pinout = 0 WaitUs t data_start: For i = 0 To 7 Select Case i Case 0 bit_a_emmetre = data.0 Case 1 bit_a_emmetre = data.1 Case 2 bit_a_emmetre = data.2 Case 3 bit_a_emmetre = data.3 Case 4 bit_a_emmetre = data.4 Case 5 bit_a_emmetre = data.5 Case 6 bit_a_emmetre = data.6 Case 7 bit_a_emmetre = data.7 EndSelect If bit_a_emmetre = 0 Then Goto send0 Else Goto send1 Endif return_emmit: Next i pinout = 0 End
je suis passé à mikroC il parait beaucoup plus performant pour le moment(mais aussi beaucoup plus cher 10fois, j'espère que ca serait 10 fois plus performant)
@+
ne pas oublié d'enlever les "/" c'est généré par le html
Je ne comprend rien je l'ai essayé maintenant et ca se compile
ce qui est sur que c'était un bug
effectivement, le BASIC à l'origine était interprété, mais maintenant on trouve un peu de tout... ma remarque c'était surtout pour définir les notions de language interprétré / compilé.
salutations cher confrère
... et l'assembleur aussi est largement utilisé (en 9 ans de développement micro, grosso modo 50/50 entre l'assembleur et le C). ça dépends de ce qu'on veut faire avec.
Je suis tout à fait d'accord pour reconnaitre que les compilos ont fait d'énormes progrès. Ils étaient presque inutilisables il y a 10/15 ans, et ils sont très corrects aujourdh'ui. mais de la à dire qu'un compilo optimise mieux qu'un bonhomme qui code en assembleur...
tout à fait d'accord, on combine les avantages des deux mondes.
Pas de polémique, je ne suis pas anti-C, je l'utilise aussi. C'était juste pour remettre le curseur un peu plus au milieu![]()
pour les microcontroleur a architecture RISC je ne sais pas se qu'il en ai, mais par contre, pour se qui est des architecture classique, il est evident que les compilateurs autooptimisant font dans 95% des cas du code plus performant que 99% des codeur assembleur (sauf peut etre quelques rare gurus).
Bonsoir,
je rejoins assez ce que disent mat64 et MichelM38 pour pratiquer aussi.
J'ajouterai qu'un bon code qu'il soit en assembleur ou en C (ou autre) se doit d'être bien commenté, trop de code pondus en sont dépourvus ce qui nuit considérablement à la maintenance et à la lisibilité de l'ensemble.
Il n'est pas rare que je ne lise pas plus de 2 lignes quand un tel code est posté sur le forum.
Pour ce qui est de l'optimisation ça dépend aussi pas mal de la qualité du programmeur, car comment optimiser correctement des codes "spaghetti"?
Il n'est pas indispensable de connaitre l'assembleur pour coder en C, c'est un des privilèges des langages haut niveau, même si la connaissance de l'assembleur reste un moyen efficace pour optimiser la taille de code ou gérer la pile par exemple.
@+
Je ne m'adressais pas à toi, je n'utilise pas le Basic.![]()
bonjour Amgb2003,
je viens juste de regarder ton premier code que j'ai compilé dans l'état
il apparait un bug dés la premiere ligne
config pinout = output n'est pas compris
je suppose que tu veux préciser que pinout est une sortie
la syntaxe est plutôt
TRISA = %00000000 '0 pour les sortie
'1pour les entrée
j'ai donc remplacé cette ligne
ensuite ça se compile
je suis surpris de ne pas voir de registe de configuration .
dans la fonction /option/ configuration bits
après avoir coché ce que je souhaite je clic sur "generate code basic" ce qui a pour effet d'ajouté une ligne du type
Define CONF_WORD = 0x3d71 dans l'editeur basic
il faut aussi configurer les registres en fonction des besoins
(exemple ANSEL=%00000001 ,ADCON0 .......)
donc pour moi ça marche
Cordialement
Alain
Décider de faire, c'est bien . Décider quand, c'est mieux !
bonjour,
même remarque pour le deuxieme exemple
apres la modif
TRISB = %0000000 au lieu de Config pinout = Output
ça compile
cordialemeent
Alain
Décider de faire, c'est bien . Décider quand, c'est mieux !
Bonjour
regarde le manuel du compilateur et tu vas voir que ce syntax est permis
le compilateur met les aux valeurs par défauts
ou ça?? il parait que ta version est ancienne(la mienne est 6.65)
[/QUOTE]
@+
PS:il parait que ça commence à sortir du cadre de la discussion
bonjour,
je propose de continuer cette conversation en message privé
pour ne pas polluer le forum
cordialement
Alain
Décider de faire, c'est bien . Décider quand, c'est mieux !
Bonjour,
Mon grain de sel :
J'ai un faible pour le Basic (que les pros du C me pardonnent).
Je n'ai ni besoin d'optimisation en temps ni en code, les PIC sont un passe-temps et je m'amuse bien avec.
Mon compilateur n'a qu'un défaut, le prix 299€ chez Selectronic.
Comme c'est le Père Noël qui me l'a apporté ....
Pour avoir une idée : http://www.picbasic.org/proton_compiler.php
Salut Gérard,
et tu as bien raison, en amateur l'essentiel est de se sentir à l'aise avec les outils dont on dispose et selon les objectifs de réalisations envisagés.
Compte tenu du temps dont dispose un amateur, l'apprentissage d'un langage est un gros investissement en terme de temps, le soucis d'optimisation et de taille de code est secondaire, seul le résultat final est important.
Ca vaut aussi pour les polémiques concernant le choix du µC, les arguments avancés par les amateurs pour valoriser tel ou tel choix sont souvent HS, mais bon on ne va pas remettre 1 euros dans la boite à trolls.
@+
Salut JY,Salut Gérard,
et tu as bien raison, en amateur l'essentiel est de se sentir à l'aise avec les outils dont on dispose et selon les objectifs de réalisations envisagés.
Compte tenu du temps dont dispose un amateur, l'apprentissage d'un langage est un gros investissement en terme de temps, le soucis d'optimisation et de taille de code est secondaire, seul le résultat final est important.
Ca vaut aussi pour les polémiques concernant le choix du µC, les arguments avancés par les amateurs pour valoriser tel ou tel choix sont souvent HS, mais bon on ne va pas remettre 1 euros dans la boite à trolls.
@+
Et +1, tu as entièrement raison.
De toute façon les µC passent beaucoup de temps à attendre, il n'y a pas toujours quelque chose à optimiser.
Le meilleur µC est celui que l'on connait.
Pour moi, et ce n'est que mon avis, au niveau amateur, il faut prendre plaisir avec son loisir, pas se prendre la tête.