Bonjour,
Je me présente Caenem, 16 ans, élève de 1ère STI2D option SIN ( Systèmes d'information et numérique) et nouveau sur le forum.
On a commencés à utiliser Mikro C, un logiciel pour programmer en C mais spécialisé dans les micro-contrôleurs PIC, et en parallèle on utilise ISIS pour faire des circuits électroniques.
Et je bloque sur un programme qui consiste à faire un chenillard de 8 led (sur le port B du pic 16F84) ( on fait défiler les led unes par unes), et d'utiliser 2 boutons ( sur le port A), le premier pour activer/désactiver le chenillard et le deuxième pour modifier la fréquence (si à ouvert 1 seconde, si fermé 2 secondes).
J'ai tout codé comme il faut ( enfin je trouve que le chenillard est vraiment pas optimisé mais je ne vois pas trop comment raccourcir le code étant novice), mais quand j'appuie sur le bouton 2, normalement le défilement doit durer 2 secondes au lieu d'une (si vous avez lu en haut ) le problème c'est que le chenillard "revient au début" et là le défilement dure 2 secondes.
Or, normalement ça ne doit pas revenir au début, il faut que ça continue mais en changeant la fréquence de défilement.
Voila, je pense avoir décrit suffisamment le problème, je vais mettre mon programme et mon circuit ISIS.
Et le schéma :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142 // Programme permettant de faire un chenillard de LED actionné par bouton et modifier sa fréquence #define Entree1 PORTA.F0 // Définition de S1 en entrée #define Entree2 PORTA.F1 //Définition de S2 en entrée #define Sortie PORTB //Définition des LED en sortie ////////////////////////////////////////////////////////// // prototypes de fonctions void init( ); // Procédure d’initialisation du PIC void allumage_led( ); // Sous programme de l'allumage ////////////////////////////////////////////////////////// // Fonction principale void main() { init (); // appel de la procédure « init » while (1) { allumage_led( ) ; // appel de la procédure « allumage_led » } } ////////////////////////////////////////////////////////// void init ( ) // sous programme d’initialistion du PIC, des variables, etc … { trisb = 0x00; // Port B en sortie portb = 0x00; // Toutes les LED sont à 0 à l'init trisa = 0xFF; // Port A en entrée } ////////////////////////////////////////////////////////// void allumage_led ( ) // sous programme qui fait clignoter la LED { if ( porta.F0 == 1) // Si le bouton 1 est fermé le chenillard tourne { if (porta.F1 && porta.F0) // Si le bouton 1 et 2 sont fermés le chenillard tourne avec un délai de 2000 ms { if ( porta.F1 && porta.F0) { portb.F0 = 0xFF; delay_ms(2000); portb.F0 = 0x00; } if ( porta.F1 && porta.F0) { portb.F1 = 0xFF; delay_ms(2000); portb.F1 = 0x00; } if ( porta.F1 && porta.F0) { portb.F2 = 0xFF; delay_ms(2000); portb.F2 = 0x00; } if ( porta.F1 && porta.F0) { portb.F3 = 0xFF; delay_ms(2000); portb.F3 = 0x00; } if ( porta.F1 && porta.F0) { portb.F4 = 0xFF; delay_ms(2000); portb.F4 = 0x00; } if (porta.F1 && porta.F0) { portb.F5 = 0xFF; delay_ms(2000); portb.F5 = 0x00; } if ( porta.F1 && porta.F0) { portb.F6 = 0xFF; delay_ms(2000); portb.F6 = 0x00; } if ( porta.F1 && porta.F0) { portb.F7 = 0xFF; delay_ms(2000); portb.F7 = 0x00; } } else // Sinon il tourne avec un délai normal de 1000 ms { if ( porta.F1 != porta.F0) { portb.F0 = 0xFF; delay_ms(1000); portb.F0 = 0x00; } if ( porta.F1 != porta.F0) { portb.F1 = 0xFF; delay_ms(1000); portb.F1 = 0x00; } if ( porta.F1 != porta.F0) { portb.F2 = 0xFF; delay_ms(1000); portb.F2 = 0x00; } if ( porta.F1 != porta.F0) { portb.F3 = 0xFF; delay_ms(1000); portb.F3 = 0x00; } if ( porta.F1 != porta.F0) { portb.F4 = 0xFF; delay_ms(1000); portb.F4 = 0x00; } if (porta.F1 != porta.F0) { portb.F5 = 0xFF; delay_ms(1000); portb.F5 = 0x00; } if ( porta.F1 != porta.F0) { portb.F6 = 0xFF; delay_ms(1000); portb.F6 = 0x00; } if ( porta.F1 != porta.F0) { portb.F7 = 0xFF; delay_ms(1000); portb.F7 = 0x00; } } } else // Sinon il s'éteint { portb = 0x00; } }
Merci
Partager