Bonjour,
Je suis actuellement en terminale SSI et ai pour projet un réfractomètre numérique, je travaille sur la programmation d'un capteur CCD (ILX551A http://home.fnal.gov/~maeshima/align...ip/ILX551A.pdf). En gros, je dois comparer la tension de sortie entre les différents pixels, et trouver le pic lumineux qui correspond au pic de tension en y associant la position du pixel. Le capteur est linéaire, il associe 33 premiers pixels inutiles, 2048 utilisables et 6 à la fin inutiles. Voici mon programme, pourriez vous s'il vous plaît me dire ce qui cloche ? Merci d'avance pour votre aide.
Je l'ai fait sur Arduino.
Rog et Clock sont les deux signaux à générer.
Code:#include <Wire.h> //inclusion de la libraire Wire (protocole I2C / TWI) #include <LiquidCrystal_I2C.h> //inclusion librairie écran LCD ?LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //definir adresse LCD ) 0x27 pour un affichage de #define Vout A0 // Vout sur broche A0 boolean rog = 3; //Rog sur broche 3 boolean clock =2; //Clock sur broche 2 float n, D, B; //n,D,B en float int i, Ntemp; //déclarer i et Ntemp int posmin = 1; //position minimum du pixel à 1 ? int lum; //lum est la tension sur Vout (sortie) int pic_lum =2047; //position du pixel le plus lumineux int poslum //position du pixel int poslum1 //position du pixel int lum1 //lum1 est la tension sur Vout void setup(){ lcd.begin(20,4); // init lcd 20 caractères 4 lignes lcd.backlight(); // retro éclairage on Serial.begin(9600); //Conexon série 9600 bauds } void loop(){ mesure(); lcd.setCursor(1,0); //postion curseur ?lcd.print(i); //écrire i calcul_taux(); } // *****************************mesure***************************** void mesure(){ depart_mesure(); i = 1; //on se place au pixel 1 while(i<34){ // 33 premiers clock inutiles (voir doc ilx551a) digitalWrite(clock,LOW); //Niveau logique bas sur clock delayMicroseconds (0,001); digitalWrite(clock,HIGH); //niveau logique haut delayMicroseconds (0,001); i=i+1; //incrémentation (on change de pixel) } i = 34; //on se place au pixel 34 (33 inutiles) while(i<2049){ // mesure des 2048 pixels utiles digitalWrite(clock,LOW); //niveau logique bas sur clock delayMicroseconds (0,001); digitalWrite(clock,HIGH); delayMicroseconds (0,001); //REVOIR HERTZ lum = analogRead(Vout); //acquérir tension de Vout delayMicroseconds (100); poslum= i //position du pixel duquel on prélève la tension i=i+1 //on avance d'un pixel lum1 = analogRead(Vout); //on releve la tension de ce pixel poslum1 = i //on garde la position du pixel if (lum > lum1){ //Comparer les deux tensions pic-lum = i; //prendre position avec plus haute tension else pic-lum= poslum //sinon l'autre pic-lum= i-1 ;
-----