premiers tests avec l'accéléromètre - pobot. · pdf...
TRANSCRIPT
Premiers tests avec l'accéléromètre
Extrait du PoBot
http://www.pobot.org
Premiers tests avec
l'accéléromètre- Composants - Les contrôleurs - Easy AVR 4 -
Date de mise en ligne : mercredi 21 février 2007
PoBot
Copyright © PoBot Page 1/3
Premiers tests avec l'accéléromètre
L'accéléromètre 2 axes installé sur ce circuit est un composant fabriqué par Analog et porte la référence ADXL311.
Il est particulier dans le kit EasyAVR4 : il ne se branche pas directement sur la carte. Il a donc fallu créer un petitconnecteur pour pouvoir manipuler l'accéléromètre à la main.
Les mesures effectuées par la puce MEMS sont mises à disposition sur deux sorties analogiques. Le circuit deMikroE ajoute les condensateurs et les résistances nécessaires.
On va afficher sur l'écran graphique (en utilisant WinAVR et AVRlib) les valeurs reçues sur le convertisseuranalogique/numérique de l'AVR.
Voici le code source :
/***************************************************************************** * ethernet.c * * Démonstration EthernetAVRlib * * * Auteur : Eric PASCUAL pour POBOT * Cible : ATmega * Compilateur : avr-gcc (WinAVR) */ #include <avr/pgmspace.h> #include <avr/io.h> // définitions des I/O #include <avr/interrupt.h> // support desinterruptions #include <stdlib.h> #include <string.h> #include "global.h"// informations générales sur lemicrocontrôleur utilisé (quartz, etc.) #include "a2d.h"// bibliothèque AVRlib de conversion des valeurs analogiquesen nombres #include "glcd.h"// bibliothèque AVRlib de gestion d'un afficheur LCD graphique générique #include"ks0108.h"// bibliothèque AVRlib implémentant les fonctions d'un afficheur LCD de type ks0108 #include "timer.h"//bibliothèque AVRlib de gestion des timers //----------------------------------------------------------------- // Définition desmessages qui s'afficheront sur l'écran char *msg1="Board to pos "; char *msg2="and press RB0 "; char*msg3="Zero G values : "; char *msg4="X= Y= "; char *msg5="One G values : "; char *msg6="Readings : "; /** * Affichage d'une valeur numérique à un emplacement particulier (ligne/colonne) de l'afficheur LCD graphique */static void display_uint_at(unsigned short value, u08 line, u08 col) { static char buffer[8] ; // conversion d'un entierdans un tableau (int to array) itoa(value, buffer, 10) ; // fermeture du buffer pour en faire une chaine de caractère(string se termine toujours par 0) buffer[7] = 0 ; // l'afficheur LCD graphique est géré par un curseur qu'il fautdéplacer au bon endroit glcdGotoChar(line, col) ; // puis une fonction générique permet d'afficher notre bufffer sans
Copyright © PoBot Page 2/3
Premiers tests avec l'accéléromètre
avoir à gérer chacun des pixels glcdPutStr (buffer) ; } /** * */ int main(void) { // DDRB = 0xfe ;// PB0 used asinput // initialization of AVRlib libraries a2dInit() ; glcdInit() ; timerInit() ; // u08 position_num = 1 ; u08 line = 0 ; //glcdClearScreen() ; glcdGotoChar(line, 0) ; glcdPutStr(msg1) ; glcdWriteChar(position_num++ + 48) ;glcdGotoChar(++line, 0) ; glcdPutStr(msg2) ; while (!(PINB & 0x01)) ; while ((PINB & 0x01)) ; unsigned shortzeroG_X = a2dConvert10bit(0) ; unsigned short zeroG_Y = a2dConvert10bit(1) ; glcdGotoChar(++line, 0) ; glcdPutStr(msg1) ; glcdWriteChar(position_num++ + 48) ; glcdGotoChar(++line, 0) ; glcdPutStr(msg2) ; while(!(PINB & 0x01)) ; while ((PINB & 0x01)) ; unsigned short oneG_X = a2dConvert10bit(0) ; glcdGotoChar(++line, 0); glcdPutStr(msg1) ; glcdWriteChar(position_num++ + 48) ; glcdGotoChar(++line, 0) ; glcdPutStr(msg2) ; while(!(PINB & 0x01)) ; while ((PINB & 0x01)) ; unsigned short oneG_Y = a2dConvert10bit(1) ; glcdClearScreen() ; line= 0 ; glcdGotoChar(line, 0) ; glcdPutStr(msg3) ; glcdGotoChar(++line, 0) ; glcdPutStr(msg4) ; display_uint_at(zeroG_X, line, 2) ; display_uint_at (zeroG_Y, line, 10) ; glcdGotoChar(++line, 0) ; glcdPutStr(msg5) ;glcdGotoChar(++line, 0) ; glcdPutStr(msg4) ; display_uint_at (oneG_X, line, 2) ; display_uint_at (oneG_Y, line, 10); line+=2 ; glcdGotoChar(line, 0) ; glcdPutStr(msg6) ; glcdGotoChar(++line, 0) ; glcdPutStr(msg4) ; while (1) {timerPause(100) ; oneG_X = a2dConvert10bit(0) ; oneG_Y = a2dConvert10bit(1) ; display_uint_at (oneG_X,line, 2) ; display_uint_at (oneG_Y, line, 10) ; } } // supprimez la dernière ligne parasite
Copyright © PoBot Page 3/3