Bonjour à tous.
J'explique mon projet, même si certains doivent certainement déjà le connaître
Je dispose d'un matelas constitués de plusieurs coussins pilotés indépendamment par une pompe et des électrovannes. Des capteurs de flexion installés sur chaque coussin fournissent une information quand à leur déformation.
Mon but est de réguler la pression (en gonflant/dégonflant le matelas) selon les informations que me fournissent ces capteurs.
Ex: Si tension capteur < x, gonfler et si tension capteur > y, dégonfler... etc...
J'utilise un p18f4520 associé à une carte picdem2+ (verte). Je réalise une conversion analogique numérique afin de piloter ce matériel via des ULN2803.
Voici la partie CAN de mon programme, qui fonctionne:
La carte fait donc une acquisition toutes les 2 secondes. Le problème c'est que j'ai programmé des seuils de tension (capteurs), et à cause des parasites, la tension varie autour du seuil lorsque je m'en approche... Résultat: le montage ne sait pas comment réagir.Code:ADCON0 = 0b00000001; // Select AN0 as An i/p ADCON1 = 0b00001001; // Vref = +vdd & GND AN0 to AN0 AN i/p ADCON2 = 0b10101101; // Right justify result, Set Acq Time & Conversion clock was 10101111 Delay100TCYx(20); // Delay ADCON0bits.GO = 1; // Start acquisition Delay100TCYx(20); // Delay while (ADCON0bits.GO == 1) // Wait until conversion complete {} Sortie_Capteur1 = ADRES; Delay10KTCYx(200);
Ce que j'aimerais réaliser, c'est une acquisition de valeurs toutes les 5 secondes par exemple sur 5 minutes et ensuite stocker la moyenne de ces valeurs dans le registre ADRES, plutôt qu'il le fasse toutes les 2 secondes (via le delay).
Ca permettra de limiter l'influence des parasites, ainsi que d'éviter de gonfler/dégonfler le matelas tout le temps.
Je ne vois pas trop comment m'y prendre, j'ai essayé avec une boucle for mais je n'ai rien eu de convaincant (erreurs, warnings etc...).
Je ne demande pas une réponse toute faite, mais juste de me guider sur le raisonnement à suivre .
Merci bien.
-----