de quelle circuit?J'ai fait le schéma de la doc (figure 8: hot ligne switching)
A+
-----
de quelle circuit?J'ai fait le schéma de la doc (figure 8: hot ligne switching)
A+
Pour le MOC3041, pour pouvoir envoyer ou non le 220V en sortie.
a+
Tu as mis quoi comme charge? Une ampoule?
Et elle est éclairée en permanence?
Ben faudrait faire des mesure à l'oscillo, mais c'est dangereux. Il faudrait savoir pourquoi ton triac est toujours conducteur (commande de la gachette).
Ca m'embête quand même niveau sécurité. Il n'y a pas moyen de travailler en 24V?
A+
Heu en fait j'ai testé sans charge pour l'instant et j'ai toujours les 220V entre les 2 bornes où je suis censé brancher l'objet (une ampoule par exemple).
Sinon pour la sécurité c'est clair que c'est pas top vu que ca n'a pas l'air de fonctionner, je vais tester avec une plus faible tension...
Sinon je viens de tester le microcontroleur, j'ai changé quelques trucs dans le programme (mais sur la gestion de la touche * pas des fonctions "basiques") et j'ai changé dans le configuration du uc j'avais laissé monitor mode et je suis passé à user mode (j'ai laissé activé maskable CPU interrupts) et lors la mise sous tension j'ai 8 des 9 sorties à 5v et une autre (PTD5) à 0V hors lors de l'initialisation des entrés j'ai bien choisi 1 logique pour toutes les sorties. Sinon lorsque j'appui sur une touche j'ai bien le code du MT8870 qui entre sur les 4 entrées du microcontroleur mais les sorties ne changent pas...
Pourtant j'ai vérifié 10 fois le programme et rien ne me choque...
a+
Si tu as un peu le temps de m'aider, voici mon programme:
/* MODULE interface1 */
/* Including used modules for compiling procedure */
#include "Cpu.h"
#include "Bits1.h"
#include "Bits2.h"
#include "Bits3.h"
#include "Bits4.h"
/* Include shared modules, which are used for whole project */
#include "PE_Types.h"
#include "PE_Error.h"
#include "PE_Const.h"
#include "IO_Map.h"
/* Définition des noms des entrées/sorties */
#define Q1 PTD_PTD6
#define Q2 PTD_PTD7
#define Q3 PTB_PTB5
#define Q4 PTB_PTB6
#define S1 PTD_PTD4
#define S2 PTD_PTD5
#define S3 PTD_PTD2
#define S4 PTD_PTD3
#define S5 PTB_PTB0
#define S6 PTB_PTB1
#define S7 PTB_PTB2
#define S8 PTB_PTB3
#define S9 PTB_PTB4
/* Déclaration des variables utilisées */
int t_1,t_2,t_3,t_4,t_5,t_6,t_7,t_ 8,t_9,t_etoile=0,t_dieze;
int duree=0,actif=0;
/* Fonction Timer1 permettant d'effectuer un comptage de 0.5 seconde */
void Timer1(void){
/* Nombre à atteindre pour une durée de 0.5 seconde
Bus à 8Mhz, prédiviseur par 64, valeur souhaitée 0.5 seconde
Calcul: 0.5s/(1/8Mhz * 64) = 62500
0.5s car timer 16 bits donc nombre maximum = 65535 */
T1MOD=62500;
/* Configuration du Timer1 (de gauche à droite)
0: initialisation à 0 de l'état représentant la fin du comptage
1: activation des interruptions
0: activation du compteur
1: initialisation du timer à 0
0: aucune signification
110: prédiviseur par 64 (permet une grande précision) */
T1SC=0b01010110;
}
/* Fonction activée lors des interruptions de la fonction précédente
permettant de compter jusqu'à 10 secondes */
void interrupt 6 _TimerOverflow_1(void){
/* Compte le nombre de fois que 0.5 seconde s'est écoulée depuis
l'activation du timer */
duree++;
/* Réinitialisation du timer à 0 */
T1SC_TOF = 0;
/* Si 10 secondes se sont écoulées: réinitialisation de duree à 0 et
arrêt de la mémorisation de la touche * et du timer (sinon le timer
est relancé pour 0.5s supplémentaire */
if (duree==20){
duree = 0;
actif = 0;
T1SC_TSTOP = 1;
}
}
/* Programme principal */
void main(void)
{
/*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
PE_low_level_init();
/*** End of Processor Expert internal initialization. ***/
/* Désactive le watchdog (permet de faire un reset automatique
en cas de problème) */
CONFIG1_COPD = 1;
/* Détection de la touche saisie par l'utilisateur */
if(Q4==0 && Q3==0 && Q2==0 && Q1==1){
t_1 = 1;
}else{
t_1 = 0;
}
if (Q4==0 && Q3==0 && Q2==1 && Q1==0){
t_2 = 1;
}else{
t_2 = 0;
}
if (Q4==0 && Q3==0 && Q2==1 && Q1==1){
t_3 = 1;
}else{
t_3 = 0;
}
if (Q4==0 && Q3==1 && Q2==0 && Q1==0){
t_4 = 1;
}else{
t_4 = 0;
}
if (Q4==0 && Q3==1 && Q2==0 && Q1==1){
t_5 = 1;
}else{
t_5 = 0;
}
if (Q4==0 && Q3==1 && Q2==1 && Q1==0){
t_6 = 1;
}else{
t_6 = 0;
}
if (Q4==0 && Q3==1 && Q2==1 && Q1==1){
t_7 = 1;
}else{
t_7 = 0;
}
if (Q4==1 && Q3==0 && Q2==0 && Q1==0){
t_8 = 1;
}else{
t_8 = 0;
}
if (Q4==1 && Q3==0 && Q2==0 && Q1==1){
t_9 = 1;
}else{
t_9 = 0;
}
if (Q4==1 && Q3==0 && Q2==1 && Q1==1) {
if (actif == 0){
t_etoile = 1;
}
}
if (Q4==1 && Q3==1 && Q2==0 && Q1==0){
t_dieze = 1;
}else{
t_dieze = 0;
}
/* Attention: activation du relais avec un niveau logique bas et désactivation
du relais avec un niveau logique haut */
/* Si la touche * est saisie on lance un timer de 10s pendant lequel on
mémorise que cette touche a été saisie */
if (t_etoile == 1){
Timer1();
actif = 1;
t_etoile = 0;
}
/* Si la touche * n'a pas été saisie dans les 10 dernières secondes et
qu'une touche comprise entre 1 et 9 est saisie alors activation du relais
correspondant */
if (actif == 0){
if(t_1 == 1){
S1 = 0;
}
if(t_2 == 1){
S2 = 0;
}
if(t_3 == 1){
S3 = 0;
}
if(t_4 == 1){
S4 = 0;
}
if(t_5 == 1){
S5 = 0;
}
if(t_6 == 1){
S6 = 0;
}
if(t_7 == 1){
S7 = 0;
}
if(t_8 == 1){
S8 = 0;
}
if(t_9 == 1){
S9 = 0;
}
}
/* Si la touche * a été saisie dans les 10 dernières secondes et qu'une
touche comprise entre 1 et 9 est saisie alors désactivation du relais
correspondant et arrêt de la mémorisation de la touche * */
if (actif == 1){
if(t_1 == 1){
S1 = 1;
actif=0;
}
if(t_2 == 1){
S2 = 1;
actif=0;
}
if(t_3 == 1){
S3 = 1;
actif=0;
}
if(t_4 == 1){
S4 = 1;
actif=0;
}
if(t_5 == 1){
S5 = 1;
actif=0;
}
if(t_6 == 1){
S6 = 1;
actif=0;
}
if(t_7 == 1){
S7 = 1;
actif=0;
}
if(t_8 == 1){
S8 = 1;
actif=0;
}
if(t_9 == 1){
S9 = 1;
actif=0;
}
}
/* Si la touche # est saisie: désactivation de l'ensemble des relais */
if (t_dieze == 1){
S1 = 1;
S2 = 1;
S3 = 1;
S4 = 1;
S5 = 1;
S6 = 1;
S7 = 1;
S8 = 1;
S9 = 1;
}
/*** Processor Expert end of main routine. DON'T MODIFY THIS CODE!!! ***/
for(;{}
/*** Processor Expert end of main routine. DON'T WRITE CODE BELOW!!! ***/
} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/
/* END interface1 */
Merci !
S'il n'y a pas de charge, le triac ne peut pas être passant.Heu en fait j'ai testé sans charge pour l'instant et j'ai toujours les 220V entre les 2 bornes où je suis censé brancher l'objet (une ampoule par exemple).
Ton programme ne peut pas fonctionner, enfin si, mais une seule fois car une fois qu'il sera dans la boucle for ( ; ; ) à la fin, il n'en sortira plus.
A+
J'avais pensé au problème de la charge mais c'est dangereux d'avoir du 220V entre les bornes si rien n'est branché dessus non ?Envoyé par JackS'il n'y a pas de charge, le triac ne peut pas être passant.
Ah...moi je pensais que c'était un truc à lui pour qu'il fasse le programme tout le temps...Envoyé par JackTon programme ne peut pas fonctionner, enfin si, mais une seule fois car une fois qu'il sera dans la boucle for ( ; ; ) à la fin, il n'en sortira plus.
Il faut donc que je rajoute un while(1) dans mon main alors...
Merci beaucoup pour ton aide !!!
Ah ben il ne veut pas de mon while(1) il me dit que la condition est toujours valide (logique ca...lol)
Ben non, c'est inutile le for ( ; ; ) est équivalent à while (1).Il faut donc que je rajoute un while(1) dans mon main alors...
A+
C'est normal. Mais ça n'est qu'un warning, ce qui n'empêche pas la compilation du programme.Ah ben il ne veut pas de mon while(1) il me dit que la condition est toujours valide (logique ca...lol)
C'est pareil pour le for ( ; ; ) {
}
A+
Heu...et je fais comment alors pour qu'il fasse mon programme en boucle si je met pas de while(1) et qu'il reste bloqué dans le for?
Je met le main dans cette boucle ? mais c'est marqué don't modify this code...
ben tu y mets la partie du programme qui scrute en permanence le code généré par le 8870.
A+
Ok donc en fait je met ce qui scrute les touches et également ce qui active ou non les relais, bref tout à part l'initialisation.
Par contre pour les relais, enfin moc + triac, je viens d'essayer et même si je met rien en entré du moc l'ampoule s'allume...
J'ai vérifié 15 fois la doc et ce que j'ai câblé et je vois pas de différence pourtant, à part si les brochages du moc ou du triac ne sont pas les mêmes que dans les docs que j'ai téléchargé...mais ca m'étonnerais...
Merci
a+
Bonjour,
J'ai un peu testé en enlevant les différent liens qu'il y a entre le MOC et le triac et en fait la lumière ne s'allume plus lorsque j'enlève la résistance de 330 ohms qu'il y a entre la gachette du triac (et la broche 4 du MOC) et la broche A2 du triac.
Et comme j'avais déja enlevé le lien entre la borche 6 du MOC et le 220V on dirait que ca passe entre la gachette et A2 via cette resistance...
Pourtant la résistance n'a pas l'air morte,elle donne toujours 330 ohms à l'ohmmètre et j'ai bien vérifié le brochage du triac sur la doc et ca correspond...
En plus c'est un schéma typique qu'il y a dans la doc du MOC c'est pas un truc que moi j'ai fait...bizar bizar...
a+
Je viens de tout rebrancher pour voir si c'était bien ca le problème, et en fait quand j'ai branché la lumière ne sait pas allumée et quand j'ai mis le 5V sur le MOC la lumière s'est allumée....le seul problème c'est qu'après coup j'ai vu que j'avais oublié de refaire le lien entre la broche 4 du MOC et la gachette du triac et que les 2 résistances de 330 et 360 ohms qui sont sur les broches 4 et 6 du MOC ont fumée....
Donc avec ma connerie j'ai pu voir que le MOC fonctionne ...par contre je ne sais pas pourquoi ca ne marche pas alors qu'il n'y a que 2 résistances et 1 triac derrière (sans compter la résistance et condo en parallèle mais ca c'est pas obligatoire)
Il est anormal que les résistances aient fumé. Il doit y avoir un problème pas évident dans ton montage.le seul problème c'est qu'après coup j'ai vu que j'avais oublié de refaire le lien entre la broche 4 du MOC et la gachette du triac et que les 2 résistances de 330 et 360 ohms qui sont sur les broches 4 et 6 du MOC ont fumée....
Donc avec ma connerie j'ai pu voir que le MOC fonctionne
Le MOC peut passer jusqu'à 60mA. Disons 50mA pour assurer. Il faudrait trouver une charge que le MOC pourrait directement commander, sans le triac de puissance.
Sinon, je ne vois plus quoi te conseiller. A distance, c'est pas simple.
A+
Oui effectivement il y a un problème quelque part mais je ne vois pas ce que ca pourrait être non plus...
Je vais laisser ca un peu de côté pour l'instant, je vais essayé de faire marcher le microncontroleur...
D'ailleur j'avais mis une partie du programme dans le for à la fin et à la compilation ce con il m'a supprimé tout ce que j'avais mi dedans !!! Heureusement que j'avais une sauvegarde, j'ai mis un while(1) comme j'avais pensé au départ et je vais essayer comme ca.
En tout cas merci pour ton aide !
Je procède pourtant toujours comme ça et je n'ai jamais eu ce problème.D'ailleur j'avais mis une partie du programme dans le for à la fin et à la compilation ce con il m'a supprimé tout ce que j'avais mi dedans !!!
Mais si un while te rassure, n'hésite pas.
A+
Bon ben ca ne marche toujours pas, sur les 9 sorties elles sont toutes à 0 sauf la 3ème (PTD2) alors qu'elles devraient être toutes à 1 au début et l'envoi des différents codes en entrés ne changent rien.
En plus je viens de remarquer un autre problème, le MT8870 garde le code en sortie en permanence et donc ca me pose un problème pour la gestion de la touche * (je voulais qu'il ait 10 secondes apres avoir tapé * pour entrer le numero de la sortie à désactivé, mais s'il ne tape rien pendant ces 10 secondes et qu'il tape de nouveau * pour relancer les 10 secondes ben ca ne marchera pas vu que le code n'aura pas changé entre les 2 appuis...)
Je commence à désespérer la...
a+
Quoi que pour ce dernier problème j'ai peut être trouvé une solution.
D'après la doc du MT8870 lorsqu'un nouveau code est présent et décodé TOE=1.
Le composant envoie le code en sortie si STD=1.
Il suffit donc que je relie STD à TOE au lieu de relier TOE à +5V.
Comme ca dès qu'un nouveau code est présent il me l'envoi en sortie et au bout d'un certain temps STD passe à 0 et donc désactive les sorties.
Cette solution marcherait pour les 2 solutions (à base de logique (pour le rapport...) et le microcontroleur).
Pour le microcontroleur je pourrais également envoyer sur la dernière entrée qui me reste STD comme ca je pourrais savoir quand un nouveau code arrive et j'ai juste à modifier le code en conséquence (malgré que le programme ne marche pas...cette plaque est maudite je crois...).
Bonjour,
en fait je vais simplement faire une détection d'une nouvelle touche en mettant STD sur une entré du microcontroleur.
Par contre je viens de voir en essayant la fonction "debug" dans le logiciel qu'il me fait une erreur quand j'essai de désactiver le "watchdog".
Il me dit : Error: Error - CONFIG register can be written only once after RESET.
Pour le désactiver j'avais mi au début du main: CONFIG1_COPD = 1;
Par contre si j'enleve ca, le uc va me faire des resets automatique lors de l'attente d'une nouvelle touche si j'ai bien compri, non ?
Attente de la saisie d'une touche
while(new_touche == 0){}
Par contre j'ai pas encore pu tester sans pour essayer car la pile du programmteur est un peu fatiguée...
Sinon depuis j'ai pas trouvé le problème du uc, il ne fait rien lorsque je lui envoi qqc en entré...
a+
C'est qu'il y a déjà eu une écriture dans ce registre depuis le reset.Il me dit : Error: Error - CONFIG register can be written only once after RESET.
Comment est initialisé "new_touche"?while(new_touche == 0){}
A+
Bonjour,
Ok et sinon ca peut se désactiver directement depuis processor expert ?Envoyé par JackC'est qu'il y a déjà eu une écriture dans ce registre depuis le reset.
J'ai fait : #define new_touche PTB_PTB7Envoyé par JackComment est initialisé "new_touche"?
a+
Oui, surement.Ok et sinon ca peut se désactiver directement depuis processor expert ?
A+
Pour le watchdog dans processor expert, c'est marqué que ca valeur initial est à 1 (donc désactivé) mais apres reset il est à 0 (donc activé).
Le "problème" c'est que je ne peux pas changer la valeur dans le tableau.
Par contre j'ai vu qu'il laisse le choix de le laisser activer dans processor expert ou de choisir "used by external device" et c'est marqué à côté "disabled for usage in PE" donc ca devrait à priori le désactiver et je pourrais laisser la commande dans le .c non ?
a+
Edit : ah ben non j'ai toujours l'erreur...
je ne maîtrise pas processor expert et je n'ai pas trop le temps de fouiller dans ses options pour l'instant.
Trouve où le registre a été configuré dans les fichiers générés par processor expert, et vérifie que le cop est bien désactivé.
A+
Bonjour,
D'après ce que j'ai trouvé il est bien initialisé à 1 mais il passe à 0 lors d'un reset.
Mais logiquement vu que le reset est câblé à +5v et que le watchdog est désactivé à l'initilisation il ne devrait pas y avoir de reset donc ca devrait être bon.
Merci pour ton aide !
a+
il y a toujours un reset à la mise sous tension.
A+
Ah ben ca va va poser un p'tit problème alors, faut que je regarde encore où je peux modifier ca alors...
Merci
a+