Régularisation thermique sous sol

Bonjour Michel la nuit porte conseil si comme tu me le dit le timer est dérèglé c'est a cause d'un conflit , si le 7805 chauffe c'est surement a cause de ce même conflit qui engendre une consommation
Bonjour,
Non, c'est pas le code, à part un condo chimique monté à l'envers (et qui risque d'exploser), il n'y a aucune raison que le régulateur chauffe, le µC et le LCD ne consomment que quelques dizaines de mA et les moteurs sont alimentés avant lui. enlève le 20M2, le L293 et le LCD pour voir. Mesure le 5V.
J'ai regardé le code #159, elle est où la modif ?
MM
 
Last edited:
J'ai tout débranché du pcb sauf l'alimentation et j'ai comparé avec un autre pcb il y as un échauffement,et des que je branche le LCD il monte en température, je reprends mes recherches après le weekend , j'ai vérifié mes condos sont bien montés difficile de se tromper avec le négatif en massif et des condos marqués, mais si c'est comme avec le red des thermocouples qui ne correspond pas au fil rouge !! Marquage erroné sur les condos chinois, je vais les retirer un par un j'aurais une réponse
Patrick
 
J'ai tout débranché du pcb sauf l'alimentation et j'ai comparé avec un autre pcb il y as un échauffement,et des que je branche le LCD il monte en température,
Non, débranche rien, si ils sont dans le bon sens , ok
J'ai pas tout compris. "il y a un échauffement et dès que je branche le LCD il monte en température". Qu'est ce qui monte en t° ? Le régulateur quand on branche le LCD ?
Maintenant, le régulateur chute 7V, faudrait mesurer la conso, mais avec 300mA, ça fait 2 W, normal que ça chauffe ...un peu
Dans cette doc, le courant leds typique est plus de 500mA => 3,5 W. j'en ai vu d'autres à 250mA...A vérifier
MM
 
Last edited:
Bonjour,
Non, c'est pas le code, à part un condo chimique monté à l'envers (et qui risque d'exploser), il n'y a aucune raison que le régulateur chauffe, le µC et le LCD ne consomment que quelques dizaines de mA et les moteurs sont alimentés avant lui. enlève le 20M2, le L293 et le LCD pour voir. Mesure le 5V.
J'ai regardé le code #159, elle est où la modif ?
MM
Ici compare: ;avec hystérésis
;si Tint > consigne et Text < Tint => ouvert Ex : Tint=20 Cgn=15 Text=10
;si Tint < consigne et Text > Tint => ouvert Ex : Tint=10 Cgn=15 Text=20
;si Tint > consigne et Text > Tint => fermé Ex : Tint=20 Cgn=15 Text=30
;si Tint < consigne et Text < Tint => fermé Ex : Tint=10 Cgn=15 Text=5
;if Tint > Cgn and Text < Tint then ; ouverture trappe
if Tintmaj > Cgn and Textmin < Tint then ; ouverture trappe
gosub ouvre
;elseif Tint < Cgn and Text >Tint then
elseif Tintmaj < Cgn and Textmin > Tint then
gosub ouvre
;elseif Tint > Cgn and Text > Cgn then ;fermeture trappe
elseif Textmin > Cgn and Tintmin > Cgn then ;fermeture trappe
gosub ferme
;elseif Tint < Cgn and Text <Tint then
elseif Tintmin < Cgn and Textmin <Tint then
gosub ferme
endif
return
 
Non, débranche rien, si ils sont dans le bon sens , ok
J'ai pas tout compris. "il y a un échauffement et dès que je branche le LCD il monte en température". Qu'est ce qui monte en t° ? Le régulateur quand on branche le LCD ?
Maintenant, le régulateur chute 7V, faudrait mesurer la conso, mais avec 300mA, ça fait 2 W, normal que ça chauffe ...un peu
Dans cette doc, le courant leds typique est plus de 500mA => 3,5 W. j'en ai vu d'autres à 250mA...A vérifier
MM
J'ai fait un câble pour brancher mon contrôleur sur le circuit d'alimentation comme ça je pourrais mesurer le courant, mais sur le pcb de mon chauffage solaire il n'y a pas de chaleur et le circuit d'alimentation est identique à celui ci
Patrick
 
J'ai fait un câble pour brancher mon contrôleur sur le circuit d'alimentation comme ça je pourrais mesurer le courant, mais sur le pcb de mon chauffage solaire il n'y a pas de chaleur et le circuit d'alimentation est identique à celui ci
Patrick
Le régulateur chauffe. Si il ne chauffe plus en débranchant le LCD, c'est peut être normal, en fonction de la conso éclairage qui semble très variable selon modèle. Un petit radia sur le 7805 règlera le pb.
Si le pb des inégalités semble réglé, très bien.
MM
 
Je regarde ça après le weekend en famille chez les enfants ,le seul problème restant c'est le décompte des secondes qui durent 12 secondes chacune
Patrick
 
Je regarde ça après le weekend en famille chez les enfants ,le seul problème restant c'est le décompte des secondes qui durent 12 secondes chacune
Patrick
Ah oui, je sais pourquoi, c'est le serout qui freine time.
L'affichage du serout perturbe la variable time, chaque affichage lui fait perdre du temps, et en 1s, et à16 Mhz, il y en a beaucoup
La mise à jour de l'affichage est maintenant limitée à 1 affichage par seconde, ça devrait aller mieux
Voici une correction du défaut, j'ai repris ta sub compare (je comprends pas tout, mais si ça convient) :
La tempo est à 180 s pour essai
Code:
;regulation thermique sous sol 05/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_16
dirsC =%0
dirsB = %11111
pullup %111100000100000 ;pullup sur C.3 à C.6 et B.5
hyster=1        ;hystérésis +/- hyster
Tmax= 0        ;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," "  )
;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
    gosub compare    ;pas de tempo à la MST
    do ;boucle principale
        time=0
        pretime=time
        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            
            gosub lectemp            
            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
    ;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
        cumul=0
        for cpt=1 to 4            ;moyenne sur 4 mesures
            readtemp Dsext,Text
            pause 200
            cumul= cumul+Text
        next
        Text=cumul/4
        Textmaj=Text+hyster    ;valeur majorée
        if Text>hyster then        
            Textmin=Text-hyster     ;valeur minorée
        else
            Textmin=0            ;on bloque à 0    
        endif
        cumul=0
        for cpt=1 to 4
            readtemp DSint,Tint
            pause 200
            cumul= cumul+Tint
        next
        Tint=cumul/4            
        Tintmaj=Tint+hyster    ;valeur majorée
        if Tint>hyster then        
            Tintmin=Tint-hyster    ;valeur minorée
        else Tintmin=0    
        endif
        serout LCD, baud,(254,194,#Tint," ",254,198,#Text," ",254,203,#Cgn," ",254,207,TN,254,210,TS)
        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
 
Last edited:
Bonsoir Michel nous allons finir par y arriver , j'obtiens toujours un résultat, c'est la un de mes défauts je suis obstiné en ne renonce jamais, lorsque je rentre je règle le problème d' échauffement du 7805 par élimination, je vais trouver d'où vient la conso et éventuellement y remédier avec un radiateur comme tu me dis j'en ai quelques uns,de recup
Patrick
 
Mais j'ai l'impression que la vitesse du décompte n'est pas régulière, ce matin je passe devant le LCD il restait 160 quelques minutes plus tard je repasse il venait de passer a 0 alors qu'avant il fallait une bonne demi-heure
Patrick
 
Bonjour,
Ah...j'y retourne...
Mais c'est pourtant là le pb
MM
Oui, normal, j'ai oublié un serout sur les deux dans la boucle.
Code:
;regulation thermique sous sol 07/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_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," "  )
;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,222,#reste," s "  )      
    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          
            gosub lectemp          
            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,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)
        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
        cumul=0
        for cpt=1 to 4            ;moyenne sur 4 mesures
            readtemp Dsext,Text
            pause 200
            cumul= cumul+Text
        next
        Text=cumul/4
        Textmaj=Text+hyster    ;valeur majorée
        if Text>hyster then      
            Textmin=Text-hyster     ;valeur minorée
        else
            Textmin=0            ;on bloque à 0  
        endif
        cumul=0
        for cpt=1 to 4
            readtemp DSint,Tint
            pause 200
            cumul= cumul+Tint
        next
        Tint=cumul/4          
        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
 
Last edited:
Merci je n'arrive pas à voir ce que tu as modifié , je suis au parc de loisirs avec les enfants,je n'ai que mon téléphone, a la maison je compare entre mon pc et mon téléphone ou même j'imprime c'est plus lisible
Patrick
 
Merci je n'arrive pas à voir ce que tu as modifié , je suis au parc de loisirs avec les enfants,je n'ai que mon téléphone, a la maison je compare entre mon pc et mon téléphone ou même j'imprime c'est plus lisible
Patrick
La différence est dans la position des serout. Deux serout, un nouveau pour afficher le reste et celui des températures.
En 1 s, le code fait des centaines de boucles et autant d'affichage qui ralentissent "time".
Maintenant, on affiche seulement quand time change de valeur, et les perturbations sur time sont insensibles.
Cherche les lignes serout, pour comparer.
MM
 
effectivement j'ai trouvé ce qui est changé au niveau des serout . mais si j'arrivais a peut prés a comprendre ce que tu écrivait ,la je n'ai pas encore compris
 
je ne sais pas trop mais es ce normal
serout LCD, baud,(254,212,"Trestant: ",#reste," " )
serout LCD, baud,(254,222,#reste," s " )
serout LCD, baud,(254,222,#reste," s " )
la première ligne ne place pas le reste au même endroit
patrick
 
je ne sais pas trop mais es ce normal
serout LCD, baud,(254,212,"Trestant: ",#reste," " )
serout LCD, baud,(254,222,#reste," s " )
serout LCD, baud,(254,222,#reste," s " )
la première ligne ne place pas le reste au même endroit
patrick
Ben non, c'est pas normal, je regarde, mais au simu, tout fonctionne normalement.
Tu devrais "normalement" voir les secondes défiler s par s.
MM
 
Ben non, c'est pas normal, je regarde, mais au simu, tout fonctionne normalement.
Tu devrais "normalement" voir les secondes défiler s par s.
MM
Je reposte le code, le simu fonctionne et je ne vois pas pourquoi ce serait différent en réel et je ne peux plus rien tester actuellement.
En cas de problème, on fera un essai de la boucle principale seule, pour voir ce pb de secondes
Code:
;regulation thermique sous sol 07/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_16
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,"Trestant: ")
;scan FdC MST
    ;time=1
    ;pretime=0
    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," s "  )        
    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            
            gosub lectemp            
            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,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)
        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
        cumul=0
        for cpt=1 to 4            ;moyenne sur 4 mesures
            readtemp Dsext,Text
            pause 200
            cumul= cumul+Text
        next
        Text=cumul/4
        Textmaj=Text+hyster    ;valeur majorée
        if Text>hyster then        
            Textmin=Text-hyster     ;valeur minorée
        else
            Textmin=0            ;on bloque à 0    
        endif
        cumul=0
        for cpt=1 to 4
            readtemp DSint,Tint
            pause 200
            cumul= cumul+Tint
        next
        Tint=cumul/4            
        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 j'ai rentré le code #181 pas de changement ,le changement de consigne aussi est lent 7 a 8 secondes, cela ne pourrai t'il pas provenir de la picaxe, je peux toujours essayer avec une autre , c'est peut être une bêtise, mais c'est la méthode de dépannage que j'ai l'habitude d'utiliser ,par élimination tant que j'ai de quoi remplacer je le fais, mais si tu penses que c'est inutile dit le moi,car pas vraiment évident a changer dans la boîte
Patrick
 
Bonjour Michel j'ai rentré le code #181 pas de changement ,le changement de consigne aussi est lent 7 a 8 secondes, cela ne pourrai t'il pas provenir de la picaxe, je peux toujours essayer avec une autre , c'est peut être une bêtise, mais c'est la méthode de dépannage que j'ai l'habitude d'utiliser ,par élimination tant que j'ai de quoi remplacer je le fais, mais si tu penses que c'est inutile dit le moi,car pas vraiment évident a changer dans la boîte
Patrick
Bonjour,
C'est inutile.
On va faire d'autres essais
MM
 
Oui, parce que ça DOIT fonctionne
Essai 1
Code:
;ESSAI 1
#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=0      
        do
        pause 1
                    ;gosub lectemp          
            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,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)
        ;gosub compare
    loop

On doit voir varier le temps toutes les secondes
Le "pause 1" parce que le simu fonctionne mal sans. Si ça fonctionne, on l'enlève
MM
 
Ok, on joute la lecture des capteurs

Code:
;ESSAI 2
#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=0       
        do
                gosub lectemp           
                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,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
        cumul=0
        for cpt=1 to 4            ;moyenne sur 4 mesures
            readtemp Dsext,Text
            pause 200
            cumul= cumul+Text
        next
        Text=cumul/4
        Textmaj=Text+hyster    ;valeur majorée
        if Text>hyster then       
            Textmin=Text-hyster     ;valeur minorée
        else
            Textmin=0            ;on bloque à 0   
        endif
        cumul=0
        for cpt=1 to 4
            readtemp DSint,Tint
            pause 200
            cumul= cumul+Tint
        next
        Tint=cumul/4           
        Tintmaj=Tint+hyster    ;valeur majorée
        if Tint>hyster then       
            Tintmin=Tint-hyster    ;valeur minorée
        else Tintmin=0   
        endif   
        return
MM
 
c'est la que ça freine décompte lent comme avant
patrick
Essai3 : mesures simplifiées des readtemp 1 seule mesure au lieu d'une moyenne sur 4 avec pauses
Code:
;ESSAI 3
#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=0        
        do
                gosub lectemp            
                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,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
 
ça freine toujours
patrick
ça viendrait des readtemp.
Voir si c'est la variable temp qui est ralentie ou l'affichage (décompte de 2 d'un coup par ex)
Code:
;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=0       
        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
 
voici le retour sur le LCD il manque quelques informations
patrick
Oui, on va remettre le total. En cas d'intabilité de lecture, on retentera une moyenne
Cycle sur 2 mn pour essai
Code:
;regulation thermique sous sol 08/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_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,"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
MM
 
Oui, on va remettre le total. En cas d'intabilité de lecture, on retentera une moyenne
Cycle sur 2 mn pour essai
Code:
;regulation thermique sous sol 08/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_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,"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
MM
Ok je fais ça demain matin , apparemment un détail en plus ou en moins ça change tout ,en ce moment je fais de grosses journées 7 h 18h30 donc je suis moins réactif
Patrick
Patrick
 
Bonjour Michel programme rentré ça décompte normalement je vais surveiller le fonctionnement mais ouverture dans un premier temps correcte ,la réponse aux changements de consigne plus rapide quelques secondes , fermeture correcte mais délais de 1 a 2 minutes entre les deux trappes, ce n'est génant , c'est juste un retour d'information. merci
patrick
 
Last edited:
Bonjour Michel programme rentré ça décompte normalement je vais surveiller le fonctionnement mais ouverture dans un premier temps correcte ,la réponse aux changements de consigne plus rapide quelques secondes , fermeture correcte mais délais de 1 a 2 minutes entre les deux trappes, ce n'est génant , c'est juste un retour d'information. merci
patrick
Bonjour,
Je ne comprends pas ces délais d'affichage consigne, normalement, c'est 1 s .Idem pour le mouvement des trappes. Dommage que je puisse rien tester en ce moment.
Voir à l'usage et en l'état. Curieux quand même, ces délais causés par readtemp...
A suivre
MM
 
Bonjour Michel , ça tourne bien je vais laisser vivre , une question sur PE6 est il possible de supprimer l'historique des fichiers lorsque je vais sur recent j'ai tous les essais et j'aimerais bien n'avoir que ce qui fonctionne, j'ai bien essayé de chercher sur l'aide, mais problème de langue c'est en British, je voulais aussi récupérer les codes qui tournent sur les picaxes mais j'ai lu un post qui dit que ce n'est pas possible, c'est dommage car ça peut être utile de savoir ce qui fonctionne,si on as perdu les sauvegardes
Patrick
 
Bonjour,
Je ne vais jamais dans cette liste et je ne sais pas si elle est gérable. Je fais des répertoires par sujet, et je fais le tri dans ces répertoires. Mais je ne suis pas un champion du rangement. Donc, "Enregistrer sous" et on peut supprimer le fichiers non ouverts.
J'aurais aimé tester le code, je ne comprends pas ce délais entre les mouvements de trappes, dans le code, ils se suivent.
MM
 
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
 
Back
Top