Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/03/2015, à 22:37

Zaphod-Beeblebrox

librairie UART (programmation C sur AVR)

Bonjour,

Si par hasard vous avez déjà touché aux microcontrôleurs AVR vous pourriez sans doute m'aider.

Pour une application robotique j'utilise l'UART pour le débogage. Concrètement ça me permet de lire plusieurs variables de tout type sur mon pc pendant le fonctionnement du robot.

Du coup tout ça m'oblige à créer des tas de fonctions (envoi de caractère, de chaîne, de float, de int signé et non signé, de long etc.), d'une part ça va me prendre un temps fou, d'autre part le résultat ne sera peut être pas au rendez vous.

J'aimerais donc savoir si  il existe déjà une lib regroupant tout ça.

merci.


"c'est bien la pire folie que de vouloir être sage dans un monde de fous" (Erasme)

Hors ligne

#2 Le 12/03/2015, à 23:21

Braun

Re : librairie UART (programmation C sur AVR)

Bonsoir,
Peux tu préciser quel UART tu utilises.
Côté robot il faudrait une librairie propre au robot.
Côté PC il te suffirait probablement d'une librairie gérant le port RS23-C.
Par exemple googler :

langage C gestion du port rs232 ubuntu

Mais je n'ai peut être pas vu le problème.

Dernière modification par Braun (Le 12/03/2015, à 23:47)

Hors ligne

#3 Le 13/03/2015, à 09:22

no_spleen

Re : librairie UART (programmation C sur AVR)

Bonjour,

As-tu déjà regardé du côté de avr-libc ?

http://www.nongnu.org/avr-libc/

Je débute actuellement l'aprentissage de la programmation d'AVR. Ton retour d'expérience m'intéresse :-)

Hors ligne

#4 Le 13/03/2015, à 13:01

Zaphod-Beeblebrox

Re : librairie UART (programmation C sur AVR)

J'ai oublié de préciser que je programme avec WinAVR (détail important).

Ce qui me tracasse ce n'est pas la configuration des registres du microcontrôleur ou le paramétrage du protocole de transmission (vitesse, parité, etc.) C'est la création des fonctions qui permettent d'envoyer des variables de tout types au travers du port série pour pouvoir les lire sur mon PC.

Pour ne rien cacher, avant de poster ici, j'avais déjà commencer et c'est un sacré travail! Il faut déjà réaliser une fonction qui envoi un caractère, une fonction par dessus qui envoi des chaîne, par dessus encore une fonction qui envoi des int et là ça commence à être marrant car faut décomposer le nombre en unité, dizaine, centaine etc. détecter le signe et pour avoir quelque chose de lisible n'envoyer le chiffre que si le chiffre de rang supérieur n'est pas 0... Ça fait déjà pas mal de boulot et il reste encore plein de types de variables, d'autant plus qu'il est sûrement possible de coder ça plus efficacement que ce que je suis capable de faire.

Le pire c'est que ce que je cherche à faire me semble être un truc de base, c'est pas possible que personne n'ai eu besoin de transmettre des variables pour débogage.

Merci pour le lien je vais regarder ça!


"c'est bien la pire folie que de vouloir être sage dans un monde de fous" (Erasme)

Hors ligne

#5 Le 13/03/2015, à 14:28

Braun

Re : librairie UART (programmation C sur AVR)

Bonjour,
J'ai effectivement l'impression que tu redécouvres les transmissions ASCII, et non pas à ski. Tu pourrais t'inspirer des protocoles IEEE 488 largement documentés, protocoles qui utilisaient ces principes de façon systématique. Je n'ai pas tout vu et ça a sûrement évolué mais par exemple pour envoyer le résultat d'un multimètre à une unité centrale on utilise un format fixe : par exemple 3 caractères pour le type de mesure, e.g. VDC, un caractère pour le signe, une dizaine de caractères pour la valeur du nombre écrit en décimal flottant, etc. ...
L'emploi de champs fixes facilite le parsing pour le décodage et les fonctions C sscanf() et sprintf() se prêtent bien au jeu.

Hors ligne

#6 Le 13/03/2015, à 15:58

claudius01

Re : librairie UART (programmation C sur AVR)

Bonjour,

Zaphod-Beeblebrox a écrit :

Du coup tout ça m'oblige à créer des tas de fonctions...

no_spleen a écrit :

As-tu déjà regardé du côté de avr-libc ?

http://www.nongnu.org/avr-libc/

C'est effectivement une solution (les sources sont tous là: Index of /releases/avr-libc)

Maintenant, une autre solution est de partir de la Libc du Gnu (versions ici: http://ftp.gnu.org/gnu/glibc/) dont la liste des fonctions et macros est impressionnante: cf. Function and Macro Index.
Après, faire son marché dans les sources et recoller avec le projet AVR avec en particulier l'émission/réception sur une ligne UART d'un caractère.
cf. Using the USART with AVR-GCC qui devrait grandement t'aider.

Attention, vérifier que le codage des float est identique dans la Libc du Gnu et celui attendu dans le monde AVR qui utilise un compilateur Gnu; codage qui devrait être identique (dans le cas contraire, se replier sur une fonction que retourne les 2 parties "entière + décimale" codées chacune sur un int ou un long ;-)

NB: Personnellement, c'est ce que je fais dans une autre famille de microcontrôleurs pour éviter de prendre une librairie beaucoup trop lourde pour les quelques fonctions qui m'intéressent et qui ne pourrait pas être flashée dans la mémoire programme que je m'impose.

Dernière modification par claudius01 (Le 13/03/2015, à 16:45)

Hors ligne

#7 Le 14/03/2015, à 20:24

Zaphod-Beeblebrox

Re : librairie UART (programmation C sur AVR)

Merci! smile


"c'est bien la pire folie que de vouloir être sage dans un monde de fous" (Erasme)

Hors ligne

#8 Le 15/03/2015, à 13:01

Zaphod-Beeblebrox

Re : librairie UART (programmation C sur AVR)

J'ai trouvé les fonctions itoa, ltoa, utoa etc. dans la librairie stdlib. Elles font leurs boulot et sont pas trop contraignante à utiliser. Il est plutôt mal vu de les utiliser car elles ne seraient pas portable, mais vu l'utilisation que j'en ai c'est pas vraiment un souci.

Merci encore pour toutes les autres pistes qui me seront de toute manière utiles!


"c'est bien la pire folie que de vouloir être sage dans un monde de fous" (Erasme)

Hors ligne

#9 Le 15/03/2015, à 13:28

Braun

Re : librairie UART (programmation C sur AVR)

Bonjour,
Pardonne moi si je radote, mais j'ai l'impression que sprintf() fait aussi le boulot.

Hors ligne