Après avoir posté quelques billets sur différents micro-contrôleurs, notamment ceux de la famille Z8F de Zilog, les circuits 32 bits de chez Microchip dans une application bien pensée que sont les produits Maximite et Micromite, ou encore les circuits compatibles ARM0 de NXP, aujourd'hui je propose un très petit aperçu des composants 8 bits de chez Atmel. En l’occurrence le processeur ATmega168pb, nouvellement présenté et dont la découverte est facilitée par un kit d'évaluation nommé 'ATmega168 X PLAINED Mini'.
Ce qui est intéressant avec ce nouveau micro-contrôleur, bien que ce soit un processeur 8 bits, c'est qu'il propose une architecture RISC rapide, un prix très réduit malgré la présence d'un nombre assez important de périphériques embarqués, et la mise à disposition de la part d'Atmel d'un logiciel de développement/programmation intégré de bonne facture. En un mot, Ce circuit se présente un peu de la même façon que les Z8F de Zilog.
En résumé, voici ce que nous propose un ATmega168pb (extrait de la documentation Atmel):
- Up to 20 MIPS Throughput at 20MHz
- On-chip 2-cycle Multiplier
- 16KBytes of In-System Self-Programmable Flash program memory
- 512Bytes EEPROM
- 1KBytes Internal SRAM
- Two 8-bit Timer/Counters with Separate Prescaler and Compare Mode
- 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode
- Real Time Counter with Separate Oscillator
- Six PWM Channels
- 8-channel 10-bit ADC with Temperature Measurement
- Programmable Serial USART with Start of Frame Detection
- Master/Slave SPI Serial Interface
- Byte-oriented 2-wire Serial Interface (Phillips I 2 C compatible)
- Programmable Watchdog Timer with Separate On-chip Oscillator
- On-chip Analog Comparator
- Interrupt and Wake-up on Pin Change
- Six Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-down, Standby, and Extended Standby
- 27 Programmable I/O Lines
...pour les caractéristiques essentielles, ce qui présente tout de même un certain potentiel de flexibilité dans un très petit circuit. Il pourrait se placer entre les micros de chez Zilog avec plus de rapidité d'exécution et plus de périphériques embarqués, et les 32 bits de chez Microchip en présentant certes moins de puissance de calcul, mais aussi une bien plus grande facilité dans la gestion du placement des périphériques sur les pattes de sorties.
La page du site d'Atmel ou il est possible de commander le kit d'évaluation :
http://store.atmel.com/PartDetail.aspx?q=p:10500404#tc:description |
Une fois Studio 6 installé et la carte d'évaluation connectée dans un port USB libre de la machine de développement, le premier lancement de Studio 6 fait apparaître l'environnement de développement ainsi qu'un onglet affichant le matériel compatible Studio découvert :
http://synthelectro-fr.blogspot.com |
Une constatation intéressante concernant le mode de programmation de la Flash du micro-contrôleur, concerne le fait que celui-ci s'effectue par le port SPI du circuit. Laissant ainsi libre le port série pour tout type d'expérimentations. Cela peut peut-être paraître anodin, mais il m'est arrivé quelques mésaventures avec un circuit LPC1114 répondant 'synchronized' à une suite d'octets envoyés sur son port série, alors qu'il n'était nullement en mode programmation, le système de détection automatique de 'baud rate' du LPC1114 se déclenchant à 'l’insu de mon plein gré' !!!
Plutôt que de compiler de nouveau cette application et de la re-programmer dans le processeur, j'ai préféré partir de zéro et écrire un programme simple envoyant quelques caractères par le port série.
Et voici le 'programme du siècle', ou plus simplement un 'Hello World' un peu plus évolué que l'habituel clignotement d'une LED :
/* * TestCom.c * * Created: 23/12/2014 10:34:39 * Author: eric */ #include <avr/io.h> #define F_CPU 16000000UL // Oscillateur interne à 16MHz #define LED_ON PORTB |= (1<<PORTB5) #define LED_OFF PORTB &= ~(1<<PORTB5) #define USART_BAUDRATE 9600 #define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1) void InitSystem(void); int main(void) { unsigned long Temp; InitSystem(); while(1) { //TODO:: Please write your application code while (!(UCSR0A & (1<<UDRE0))); UDR0 = 'D'; for (Temp = 10000000; Temp; Temp--); while (!(UCSR0A & (1<<UDRE0))); UDR0 = 'F'; } } void InitSystem(void) { DDRB |= (1<<PORTB5); // PB5 en sortie (LED0) PORTB |= (1<<PORTB5); // PB5 pullUp LED_OFF; // start with the LED off UCSR0B = (1 << RXEN0) | (1 << TXEN0); // Autorisation RX/TX UCSR0C = (1 << UCSZ00) | (1 << UCSZ01);// Mode 8 bits UBRR0H = (BAUD_PRESCALE >> 8); // Baud rate LSB du registre UBRR UBRR0L = BAUD_PRESCALE; // Baud rate MSB du registre UBRR }Rien de bien compliqué en somme si ce n'est qu'en guise de clignotement de LED, le caractère 'D' est envoyé par le port série puis, après une boucle vide comptant jusqu'à 10.000.000, le caractère 'F' est envoyé à la console, le tout, dans une boucle sans fin. Ce simple programme m'a permis de constater que la boucle de comptage s'effectue en 6 secondes.
Une fois ce programme compilé, un simple démarrage de session de débogage permet de lancer la programmation de la flash du composant puis de démarrer le programme interne. Il est tout à fait plaisant de constater que dès lors, toutes les opérations permettant l'évolution en pas à pas du programme ainsi que la visualisation des variables et des mémoires internes au processeur sont accessibles simplement, et en temps réel, ainsi que la gestion des points d'arrêts. Je retrouve ici tout ce qui fait l'efficacité de la solution Zilog.
Session typique de débogage sous Studio 6. |
Et puisque j'évoque la 'puissance' de ce processeur, j'ai comparé le résultat de ce programme avec ceux obtenus lors d'un test précédent sur des machines fonctionnant sous interpréteur Basic. En 'force brute', l'ATmega168pb exécute un simple comptage à une vitesse supérieure à 350 fois le même type de test effectué sur un processeur PIC32 à 50MHz sous interpréteur Basic, le Micromite. Le Micromite étant lui-même 130 fois plus rapide que le bon vieux Tandy PC-2. L'ATmega168pb est donc près de 50 000 fois plus rapide que le PC-2. Évidement, cette comparaison est 'tendancieuse', les environnements de ces trois processeurs étant très différents les uns des autres.
Cependant, si l'on considère les outils disponibles aujourd'hui pour une personne désireuse de se lancer dans la réalisation de matériels embarqués, force est de constater qu'il y a vraiment de quoi faire petit, économe en énergie, tout en étant vraiment très performant. Le tout pour un budget minimal puisqu'à considérer que la phase la plus lente dans tout le processus d'élaboration est celle du chargement du logiciel Studio 6, il est tout à fait possible d'imaginer utiliser cette chaîne de développement sur un portable équipé d'un simple processeur Core 2 Duo. C'est mon cas, avec un Core 2 à 2.10 MHz. Ce type de Portable se trouve aujourd'hui en occasion à moins de 200€, à comparer aux 3500 Francs nécessaires pour acquérir un Sharp PC 1500 (TRS80-PC2) à l'époque de sa sortie. Les outils de développement sont fournis gracieusement par Atmel.
Le tout pour moins de 200€ ?.... |