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 ---
Forum général sur le langage C !

Modérateur : Jérémy

mikroc et les BP
nebukadnezare
Membre
Membre
Messages : 9
Enregistré en : octobre 2015

#1 Message par nebukadnezare » dim. 4 oct. 2015 17:33

bonjour a tous;
j'ai fait un petit décompteur a 4 dgit 7seg avec 4 BP (RESET , PLUS , MOINS , START)en mikroc.
Ma petite question concernant les BP et mikroc, est'il possible d'utilise un BP pour incrémenté (++) avec différente vitesse d’incrémentation. merci
Modifié en dernier par nebukadnezare le dim. 4 oct. 2015 18:07, modifié 1 fois.

mikroc e BP
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#2 Message par Jérémy » dim. 4 oct. 2015 17:43

Hello nebukadnezare ,

Tout d'abord bienvenue sur FantasPic.fr !

Je te propose de renommer ton titre qui contient une énorme erreur . "e" à la place de "et" ? cela ne donne pas envie de lire ton post, si déjà on a du mal à lire le titre. Je dis ça pour toi , pour que tu réussisse a obtenir la réponse que tu attends.

ta question est mal tournée à mon avis . Tu veux incrémenter ta valeur de compteur je suppose, en appuyant sur un BP . et tu souhaiterais changé la vitesse d'incrémentation ? si Oui comment veut faire cela, il y a de multiple façon !

Un appui ça incrémente doucement, pendant que ça incrémente un deuxième appui accélère un peu , puis un troisième accélère encore plus , et enfin un quatrième qui revient à la première vitesse ?

Sinon on laisse appuyé et la vitesse varie toute seule avec le temps d'appui ;
Appui sur le BP ça incrémente doucement, au bout de 5 seconde ça accélère , et bout de 10 secondes a fond les gamelles ?

Tout est possible suffit d'être précis !

PS: Merci de préciser ton PIC
C'est en faisant des erreurs, que l'on apprend le mieux !!!

mikroc et les BP
nebukadnezare
Membre
Membre
Messages : 9
Enregistré en : octobre 2015

#3 Message par nebukadnezare » dim. 4 oct. 2015 18:18

Bonjour Jérémy
tous d’abord désole pour l'erreur de frappe.
Pour ma question ta dernière proposition et celle que je veux a savoir plus le temps d'appuie et long et plus sa speed, bien sur avec des palier de 3 a 5 second d'appuie.
Les autres options sont intéressante a étudier.Merci

sur ta 5eme ligne je suppose que --en appuyant "qur" veut dire "sur" :)
pour le pic16f877A en Mikroc

mikroc et les BP
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#4 Message par Jérémy » dim. 4 oct. 2015 18:48

Pour ma question ta dernière proposition et celle que je veux a savoir plus le temps d'appui et long et plus sa speed, bien sur avec des palier de 3 a 5 second d'appuie.

Ok je pense que c'est faisable assez facilement !

Encore une fois je vois deux solutions différentes pour arriver à a peu prêt le même résultat . Un peu comme sur les réveils sur nos tables de nuit .

Soit c'est la vitesse de l'incrémentation qui augmente donc le temps entre deux incrémentations , soit on augmente la valeur de l'incrémentation , c'est à dore qu'au lieu d'avancer de 1 en 1 , on augmente de 3 en 3 , puis de dix en dix par exemple .

As-tu déjà écrit un bout de code ? si OUI merci de le publier comme ça on comprendras mieux la finalité
C'est en faisant des erreurs, que l'on apprend le mieux !!!

mikroc et les BP
nebukadnezare
Membre
Membre
Messages : 9
Enregistré en : octobre 2015

#5 Message par nebukadnezare » dim. 4 oct. 2015 19:07

Code : Tout sélectionner

unsigned short mask (unsigned short num){
switch(
num)
{
case 
0:return         0x7e;
case 
1:return         0x30;
case 
2:return         0x6d;
case 
3:return         0x79;
case 
4:return         0x33;
case 
5:return         0x5b;
case 
6:return         0x5f;
case 
7:return         0x70;
case 
8:return         0x7F;
case 
9:return         0x73;

//case 0: PORTB        = 63; break;
//case 1: PORTB        = 6; break;
//case 2: PORTB        = 91; break;
//case 3: PORTB        = 79; break;
//case 4: PORTB        = 102; break;
//case 5: PORTB        = 109; break;
//case 6: PORTB        = 125; break;
//case 7: PORTB        = 7; break;
//case 8: PORTB        = 127; break;
//case 9: PORTB        = 111; break;
}
}
#define plus PORTD.B0
#define moins PORTD.B1
#define start PORTD.B2
#define TMAX 9999
#define TMIN 0

unsigned int count 0;
unsigned int count1 0;
unsigned int count2 0;
unsigned int count3 0;
unsigned int count4 0;
unsigned int meme 2;
unsigned int nombre;
////unsigned int a_mem;
unsigned short i;
unsigned int oldstate;
void Interrupt(){

                
                
                
                
count4= (count/1000)%10;             // AFFICHAGE 0000
                
count3= (count/100)%10;
                
count2 = (count/10)%10;
                
count1 count%10;
                if(
i==0) {PORTA 0xf7portb=mask(count1);}  //0xfe direct
                
if(i==1) {PORTA 0xfbportb=mask(count2);}  //0xfd
                
if(i==2) {PORTA 0xfdportb=mask(count3);}  //0xfb
                
if(i==3) {PORTA 0xfeportb=mask(count4);}  //0xf7
                
i++;if (i==4i=;
                
INTCON 0xA0;
                
TMR0   6;
                 }


void main(void)
{
  
OPTION_REG   0x82;
  
TMR0         6;
  
INTCON       0xA0;
  
count= (EEPROM_Read(0x01)<<1);
  
count  |=EEPROM_Read(0x00);


TRISA 0x00;
TRISB 0x00;
PORTA 0x00;        // RA3 RA2 RA1 RA0 (Common Cathode)
PORTB 0x00;        // dpgfedcba (Common Cathode)
TRISD 0xff;        // input button
PORTD 0x00;
TRISC 0x00;        // OUTPUT LED
PORTC 0x00;
           while(
1) {

           if(
plus==0){delay_ms(100);if(plus==0);
           if(
count<TMAX)  count++;}                           // BP PLUS TEMPS


           
if(moins==0){delay_ms(100);if(moins==0)                         //BP MOINS TEMPS
           
if(count>TMINcount--;}
           
           
           if (
Button(&PORTD05000)) {oldstate 1;delay_ms(10);        //CONDITION POUR UTILISE LE BP PLUS ET MOINS
           
if (oldstate && Button(&PORTD15000))                        //POUR UNE MEMORISATION
             
{
               
EEPROM_Write(0x00count);                                  // MEMORISATION DES VALEURS
               
delay_ms(10);
               
EEPROM_Write(0x01count>>1);
               
delay_ms(10);oldstate 0;}}

          
          if(
start==0)                                                     // BP DEBUT DECOMPTAGE
          
count--; delay_ms(1000);
                {if (
count == TMIN)                                        // CONDITION
                
{PORTC=0xff;                                               // ACTIVATION RELAY.
                
delay_ms(2000);                                            // ...2S
                
count= (EEPROM_Read(0x01)<<1);
                
count  |=EEPROM_Read(0x00);
                
PORTC=0;
                 } } }
}


désole.
Modifié en dernier par nebukadnezare le dim. 4 oct. 2015 19:36, modifié 2 fois.

mikroc et les BP
nebukadnezare
Membre
Membre
Messages : 9
Enregistré en : octobre 2015

#6 Message par nebukadnezare » dim. 4 oct. 2015 19:14

je vient juste de le finir avec le remerciement de "Mike118" pour résoudre le problème de la mémorisation en utilisons le BP PLUS suivie de MOINS et sa marche ,le truck c'est que je ne sait pas si mon code est bien ou pas ? (au passage je suis vraiment débutant en programmation) , j'ai remarquer que l’incrémentation en PLUS++ et plus lente de la décrémentation MOINs-- , d'ou je cherche a accéléré les incrémentations.
Si toute fois il y a des améliorations je t'en prie.

mikroc et les BP
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#7 Message par Jérémy » dim. 4 oct. 2015 19:21

je me dois d'être chiant : mais il faut lire ceci. j'ai mis exprès des règles "raccourcies" dans l'encadré en rouge . Les règles du forum .

Merci d’éditer ton POST avec le programme et de le placer dans des balises [code=php]Ton programme ici sans l'espace[ /code]

je ne connais pas de "Mike118" ! oops

Si je comprends bien, ton problème à été résolu ?
Si tu débute ce forum est fait pour toi !

Je regarde ton programme mais je suis moi même en plein apprentissage, j'ai quelques notions de bases.

PS : mode chiant On, fait attention à la tournure de tes phrases, c'est limite compréhensible ! Une petite re-lecture avant "d'envoyer"
C'est en faisant des erreurs, que l'on apprend le mieux !!!

mikroc et les BP
nebukadnezare
Membre
Membre
Messages : 9
Enregistré en : octobre 2015

#8 Message par nebukadnezare » dim. 4 oct. 2015 19:34

Tu sais le code chiant; il accélère l'apprentissage t’inquiète.

Pour mike118 il est sur un autre forum.

pour le code ok j'ai trouver .

Le problème a été résolue au niveau de l'utilisation de 2 boutons pour mémorisé.

Ce qui me reste et de : 1 - pourquoi la vitesse des incrémentations + et - sont différentes dans mon code ?.
2- il me faut l’accélération des incrémentations comme tu a propose avec un appuie de plus en plus long.

mikroc et les BP
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#9 Message par Jérémy » dim. 4 oct. 2015 20:50

Je n'en suis pas encore rendu , à l’écriture et à la lecture en EEPROM, je ne pourrais pas t'aider dans cette partie.

Le tout premier conseils concerne l’indentation de programme . Il faut faire un effort pour que ce soit plus lisible et compréhensible pour une tierce personne .

Par exemple à la place d'ecrire ceci

Code : Tout sélectionner

if(plus==0){delay_ms(100);if(plus==0);
           if(count<TMAX)  count++;}


Il est préférable d'ecrire ceci , même si ce que tu as écris est compris par le compilateur sans problème, cela facilite grandement le débogage future.

Code : Tout sélectionner

if(plus==0){
                 delay_ms(100);
                 if(plus==0);
                       if(count<TMAX)
                         count++;
            }                     


Ainsi tu aurais remarqué que tu avais un ; en trop sur la 3iéme ligne.

Sinon je ne vois pas pourquoi la décrémentation est plus rapide que l'incrémentation ! Bizarre

As -tu testé en réel ce programme ?

N'hésite pas à gaver de commentaire , surtout quand on débute . Par exemple, à combien est réglé ton interruption sur le TMR0 ? une seconde ?
Dans ton interruption tu fais à mon avis trop de chose . il faut dissocier ton interruption qui est le débordement de ton Timer0 avec la tache à traiter c'est à dire l'affichage des chiffres .

Ne prends pas tout au pied de la lettre , je débute aussi, mais un expert va peut être passé par la !

L'idée serait quand ton BP est appuyé, on créer une boucle qui incrémente un compteur afin de déterminer le temps d'appui sur le BP. une fois une certaine valeur de "compteur" atteinte cela signifie que ça fait un moment qu'il est appuyé donc on accélère la cadence en diminuant une pause pour la mise à jour de l'affichage .

Voila l'idée

Mais il manque des détails sur le fonctionnement général du décompteur . par exemple il décompte en secondes ?
pourquoi enregistrer une valeur ? pour remettre a l'allumage ?
Je pense qu'il te faut plus de fonctions .

Une fonction réglage, donc sans timer , puis une fonction main "décomptage" qui décompte avec interruption sur TIMER0.
Je veux bien faire le programme mais il me faut des réponses
C'est en faisant des erreurs, que l'on apprend le mieux !!!

mikroc et les BP
nebukadnezare
Membre
Membre
Messages : 9
Enregistré en : octobre 2015

#10 Message par nebukadnezare » dim. 4 oct. 2015 23:46

oui j'ai déjà fait ma carte et c'est toujours le même problème de vitesse. je comprend pas.

Pour le décomptage il est en seconde.

La sauvegarde de la dernière valeur c'est comme une boucle de travail ; faut pas a chaque fois remettre le temps.

Sinon c'est un pic16f877A a 8Mhz le TMR0 je l'ai calculer avec le TIMER CALCULATOR et régler a 1ms.
voila pour les infos .


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 44 invités