Régularisation thermique sous sol

Le délais n'a pas toujours été présent avec certains codes les fermetures se suivaient je n'ai pas prêté attention a quel moment ce délai est apparu , moi pour le rangement j'essaie de ranger mais j'ai tendance a attaquer trops tard lorsque c'est déjà le désordre
Patrick
 
Je ne vois qu'un problème au niveau des fins de course qui seraient mal détectés ouverts ou fermés.
Y a t il eu des modifs de liaisons ? Les câbles sont blindés ou pas ?
Cela apparait dans tous les cas ou seulement en ouverture ou fermeture ?
MM
 
Non les fdc sont bien détectés puisque affichage bon câble téléphone 8 paires blindé , dans un premier temps j'ai mis ma liaison en cause j'ai changé de paire puis j'ai fait une liaison avec un autre câble 2x 0.5 , puis je suis revenu a mon premier branchement, j'ai mis en cause mon éclairage tubes fluo avec ballast, mais problème même sans éclairage en service, et puis c'est juste côté sud fermé. A l'ouverture 1 seconde entre nord et sud affichage T puis o nord puis sud, a la fermeture affichage T puis o nord puis T sud et affichage clignotant avec les températures et positions en affichage plus.faible et après environ 2 minutes fermeture sud et affichage F plus de clignotement, un reset est sans effet un schunt de la sortie fdc Ouvert sud également la position est bien détectée, mais apparaît en transit sans que la fermeture soit effectuée avant un délais ?? C'est la que je ne comprends pas c'est comme si il y avait une tempo entre la sortie picaxe et le l293 d'ailleurs (je suis en train de penser que j'écris ces lignes et cite le l293 de mémoire preuve que ça rentre il y as 3 semaines je ne connais même pas son existence ) le l293 ne possède pas de Tempo ? Il réagit comme si mais juste a la fermeture sud , mystère
Patrick
 
Oui, il y a le L293 entre le µC et moteur. Comment se comporte l'affichage des trappes ? Lorsque la trappe quitte une position, la signalisation passe en"T", elle y reste combien de temps? Passe t elle en "T" juste après la fin de tempo ,( si elle doit changer ) ?
Le mouvement ne doit pas durer plus de 10s, sinon, il y a alarme.... Alors ???
Je vais réfléchir à d'autres tests, mais tu as sans doute d'autres choses à faire, on peut voir plus tard, si pas pressé

MM
 
Last edited:
J'ai un peu de mal à suivre le déroulement des évènements, avec les clignotements, les éclairages faibles etc
Mais je vais y réfléchir...
MM
 
Je viens de chronométrer les 180 secondes durent en réalité 7 minutes , départ ouvert affichage O
Au bout du décompte nord T puis F
Sud O affichage clignotant des valeurs et positions actuellement bloqué depuis plus de 7 minutes ,il as fallu que je m'absente deux minutes , ça s'est fermé
 

Attachments

  • IMG_20250710_191012.jpg
    IMG_20250710_191012.jpg
    662.2 KB · Views: 3
L'affichage du précédent post était lorsque c'est en attente actuellement affichage correct
 

Attachments

  • 17521686027065513839741143987042.jpg
    17521686027065513839741143987042.jpg
    497.9 KB · Views: 2
Oui, il y a le L293 entre le µC et moteur. Comment se comporte l'affichage des trappes ? Lorsque la trappe quitte une position, la signalisation passe en"T", elle y reste combien de temps? Passe t elle en "T" juste après la fin de tempo ,( si elle doit changer ) ?
Le mouvement ne doit pas durer plus de 10s, sinon, il y a alarme.... Alors ???
Je vais réfléchir à d'autres tests, mais tu as sans doute d'autres choses à faire, on peut voir plus tard, si pas pressé

MM
Effectivement j'ai un emploi du temps assez chargé mais en ce moment ce sont de plus petites journées 8h 18 H30 et je trouve toujours du temps
Patrick
 
L'affichage du précédent post était lorsque c'est en attente actuellement affichage correct
Donc, le problème n'est pas réglé, mais je ne peux rien tester, et c'est dommage, parce que là , je vois pas.
Les secondes ne décomptent pas normalement.
Je passerais, pour essai la vitesse à 4 MHz ? suffit de placer un ; devant setfreq au début. ça ne change rien pour time,
Donc :
Code:
;regulation thermique sous sol 10/07/25
;Gestion 2 moteurs et 4 FdC sur 20M2
;Tempsmax mouvement trappes 10s =>erreur FdC: reset par poussoir sur B.5
;TN=trappe Nord; TS=trappe Sud ;O=ouverte F=fermée
;Trappes en transit ;ni ouvert ni fermé => "T"
;Flag sur défaut FdC => arrêt jusqu'à reset
;Ajout hystérésis + moyenne sur 4 mesures
;Ajout temporisation entre comparaisons + affichage temps
;Ajout test FDC
#picaxe 20M2
;setfreq M16
symbol LCD=B.0
symbol Potar=C.7
symbol DSext=C.1
symbol DSint=C.2
symbol FCFS = pinC.6 ;Fin course fermeture sud (0=fermé)
symbol FCOS = pinC.5 ;fin course ouverture sud    (0=ouvert)
symbol FCFN = pinC.4
symbol FCON = pinC.3
symbol CTON = B.1 ;commande trappe ouverture nord
symbol CTFN = B.2 ;commande trappe fermeture nord
symbol CTOS = B.3
symbol CTFS = B.4
symbol pous=pinB.5 ;poussoir reset alarme
symbol flag=bit0
symbol Text=b1
symbol Tint=b2
symbol Cgn=b3
symbol hyster=b4
symbol Textmaj=b5
symbol Textmin=b6
symbol Tintmaj=b7
symbol Tintmin=b8
symbol cpt=b9        ;compteur
symbol TN=b10
symbol TS=b11
symbol pretime=w10
symbol Tmax=w11
symbol reste=w12
symbol cumul=w13
symbol baud=N2400
dirsC =%0
dirsB = %11111
pullup %111100000100000 ;pullup sur C.3 à C.6 et B.5
hyster=1        ;hystérésis +/- hyster
Tmax=10        ;0=pas de tempo
;*************************
pause 500 ;temps init LCD
serout LCD, baud,(254,1)
serout LCD, baud,(254,130,"int ext  Cgn TN TS",254,192,"T")
serout LCD, baud,(254,212,"T restant: ")
;scan FdC MST 
    gosub testFDC
    TN="T" : TS="T"
    if FCFS=0 then              ;C.6
          TS="F"
    elseif FCOS=0 then       ;C.5
          TS="O"
    endif
    if FCFN=0 then             ;C.4
          TN="F"
    elseif FCON=0 then          ;C.3
          TN="O"
    endif

    gosub lectemp    ;1èrelecture pour initialisation
    serout LCD, baud,(254,194,#Tint," ",254,198,#Text," ",254,203,#Cgn," ",254,207,TN,254,210,TS)
    reste=Tmax-time
    serout LCD, baud,(254,223,#reste," s "  )   
    gosub compare 

    do ;boucle principale                
        do
            pause 1        ;bug simu
            if flag=1 then
                do loop while pous=1    ;appui
                do loop while pous=0    ;relachement pous
                serout LCD, baud,(254,148,"             "); raz alarme
                flag=0        ;raz flag
            endif            
          
            if time<>pretime then    ; 1 lecture et 1 affichage/s    
                if Tmax>time then     ;sinon => <0
                    reste=Tmax-time    ;calcul reste
                else reste=0
                endif 
                gosub lectemp     
                serout LCD, baud,(254,194,#Tint," ",254,198,#Text," ",254,203,#Cgn," ",254,207,TN,254,210,TS)
                serout LCD, baud,(254,223,#reste," s "  )                
                pretime=time                    
            endif
        loop while reste>0
        ;on compare les tempés toutes les X  s 
        gosub compare
    loop

lectemp:     
    ;gosub testFDC ; option test FDC
    readadc potar, Cgn ;lecture consigne sur C.7
    Cgn = 15 * Cgn /250 + 15 ; de 15 à 30 °C        
    readtemp Dsext,Text      
    Textmaj=Text+hyster    ;valeur majorée
    if Text>hyster then        
       Textmin=Text-hyster     ;valeur minorée
    else
       Textmin=0            ;on bloque à 0    
    endif       
    readtemp DSint,Tint                
    Tintmaj=Tint+hyster    ;valeur majorée
    if Tint>hyster then        
        Tintmin=Tint-hyster    ;valeur minorée
    else Tintmin=0    
    endif    
    return

testFDC:
    if FCFS=0 and FCOS=0 then
        serout LCD, baud,(254,148," DEFAUT FC SUD")
        do loop while pous=1
        do loop while pous=0
        reset
    endif
    if FCFN=0 and FCON=0 then
        serout LCD, baud,(254,148," DEFAUT FC NORD")
        do loop while pous=1
        do loop while pous=0
        reset
    endif    
    return

compare:            ;avec hystérésis
    if Tintmaj > Cgn and Textmin < Tint then ; ouverture trappe
        gosub ouvre
    elseif Tintmaj < Cgn and Textmin > Tint then
        gosub ouvre
    elseif Textmin > Cgn and Tintmin > Cgn then ;fermeture trappe
        gosub ferme
    elseif Tintmin < Cgn and Textmin <Tint then
        gosub ferme
    endif
    time=0
    return

ouvre: ;C.3    
    if FCON =1 then    ;le fdc n'est pas en position ouverture (=0)
        high CTON ;commande ouverture trappe nord (5V)        
        time=0
        do
            if FCFN=1 then        ;le fdc n'est plus en position fermeture
                TN="T"
                serout LCD, baud,(254,207,TN)    ;donc on est en transit
            endif
        loop while FCON=1 and time<10 ;FCON=C.3 => trappe nord ouverte
        low CTON
        if time>= 10 then
            serout LCD, baud,(254,148," DEFAUT FCON")
            flag=1        ;flag mémo erreur
        else
            TN="O"        
            serout LCD, baud,(254,207,TN)
        endif        
    endif
    if FCOS=1 then        
        high CTOS ;sortie ouverture à 1 (5V)
        time=0
        do 
            if FCFS=1 then
                TS="T"
                serout LCD, baud,(254,210,TS)
            endif
        loop while FCOS=1 and time<10 ;FCOS=C.5 => porte ouverte
        low CTOS
        if time>= 10 then
            serout LCD, baud,(254,148," DEFAUT FCOS")
            flag=1
        else
            TS="O"
            serout LCD, baud,(254,210,TS)
        endif            
    endif
    return

ferme: ;C.1    
    if FCFN =1 then ;fermeture trappe nord
        high CTFN ;commande fermeture trappe nord à 1 (5V)
        time=0
        do
        if FCON=1 then
            TN="T"
            serout LCD, baud,(254,207,TN)
        endif
        loop while FCFN=1 and time<10 ;FCFN=C.4 => porte ouverte
        low CTFN
        if time>= 10 then
            serout LCD, baud,(254,148," DEFAUT FCFN")
            flag=1  
        else
            TN="F"
            serout LCD, baud,(254,207,TN)
        endif
    endif    
    
    if FCFS=1 then ;fermeture trappe sud
        high CTFS ;commande fermeture trappe sud à 1 (5V)
        time=0
        do
            if FCOS=1 then    
                TS="T"    
                serout LCD, baud,(254,210,TS)
            endif
        loop while FCFS=1 and time<10 ;FCFS = C.6
        low CTFS
        if time>= 10 then
            serout LCD, baud,(254,148," DEFAUT FCFS")
            flag=1
        else
            TS="F"
            serout LCD, baud,(254,210,TS)
        endif
    endif    
return
 
résultat négatif aucun changement dans la vitesse du décompte
Non seulement je ne peux rien tester,mais en plus, j'ai une connexion réseau très limitée.
On a vu que le problème était dans lectemp, je crois. et donc si on place un ";" devant la ligne "gosub lectemp", il se passe quoi maintenant pour le décompte ?
MM
 
Bonjour Michel je viens de faire plusieurs essais ouvertures dans la foulée fermeture toujours presque 10 minutes
Patrick
Bonsoir,
Plus ça va, moins je comprends.
Le délais entre mouvement trappe a toujours existé ou c'était ok en #191, où le décompte était normal ?
On va faire un test uniquement sur le mouvement des trappes, j'aimerais y voir plus clair
A bientôt
MM
 
Oui a l'ouverture c'est ok mais a la fermeture il y as un délai ce n'est pas vraiment gênant mais c'est vrai qu'il y à un lézard
Patrick
 
Oui a l'ouverture c'est ok mais a la fermeture il y as un délai ce n'est pas vraiment gênant mais c'est vrai qu'il y à un lézard
Patrick
En fermeture seulement ? Un délai entre les trappes N et S ? Normalement, les mouvements se suivent, sans délai
MM
 
Oui a l'ouverture seulement avec le dernier code 2 clignotements puis affichage fixe pendant environ 3 minutes puis fermeture ,a chaque passage a 0 du T restant clignotement de l'affichage 2 ème ligne. Après 4 ou 5 passages a 0 du T restant fermeture mais part ce détail ça fonctionne bien
Patrick
 

Attachments

  • 17522631317151325582108354781349.jpg
    17522631317151325582108354781349.jpg
    422.9 KB · Views: 2
Oui a l'ouverture seulement avec le dernier code 2 clignotements puis affichage fixe pendant environ 3 minutes puis fermeture ,a chaque passage a 0 du T restant clignotement de l'affichage 2 ème ligne. Après 4 ou 5 passages a 0 du T restant fermeture mais part ce détail ça fonctionne bien
Patrick
Bonjour,
Si il a plusieurs alternances entre T et 0 , il doit y avoir un pb de switch ou de prise en compte du switch. Il faudrait vérifier au moins au voltmètre que la tension est stable à 1 avant le fonctionnement du switch et passage à 0 en fin de course de la trappe.
Les R pullup internes ont peut être une valeur trop élevée pour le vérifier, il faudrait souder une R sur le PCB, ce qui est délicat ou sur une plaque véroboard.
MM
 
Entre T et O c'est normal , c'est entre F et T qu'il se passe beaucoup de temps une fois T affiché le mouvement est normal quelques secondes, mais je vais faire des mesures, les R pullup doivent avoir la même valeur pour tout ,et la il n'y as que la fermeture sud qui as un retard d'exécution
 
j'ai inversé les moteurs et fdc respectifs et contre toute attente ,fonctionnement parfait ouverture sud puis nord ,dans la seconde ,fermeture idem ,j'ai refait l'essai 3 fois pour confirmer , j'ai juste eu a inverser les fils de commande moteurs sinon ils tournaient dans le mauvais sens ,mais c'est jutes une histoire de raccordement par rapport a la fiche sur le pcb, c'est illogique ,mais parfois il faut faire abstraction de la logique , seul souci restant décompte de 10 s dure 20 s mais ce n'est pas un souci je vais régler le temps en fonction de ça , comme jlc n'as pas fait la sérigraphie j'inverse l'affichage sur le LCD et le tour est joué ,merci pour cette idée qui s'est avérée payante
patrick
 
j'ai inversé les moteurs et fdc respectifs et contre toute attente ,fonctionnement parfait ouverture sud puis nord ,dans la seconde ,fermeture idem ,j'ai refait l'essai 3 fois pour confirmer , j'ai juste eu a inverser les fils de commande moteurs sinon ils tournaient dans le mauvais sens ,mais c'est jutes une histoire de raccordement par rapport a la fiche sur le pcb, c'est illogique ,mais parfois il faut faire abstraction de la logique , seul souci restant décompte de 10 s dure 20 s mais ce n'est pas un souci je vais régler le temps en fonction de ça , comme jlc n'as pas fait la sérigraphie j'inverse l'affichage sur le LCD et le tour est joué ,merci pour cette idée qui s'est avérée payante
patrick
Ok, avant, ça ne fonctionnait pas et on ne savait pas pourquoi, maintenant ça fonctionne mais on ne sait toujours pas pourquoi.
On est resté en 4 MHz là. Je continue avec le pb des secondes.
MM
 
Bonjour,
Ok, restons en 16MHz. Si tu as le temps, et tu veux continuer dans la recherche, voici un test, uniquement sur le décompte des secondes .
Le décompte doit se faire seconde par seconde:

Code:
;TEST1 seoonde 13/07
#picaxe 20M2
#no_data
setfreq M16
symbol LCD=B.0
symbol Potar=C.7
symbol DSext=C.1
symbol DSint=C.2
symbol FCFS = pinC.6 ;Fin course fermeture sud (0=fermé)
symbol FCOS = pinC.5 ;fin course ouverture sud    (0=ouvert)
symbol FCFN = pinC.4
symbol FCON = pinC.3
symbol CTON = B.1 ;commande trappe ouverture nord
symbol CTFN = B.2 ;commande trappe fermeture nord
symbol CTOS = B.3
symbol CTFS = B.4
symbol pous=pinB.5 ;poussoir reset alarme
symbol flag=bit0
symbol Text=b1
symbol Tint=b2
symbol Cgn=b3
symbol hyster=b4
symbol Textmaj=b5
symbol Textmin=b6
symbol Tintmaj=b7
symbol Tintmin=b8
symbol cpt=b9        ;compteur
symbol TN=b10
symbol TS=b11
symbol pretime=w10
symbol Tmax=w11
symbol reste=w12
symbol cumul=w13
symbol baud=N2400_16
dirsC =%0
dirsB = %11111
pullup %111100000100000 ;pullup sur C.3 à C.6 et B.5
hyster=1        ;hystérésis +/- hyster
Tmax=60        ;0=pas de tempo
;*************************
pause 500 ;temps init LCD
serout LCD, baud,(254,1)
serout LCD, baud,(254,130,"int ext  Cgn TN TS",254,192,"T")
serout LCD, baud,(254,212,"Trestant: ",#reste," "  )

    do                    ;boucle principale TM=60s
        time=0
        pretime=1000    ;valeur init <>0   
        do
            ;pause 1   ;bug simu
            if time<>pretime then    ; 1 affichage/s   
                if Tmax>time then        ;sinon => <0
                    reste=Tmax-time    ;calcul reste
                else reste=0
                endif                   
                serout LCD, baud,(254,222,#reste," s "  )               
                pretime=time                   
            endif
        loop while reste>0   
    loop

MM
 
Bonjour Michel ça ok les secondes durent réellement un seconde , je regarderai ce soir pour essayer de comprendre ce que tu as changé
merci
patrick
 
Bonjour Michel ça ok les secondes durent réellement un seconde , je regarderai ce soir pour essayer de comprendre ce que tu as changé
merci
patrick
C'était le premier essai, qui ne fait que compter des secondes. On va aller doucement pour voir exactement où est le pb:
retour sur l'essai 4 qui fonctionnait
Code:
;regulation thermique sous sol 13/07/25
;ESSAI 4
#picaxe 20M2
setfreq M16
symbol LCD=B.0
symbol Potar=C.7
symbol DSext=C.1
symbol DSint=C.2
symbol FCFS = pinC.6 ;Fin course fermeture sud (0=fermé)
symbol FCOS = pinC.5 ;fin course ouverture sud    (0=ouvert)
symbol FCFN = pinC.4
symbol FCON = pinC.3
symbol CTON = B.1 ;commande trappe ouverture nord
symbol CTFN = B.2 ;commande trappe fermeture nord
symbol CTOS = B.3
symbol CTFS = B.4
symbol pous=pinB.5 ;poussoir reset alarme
symbol flag=bit0
symbol Text=b1
symbol Tint=b2
symbol Cgn=b3
symbol hyster=b4
symbol Textmaj=b5
symbol Textmin=b6
symbol Tintmaj=b7
symbol Tintmin=b8
symbol cpt=b9        ;compteur
symbol TN=b10
symbol TS=b11
symbol pretime=w10
symbol Tmax=w11
symbol reste=w12
symbol cumul=w13
symbol baud=N2400_16
dirsC =%0
dirsB = %11111
pullup %111100000100000 ;pullup sur C.3 à C.6 et B.5
hyster=1        ;hystérésis +/- hyster
Tmax=180        ;0=pas de tempo
;*************************
pause 500 ;temps init LCD
serout LCD, baud,(254,1)
serout LCD, baud,(254,130,"int ext  Cgn TN TS",254,192,"T")
serout LCD, baud,(254,212,"Trestant: ")   

    serout LCD, baud,(254,194,#Tint," ",254,198,#Text," ",254,203,#Cgn," ",254,207,TN,254,210,TS)
    reste=Tmax-time
    serout LCD, baud,(254,222,#reste," s "  )   
       
    do ;boucle principale
        time=0
        pretime=1000     
        do
           
            if time<>pretime then    ; 1 affichage/s   
                if Tmax>time then        ;sinon => <0
                    reste=Tmax-time    ;calcul reste
                else reste=0
                endif   
                gosub lectemp           
                serout LCD, baud,(254,194,#Tint," ",254,198,#Text," ",254,203,#Cgn," ",254,207,TN,254,210,TS)
                serout LCD, baud,(254,222,#reste," s "  )               
                pretime=time                   
            endif
        loop while reste>0
    ;on compare les tempés toutes les 600 s (10 mn)       
    loop

lectemp:
        ;gosub testFDC ; option test FDC
        readadc potar, Cgn ;lecture consigne sur C.7
        Cgn = 15 * Cgn /250 + 15 ; de 15 à 30 °C       
            readtemp Dsext,Text           
        Textmaj=Text+hyster    ;valeur majorée
        if Text>hyster then       
            Textmin=Text-hyster     ;valeur minorée
        else
            Textmin=Text            ;on bloque à 0   
        endif       
            readtemp DSint,Tint           
        Tintmaj=Tint+hyster    ;valeur majorée
        if Tint>hyster then       
            Tintmin=Tint-hyster    ;valeur minorée
        else Tintmin=Tint
        endif   
        return

MM
 
Last edited:
décompte plus lent 2 secondes environ affichage TN TS e avec un tréma patrick
Dans ce test, seul le décompte du temps compte 😄.
Précision: c'est 1 s ou 2s toutes les 2 s :c'est le temps ou l"affichage qui a un pb ?
De toute façon, le pb vient des readtemps qui prennent du temps. Il ne sert finalement à rien de lire la tempé toutes les secondes si on ne s'en sert que toutes les 30 mn. Donc un lecture toutes les 5 ou 10 mn serait suffisant. On garde 1 s pour la consigne
Modif à suivre...
MM
 
Bonjour,
Voici un nouvel essai du 14/07. Programme complet, avec des temps réduits:
Tmax =180 secondes , temps de cycle pour comparaison des tempé et mouvements des trappes
Temps entre mise à jour affichage des températures : 30s
La mise à jour de la consigne est sans délais (1s)
Le décompte du temps devrait se faire de s en s
Et si tout fonctionne, on changera les temps

Code:
;regulation thermique sous sol 14/07/25
;Gestion 2 moteurs et 4 FdC sur 20M2
;Tempsmax mouvement trappes 10s =>erreur FdC: reset par poussoir sur B.5
;TN=trappe Nord; TS=trappe Sud ;O=ouverte F=fermée
;Trappes en transit ;ni ouvert ni fermé => "T"
;Flag sur défaut FdC => arrêt jusqu'à reset
;Ajout hystérésis + moyenne sur 4 mesures
;Ajout temporisation entre comparaisons + affichage temps
;Ajout test FDC
#picaxe 20M2
setfreq M16
symbol LCD=B.0
symbol Potar=C.7
symbol DSext=C.1
symbol DSint=C.2
symbol FCFS = pinC.6 ;Fin course fermeture sud (0=fermé)
symbol FCOS = pinC.5 ;fin course ouverture sud    (0=ouvert)
symbol FCFN = pinC.4
symbol FCON = pinC.3
symbol CTON = B.1 ;commande trappe ouverture nord
symbol CTFN = B.2 ;commande trappe fermeture nord
symbol CTOS = B.3
symbol CTFS = B.4
symbol pous=pinB.5 ;poussoir reset alarme
symbol flag=bit0
symbol Text=b1
symbol Tint=b2
symbol Cgn=b3
symbol hyster=b4
symbol Textmaj=b5
symbol Textmin=b6
symbol Tintmaj=b7
symbol Tintmin=b8
symbol cpt=b9        ;compteur
symbol TN=b10
symbol TS=b11
symbol pretime=w10
symbol Tmax=w11
symbol reste=w12
symbol memo=w13
symbol baud=N2400_16
dirsC =%0
dirsB = %11111
pullup %111100000100000 ;pullup sur C.3 à C.6 et B.5
hyster=1        ;hystérésis +/- hyster
Tmax=180        ;0=pas de tempo
;*************************
pause 500 ;temps init LCD
serout LCD, baud,(254,1)
serout LCD, baud,(254,130,"int ext  Cgn TN TS",254,192,"T")
serout LCD, baud,(254,212,"Trestant: ",#reste," s "  )
;scant FdC MST
    
    pretime=1000
    gosub testFDC
    TN="T" : TS="T"
    if FCFS=0 then            ;C.6
            TS="F"
    elseif FCOS=0 then    ;C.5
            TS="O"
    endif
    if FCFN=0 then            ;C.4
            TN="F"
    elseif FCON=0 then     ;C.3
            TN="O"
    endif
    
    gosub lectemp    ;1èrelecture pour initialisation
    serout LCD, baud,(254,194,#Tint," ",254,198,#Text," ",254,203,#Cgn," ",254,207,TN,254,210,TS)
    reste=Tmax-time
    serout LCD, baud,(254,222,#reste," "  )        
    gosub compare    ;pas de tempo à la MST
        
    do ;boucle principale
        time=0        
        do
            if flag=1 then
                do loop while pous=1    ;appui
                do loop while pous=0    ;relachement pous
                serout LCD, baud,(254,148,"             "); raz alarme
                flag=0        ;raz flag
            endif            
                
            if time<>pretime then    ; 1 affichage/s
                readadc potar, Cgn ;lecture consigne sur C.7
                Cgn = 15 * Cgn /250 + 15 ; de 15 à 30 °C
                serout LCD,baud,(254,203,#Cgn," ")
                pretime=time
                memo=time//30
                if memo= 0 then         ;toutes les 30 s
                    gosub lectemp        
                    serout LCD, baud,(254,194,#Tint," ",254,198,#Text," ",254,207,TN,254,210,TS)
                endif
            endif    
        
            if Tmax>=time then        ;sinon => <0
                reste=Tmax-time    ;calcul reste
                serout LCD, baud,(254,222,#reste," s "  )    
            endif                
        loop while reste>0
    ;on compare les tempés toutes les 600 s (10 mn)
        gosub compare
    loop
    
lectemp:     
    ;gosub testFDC ; option test FDC
    readadc potar, Cgn ;lecture consigne sur C.7
    Cgn = 15 * Cgn /250 + 15 ; de 15 à 30 °C        
    readtemp Dsext,Text      
    Textmaj=Text+hyster    ;valeur majorée
    if Text>hyster then        
       Textmin=Text-hyster     ;valeur minorée
    else
       Textmin=0            ;on bloque à 0    
    endif       
    readtemp DSint,Tint                
    Tintmaj=Tint+hyster    ;valeur majorée
    if Tint>hyster then        
        Tintmin=Tint-hyster    ;valeur minorée
    else Tintmin=0    
    endif    
    return

testFDC:
    if FCFS=0 and FCOS=0 then
        serout LCD, baud,(254,148," DEFAUT FC SUD")
        do loop while pous=1
        do loop while pous=0
        reset
    endif
    if FCFN=0 and FCON=0 then
        serout LCD, baud,(254,148," DEFAUT FC NORD")
        do loop while pous=1
        do loop while pous=0
        reset
    endif    
    return

compare:            ;avec hystérésis
    if Tintmaj > Cgn and Textmin < Tint then ; ouverture trappe
        gosub ouvre
    elseif Tintmaj < Cgn and Textmin > Tint then
        gosub ouvre
    elseif Textmin > Cgn and Tintmin > Cgn then ;fermeture trappe
        gosub ferme
    elseif Tintmin < Cgn and Textmin <Tint then
        gosub ferme
    endif
    return

ouvre: ;C.3    
    if FCON =1 then    ;le fdc n'est pas en position ouverture (=0)
        high CTON ;commande ouverture trappe nord (5V)        
        time=0
        do
            if FCFN=1 then        ;le fdc n'est plus en position fermeture
                TN="T"
                serout LCD, baud,(254,207,TN)    ;donc on est en transit
            endif
        loop while FCON=1 and time<10 ;FCON=C.3 => trappe nord ouverte
        low CTON
        if time>= 10 then
            serout LCD, baud,(254,148," DEFAUT FCON")
            flag=1        ;flag mémo erreur
        else
            TN="O"        
            serout LCD, baud,(254,207,TN)
        endif        
    endif
    if FCOS=1 then        
        high CTOS ;sortie ouverture à 1 (5V)
        time=0
        do 
            if FCFS=1 then
                TS="T"
                serout LCD, baud,(254,210,TS)
            endif
        loop while FCOS=1 and time<10 ;FCOS=C.5 => porte ouverte
        low CTOS
        if time>= 10 then
            serout LCD, baud,(254,148," DEFAUT FCOS")
            flag=1
        else
            TS="O"
            serout LCD, baud,(254,210,TS)
        endif            
    endif
    return

ferme: ;C.1    
    if FCFN =1 then ;fermeture trappe nord
        high CTFN ;commande fermeture trappe nord à 1 (5V)
        time=0
        do
        if FCON=1 then
            TN="T"
            serout LCD, baud,(254,207,TN)
        endif
        loop while FCFN=1 and time<10 ;FCFN=C.4 => porte ouverte
        low CTFN
        if time>= 10 then
            serout LCD, baud,(254,148," DEFAUT FCFN")
            flag=1  
        else
            TN="F"
            serout LCD, baud,(254,207,TN)
        endif
    endif    
    
    if FCFS=1 then ;fermeture trappe sud
        high CTFS ;commande fermeture trappe sud à 1 (5V)
        time=0
        do
            if FCOS=1 then    
                TS="T"    
                serout LCD, baud,(254,210,TS)
            endif
        loop while FCFS=1 and time<10 ;FCFS = C.6
        low CTFS
        if time>= 10 then
            serout LCD, baud,(254,148," DEFAUT FCFS")
            flag=1
        else
            TS="F"
            serout LCD, baud,(254,210,TS)
        endif
    endif    
return

MM
 
Bonjour Michel toujours 2 secondes a chaque décompte du temps , j'étais parti pour ce projet sur un 08M2 et un programme tout simple et nous en sommes a un sacré programme qui occupe pas mal le 20M2 dont je suis toujours a essayer de tout comprendre , certaine chose je sais bien ce que je lis mais certaines je cherche le sens des écritures ,mais je vais finir par tout comprendre
patrick
 
Une confirmation pour que je comprenne bien : le décompte est bien de seconde en seconde,mais il y a deux s entre chaque affichage.
Je peux ajouter plus de commentaires..
Je ne sais pas ce qui cloche, on ne passe qu'une fois par 30 s dans lectemp , au simu , c'est OK, mais les temps d'exécution sont totalement différents, donc, ça ne veut rien dire.
Sinon, pour le reste, y a t il mise à jour des tempé toutes les 30 s? L'affichage des modifs Cgn en 1 s ? Mouvement des trappes en 180 s (combien si plus)?
On peut faire un essai à 4 MHz, mais je ne vois pas ce que ça peut changer...
MM
 
Oui c'est bien ça il y as deux secondes entre chaque nombres pour le reste je regarde ça ce soir, mais le décompte de 2 secondes a chaque nombres n'est pas gênant je le sais et je corrige en fonction
Patrick
 
Oui c'est bien ça il y as deux secondes entre chaque nombres pour le reste je regarde ça ce soir, mais le décompte de 2 secondes a chaque nombres n'est pas gênant je le sais et je corrige en fonction
Patrick
Même si ce n'est pas gênant, j'aurais aimé comprendre. Si ça peut attendre, je testerai en réel, un jour.
Et pour le reste ?
Je posterai un code avec les temps définitifs (30 mn et affichage tempé toutes les 10 mn) à 4 MHz, pour voir.
MM
 
En attendant, voici un code avec des valeurs réelles un Tmax=30 mn (1800s) et une mise à jour des tempé toutes les 5 mn (300s)
La vitesse est de 4 MHz, desfois que ça change quelque chose...
Code:
;regulation thermique sous sol 14/07/25
;Gestion 2 moteurs et 4 FdC sur 20M2
;Tempsmax mouvement trappes 10s =>erreur FdC: reset par poussoir sur B.5
;TN=trappe Nord; TS=trappe Sud ;O=ouverte F=fermée
;Trappes en transit ;ni ouvert ni fermé => "T"
;Flag sur défaut FdC => arrêt jusqu'à reset
;Ajout hystérésis + moyenne sur 4 mesures
;Ajout temporisation entre comparaisons + affichage temps
;Ajout test FDC
#picaxe 20M2
;setfreq M16
symbol LCD=B.0
symbol Potar=C.7
symbol DSext=C.1
symbol DSint=C.2
symbol FCFS = pinC.6 ;Fin course fermeture sud (0=fermé)
symbol FCOS = pinC.5 ;fin course ouverture sud    (0=ouvert)
symbol FCFN = pinC.4
symbol FCON = pinC.3
symbol CTON = B.1 ;commande trappe ouverture nord
symbol CTFN = B.2 ;commande trappe fermeture nord
symbol CTOS = B.3
symbol CTFS = B.4
symbol pous=pinB.5 ;poussoir reset alarme
symbol flag=bit0
symbol Text=b1
symbol Tint=b2
symbol Cgn=b3
symbol hyster=b4
symbol Textmaj=b5
symbol Textmin=b6
symbol Tintmaj=b7
symbol Tintmin=b8
symbol cpt=b9        ;compteur
symbol TN=b10
symbol TS=b11
symbol pretime=w10
symbol Tmax=w11
symbol reste=w12
symbol memo=w13
symbol baud=N2400
dirsC =%0
dirsB = %11111
pullup %111100000100000 ;pullup sur C.3 à C.6 et B.5
hyster=1        ;hystérésis +/- hyster
Tmax=1800        ;0=pas de tempo Tmax ducycle en s 30 mn=0x60=1800
;*************************
pause 500 ;temps init LCD
serout LCD, baud,(254,1)    ;Effacement LCD
serout LCD, baud,(254,130,"int ext  Cgn TN TS",254,192,"T")
serout LCD, baud,(254,212,"Trestant: " )
;scant FdC MST
    
    pretime=1000        ;ini prétime n'importe quoi <>0
    gosub testFDC
    TN="T" : TS="T"    ;valeurs à priori, modifiées ensuite suivant les tests
    if FCFS=0 then            ;C.6    trappeS en FCfermée
            TS="F"
    elseif FCOS=0 then    ;C.5    trappe S en FC ouverte
            TS="O"
    endif
    if FCFN=0 then            ;C.4
            TN="F"
    elseif FCON=0 then     ;C.3
            TN="O"
    endif
    
    gosub lectemp    ;1ère lecture pour initialisation
    readadc potar, Cgn     ;lecture consigne sur C.7
    Cgn = 15 * Cgn /250 + 15 ; de 15 à 30 °C mise à l'échelle
    serout LCD, baud,(254,194,#Tint," ",254,198,#Text," ",254,203,#Cgn," ",254,207,TN,254,210,TS)    
    gosub compare    ;première comparaison  ;pas de tempo à la MST
        
    do             ;boucle principale cycle =Tmax
        time=0    ;initialisation  compteur de secondes  time         
        do
            if flag=1 then            ;on a eu une alarme
                do loop while pous=1    ;appui
                do loop while pous=0    ;relachement pous
                serout LCD, baud,(254,148,"             "); raz alarme
                flag=0        ;effacement flag
            endif            
                
            if time<>pretime then    ; 1ère fois, pretime = 1000 => on entre dans if.Passage suivant au changement time
                readadc potar, Cgn     ;lecture consigne sur C.7
                Cgn = 15 * Cgn /250 + 15 ; de 15 à 30 °C mise à l'échelle
                serout LCD,baud,(254,203,#Cgn," ")    ;affichage Cgn
                pretime=time            ;pretime prend la valeur actuelle pour prochain test
                memo=time//300    ;memo= reste de la division de time par 600 (càd 600 ; 1200
                if memo= 0 then         ;toutes les 600 s
                    gosub lectemp        ;on va lire les valeurs et les afficher    
                    serout LCD, baud,(254,194,#Tint," ",254,198,#Text," ",254,207,TN,254,210,TS)
                endif
            endif            
            if Tmax>=time then        ;sinon valeur "négatives"
                reste=Tmax-time    ;calcul reste
                serout LCD, baud,(254,222,#reste," s "  )    ;affichage reste
            endif                
        loop while reste>0        ;On tourne jusqu'à reste=0
    ;on compare les tempés toutes les Tmax sec
        gosub compare        ;sub comparaison avec modif trappe séventuelles
    loop        ;fin de cycle Tmax
    
lectemp:  ;sub lecture des DS18B20 (toutes les 10 mn)     
    ;gosub testFDC ; option test FDC   
    readtemp Dsext,Text      
    Textmaj=Text+hyster    ;valeur majorée
    if Text>hyster then        
       Textmin=Text-hyster     ;valeur minorée
    else
       Textmin=0            ;on bloque à 0    
    endif       
    readtemp DSint,Tint                
    Tintmaj=Tint+hyster    ;valeur majorée
    if Tint>hyster then        
        Tintmin=Tint-hyster    ;valeur minorée
    else Tintmin=0    
    endif    
    return

testFDC:
    if FCFS=0 and FCOS=0 then        ;cofiguration impossible 
        serout LCD, baud,(254,148," DEFAUT FC SUD")
        do loop while pous=1
        do loop while pous=0
        reset
    endif
    if FCFN=0 and FCON=0 then
        serout LCD, baud,(254,148," DEFAUT FC NORD")
        do loop while pous=1
        do loop while pous=0
        reset
    endif    
    return

compare:            ;Comparaison avec hystérésis et mouvement trappes
    if Tintmaj > Cgn and Textmin < Tint then ; ouverture trappe
        gosub ouvre
    elseif Tintmaj < Cgn and Textmin > Tint then
        gosub ouvre
    elseif Textmin > Cgn and Tintmin > Cgn then ;fermeture trappe
        gosub ferme
    elseif Tintmin < Cgn and Textmin <Tint then
        gosub ferme
    endif
    return

ouvre: ;C.3    
    if FCON =1 then    ;le fdc n'est pas en position ouverture (=0)
        high CTON ;commande ouverture trappe nord (5V)        
        time=0
        do
            if FCFN=1 then        ;le fdc n'est plus en position fermeture
                TN="T"
                serout LCD, baud,(254,207,TN)    ;donc on est en transit
            endif
        loop while FCON=1 and time<10 ;FCON=C.3 => trappe nord ouverte
        low CTON
        if time>= 10 then
            serout LCD, baud,(254,148," DEFAUT FCON")
            flag=1        ;flag mémo erreur
        else
            TN="O"        
            serout LCD, baud,(254,207,TN)
        endif        
    endif
    if FCOS=1 then        
        high CTOS ;sortie ouverture à 1 (5V)
        time=0
        do 
            if FCFS=1 then
                TS="T"
                serout LCD, baud,(254,210,TS)
            endif
        loop while FCOS=1 and time<10 ;FCOS=C.5 => porte ouverte
        low CTOS
        if time>= 10 then
            serout LCD, baud,(254,148," DEFAUT FCOS")
            flag=1
        else
            TS="O"
            serout LCD, baud,(254,210,TS)
        endif            
    endif
    return

ferme: ;C.1    
    if FCFN =1 then ;fermeture trappe nord
        high CTFN ;commande fermeture trappe nord à 1 (5V)
        time=0
        do
        if FCON=1 then
            TN="T"
            serout LCD, baud,(254,207,TN)
        endif
        loop while FCFN=1 and time<10 ;FCFN=C.4 => porte ouverte
        low CTFN
        if time>= 10 then
            serout LCD, baud,(254,148," DEFAUT FCFN")
            flag=1  
        else
            TN="F"
            serout LCD, baud,(254,207,TN)
        endif
    endif    
    
    if FCFS=1 then ;fermeture trappe sud
        high CTFS ;commande fermeture trappe sud à 1 (5V)
        time=0
        do
            if FCOS=1 then    
                TS="T"    
                serout LCD, baud,(254,210,TS)
            endif
        loop while FCFS=1 and time<10 ;FCFS = C.6
        low CTFS
        if time>= 10 then
            serout LCD, baud,(254,148," DEFAUT FCFS")
            flag=1
        else
            TS="F"
            serout LCD, baud,(254,210,TS)
        endif
    endif    
return
MM
 
non rien de changé par contre ensuite j'ai rebranché les trappes et fdc respectifs dans leur position initiale et délais entre fermeture nord et sud environ 10 secondes , je suis têtu si ça fonctionne dans un sens pourquoi pas dans l'autre ,c'est illogique il n'y as aucune différence si ce n'est la longueur des câbles mais c'est la même pour l'ouverture et pour la fermeture , j'ai conserve le code #237 et j'ai passé la durée a 900 comme cela ça fait les 30 minutes
merci
patrick
 
Last edited:
non rien de changé par contre ensuite j'ai rebranché les trappes et fdc respectifs dans leur position initiale et délais entre fermeture nord et sud environ 10 secondes , je suis têtu si ça fonctionne dans un sens pourquoi pas dans l'autre ,c'est illogique il n'y as aucune différence si ce n'est la longueur des câbles mais c'est la même pour l'ouverture et pour la fermeture , j'ai conserve le code #237 et j'ai passé la durée a 900 comme cela ça fait les 30 minutes
merci
patrick
On peut inverser l'ordre des trappes N et S au niveau du code...
Pour les deux secondes, je verrai au test réel au simu tout fonctionne...
MM
 
J'avais inversé l'affichage du lcd trappe N et S ainsi que les défaut FDC O et F , mais j'ai voulu retester, j'ai déjà vu des problèmes comparables et parfois ça fonctionne sans explication logique, j'ai eu un boîtier avec un pcb a l'intérieur qui ne fonctionnait que ouvert j'ai finalement trouvé une contrainte déformait légèrement le pcb a la fermeture de la boîte, et suprême panne vicieuse une soudure imparfaite se décollait sous l'effet de la contrainte j'ai cherché un moment avant de trouver, mais dans nôtre cas le boîtier est ouvert et j'ai tout vérifié deux fois, de ton côté le code doit fonctionner donc il y as un os quelque part mais où?
Patrick
 
Back
Top