Bonjour à tous.

ci-joint un programme qui consiste à tester les sorties d'une extension 16bits en I2C (pas du tous sur que le programme soit fonctionnel, il est juste là pour vous montrer ce que je téléverse).

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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
//* Adapté a l'association d'une carte Arduino Nano 33 IOT et la carte palpeur .
//**************************************************************************
 
//***** La librairie "Adafruit_MCP4728.h" utilisée est celle qui se trouve
//         dans le répertoire où se trouve le programme "LectureCommandeWarmPool.ino"
 
 
#include "Adafruit_MCP4728.h"
#include <Wire.h>
 
//***** Déclaration des deux instances de DAC MCP4728 **********************
Adafruit_MCP4728 Dac1;
Adafruit_MCP4728 Dac2;
 
//***** Déclaration des quatre extensions de bus  ********************
#include <MCP23017.h>
 
// adresse I2C des extensions 16 bits MCP 23017
#define MCP1_23017_I2C_ADDRESS 0x20  // In
#define MCP2_23017_I2C_ADDRESS 0x26  // In
#define MCP3_23017_I2C_ADDRESS 0x27  // In
#define MCP4_23017_I2C_ADDRESS 0x25  // Out   
 
// Name Out Pins add 0x25
// Port A
const uint8_t Electrovanne = 0;      
const uint8_t Niv_Orp       = 1; 
const uint8_t Opt_Dij2      = 2;      
const uint8_t Debit           = 3; 
const uint8_t Sens_Verin   = 4;      
const uint8_t On_OFF_Verin = 5; 
const uint8_t Active_4_mA  = 6;      
const uint8_t Commut_RS    = 7; 
// Port B
const uint8_t Opt_Dij1     = 8;      
const uint8_t Covert       = 9; 
const uint8_t Niv_Ph       = 10;      
const uint8_t Niv_4        = 11; 
const uint8_t Niv_3        = 12;      
const uint8_t Niv_2        = 13; 
const uint8_t Niv_1        = 14;      
const uint8_t Com_Niv      = 15; 
//===============================
// Name In Pins add 0x20
// Port A
const uint8_t NO_3         = 1; 
const uint8_t NO_1         = 2;      
const uint8_t NO_5         = 3; 
const uint8_t NO_7         = 4;      
const uint8_t NO_9         = 5; 
//-----------------------------
// Name In Pins add 0x26
// Port A
const uint8_t NF_4         = 4;      
const uint8_t NO_14        = 5; 
const uint8_t NF_2         = 6;      
const uint8_t NO_12        = 7; 
// Port B
const uint8_t NO_11        = 8;      
const uint8_t NF_1         = 9; 
const uint8_t NO_13        = 10;      
const uint8_t NF_3         = 11; 
const uint8_t NO_15        = 12;      
const uint8_t NO_17        = 13; 
const uint8_t NO_19        = 14;      
const uint8_t NF_5         = 15; 
//-----------------------------
// Name In Pins add 0x27
// Port A
const uint8_t NF_6         = 0;      
const uint8_t NO_20        = 1; 
const uint8_t NO_18        = 2;      
const uint8_t NO_16        = 3; 
const uint8_t NO_10        = 5; 
const uint8_t NO_8         = 6;      
const uint8_t NO_6         = 7; 
// Port B
const uint8_t NO_2         = 8;      
const uint8_t NO_4         = 9; 
 
MCP23017 mcp1_23017 = MCP23017(MCP1_23017_I2C_ADDRESS);
MCP23017 mcp2_23017 = MCP23017(MCP2_23017_I2C_ADDRESS);
MCP23017 mcp3_23017 = MCP23017(MCP3_23017_I2C_ADDRESS);
MCP23017 mcp4_23017 = MCP23017(MCP4_23017_I2C_ADDRESS);
 
void setup() 
{
  // initialise les MCP 23017 
  Wire.begin(MCP1_23017_I2C_ADDRESS); 
  mcp1_23017.init();
 
  Wire.begin(MCP2_23017_I2C_ADDRESS); 
  mcp2_23017.init();
 
  Wire.begin(MCP3_23017_I2C_ADDRESS); 
  mcp3_23017.init();
 
  Wire.begin(MCP4_23017_I2C_ADDRESS); 
  mcp4_23017.init();
 
  // Configure then outputs pins
 
  for (int B=0; B<16; B++)
  {
   mcp4_23017.pinMode(B,OUTPUT); 
  }
 
  for (int B=0; B<16; B++)
  {
   mcp1_23017.pinMode(B,INPUT); 
   mcp2_23017.pinMode(B,INPUT); 
   mcp3_23017.pinMode(B,INPUT); 
  }
}
 
void loop() 
{
 
digitalWrite(LED_BUILTIN, HIGH); 
 
mcp4_23017.digitalWrite(Electrovanne,HIGH);
delay(200);
mcp4_23017.digitalWrite(Electrovanne,LOW);
delay(200);
 
mcp4_23017.digitalWrite(Niv_Orp,HIGH);
delay(200);
mcp4_23017.digitalWrite(Niv_Orp,LOW);
delay(200);
 
mcp4_23017.digitalWrite(Opt_Dij2,HIGH);
delay(200);
mcp4_23017.digitalWrite(Opt_Dij2,LOW);
delay(200);
 
mcp4_23017.digitalWrite(Debit,HIGH);
delay(200);
mcp4_23017.digitalWrite(Debit,LOW);
delay(200);
 
mcp4_23017.digitalWrite(Sens_Verin,HIGH);
delay(200);
mcp4_23017.digitalWrite(Sens_Verin,LOW);
delay(200);
 
mcp4_23017.digitalWrite(On_OFF_Verin,HIGH);
delay(200);
mcp4_23017.digitalWrite(On_OFF_Verin,LOW);
delay(200);
 
mcp4_23017.digitalWrite(Active_4_mA,HIGH);
delay(200);
mcp4_23017.digitalWrite(Active_4_mA,LOW);
delay(200);
 
mcp4_23017.digitalWrite(Commut_RS,HIGH);
delay(200);
mcp4_23017.digitalWrite(Commut_RS,LOW);
delay(200);
 
mcp4_23017.digitalWrite(Opt_Dij1,HIGH);
delay(200);
mcp4_23017.digitalWrite(Opt_Dij1,LOW);
delay(200);
 
mcp4_23017.digitalWrite(Covert,HIGH);
delay(200);
mcp4_23017.digitalWrite(Covert,LOW);
delay(200);
 
mcp4_23017.digitalWrite(Niv_Ph,HIGH);
delay(200);
mcp4_23017.digitalWrite(Niv_Ph,LOW);
delay(200);
 
mcp4_23017.digitalWrite(Niv_4,HIGH);
delay(200);
mcp4_23017.digitalWrite(Niv_4,LOW);
delay(200);
 
mcp4_23017.digitalWrite(Niv_3,HIGH);
delay(200);
mcp4_23017.digitalWrite(Niv_3,LOW);
delay(200);
 
mcp4_23017.digitalWrite(Niv_2,HIGH);
delay(200);
mcp4_23017.digitalWrite(Niv_2,LOW);
delay(200);
 
mcp4_23017.digitalWrite(Niv_1,HIGH);
delay(200);
mcp4_23017.digitalWrite(Niv_1,LOW);
delay(200);
 
mcp4_23017.digitalWrite(Com_Niv,HIGH);
delay(200);
mcp4_23017.digitalWrite(Com_Niv,LOW);
delay(200);
 
digitalWrite(LED_BUILTIN, LOW);   
delay(1000);
  }
MON PROBLEME :

Le code ci-dessus se compile et se téléverse sans problème sur un Arduino Nano, pas essayé fonctionellement.

L'Arduino que je dois utiliser est un NANO 33 IOT, J'en utilise depuis peu sur lequel j'ai compilé et téléversé des programmes d'essais sans problème de com entre le PC et l'Arduino 33 IO

J'ai donc voulu téléverser le programme ci-dessus dans le Nano 33 IOT. En fin de téléversement j'ai un message d'erreur m'indiquant qu'il est "impossible de trouver une carte sur le port sélectionné" et en effet je ne vois plus le port dans l'IDE Arduino.

Imaginant avoir fait une fausse manip (cassé la carte) avec le scope ou autre durant les essais sur la carte définitive, j'ai décidé d'essayer de programmer un second Arduino NANO 33 IOT et je l'ai branché sur le câble de liaison série (USB).
1° Ce second Arduino 33 IOT était mis sous tension que par l'USB pour la 1er fois.
2° J'ai constaté dans l'IDE que le port com sélectionné était correct.
3° J'ai commençai par téléverser un programme exemple le "blind",
4° Jusqu'à la tous était normal et c'est bien passé.

5° J'ai ensuite téléverser le programme ci-dessus et même chose qu'avec la 1er Nano33 IOT, en fin de téléversement le message "impossible de trouver une carte sur le port sélectionné"
6° Après ce téléversement le port sélectionné dans l'IDE ne l'était plus et il a aussi disparu de la liste de sélection, comme si le câble USB ou la carte n'était pas connecté.
7° Quand je connecte maintenant l'un des deux NANO 33 IOT, j'ai un message Windows qui me dit " périphérique inconnu" idem dans le gestionnaire de périphérique, il semblerai que les Arduino sur lesquels j'ai téléverser le programme ci-dessus, aient eus une incidence sur le hard des NANO 33 IOT.

Comment un programme peut il intervenir sur du hard ???

si quelqu'un a des idées , je suis preneur !

merci de votre aide.