Programmer des Picaxes en d'autres langages

Nadar

New Member
Bonjour à tous !

Dans notre équipe de robotique nous utilisons des Picaxe pour programmer notre robot. Nous en sommes très content, mais nous aimerions pouvoir changer de langage de programmation afin d'avoir plus de libertés. Nous souhaitons donc conserver nos cartes et nos Picaxe mais programmer les composants comme des Pic classiques ( en C par exemple ) et charger le programme via la liaison série. J'imagine que ce qui est envoyé au Picaxe n'est rien d'autre qu'un fichier hex et que la liaison se fait via le bootstrap de Picaxe. Ma question est donc : existe-t-il une astuce qui me permettrait d'envoyer à nos picaxe un hex compilé sur un autre compilateur ? Et qu'elle sont les précautions à prendre au niveau du bootstrap ( zones mémoires à ne pas effacer pour ne pas virer le boot ) ?

Je vous remercie d'avance pour vos réponses et vos lumières ! ;)

Pour info sur nos cartes voici les lien vers deux posts de notre blog qui en parle :
Ancienne version (plus détaillé)
Nouvelle version

Merci d'avance à vous !
 

fuse

Senior Member
Bonjour,
Les différentes solutions de programmation sont récapitulées dans la page Software de chez Picaxe.
Les principales alternatives sont :
- Logicator
- Flowol
- Yenka
- Scratch
- 12blocks
- Automgen.
A ma connaissance la programmation est de type Basic, graphique ou graphcet (pour Automgen) pas de programmation type C et pas possible de programmer le pic avec un .hex sans l’utilisation d'un bootloader spécifique au Picaxe.
Pour faire de la programmation en C, la solution possible c'est l'Arduino mais cela n'a rien à voir et il faut des nouvelles cartes.
 
Last edited:

Nadar

New Member
Bonjour,
Les différentes solutions de programmation sont récapitulées dans la page Software de chez Picaxe.[...]
Ok merci, ça c'était déja ok pour moi ;) Donc si je comprend bien pas d'autre alternative que ce qui est décrit sur cette page.

A ma connaissance la programmation est de type Basic, graphique ou graphcet (pour Automgen) pas de programmation type C et pas possible de programmer le pic avec un .hex sans l’utilisation d'un bootloader spécifique au Picaxe.
Je me pose donc une question : pour moi un bootloader sert juste à pouvoir charger un programme en utilisant une autre méthode de programmation ( ça permet sur certain montage de s'affranchir de l'ICSP par exemple ). Le bootloader Picaxe serait-il différent ?

Pour faire de la programmation en C, la solution possible c'est l'Arduino mais cela n'a rien à voir et il faut des nouvelles cartes.
Ou un Pic tous simplement ^^ Seulement, avec les bootloader qui existent, je ne peux pas choisir les pattes de programmation pour le faire "ressembler" à un Picaxe et ne pas changer mes cartes ( sinon, mon problème aurait été depuis longtemps réglé ;) )
 

fuse

Senior Member
Bonjour Nadar,
Je m'attendais à ces remarques de votre part car il me semble que vous connaissez bien le sujet....
Je ne suis pas un spécialiste du fonctionnement interne du Picaxe, cependant, le boot du Picaxe est la propriété de Revolution Education. Revolution Education se réserve donc le bootloader permettant le transfert du programme PC vers Picaxe.
 

Nadar

New Member
Bonjour Nadar,
Je m'attendais à ces remarques de votre part car il me semble que vous connaissez bien le sujet....
J'ai bossé avec des pics pendant trois ans sur des robots et je me suis mis aux Picaxe lorsque j'ai du apprendre aux personnes de mon club à programmer des robots. C'est des sympathiques petites bestioles qui peuvent vous emmener très loin avec un peu de technique. Malheureusement certaines fonctions sont bridées et parfois j'aimerais pouvoir insérer un pic codé en C dans notre architecture robotique afin d'aller "un peu plus loin" ...

Je ne suis pas un spécialiste du fonctionnement interne du Picaxe, cependant, le boot du Picaxe est la propriété de Revolution Education. Revolution Education se réserve donc le bootloader permettant le transfert du programme PC vers Picaxe.
Je comprend très bien, et je vous remercie énormément pour vos réponses . :D
 

BESQUEUT

Senior Member
Un Picaxe n'est pas seulement un PIC !
C'est un PIC chargé avec un INTERPRETEUR.
C'est pour ça qu'il est aussi lent... et aussi facile à programmer.
Un Interpréteur N'EST PAS un bootloader, (il ne permet pas de lancer du code assembleur PIC) mais par contre il est capable d'interpréter (ouaf : on s'en doutait...)
un programme BASIC. Pour être exact, ce n'est pas directement le code BASIC que vous avez tapé qui est chargé en mémoire, mais une version compressée et optimisée (p-code).
Mais ce N'EST PAS du code assembleur directement exécutable par le PIC.

Moralité :
Sur la page de RevED, il y a une table qui donne pour chaque Picaxe le PIC utilisé.
Achetez directement ce PIC et programmez le comme bon vous semble.
(Vous pourriez aussi écraser l'interpréteur d'un Picaxe, mais ce serait de l'argent gaspillé)
 

Nadar

New Member
Un Picaxe n'est pas seulement un PIC !
C'est un PIC chargé avec un INTERPRETEUR.
C'est pour ça qu'il est aussi lent... et aussi facile à programmer.
Un Interpréteur N'EST PAS un bootloader, (il ne permet pas de lancer du code assembleur PIC) mais par contre il est capable d'interpréter (ouaf : on s'en doutait...)
un programme BASIC. Pour être exact, ce n'est pas directement le code BASIC que vous avez tapé qui est chargé en mémoire, mais une version compressée et optimisée (p-code).
Mais ce N'EST PAS du code assembleur directement exécutable par le PIC.
Merci Besqueut pour ces informations !

La notion ne m'avait pas semblait clair dans la doc. Le code basic tapé n'est donc pas compilé ( c'est un peu ce que je redoutais ... ).
Ce qui est dit dans la doc est :
A PICAXE microcontroller is a standard Microchip PICmicro™ microcontroller
that has been pre-programmed with the PICAXE bootstrap code. The bootstrap
code enables the PICAXE microcontroller to be re-programmed directly via a
simple serial connection. This eliminates the need for an (expensive)
conventional programmer, making the whole download system a very low-cost
simple serial cable!
The pre-programmed bootstrap code also contains common routines (such as
how to generate a pause delay or a sound output), so that each download does
not have to waste time downloading this commonly required data. This makes
the download time much quicker.
Pour moi ça ressemblait plus à un bootloader custom qu'à un interpréteur ;)

Moralité :
Sur la page de RevED, il y a une table qui donne pour chaque Picaxe le PIC utilisé.
Achetez directement ce PIC et programmez le comme bon vous semble.
(Vous pourriez aussi écraser l'interpréteur d'un Picaxe, mais ce serait de l'argent gaspillé)
Au dela de ça, je souhaitais réellement utiliser la même carte pour toutes les versions . La je vais devoir rajouter un connecteur ICSP sur mes cartes, et ça va me prendre de la place. Vraiment dommage.

Merci à vous pour vos réponses !
 

PapyJP

Senior Member
J' ai lu avec intérêt le lien " Là " proposé par PieM sur une question posée par Nadar qui m' intéresse.
Hippy #3 :
There's no way to mix Assembler with PICAXE Basic and no way to poke Assembly opcodes into Flash ...
La messe est dite !
Pourquoi ne pas initier nos chères têtes blondes ( terme générique ) à l' assembleur ?
Excellente école de rigueur, de logique ( ordinogrammes comme en Basic mais plus détaillés ) et finalement pas si compliqué avec des PICs RISC.
Il y a bien sûr des contraintes, mais vitesse d' exécution maximum !
Il existe sur la toile tout un tas de circuits programmateurs pour PICs à faire soit-même, pas onéreux.

J' ai bien aimé le commentaire de Womai en #11
Always a pleasure if somebody takes the time to report back when something finally works! Too often people ask a lot of questions, get a lot of help from many people, and then don't take the time for a proper "thank you"...
A bon entendeur, salut !
 

westaust55

Moderator
Le firmware de pioches comprend deux parties :
1. Un chargeur de démarrage qui permet de télécharger et stocker le fichier de programme pour le programme de base que vous avez développé
2. Un interprète qui lit la commande de base un programme téléchargé à la fois et exécute des routines de code machine pour réaliser l'objet de chaque commande de base.

Le logiciel éditeur de programmation dans lequel vous entrez à un programme de base, le téléchargement tokenise le programme et compresse également le code tokenised sur une base un peu sage, donc il n'y a aucune frontière octets au sein du programme tokenised téléchargées et stockées dans la puce de pioches.

Tokenising de la source de code de base réduit chaque commande d'une chaîne de plusieurs caractères tels que "SEROUT" dans un jeton comprenant environ 6 bits. Variables par un nom (par exemple b5 ou w4) sont également réduites à un jeton de quelques bits de taille. Autres paramètres sont traités de la même manière et par exemple une valeur de constante peut être compressée à 1, 4, 8 ou 16 bits, selon la valeur à stocker directement dans le fichier tokenised.

Le fichier téléchargé dans les puces de pioches n'est pas un vidage hexadécimal. Il n'y a aucun compilateurs C++ ou autres langages qui produiront un fichier compatible de pioches. Seulement le Revolution Education formation programmation éditeur et pour certains pioches à puce logiciel par Yenka / Crocodileclips, sont disponibles et utiliser la langue de base ou certains programmes de diagramme de flux qui sont converties en BASIC pour tokenising peut être poursuivie pour créer un fichier de programme qui peut être téléchargé dans un microcontroller PICAXE.
 

PieM

Senior Member
Pourquoi ne pas initier nos chères têtes blondes ( terme générique ) à l' assembleur ?
Je ne suis pas certains que cela soit la vocation des collèges et lycées. Il y a belle lurette que l'industrie utilise des langages de haut niveau, des méthodes graphiques, (Grafcet et Gemma) et des ateliers de génie logiciel. Ces outils aussi imposent rigueur et logique. :)
 

BESQUEUT

Senior Member
Pour moi ça ressemblait plus à un bootloader custom qu'à un interpréteur ;)
C'est vrai que la doc que vous citez prête à confusion...
Je souhaitais réellement utiliser la même carte pour toutes les versions
C'est pour ça que j'ai suggéré d'utiliser le même PIC pour avoir la même disposition et les mêmes caractéristiques générales.
Vous pouvez utiliser un programmateur séparé équipé d'un support ZIF puis installer le circuit sur la carte initialement destinée au Picaxe, sans rien changer.
Il faut juste faire attention au fait que le programme tourne au moins 1000 fois plus vite...
 
Last edited:

Nadar

New Member
Je ne suis pas certains que cela soit la vocation des collèges et lycées. Il y a belle lurette que l'industrie utilise des langages de haut niveau, des méthodes graphiques, (Grafcet et Gemma) et des ateliers de génie logiciel. Ces outils aussi imposent rigueur et logique. :)
Et pourquoi pas ? J'ai commencé mes armes en assembleur au lycée sur des Motorola 68hc11 : ça vous force à connaitre parfaitement le µC que vous utilisez, ses limites, ses capacités , etc ... C'est un avantage certains car cela vous permet d’appréhender par la suite n'importe quel langage de programmation sans soucis de compréhension sur le fonctionnement du matériel. Je trouve également que les langages de haut niveau ne forcent pas assez l'utilisateur à optimiser ses programmes et à construire des algorithmes simple et efficaces tellement il est simple de faire un programme "qui fonctionne" (oui mais à quel prix ? Perte de vitesse, de robustesse, de modularité, etc ... ). On voit souvent l'assembleur comme étant quelque chose de relativement compliqué, mais à tord. Si la méthode d'apprentissage est adaptée, son apprentissage est relativement aisée et permet de confronter l'utilisateur à la réalité de ce qu'est un µC et comment il fonctionne.

Pour des classes plus jeunes en revanche, il faut utiliser, certes des outils plus schématiques et graphiques , mais non pas en les initiant à la programmation mais à l'algorithmique. Cette matière et la clef de voûte d'un raisonnement et par la suite d'un programme bien construit, et je déplore grandement le manque de cours dans ce domaine dans nos écoles. Pourtant, des outils tel que les Grafcets et autres, devraient aider dans ce domaine, mais ils sont malheureusement souvent mal exploités ...

C'est pour ça que j'ai suggéré d'utiliser le même PIC pour avoir la même disposition et les mêmes caractéristiques générales.
Vous pouvez utiliser un programmateur séparé équipé d'un support ZIF puis installer le circuit sur la carte initialement destinée au Picaxe, sans rien changer.
Il faut juste faire attention au fait que le programme tourne au moins 1000 fois plus vite...
Trés juste, c'est effectivement une solution mais que je ne pourrais choisir pour la simple et bonne raison que lors de la programmation de notre robot, nous sommes constamment en train de modifier et de charger de nouveaux programmes . Par exemple, ce soir j'ai fais des tests sur le robot : j'ai du le reprogrammer une bonne 40aine de fois en deux heures ... Cela aurait été impossible sans programmation in-situ. C'est pour cela que je cherche à programmer directement notre robot comme je le ferais avec un Picaxe. Une des solutions consisterais à programmer un bootloader from scratch et répondant à mes besoins particuliers. Malheureusement je n'ai ni le temps ni les compétences nécessaires pour le faire pour le moment. Peut être après la coupe de France en Mai, qui sait ;) Mais je ne manquerais pas de vous tenir au courant de la solution que je choisirais le moment venu ;)
 

PieM

Senior Member
Et pourquoi pas ? J'ai commencé mes armes en assembleur au lycée sur des Motorola 68hc11 : ça vous force à connaitre parfaitement le µC que vous utilisez, ses limites, ses capacités , etc ... C'est un avantage certains car cela vous permet d’appréhender par la suite n'importe quel langage de programmation sans soucis de compréhension
Sincèrement je ne vois pas ce que j'ai pu apprendre avec des 6800 et Z80 peut apporter dans la programmation en C ou via un AGL d'un robot moderne.
Il est plus important d'apprendre l'algorithmique à des jeunes que l'assembleur.
 

PapyJP

Senior Member
Et pourquoi pas ? J'ai commencé mes armes en assembleur au lycée sur des Motorola 68hc11 : ça vous force à connaitre parfaitement le µC que vous utilisez, ses limites, ses capacités , etc ... C'est un avantage certains car cela vous permet d’appréhender par la suite n'importe quel langage de programmation sans soucis de compréhension sur le fonctionnement du matériel. Je trouve également que les langages de haut niveau ne forcent pas assez l'utilisateur à optimiser ses programmes et à construire des algorithmes simple et efficaces tellement il est simple de faire un programme "qui fonctionne" (oui mais à quel prix ? Perte de vitesse, de robustesse, de modularité, etc ... ). On voit souvent l'assembleur comme étant quelque chose de relativement compliqué, mais à tord. Si la méthode d'apprentissage est adaptée, son apprentissage est relativement aisée et permet de confronter l'utilisateur à la réalité de ce qu'est un µC et comment il fonctionne.
Bravo ! Mille fois d' accord !
De PieM:
Je ne suis pas certains que cela soit la vocation des collèges et lycées
Leur vocation est-elle de construire des " Boy Toys " ( ! ) ou de former des têtes bien faites ?
Les enseignants auraient-ils peur de l' assembleur ? Sûr, c' est plus difficile et plus rigoureux !
Sur le plan soft, Microchip propose sur son site d' une foultitude de documents et d' exemples. Sans compter le Net.
Et il y a l' incontournable cours de Bigonoff ( sur le Net itou ) !
Sur le plan hard, Microchip propose des composants avec liaison USB et/ou l' ICSP ( In Circuit Sérial Programming ). Le rêve !
 

PieM

Senior Member
Leur vocation est-elle de construire des " Boy Toys " ( ! ) ou de former des têtes bien faites ?
Pourquoi, une tête bien faite passe obligatoirement par l'assembleur ?

Les enseignants auraient-ils peur de l' assembleur ? Sûr, c' est plus difficile et plus rigoureux !
Bien que n'étant pas enseignant, permettez moi de trouver ce commentaire particulièrement ridicule ...

Sur le plan soft, Microchip propose sur son site d' une foultitude de documents et d' exemples. Sans compter le Net.
Et il y a l' incontournable cours de Bigonoff ( sur le Net itou ) !
Sur le plan hard, Microchip propose des composants avec liaison USB et/ou l' ICSP ( In Circuit Sérial Programming ). Le rêve !
On trouve des cours de tout en fonction de ce qu'on souhaite apprendre.
Je ne pense pas que cela serve beaucoup à un gosse qui se destine à faire autre chose que se spécialiser dans le domaine.
Et il a plus de chance de se trouver face à une console de robot 6 axes que devant un µC à programmer en assembleur.

Il me semble que vous même avec une tête pourtant bien faite ne semblez pas très à l'aise avec un simple petit programme basic sur un simple petit Picaxe. :rolleyes:

Pour terminer, je suis toujours surpris de voir que des gens utilisent des produits comme le Picaxe en leur reprochant de ne pas pouvoir le programmer en assembleur.
En fonction des applications je pense que les produits sont nombreux depuis les Picaxes, jusqu'au 8 coeurs Risc, en passant par un multitâche avec FPU, programmable en Basic et en langage relais.
 
Last edited:

Nadar

New Member
Oula ! Je ne pensais pas que mon commentaire allait provoquer tous cela !

Sincèrement je ne vois pas ce que j'ai pu apprendre avec des 6800 et Z80 peut apporter dans la programmation en C ou via un AGL d'un robot moderne.
Il est plus important d'apprendre l'algorithmique à des jeunes que l'assembleur.
Ha, tu n'as pas du lire mon post en entier car c'est exactement ce que je dis par la suite ;). L'assembleur a l'avantage d'obliger l'utilisateur à réfléchir correctement à son algorithme afin de faire fonctionner son programmer, ce que ne permet plus certains langages de haut niveau (tel que le Basic par exemple) qui donne tous de suite un résultat après quelques lignes. Même si c'est un avantage certains lorsqu'on souhaite gagner du temps, ça peut être également une méthode contre productive pendant la phase d'apprentissage puisque elle donne très rapidement de mauvaises habitudes aux utilisateurs débutants si ils ne sont pas formés correctement ( et je parle en connaissance de cause pour avoir dirigé une association de robotique pendant 2 ans), et on sait très bien qu'il est plus difficile de désapprendre que d'apprendre ;)

Les enseignants auraient-ils peur de l' assembleur ? Sûr, c' est plus difficile et plus rigoureux !
Bien que n'étant pas enseignant, permettez moi de trouver ce commentaire particulièrement ridicule ...
Malheureusement, pour avoir discuté avec beaucoup d'enseignants, il est vrai que beaucoup trouvent cela dépassé (?!) et très compliqué à expliquer. Parfois, c'est clairement un langage qu'ils ne maîtrisent pas du tout car cela implique de connaitre parfaitement le fonctionnement d'un µC. En plus de cela, si la méthode d'apprentissage est un peu bancale le cocktail est explosif pour l'étudiant qui ne voudra plus jamais programmer en assembleur ^^

Il me semble que vous même avec une tête pourtant bien faite ne semblez pas très à l'aise avec un simple petit programme basic sur un simple petit Picaxe.
Mmm ... J'imagine que c'était plutôt adressé à PapyJP puisque je n'ai pas encore posé de questions sur un programme en Basic. Sinon c'est un peu prématuré ... :rolleyes:

Pour terminer, je suis toujours surpris de voir que des gens utilisent des produits comme le Picaxe en leur reprochant de ne pas pouvoir le programmer en assembleur.
En fonction des applications je pense que les produits sont nombreux depuis les Picaxes, jusqu'au 8 coeurs Risc, en passant par un multitâche avec FPU, programmable en Basic et en langage relais.
J'attendais un peu ce genre de commentaires pour dire vrai. Le Picaxe est ce qu'il est. Il a été conçu pour faciliter l’accès à la programmation d'un type de µC ( en l’occurrence les Pic ), et il n'est certes pas fait pour supporter des applications lourdes ou demandant une rapidité d'exécution élevé. Dans la plupart des cas, ça me suffit . Malheureusement, il arrive que je sois limité par ce système et que cette limitation soit extrêmement bloquante. La réponse à mon problème serait éventuellement d'oublier complètement les Picaxe et de revenir à mes bon vieux Pic en C ou en assembleur. Mais je perdrais complètement la flexibilité et la facilité de programmation que j'ai trouvé avec les Picaxe. De plus, les autres collègues de mon équipe n'ont pas une connaissance assez forte des Pics pour prendre ce virage. D'où mon intérêt pour un système mélangeant les deux modes.
Ce que je souhaite dire c'est qu'à aucun moment je ne remet en question le produit en lui même, mais que j'arrive juste à un moment où j'ai fait le tour du produit, et qu'il est temps pour moi de trouver une solution intermédiaire qui me permette d'aller plus loin sans défaire ce que j'ai déjà fait ;)
 

BESQUEUT

Senior Member
D'où mon intérêt pour un système mélangeant les deux modes....il est temps pour moi de trouver une solution intermédiaire qui me permette d'aller plus loin sans défaire ce que j'ai déjà fait ;)
Bah NON ! C'est po possible mon pov meussieur...
Comme expliqué plus haut, le Picaxe est un interpréteur et c'est pour ça qu'il est aussi souple et facile à programmer.
Mais c'est aussi pour ça qu'il n'est pas possible de lui faire digérer du code compilé (ou alors on efface tout et le Picaxe redevient définitivement un PIC ! )
La seul solution qui vous reste est de créer une platine acceptant les deux modes de programmation in situ et d'utiliser soit un PIC, soit un Picaxe suivant les projets et les compétences des intervenants.

NB concernant l'assembleur et les langages de Nième niveau :
Je suis dans mon métier confronté quotidiennement à des développeurs qui travaillent dans l'environnement Krosoft + DotNetNuke + Oracle + ...
Certes, c'est maintenant la règle et les jeunes diplômés trouvent même cet environnement plutôt ringard...
Mais quelle complexité ! Essayer donc de lire la doc Krosoft ou Oracle sans parler de Cisco... C'est en libre accès : allez-y, ça vaut le détour...
Dès tas de trucs deviennent "virtuels" à commencer par les ordinateurs et le réseau...
Au final, plus personne ne sait ce qui se passe vraiment.
Et vu la puissance des processeurs, la plupart du temps, même un algorithme débile donne sur le jeu d'essai les résultats excomptés dans un temps acceptable.
Ce n'est que des mois plus tard, quand le client commence à accumuler des données dans un volume et une complexité suffisante, que l'on s'apperçoit que le temps de traitement grandit de façon exponentielle de degré N..., que le processeur est à genoux et qu'il faut 16Go de mémoire pour faire des additions...
Et quand ça plante ou qu'il faut 5 minutes pour afficher une page qui parrait très simple, on mets des jours ou des semaines à décortiquer les couches de l'oignon...
Alors oui, l'assembleur (qui ne permet pas d'écrire un code impossible genre division par zéro) est pour moi un havre de sérénité. Un truc simple et qui fonctionne rigoureusement comme il est censé fonctionner.
Dans le genre, les Picaxes me semblent bien adaptés pour apprendre les bases du métier. J'ai toujours été un fervent partisan des applications concrètes qui aident à digérer les concepts les plus virtuels. Ca reste suffisement simple pour que l'on touche du doigt ce qui se passe, tout en apportant en quelques lignes des possibilités qui nécessitent des pages fort abstraites en assembleur.
 
Last edited:

jojojo

Senior Member
La seul solution qui vous reste est de créer une platine acceptant les deux modes de programmation in situ et d'utiliser soit un PIC, soit un Picaxe suivant les projets et les compétences des intervenants.

Oui.

C'est souvent la méthode que j'utilise.

Ci-joint, à titre d'exemple, une platine, qui accepte, quasi sans modif, un PIC 18F45K22, ou un PBH3, ou un 40X2.

TRES pratique.

Amicalement.

PS:

Arghhhh!!!
Pas moyen de joindre un format TCI.
Vais tenter via copy d'écran.

cartemere.jpg
 

Nadar

New Member
Bah NON ! C'est po possible mon pov meussieur...
Comme expliqué plus haut, le Picaxe est un interpréteur et c'est pour ça qu'il est aussi souple et facile à programmer.
Mais c'est aussi pour ça qu'il n'est pas possible de lui faire digérer du code compilé (ou alors on efface tout et le Picaxe redevient définitivement un PIC ! )
La seul solution qui vous reste est de créer une platine acceptant les deux modes de programmation in situ et d'utiliser soit un PIC, soit un Picaxe suivant les projets et les compétences des intervenants.
Oui, oui, j'ai bien compris ;) Et c'est bien mon intention d'utiliser soit un Pic soit un Picaxe. Ce que je ne veux pas c'est être obligé de changer de pcb afin de choisir l'une ou l'autre des options : tout doit être intégré sur le même PCB. D'où mon idée d'intégrer un connecteur ICSP sur les versions suivantes de mes platines vu que je n'ai pas encore trouvé de bootloader pour Pic qui puisse me charger un programme en utilisant les même pattes que celles du Picaxe ( à moins de re-dévellopper le mien ... ).

NB concernant l'assembleur et les langages de Nième niveau :
Je suis dans mon métier confronté quotidiennement [...]
Dans le genre, les Picaxes me semblent bien adaptés pour apprendre les bases du métier. J'ai toujours été un fervent partisan des applications concrètes qui aident à digérer les concepts les plus virtuels. Ca reste suffisement simple pour que l'on touche du doigt ce qui se passe, tout en apportant en quelques lignes des possibilités qui nécessitent des pages fort abstraites en assembleur.
Aucune objection votre honneur ;) Je suis entièrement d'accord ! Au final, on est tous pratiquement du même avis ;)

La seul solution qui vous reste est de créer une platine acceptant les deux modes de programmation in situ et d'utiliser soit un PIC, soit un Picaxe suivant les projets et les compétences des intervenants.

Oui.

C'est souvent la méthode que j'utilise.

Ci-joint, à titre d'exemple, une platine, qui accepte, quasi sans modif, un PIC 18F45K22, ou un PBH3, ou un 40X2.

TRES pratique.
Merci Jojojo pour ce partage ! J'avais exactement la même idée en tête ! Par contre je ne vois pas comment tu programme ton Pic 18f45k22 in-situ ... Tu le déconnecte à chaque fois ?

Et sinon, pour ceux que ça intéresse, j'ai trouvé ce matin une platine Picaxe28x2 intéressante qui permet de programmer un Picaxe ou un Pic en se basant sur la même approche que ce qui a été dit plus haut : http://www.gotronic.fr/art-shield-picaxe-28x2-axe401-17939.htm

Bonne journée à vous !
 

jojojo

Senior Member
je ne vois pas comment tu programme ton Pic 18f45k22 in-situ ...

Non.
Là, c'est direction le programmateur, pas le choix avec cette carte.
MAIS elle permet tout de même d'exploiter le PIC, une fois programmé.

Amicalement
 

PieM

Senior Member
Bonjour,

@Nadar

Mmm ... J'imagine que c'était plutôt adressé à PapyJP puisque je n'ai pas encore posé de questions sur un programme en Basic. Sinon c'est un peu prématuré ...
Cela ne s'adressait bien sûr pas à vous ! :rolleyes:


La solution de la platine AXE401 est peut être une bonne solution puisqu'elle permet d'adapter un programmateur PIC Microchip PICKIT2 sur un connecteur prévu à cet effet. Mais il reste bien entendu clair que c'est un Pic 28 broches ou un Picaxe 28 qui est programmé... avec le risque de transformer le Picaxe en Pic !

Les robots que vous utilisez pour ces concours de robotiques sont de plus en plus évolués. Peut être aurez intérêt à vous orienter vers une solution multi-picaxes en liaison I2C, voire, un mix Picaxe - Pic, laissant aux pics la gestion des tâches les plus critiques en terme de timing et de complexité.
 

Nadar

New Member
Non.
Là, c'est direction le programmateur, pas le choix avec cette carte.
MAIS elle permet tout de même d'exploiter le PIC, une fois programmé.
Merci pour ta réponse ! Je comprend mieux maintenant. Et pourquoi n'as tu pas mis un connecteur ICSP dessus ? Cela te simplifierait le travail non ?

Cela ne s'adressait bien sûr pas à vous ! :rolleyes:
Ok ;)

La solution de la platine AXE401 est peut être une bonne solution puisqu'elle permet d'adapter un programmateur PIC Microchip PICKIT2 sur un connecteur prévu à cet effet. Mais il reste bien entendu clair que c'est un Pic 28 broches ou un Picaxe 28 qui est programmé... avec le risque de transformer le Picaxe en Pic !
Oui effectivement, le risque existe mais au moins, on a la possibilité de choisir entre les deux ( en faisant attention au choix du composant bien sur ...)

Peut être aurez intérêt à vous orienter vers une solution multi-picaxes en liaison I2C, voire, un mix Picaxe - Pic, laissant aux pics la gestion des tâches les plus critiques en terme de timing et de complexité.
Héhéhé ! Nous sommes déjà sur ce type d'architecture en réalité ! Nous en sommes donc à l'étape "mixage Picaxe/Pic". Nous avons dévellopé une carte spécifique à nos besoins et le challenge c'est de n'utiliser qu'un seul type de carte dans notre robot. Pour le moment nous n'utilisons que des picaxe 20x2. Avec ce que j'ai appris, je vais donc m'orienter vers un carte à base Picaxe 28x2( ou 40x2 mais pas encore sur vue la taille) comprenant un connecteur ICSP et permettant de choisir de programmer un Pic ou un Picaxe avec le même connecteur. La sélection se fera par des jumper ou un micro interrupteur sur la carte. Ainsi, le modèle de la carte sera le même pour tous et cela nous permettra de plus grandes libertés dans nos futurs robot.

Les robots que vous utilisez pour ces concours de robotiques sont de plus en plus évolués.
Certe, mais ce que je remarque c'est que c'est trés souvent des robots simples qui arrivent en final que des robots à une architecture complexe. Nous utilisons les picaxe depuis 3 ans maintenant et ils ne nous ont jamais fait défaut, même dans des situations critiques ! Et les 8M2 sont une vrai bénédiction pour réaliser du post traitement pour des capteurs de manière fiable et simple. Les picaxe ont de beau jours devant eux dans notre équipe donc ;)

Edit : Les nouvelles cartes ne seront pas développée avant un petit moment, et je risque d'oublier de poster les schémas et autre sur ce post entre temps (je me pré-fouette déjà au cas ou ...). Aux futurs visiteurs : si vous souhaitez en savoir plus, vous pouvez toujours visiter notre site web qui lui est régulièrement mis à jour : http://karibous.blogspot.fr/. Si nous avons développé une nouvelle carte, elle sera forcement sur notre blog ;)
 

jerome06060

New Member
Pourquoi, une tête bien faite passe obligatoirement par l'assembleur ?
parce qu'il faut comprendre qu'aller à la source (pourquoi et comment ça fonctionne) me semble impératif en tant que démarche pour réellement comprendre ce qui se passe.
Qui peut le plus peu le moins, pas l'inverse.

Je ne pense pas que cela serve beaucoup à un gosse qui se destine à faire autre chose que se spécialiser dans le domaine.
mais si vous ne comprenez pas cela, comment expliquez vous que ça lui apporterait plus d'apprendre à programmer un micro-controleur (quel qu'en soit le langage interprète)?
ça ne me semble pas avoir de sens logique ce que vous dites.

Il me semble que vous même avec une tête pourtant bien faite ne semblez pas très à l'aise avec un simple petit programme basic sur un simple petit Picaxe.
Comment pouvez vous penser cela ? c'est beaucoup plus facile en basic qu'en assembleur... mais beaucoup plus limité et lent (cela vous a déjà été signalé).
Mais ok... vous voudriez avoir mieux, mais sans en faire l'effort, ou en niant l'intéret de connaitre le langage initial du composant (qui, bien que plus compliqué, n'est pas inaccessible)... c'est assez fréquent. Quand aux jugements de valeurs que vous avez... ça ne reste que des jugements de valeur, c'est très subjectif et n'apporte rien au sujet, si ce n'est de démontrer votre susceptibilité.

bref...

on peut programmer des pics en C... il y a d'ailleurs des ouvrages sur le sujet, mais ce sont des pics 16 bits (PIC 24). Simplement parce que programmer un tel pic en assembleur serait trop long ou fastidieux pour la plupart des cerveaux (preuve que ça serait un réel exploit intellectuel). Pour les PIC 8 bits, l'assembleur va très bien. Et j'ajoute que c'est pas le basic qui limite les fonctionnalités, mais le fait que rien n'est prévu pour entrer plus dans le pic à un niveau plus bas (ça serait pareil en C si cela n'était pas prévu dans un interpréteur C). Cela a été écris: c'est pas un complieur, mais un interpréteur.

voila, je pense que tout est dit et j'espère ne pas vous avoir vexé plus que ce que vous semblez déjà être.
 

Technoman

Senior Member
Sur le forum en anglais, quelqu'un a demandé comment ne pas fournir son code en basic à son client :

http://www.picaxeforum.co.uk/showthread.php?23670-Compile-a-BAS-file-as-an-HEX-file-and-upload-to-PICAXE-Possible

Technical (REv Ed) a annoncé la sortie prochaine de PE6, permettant de programmer un PIC ordinaire après compilation ("PE6, when released, will have an updated assembler code export option. This will allow 'raw PIC code' to be exported from PICAXE BASIC. ").

Il pourra même intégrer des librairies en assembleur. Reste à télécharger MPLab et de se procurer un programmateur de PIC...
 

BESQUEUT

Senior Member
Ce n'est pas totalement nouveau : il y a déjà un programme externe qui permet de générer du code assembleur. La nouveauté est l'intégration de la fonction dans PE6.
C'est vrai que c'est sympa de pouvoir utiliser (à peu près) le même langage en interprété (applications ne nécessitant pas trop de réactivité, éducation,...) et en compilé (pour des besoins plus contraignants), tout ceci sur les mêmes chips.

Reste que si vous disposer à la fois du savoir faire et de l'équipement permettant de programmer un PIC compilé, il n'est pas certain que vous acceptiez toutes les contraintes inhérentes à la version interprétée.

Personnellement, je pense qu'il faut choisir assez tôt dans le projet en fonction des contraintes (qui sont souvent sous-évaluées...) :
- cahier des charges simple, tout petit budget, peu de savoir faire ==> Picaxe
- cahier des charges contraignant, petit budget, plus de savoir faire ==> platine compilée

Pourquoi "platines" :
- les processeurs modernes n'existent plus en DIL,
- mais on trouve des platines toutes prêtes intégrant un processeur (avec bootloader) et une liaison USB pour un prix plus que raisonnable,
- le câble de liaison est un cable USB normal,
- le compilateur (BASIC, C,...) est en libre téléchargement
Au final, la mise en oeuvre est très semblable à PE, mais la puissance pas comparable.
 

PapyJP

Senior Member
Reste que si vous disposer à la fois du savoir faire et de l'équipement permettant de programmer un PIC compilé, il n'est pas certain que vous acceptiez toutes les contraintes inhérentes à la version interprétée.
Vous semblez dire qu' aprés avoir écrit un programme en assembleur, celui ci sera " interprété " ?
Si oui, où est l' intérêt ?

Personnellement je travaille sur un projet qui mets en oeuvre un PIC 8 bits programmé en assembleur Et un Picaxe en voltigeur.
Le PIC permet des décisions trés rapides ( sur IT ) et donc des actions quasi instantanées sur des contacts.
Le Picaxe ne sert que pour des fonctions " subalternes " déclenchées par le PIC ( Cde de servos ) et remplace un grand nombre de composants pour effectuer ces fonctions.
Le grand " défaut " des Picaxes est qu' ils sont complètement sourds pendant qu' ils accomplissent des actions ou qu' ils sont en attente d' un signal.

Mettre en oeuvre un PIC ET un Picaxe n' est pas trés onéreux et ( Assembleur + Basic ) séparés me semble une bonne solution.
Quant au site anglais sur PE6, on s' interroge sur une nouvelle série de Picaxes ...............?
 

BESQUEUT

Senior Member
Vous semblez dire qu' aprés avoir écrit un programme en assembleur, celui ci sera " interprété " ?
Non, ce n'est pas l'idée..
Le programme est écrit en basic et peut soit être envoyé tel quel à un Picaxe, soit êre compilé et envoyé àun PIC.
Dans ce dernier cas, on peut "en plus" inclure du code asembleur qui sera donc intégré au milieu du code assembleur généré à partir du BASIC.
En pratique, on peut donc écrire tout le code non critique en BASIC PICAXE et inclure une routine en assembleur là où c'est critique.
 

PapyJP

Senior Member
@ BESQUEUT : Merci.
Je vais vous embêter mais j' aimerais comprendre. Si ça vous barbe, ce que je comprendrais, laissez tomber.

On peut donc partir d' un code écrit en Basic puis soit le compiler pour obtenir sa traduction en assembleur soit le livrer au Picaxe et c' est l' interpréteur qui se débrouille ( j' ai cru comprendre que l' interpréteur n' est pas situé dans le Picaxe ).
Quelque soit le langage de programmation, tout fini ( après traduction après un interpréteur OU un compilateur ) parfois " par des chansons " ( ! ) mais toujours par une suite d' instructions machine.
Sauf erreur, les ALU des PICs et des Picaxes sont les mêmes: elles éxécutent donc le même code machine pour une même fonction.
Qqchose m' échappe:
Soit à programmer en Basic une fonction complexe qui fait appel à une suite d' instructions machine.
Prenons serout("AAA") sur une liaison à 1200 bps ( durée d' un bit transmis : 0,833 ms ---> 2,5 ms pour les trois caractères ).
Avec un Picaxe 18M2 cela nécessite 15 ms
Avec un PIC à 4 MHz en assembleur 3 ms environ.
D' où ma crainte:
Partant d' un code écrit en Basic puis compilé en code assembleur, ce code assembleur sera-t-il optimisé.
Si oui, pourquoi le Picaxe n' en profite pas puisque le code machine est le même ?
Si l' interpréteur génère un tripotée de lignes de code (?) avant de pondre le code machine, un compilateur peut il le " nettoyer " et donner un code assembleur efficace, propre, avec le minimum de lignes d' instructions ?
 

BESQUEUT

Senior Member
On peut donc partir d' un code écrit en Basic puis soit le compiler pour obtenir sa traduction en assembleur soit le livrer au Picaxe et c' est l' interpréteur qui se débrouille
Jusque là tout va bien (c'est comme pour le type qui tombe du 18ième étage...)
( j' ai cru comprendre que l' interpréteur n' est pas situé dans le Picaxe ).
Si : il y a bien un interpréteur dans un Picaxe ; c'est même ce qui le différencie d'un PIC pur et dur.
La nuance, c'est que le code BASIC est d'abord "préparé" par PE avant d'être envoyé au Picaxe (on parle de code intermédiaire, ou de P-code)
L'objectif est d'une part d'économiser les octets et d'autre part de "faciliter" l'interprétation. Le P-code est bien plus concis que le fichier BASIC ASCII :
- tous les commentaires sont retirés,
- tous ce qui n'est pas des instructions est pré-traité : par exemple, les symbols sont remplacés par leurs valeurs,
- les instructions BASIC sont remplacés par des codes (plus concis, et plus facile à interpréter)
- les paramètres qui suivent les instructions sont codés de façon compacte et facile à utiliser.
Quelque soit le langage de programmation, tout fini ( après traduction après un interpréteur OU un compilateur ) par une suite d' instructions machine.
Sauf erreur, les ALU des PICs et des Picaxes sont les mêmes: elles éxécutent donc le même code machine pour une même fonction.
Tout à fait exact
Qqchose m' échappe:
Soit à programmer en Basic une fonction complexe qui fait appel à une suite d' instructions machine.
D' où ma crainte:
Partant d' un code écrit en Basic puis compilé en code assembleur, ce code assembleur sera-t-il optimisé.
Si oui, pourquoi le Picaxe n' en profite pas puisque le code machine est le même ?
Si l' interpréteur génère un tripotée de lignes de code (?) avant de pondre le code machine, un compilateur peut il le " nettoyer " et donner un code assembleur efficace, propre, avec le minimum de lignes d' instructions ?
En fait, la grosse différence, c'est qu'à l’exécution le Picaxe passe son temps à décoder le P-code puis à appeler des fonctions là où un PIC exécute du code machine en continu.
Le firmware d'un Picaxe contient 2 types de code machine :
- d'une part des fonctions destinées à interpréter le P-code,
- d'autre part des fonctions pré-programmées en assembleur pour être le plus performant possible, dont par exemple le serout que vous citez en exemple.
Il y a souvent un rapport énorme entre le temps nécessaire pour interpréter le P-code et celui mis par la fonction qui en résulte. Il faut par exemple des centaines d'instructions machine pour interpréter "A=A*2+B"
alors qu'une fois compilé ça ne représente plus que quelques instructions PIC.
La différence est souvent beaucoup plus faible pour des instructions complexes, comme le serout qui nécessitent de toutes façons beaucoup d'instructions machine et qui doivent être temporisées pour respecter le débit demandé.
Si vous écrivez une boucle FOR NEXT comprenant l'appel à une fonction complexe (disons WRITEMEM pour fixer les idées)
Le Picaxe passera probablement assez peu de temps dans la fonction très optimisée pour écrire en mémoire (même en assembleur, il y a différentes façon de faire et on peut faire confiance à l'éditeur pour avoir choisi la plus performante...). Mais le Picaxe doit de toutes façons passer du temps pour interpréter la boucle FOR NEXT et l'appel à la fonction qui traite réellement le WRITEMEM.

Le bilan est évidement très variable suivant la nature du programme. L'ordre de grandeur est de 1 à 1000.
Sur un serout, il n'y a pas grand chose à gagner en écrivant de l'assembleur.
Mais si vous devez recevoir des données à la volée puis les traiter et écrire sur un autre port, seul du code compilé permet une réactivité suffisante.

Pour ce qui est de la qualité du code assembleur généré à partir du BASIC, on peut effectivement craindre une moins bonne optimisation que celle obtenue à partir d'un compilateur qui n'a que cet objectif. C'est probablement une succession d'appels aux fonctions décrites ci-dessus, avec peu d'optimisation. Mais on gagne le temps d'interprétation, ce qui peut être énorme.
Par contre, pour vraiment optimiser, il faut mettre de l'assembleur entre les lignes BASIC, et là, ça va se traduire quasi directement par du code machine. L'optimisation ne dépends que de vous dans ce cas...

exemple d'optimisation en deux passes :
For i= 1 to 10000
A=B*2-4+I
next i

On remarque que B*2-4 ne dépends pas de I. Le compilateur va donc en fait effectuer :
C=B*2-4
For i= 1 to 10000
A=C+i
next i

Encore plus fort : A ne dépends pas de la valeur précédente de A dans la boucle. Donc on peut compiler :
A=B*2-4+10000
Forcément, ça va aller plus vite...
 
Last edited:

PapyJP

Senior Member
Merci vraiment de votre très longue et très brillante réponse qui est d' une clarté biblique.
C' est très interessant et je suivrai cette affaire de très prés.
Il me tarde même d' y être moi qui aime l' assembleur !.

Concernant les temps nécessaires à la transmission d' un caractère, j' ai écrit de Kolossales bêtises :
Je précise, pour ceux qui nous lisent, que la transmission d' un seul caractère, à 1200 bps, nécessite l' envoi d' une trame de 10 bits qui dure à elle seule 0,833 * 10 = 8,33 ms

Merci encore
 

BESQUEUT

Senior Member
Kolossales bêtises
J'espère n'avoir moi-même pas commis de trop grosses erreurs. Quand à la bible, elle me fait plutôt penser à cette "obscure clarté qui tombe des étoiles..." mais ceci est une autre histoire.
Attention : pour vous mettre à l'assembleur, il vous faut :
- au moins un PIC
- un programmeur ( le cordon USB des Picaxes ne convient pas...)
- un compilateur,
A noter que PE5 a déjà un Wizard pour convertir le BASIC en assembleur.
Voir également message en mail privé.
 
Last edited:

PapyJP

Senior Member
Merci.
J' ai presque 20 ans d' assembleur sur PICs 8 bits ! ( Pas 20 ans d' âge, hélas ).
Je suis parfaitement équipé, même un émulateur ICE.
D' où mon interret ...............
Sincères amitiés PapyJP
 
Top