Bonjour !
Alors voilà, je suis Terminale S SI ( Sciences de l'ingénieur ) et je réalise un projet de PPE avec 4 camarades.
Notre projet consisté à réaliser une fenêtre de toît ouvrable à ouverture et fermeture automatique selon les conditions climatiques (Pluie et température) et une commande manuelle.
2 de mes potess'occupaient de la partie mécanique : ils ont monté un système utilisant une bielle afin d'ouvrir la fenêtre : le moteur ne tourne donc que dans un sens.
Moi et les 2 autres s'occupont de la partie électronique.
Je devais m'occuper du capteur à température et du capteur de fin de course (puisque le moteur ne tourne que dans un sens, je l'ai réalisé avec un bouton poussoir).
Un autre s'occupait de la partie commande (c'est à dire lorsqu'on appuie sur un bouton, la fenêtre descend ou monte) et du capteur de pluie.
Le dernier s'occupait de la programmation.
On avait comme critère : _ La commande a la priorité sur le reste. Il a donc développé une télécommande avec deux touches, où une touche gère le mode utilisé (c'est à dire mode automatique où la commande est ignoré et mode manuelle où les variables climatiques et de positions sont ignorées).
_ La pluie a la priorité sur la température et la fenêtre se ferme quand il pleut.
Je vous passe les détails et donc : quand le capteur est mouillé, la sortie du capteur = +Vcc (etat 1) et =0 (etat 0) quand le capteur est sec.
_ La Fenêtre doit être ouverte quand la température dépasse un certain seuil et doit être fermée lorsqu'elle est en dessous de ce seuil. Afin de stabiliser la fenêtre, j'ai décidé de placer 2 seuils (un d'ouverture, un de fermeture) (grâce à une CTN, 2 comparateurs et 2 résistances variables).
Jusque là tout va bien, tout a été réalisé mais le problème c'est que le gars qui devait s'occuper de la programmation nous a laché y'a 3 jours (on passe dans 2 semaines) et comme personne n'est motivé pour faire la programmation, je suis obligé de m'y coller
Comme je n'y connais pas grand chose, j'ai demandé au prof si je pouvais utiliser un kit 68HC11E2 du labo comme microcontroleur, il a dit oui et m'a conseillé par soucis de simplicité d'utiliser le langage basic et basic11 (logiciel du bahut).
J'ai donc dressé une table de vérité, un organigramme etc.
J'ai 6 variables logiques (0 ou 1) : M(Le mode M=0, manuel, M=1, automatique),CM(La Commande CM=1, signal, CM=0, pas de signal), C(Capteur position, C=1 fenêtre descendue, C=0 fenêtre remontée), P(Pluie, P=1 Présence pluie, P=0 Absence pluie), T+(Température d'ouverture, T+=1 Température > seuil ouverture, T+=0 Température < seuil ouverture) et T- (Température Fermeture, T-=1 si Température < seuil fermeture, T-=0 Température > seuil fermeture)
Et il ressort que la fenêtre change de position quand :
_ M=0 et CM=1
_ M=1, C=1, P=0, T+=1, T-=0
_ M=1, C=0, P=1
_ M=1, C=0, P=0, T+=0, T-=1
Ensuite, j'ai récuperé une nappe de l'année derniere (pas le temps de trouver autre chose) qui se branche sur le kit, où il reste PC6, PC0, PC1, PC2, PC3, PC4, PC5, PC6, PC7, PB2, PB3, PB4, PB5, PB6, PB7, Vcc, GND et IRQ.
C'est donc suffisant pour mon système.
Et aprés avoir chercher et un peu bidouiller sur le net, j'ai fait ce programme avec basic11 :
'programme pour PPE
'*********************** Définition des données**********************
'************************** sur un 68HC11E2 ************************
(j'ai pris un programme qui les définissait : starte2.bas fourni avec basic11)
ProgramPointer $F800
DataPointer $0002
StackPointer $00E8
sect text
cli ; enable debugger
ldx #_data_s
bra _crt2
_crt1 clr 0,x ; clear data area
inx
_crt2 cpx #_data_e
bne _crt1
sect data
_data_s equ *
byte PORTA at $1000 ' mode single-chip
byte PIOC at $1002
byte PORTC at $1003
byte PORTB at $1004
byte PORTCL at $1005
byte DDRC at $1007
byte PORTD at $1008
byte DDRD at $1009
byte PORTE at $100A
int TCNT at $100E
byte TMSK2 at $1024
byte TFLG2 at $1025
byte PACTL at $1026
byte PACNT at $1027
byte BAUD at $102B
byte SCCR1 at $102C
byte SCCR2 at $102D
byte SCSR at $102E
byte SCDR at $102F
byte ADCTL at $1030
byte ADR at $1031
byte OPTIONS at $1039
'********************* CONFIGURATION ET INITIALISATION *********************
DDRC=%00000000 'Le PORT C est entièrement configuré en entrées
'PORTC.0 correspond à la variable 'mode'
'PORTC.1 correspond à la variable 'commande'
'PORTC.2 correspond à la variable 'pluie'
'PORTC.3 correspond à la variable 'position'
'PORTC.4 correspond à la variable 'temperature ouverture'
'PORTC.5 correspond à la variable 'temperature fermeture'
'PORTB.2 correspond à la sortie vers le moteur
PORTC.0=1 'Mode Automatique
PORTC.0=0 'Mode Manuel
PORTC.1=1 'Commande activé
PORTC.1=0 'Pas de signal de la commande
PORTC.2=1 'Présence Pluie
PORTC.2=0 'Absence Pluie
PORTC.3=1 'Fenêtre Descendue
PORTC.3=0 'Fenêtre remontée
PORTC.4=1 'Température au dessus du seuil d'ouverture
PORTC.4=0 'Température en dessous du seuil d'ouverture
PORTC.5=1 'Température en dessous du seuil de fermeture
PORTC.5=0 'Température au dessus du seuil de fermeture
PORTB.2=0 'Pas de signal vers le moteur, la fenêtre ne change pas de position
PORTB.2=1 'Envoi d'un signal vers le moteur, mouvement de la fenêtre
'***************************** *********** PROGRAMME PRINCIPAL ****************************** **********
program:
do
PORTB.2=0 'Initialisation, pas de mouvement de la fenêtre
if PORTC.0=0
then goto manuel 'Mode Manuel
if PORTC.0=1
then goto automatique 'Mode Automatique
loop
'************************** MODE MANUEL **************************
manuel:
do
if PORTC.1=0 'Pas d'activation sur la commande
then PORTB.2=0 'Pas de mouvement de la fenêtre
then goto program 'Retour début de programme
if PORTC.1=1 'Activation de la commande
then PORTB.2=1 'Mouvement de la fenêtre
then goto program
loop
'************************** MODE AUTOMATIQUE **************************
automatique:
do
if PORTC.2=1 'Présence Pluie
then goto pluie
if PORTC.2=0 'Absence Pluie
then goto temperature
loop
'************************** SOUS-PROGRAMME : VARIABLE PLUIE **************************
pluie:
do
if PORTC.3=1 'Fenêtre descendue (capteur de position)
then PORTB.2=0 'Pas de mouvement de la fenêtre
then goto program
if PORTC.3=0 'Fenêtre remontée
then PORTB.2=1 'Mouvement de la fenêtre
then goto program
loop
'************************** SOUS-PROGRAMME : VARIABLE TEMPERATURE **************************
temperature:
do
if PORTC.4=1 'Temperature au dessus du seuil d'ouverture
then goto t+
if PORTC.5=1 'Temperature en dessous du seuil de fermeture
then goto t-
if PORTC.5=0 'Temperature entre le seuil de fermeture et d'ouverture
then PORTB.2=0 'Pas de mouvement de la fenêtre
then goto program 'Retour programme principal
loop
'************************** SOUS-PROGRAMME : TEMPERATURE D'OUVERTURE **************************
t+:
do
if PORTC.3=1 'Fenêtre descendue
then PORTB.2=1 'Mouvement de la fenêtre
then goto program
if PORTC.3=0 'Fenêtre remontée
then PORTB.2=0 'Pas de mouvement de la fenêtre
then goto program
loop
'************************** SOUS-PROGRAMME : TEMPERATURE DE FERMETURE **************************
t-:
do
if PORTC.3=$1 'Fenêtre descendue
then PORTB.2=0 'Pas de mouvement de la fenêtre
then goto program
if PORTC.3=$0 'Fenêtre remontée
then PORTB.2=1 'Mouvement de la fenêtre
then goto program
loop
Toutefois, ne m'y connaissant pas plus, je ne comprend pas vraiment les erreurs faîtes (lorsque je compile j'ai des syntax errors ^^). si quelqu'un pouvait eclarer ma lanterne.
Et une dernière question : La tension en sortie des PORT ( PORTB.2 sur mon programme ) est égal à Vcc ou pas ?
Merci beaucoup à celui qui m'a lu jusqu'ici et encore plus à celui qui m'aidera !
-----