Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
[Programmation] La gestion de Fonction
-
HVDifusion
Débutant- Messages : 43
- Enregistré en : décembre 2015
[Programmation] La gestion de Fonction
HVDifusion a écrit :
Première chose ton ANSEL marche pas et le ANSELH non plus,je sais pas pourquoi.
Bonsoir,
la première chose à faire quand on ne sait pas comment utiliser une commande ou même si cette commande ou ressource est disponible dans le PIC, est d'aller ouvrir le fichier des définitions disponible dans tous compilateurs.
Par exemple chez MikroC il faut aller dans le répertoire -> MikroC Pro for PIC > Defs
Dans defs tu cherches ton µC, par exemple P16F628.c et tu y verras que ANSEL n'y est pas (en faisant un Edit puis Find).
S'il avait été disponible tu aurais vu comment il était déclaré et il t'aurait suffit de l'utiliser de la même manière.
Cette méthode est valable pour toutes les commandes et ressources de chaque PIC géré par le compilateur.
[Programmation] La gestion de Fonction
-
HVDifusion
Débutant- Messages : 43
- Enregistré en : décembre 2015
[Programmation] La gestion de Fonction
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bon j'ai essayer le programme,ça a l'air de fonctionné mais la led bleu fait des micro clignotement super faible.
Il faut qu'on soit sur que cela fonctionne avant d’aller plus loin. cela doit venir de ma routine de clignotement.
Tu parle de LED bleu ? sur quel broche ?
Le fait de faire modulo permet de sortir les chiffres pairs et impairs, mais j'ai pas testé en vrai . Apparemment ca fonctionne pas lol.
par exemple 2%2 donne 0 comme résultat .
ensuite 3%2 donne 0,5 donc normalement considéré comme "1" .
ensuite 4%2 donne 0
ensuite 5%2 donne 0,5 donc normalement considéré comme "1" .
mais ca n'as pas l'air de focntionner bizarre . Peut etre qu'il arrondi 0.5 en 0.
essaye en mettant un strictement supérieur pour voir.
Code : Tout sélectionner
//------------------------------------------------------------------------------
void clignotement()
{
if ((chrono%2)>0 )
{
Debug=0;
}
else
{
Debug=1;
}
}
Sinon
[Programmation] La gestion de Fonction
-
HVDifusion
Débutant- Messages : 43
- Enregistré en : décembre 2015
Salut,
Désolé j'ai beaucoup a faire en ce moment.
J'ai tester a nouveau le programme,j'ai modifier un peut le temps d'attente pour détecter l'impulsion et je l'ai passé a 1000ms pour avoir le temps de retirer puis de mettre le pontage.
Ici quand je simule l'impulsion la LED Debug s'allume et reste allumée.
Voici le code :
On va bien finir par débug,j'espère juste que le client ne va pas trop s'impatienté XD.
Désolé j'ai beaucoup a faire en ce moment.
J'ai tester a nouveau le programme,j'ai modifier un peut le temps d'attente pour détecter l'impulsion et je l'ai passé a 1000ms pour avoir le temps de retirer puis de mettre le pontage.
Ici quand je simule l'impulsion la LED Debug s'allume et reste allumée.
Voici le code :
Code : Tout sélectionner
// Definition PORTB Pin
#define VoltCheck PORTB.B2
#define Signal PORTB.B1
#define Debug PORTB.B4
// Set Variable
unsigned int compteur, chrono, pause1heure, pause15minutes, alarme3minutes , i ;
//------------------------------------------------------------------------------
void interrupt()
{
if (INTCON.T0IF == 1) // If TMR0 Overflowing
{
INTCON.T0IF = 0; // Réarmement du flag
TMR0 = 100; // Offset du timer0
compteur++; // 10ms time incrémente
if (compteur >= 100) // 1 seconde d'écoulée
{
Debug =~ Debug; // LED d'activitée
chrono++; // On icrémente le chrono
compteur = 0; // On raz time
Debug = 0;
}
}
}
//------------------------------------------------------------------------------
void clignotement()
{
if ((chrono%2)>0 )
{
Debug=0;
}
else
{
Debug=1;
}
}
//------------------------------------------------------------------------------
void main()
{
PORTB = 0; // PORTB en digital
TRISB = 0b00000100; // RB1 Out RB2 IN
PCON.B3 = 1; // 4Mhz oscillator
// configuration TIMER0
OPTION_REG = 0b10000101; // pull up disable,presc 1:64
TMR0 = 100;
INTCON = 0x80; // GIE activé, l'INT timer0 n'est pas encore activée
// Initialisation Variable
pause1heure = pause15minutes = alarme3minutes = chrono = compteur = i = 0 ;
Signal = 0;
for (i=0; i<=5; i++)
{
Signal =~ Signal; // on inverse la led
delay_ms (350);
}
//------------------------------------------------------------------------------
while(1){
if (VoltCheck == 1) // Contact maintenu
{
pause1heure = pause15minutes = alarme3minutes= chrono = compteur = 0 ;
T0IE_bit = 0; // On arrete le chrono
}
else
{
delay_ms(10); // Pause antirebond
if ((pause1heure==0) && (pause15minutes==0))
{
delay_ms(1000); // Pause detection d'impulsion
if (VoltCheck == 1) // C'était juste une impulsion
{
pause1heure = 1; // On fait une pause d'une heure
}
else // Le contact est toujours pas maintenu
{
pause15minutes = 1; // On attend 15 minutes
}
chrono = 0;
compteur = 0;
T0IE_bit = 1; // On lance le chrono
}
}
//------------------------- ATTENTE 1 HEURE --------------------------------
if ( pause1heure == 1 )
{
if (chrono >= 60) // l'attente d'une heure est finie
{
pause1heure = 0; // On arrete la pause d'une heure
T0IE_bit = 0; // On arrete le chrono
}
else
{
clignotement();
}
}
//------------------------- ATTENTE 15 MINUTES -----------------------------
if ( pause15minutes == 1)
{
if (chrono >= 15)
{
pause15minutes = 0; // On arrete la pause 15 minutes
alarme3minutes = 1; // On active l'alarme pour 3 minutes
Signal = 1; // On active l'alarme
chrono = 0; // RAZ du chrono
compteur = 0; // RAZ de l'offset
}
}
}
}
On va bien finir par débug,j'espère juste que le client ne va pas trop s'impatienté XD.
[Programmation] La gestion de Fonction
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
hello HVDifusion,
ravi d'avoir des news !
je regarde ça tout de suite ! car mon module GSM me donne beaucoup de fil a retordre !
Il ne tient qu'a toi d’accélérer ! Moi je suis chaud comme la braise ..... on verra plus tard pour ma commission
ravi d'avoir des news !
je regarde ça tout de suite ! car mon module GSM me donne beaucoup de fil a retordre !
On va bien finir par débug,j'espère juste que le client ne va pas trop s'impatienté XD.
Il ne tient qu'a toi d’accélérer ! Moi je suis chaud comme la braise ..... on verra plus tard pour ma commission
[Programmation] La gestion de Fonction
-
HVDifusion
Débutant- Messages : 43
- Enregistré en : décembre 2015
Salut,
Ben j'ai proposé ça au client pour lui faire plaisir car on avais rien en kit dans notre magasin d'électronique avec des fonctions aussi spécifique.
Mais javais précisé au client que je connaissais a peine les bases donc il étais prévenus,surtout qu'il a lui même complexifier les fonctions qui étais sensée être bien plus simple de base donc pas ma faute mdr.
Si tu veux une commission on s'arrangeras si tu veux :p.
Ben j'ai proposé ça au client pour lui faire plaisir car on avais rien en kit dans notre magasin d'électronique avec des fonctions aussi spécifique.
Mais javais précisé au client que je connaissais a peine les bases donc il étais prévenus,surtout qu'il a lui même complexifier les fonctions qui étais sensée être bien plus simple de base donc pas ma faute mdr.
Si tu veux une commission on s'arrangeras si tu veux :p.
[Programmation] La gestion de Fonction
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Alors le HIC c'est que je m'y perds et qu'il faut reprendre !
Ici j'ai supprimer la fonction 1 Heures pour ne garder que les 15minutes .
la led debug clignote quand le chrono tourne , pour nous montrer qu'il fonctionne !
La led signal sera notre témoin de fonctionnement !
Donc si Voltcheck passe à 0, on attend 1 seconde, si il est encore = 0 , alors on léve le drapeau de 15 minutes, on allume la led signal , on raz le chrono et le compteur .
Voltcheck = 0
pause15minutes = 1
Signal =
A chaque boucle on va vérifie si le chrono est >= 15. Quand il le devient supérieur on passe Signal à 1
Ici j'ai supprimer la fonction 1 Heures pour ne garder que les 15minutes .
la led debug clignote quand le chrono tourne , pour nous montrer qu'il fonctionne !
La led signal sera notre témoin de fonctionnement !
Donc si Voltcheck passe à 0, on attend 1 seconde, si il est encore = 0 , alors on léve le drapeau de 15 minutes, on allume la led signal , on raz le chrono et le compteur .
Voltcheck = 0
pause15minutes = 1
Signal =
A chaque boucle on va vérifie si le chrono est >= 15. Quand il le devient supérieur on passe Signal à 1
Code : Tout sélectionner
// Definition PORTB Pin
#define VoltCheck PORTB.B2
#define Signal PORTB.B1
#define Debug PORTB.B4
// Set Variable
unsigned int compteur, chrono, pause1heure, pause15minutes, alarme3minutes , i ;
//------------------------------------------------------------------------------
void interrupt()
{
if (INTCON.T0IF == 1) // If TMR0 Overflowing
{
INTCON.T0IF = 0; // Réarmement du flag
TMR0 = 100; // Offset du timer0
compteur++; // 10ms time incrémente
if (compteur >= 100) // 1 seconde d'écoulée
{
Debug =~ Debug; // LED d'activitée
chrono++; // On icrémente le chrono
compteur = 0; // On raz time
}
}
}
//------------------------------------------------------------------------------
void main()
{
PORTB = 0; // PORTB en digital
TRISB = 0b00000100; // RB1 Out RB2 IN
PCON.B3 = 1; // 4Mhz oscillator
// configuration TIMER0
OPTION_REG = 0b10000101; // pull up disable,presc 1:64
TMR0 = 100;
INTCON = 0x80; // GIE activé, l'INT timer0 n'est pas encore activée
// Initialisation Variable
pause1heure = pause15minutes = alarme3minutes = chrono = compteur = i = 0 ;
Signal = 0;
for (i=0; i<=5; i++)
{
Signal =~ Signal; // on inverse la led
delay_ms (350);
}
//------------------------------------------------------------------------------
while(1){
//------------------------- TEST VOLTCHECK -----------------------------
if (VoltCheck == 1) // Contact maintenu
{
delay_ms(50);
if (VoltCheck == 1)
{
pause1heure = pause15minutes = alarme3minutes= chrono = compteur = 0 ;
T0IE_bit = 0; // On arrete le chrono
}
else
{
delay_ms(50); // Pause antirebond
if ((pause1heure==0) && (pause15minutes==0))
{
delay_ms(1000); // Pause detection d'impulsion
if (VoltCheck == 1) // C'était juste une impulsion
{
pause1heure = 1; // On fait une pause d'une heure
pause15minutes = 0;
}
else // Le contact est toujours pas maintenu
{
pause15minutes = 1; // On attend 15 minutes
pause1heure = 0;
Signal = 0;
}
chrono = 0;
compteur = 0;
T0IE_bit = 1; // On lance le chrono
}
}
}
//------------------------- ATTENTE 15 MINUTES -----------------------------
if ( pause15minutes == 1)
{
if (chrono >= 15)
{
pause15minutes = 0; // On arrete la pause 15 minutes
alarme3minutes = 1; // On active l'alarme pour 3 minutes
Signal = 1; // On active l'alarme
chrono = 0; // RAZ du chrono
compteur = 0; // RAZ de l'offset
}
}
}
}
[Programmation] La gestion de Fonction
[Programmation] La gestion de Fonction
-
HVDifusion
Débutant- Messages : 43
- Enregistré en : décembre 2015
Oh easy pic le must mdr.
Si un jour je programme plus et mieux j'achète cette plaque elle est géniale.
Prend ton temps si tu veut le faire sur easy pic pas de soucis.
Et si je serais riche je te payerais chère pour que tu me donne des cours lol.
Bon j'ai tester le programme :
J'enlève le pontage,la LED DEBUG clignote avec COMPTEUR puis après 15s la LED SIGNAL passe a 1.
Comme tu la bien écrit dans le programme donc cette partie fonctionne correctement ainsi que le timer.
Si un jour je programme plus et mieux j'achète cette plaque elle est géniale.
Prend ton temps si tu veut le faire sur easy pic pas de soucis.
Et si je serais riche je te payerais chère pour que tu me donne des cours lol.
Bon j'ai tester le programme :
J'enlève le pontage,la LED DEBUG clignote avec COMPTEUR puis après 15s la LED SIGNAL passe a 1.
Comme tu la bien écrit dans le programme donc cette partie fonctionne correctement ainsi que le timer.
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 28 invités