samedi 6 septembre 2014

Oscilloscope basique



Sur le site www,mon-club-elec,fr X. HINAUL a crée un programme

Affichage d'une mesure analogique continue sous forme de courbe sur un afficheur LCD graphique

Dans sont application je le cite
Ce programme affiche le résultat d'une conversion analogique numérique sous forme graphique sur un afficheur LCD graphique 128x64, réalisant un oscilloscope basique. On remarquera une fois de plus que le langage Arduino permet un tel résultat en quelques lignes de programme seulement.

J'ai donc adapté son programme pour un écran SainSmart 1.8 ST7735 TFT LCD 
 




le câblage de l’écran et le suivant

ST7735   UNO
VCC      => +5V
GND      => GND
SCL       =>   13
SDA      =>   11
RS/DC   =>   9
RES       =>    8
CS         =>   10


Un multivibrateur et branché sur l'entrée analogique A0

schémas avec  Fritzing 
 

Pour le programme Arduino

Il faut télécharger les deux librairies suivantes <ST7735.h> <SPI.h>

https://bitbucket.org/johnmccombs/arduino-libraries/src/64e60d1637398bb8a3c6cb9adb4c7e1fcc07a4bc/ST7735/?at=default



code Arduino

#define cs 10
#define dc 9
#define rst 8 // you can also connect this to the Arduino reset

//===Color définitions========
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
//============================
#include <ST7735.h>
#include <SPI.h>
ST7735 tft = ST7735(cs, dc, rst);
//........................
const int Voie_0=0; //déclaration constante de broche analogique
int mesure_brute=0;// Variable pour acquisition résultat brut de conversion analogique numérique

int x=0, y=0; // variable coordonnée point affiché sur LCD
int x0=0,y0=0; // variable coordonnée dernier point affiché sur LCD
//.............................
void setup() {
tft.initR(); // initialise a ST7735R chip
tft.fillScreen(BLACK);
}
//.............................

void loop() {
// lit la tension sur la broche et met le résultat brut (0-1023) dans la variable
mesure_brute=analogRead(Voie_0);

// adapte échelle mesure 0-1023 à hauteur écran 0-159
y=map(mesure_brute,0,1023,0,159);

// efface mesure affichage précédent
tft.drawLine(x,0,x,158,WHITE); // dessine ligne de x1,y1 à x2,y2

// affichage de la mesure
tft.drawLine(x0,y0,x,y,BLACK); // dessine ligne de x1,y1 à x2,y2

x0=x; y0=y; // mémorise point actuel
x=x++; // incrémente x à chaque passage
if (x>127) {
x=0; // RAZ x de 127=>0
x0=0; //réinitialise aussi x0 pour retour propre
}

delay (1); // entre 2 mesures

} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin


//============FIN=============


Aucun commentaire:

Enregistrer un commentaire