samedi 22 septembre 2012

Environnement de construction pour Arduino Leonardo

ArduinoLeonardoFront.jpg

Si l'environnement de construction iDreamMicro prend en charge les cartes de développements Arduino Uno et Arduino Mega2560 depuis le début ou presque, la carte Arduino Leonardo avait été oubliée... La création d'un nouvel environnement de construction comble cette lacune. Celui-ci est très  […]

Lire la suite

SCons et les méthodes d'environnement

sconstruct.png
"""
Build project.
"""
def BuildProject(env, sources, target_name):    
    # Build program.
    env.Program(target = target_name + '.elf', source = sources)
    
AddMethod(Environment, BuildProject)

L'environnement de construction de la plateforme iDreamMicro permet de compiler en une seule fois plusieurs projets et plusieurs bibliothèques. Par conséquent, le principe de construction est le même d'un projet à l'autre ou d'une bibliothèque à l'autre.

Jusqu'ici on s'est contenté de dupliquer les scripts de construction. Mais cette situation ne peut perdurer, à plus forte raison quand SCons offre le nécessaire pour factoriser et éviter la duplication. La solution consiste à utiliser les méthodes d'environnement.

Lire la suite

SCons et les variables de construction

env_arduino_uno_py.png
env = Environment()
env.Append(NEW_VARIABLE = 'added')
print "NEW_VARIABLE =", env['NEW_VARIABLE']

Les précédents articles autour de SCons ont amené à concevoir un environnement de construction relativement complet, avec la construction de bibliothèques et de projets. Cet environnement utilise plusieurs fichiers SConstruct et SConscript qui doivent s'échanger des paramètres. Certains paramètres sont relatifs à un environnement en particulier. Par conséquent et afin d'éviter de les passer à tord et à travers, il semble judicieux d'en faire des variables de construction.

SCons permet justement d'ajouter des variables à un environnement de construction. Cet article a pour objectif de présenter cette fonctionnalité ainsi que son intégration dans les environnements de la plateforme iDreamMicro.

Lire la suite

Construction de plusieurs projets

project-sconstruct-diff.png

L'article précédent a abordé la construction d'un projet et des bibliothèques qu'il utilise. Dans le cas d'une plateforme telle qu'un réseau de capteurs, on peut vouloir construire plusieurs projets et leurs bibliothèques en une seule fois. Cet article propose une solution permettant de répondre à ce besoin.

Lire la suite

mercredi 25 juillet 2012

EKitsZone W5200 Ethernet Shield

P1010077.png

P1010077.png

La plateforme de développement Arduino bénéficie d'une large communauté et d'un grand nombre de modules, shields ou breakout boards divers et variés. Il existe notamment des shields permettant d'ajouter une connexion réseau Ethernet tels que l'Arduino Ethernet Shield.

Le shield officiel embarque un contrôleur Ethernet WIZnet W5100. Le W5200 Ethernet Shield d'EkitsZone est quant à lui basé sur un contrôleur Ethernet WIZnet W5200.

Cet article présente la mise en œuvre du W5200 Ethernet Shield sur une carte de développement Arduino Uno. L'environnement de développement utilisé est Arduino en version 1.0.1.

Lire la suite

mardi 24 juillet 2012

Les assertions avec Arduino

assert.png
void foo(char* p_string)
{
    // Check the preconditions.
    assert(NULL != p_string);

    // ...
}

En informatique, une assertion est une expression qui doit être évaluée à vrai. Si le résultat de l'évaluation est faux, c'est qu'il y a un problème, une erreur qui ne doit pas se produire. Les assertions peuvent par exemple être utilisées pour s'assurer qu'une valeur est bien comprise entre deux bornes, qu'un pointeur n'est pas nul, etc...

Arduino utilise AVR-GCC et l'AVR Libc qui propose de prendre en charge les assertions via la bibliothèque assert définie dans le fichier d'entête assert.h.

Cet article propose de découvrir les assertions de l'AVR Libc puis de les mettre en œuvre sur Arduino.

Lire la suite

mardi 26 juin 2012

ATmega TWI Bit Rate Generator Unit

Overview_of_the_TWI_Module_color.png

La plupart des microcontrôleurs megaAVR d'Atmel, dont l'ATmega328P, dispose d'un module I2C ou TWI. Celui-ci se décompose en plusieurs sous ensembles ou units :

  • Bit Rate Generator Unit ;
  • Bus Interface Unit ;
  • Address Match Unit ;
  • Control Unit.

Overview_of_the_TWI_Module_color.png

Cet article se focalise sur le Bit Rate Generator Unit et propose d'apprendre à le configurer sur un ATmega328P. Par conséquent, il n'a pas pour objectif de proposer une bibliothèque TWI complète, cette dernière étant en cours de développement.

Le Bit Rate Generator Unit contrôle la période du signal SCL en mode maître ou master. Cette période est déterminée par la configuration du bit rate dans le registre TWBR et du prescaler dans le registre TWSR.

Le bit rate est le débit binaire, c'est à dire le nombre de bits par seconde envoyés ou reçus sur le bus TWI. Le prescaler est un diviseur de fréquence. Il permet de diviser la fréquence CPU pour atteindre la fréquence SCL du bus TWI.

Lire la suite

mercredi 9 mai 2012

Construction d'une bibliothèque

Après les deux précédents articles sur la configuration d'un environnement de construction SCons pour AVR-GCC, celui-ci propose de construire un logiciel recourant à des bibliothèques.

Comme dans l'article précédent, le projet servant de support fait basculer le niveau d'une sortie du microcontrôleur mais plutôt que de la piloter en direct, il propose de développer une bibliothèque digital_io réalisant cette tâche.

L'environnement de construction mis en place dans l'article précédent servira de base pour ce nouveau projet. Toutefois l'arborescence évolue et comporte désormais différents sous-dossiers afin de le structurer.

Lire la suite

Bibliothèque digital_io

    // Configure pin direction.
    DDRB |= (1 << PB5);

    // Set pin level.
    PORTB |= (1 << PB5);

Ces quelques lignes de code ne parleront sans doute qu'aux personnes connaissant les microcontrôleurs, voire même seulement à celles connaissant les microcontrôleurs AVR d'Atmel. En effet, elles configurent le PORTB5 d'un ATmega en sortie et le mettent au niveau logique haut.

Certes, c'est le meilleur moyen de réduire l'empreinte mémoire du logiciel sans recourir à l'assembleur. Mais c'est loin d'être le plus parlant. Sans oublier que ce code n'est pas portable. C'est à dire que le jour où on souhaitera troquer l'AVR pour un autre microcontrôleur tel qu'un PIC ou un MSP430, il sera nécessaire de revenir sur l'ensemble du logiciel.

Afin de remédier aux inconvénients cités ci-dessus, iDreamMicro propose dans cet article de découvrir la bibliothèque digital_io. Elle permet de piloter les ports d'entrée/sortie numériques des microcontrôleurs AVR d'Atmel :

  • configuration des ports d'entrée/sortie ;
  • lecture du niveau d'entrée ;
  • écriture du niveau de sortie.

La tout en offrant abstraction, portabilité et réutilisabilité. Les quelques lignes ci-dessous ne sont-elles pas plus parlantes ?

    // Declare pin.
    digital_io__pin_position_t output =
        DIGITAL_IO__PORT_B | DIGITAL_IO__PIN_5;

    // Configure pin direction.
    digital_io__configure_pin(output, DIGITAL_IO__DIRECTION__OUTPUT);

    // Set pin level.
    digital_io__set_pin_level(output, DIGITAL_IO__LEVEL__HIGH);

Lire la suite

Ouverture du dépôt idreammicro-avr

Un système de gestion de version permet de conserver l'ensemble des révisions d'un logiciel. iDreamMicro a choisi d'utiliser ce type de système, et plus particulièrement Subversion. iDreamMicro a ouvert un dépôt dédié à ses développements pour microcontrôleur AVR avec AVR-GCC. Celui-ci est  […]

Lire la suite

jeudi 5 janvier 2012

FreeRTOS sur ATmega328

FreeRTOS est un noyau de système d'exploitation temps réel faible empreinte pour microcontrôleur. Il est publié sous licence libre GNU General Public License (GPL).

FreeRTOS propose différents portages, notamment pour ATmega323, mais pas pour ATmega328. En effet, certains registres et vecteurs d'interruption relatifs au Timer 1 ont été renommés. Cet article propose d'y remédier de manière didactique, en réalisant le portage pas à pas. Ainsi la démarche pourra être reproduite pour tout autre microcontrôleur ATmega.

L'ATmega328 étant relativement proche de l'ATmega323, le portage de ce dernier servira de base.

La cible utilisée dans cet article est une carte Arduino Uno R2 embarquant un microcontrôleur ATmega328P.

Lire la suite

lundi 19 décembre 2011

Arborescence d'une bibliothèque

Par définition, une bibliothèque doit être réutilisable afin d'être intégrée au plus grand nombre de projets. Mais elle doit également être suffisamment indépendante pour permettre de l'évaluer et de la tester sans être parasité par un projet complet. C'est à dire qu'on doit pouvoir prendre uniquement le dossier de la bibliothèque.

Cet article présente l'arborescence définie par iDreamMicro afin de répondre à ces exigences.

Lire la suite

lundi 11 juillet 2011

Environnement de construction SCons pour AVR-GCC (2/2)

Ce second article sur la configuration d'un environnement de construction SCons pour AVR-GCC introduit la notion de SConscript. Le logiciel de sortie de ce projet est exactement le même que celui de l'article précédent, seule la méthode change.

Désormais, le SConstruct est éclaté dans différents scripts, chacun ayant un rôle précis dans la construction du logiciel :

  • configuration de l'environnement de construction ;
  • adaptation de l'environnement de construction à la cible ;
  • construction du projet.

Pour démontrer que cette méthode est bien plus que de la cosmétique, cet article propose également de construire le logiciel pour deux cibles distinctes.

Lire la suite

jeudi 30 juin 2011

Environnement de construction SCons pour AVR-GCC (1/2)

Cet article présente la configuration d'un environnement de construction SCons minimal pour AVR-GCC.

Afin d'aller à l'essentiel, la configuration de l'environnement et la construction du logiciel se font dans un même fichier SConstruct. Même si ce n'est pas la solution la plus élégante, elle demeure la plus simple. Dans le même souci de simplicité, le projet servant d'exemple ne comporte qu'un seul fichier source et n'a recours à aucune bibliothèque.

Lire la suite