Всем привет! Я новичек в программировании Ардуино и очень нужна помощь в доработке кода... Бьюсь уже месяца 4 с этим кодом и никак не получается запустить его, чтобы одновременно измерял 2-4 пары лан кабеля.
Причем если измерять чисто конденсаторы, то можно измерять одновременно все 4 конденсатора и все норм показывает.
По отдельности каждый из 4 каналов измеряет длину любой одной витой пары нормально, но как только подключаю одновременно вторую и более пар, все показания показывают непонятно что.
Например:
Подключаю одну пару ЛАН кабеля на 34 метра к одному из входов измерителя, измерение показывает 1500 пф, но когда подключаю одновременно вторую пару ко второму входу измерителя, показания падают до 40-50 пф на обоих входах... С четырьмя одновременно подключенными парами происходит тоже самое, на всех 4 каналах показания в 40-50 пф.
---------------------------
Измеряемые емкости подключаются:
1канал: A3 - D6
2канал: A1 - D8
3канал: A2 - D7
4канал: A0 - D9
-----------------------------
Скетч:
#include <SPI.h>
#include <Adafruit_GFX.h> // include adafruit graphics library
#include <Adafruit_PCD8544.h>
// Software SPI (slower updates, more flexible pin options):
// pin 7 - Serial clock out (SCLK)
// pin 6 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
//Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
// Hardware SPI (faster, but must use certain hardware pins):
// SCK is LCD serial clock (SCLK) - this is pin 13 on Arduino Uno
// MOSI is LCD DIN - this is pin 11 on an Arduino Uno
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(5, 4, 3);
// ADC reference voltage / calibration value
#define V_REF 5.045
const int IN_PIN = A3;
const int OUT_PIN = 6;
const int IN_PIN2 = A1;
const int OUT_PIN2 = 8;
const int IN_PIN3 = A2;
const int OUT_PIN3 = 7;
const int IN_PIN4 = A0;
const int OUT_PIN4 = 9;
const float IN_CAP_TO_GND = 70.00;
const float R_PULLUP = 34.80;
const int MAX_ADC_VALUE = 1023;
void setup() {
display.clearDisplay(); // Очищаем дисплей.
display.begin(); // Инициализируем дисплея.
display.display();
pinMode(IN_PIN, OUTPUT);
pinMode(OUT_PIN, OUTPUT);
pinMode(IN_PIN2, OUTPUT);
pinMode(OUT_PIN2, OUTPUT);
pinMode(IN_PIN3, OUTPUT);
pinMode(OUT_PIN3, OUTPUT);
pinMode(IN_PIN4, OUTPUT);
pinMode(OUT_PIN4, OUTPUT);
}
///////////////////////////////////КОНЕЦ(VOID SETUP)////////////////////////////
//-----------------------------НАЧАЛО(1СТР. ИЗМЕРЕНИЕ ЕМКОСТИ)--------------------------//
void loop()
{
display.setCursor(5, 0);
display.print("TyT:");
display.setCursor(5, 8);
display.print("TaM:");
display.setCursor(28, 0);
display.print("1");
display.setCursor(35, 0);
display.print("2");
display.setCursor(42, 0);
display.print("3");
display.setCursor(49, 0);
display.print("4");
display.setCursor(56, 0);
display.print("5");
display.setCursor(63, 0);
display.print("6");
display.setCursor(70, 0);
display.print("7");
display.setCursor(77, 0);
display.print("8");
display.setCursor(0, 16);
display.print("(1-2)=");
display.setCursor(0, 24);
display.print("(3-6)=");
display.setCursor(0, 32);
display.print("(4-5)=");
display.setCursor(0, 40);
display.print("(7-8)=");
/////////////////////////////////1 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ///////////////////////////////
pinMode(IN_PIN, INPUT);
digitalWrite(OUT_PIN, HIGH);
int val = analogRead(IN_PIN);
digitalWrite(OUT_PIN, LOW);
if (val < 1000)
{
pinMode(IN_PIN, OUTPUT);
float capacitance = (float)val * IN_CAP_TO_GND / (float)(MAX_ADC_VALUE - val);
display.setCursor(36, 16);
display.print(capacitance, 0);
display.setCursor(72, 16);
display.print("pF");
if (capacitance < 45) {
display.setCursor(28, 8);
display.print("-");
display.setCursor(35, 8);
display.print("-");
}
else if (capacitance > 45) {
display.setCursor(28, 8);
display.print("|");
display.setCursor(35, 8);
display.print("|");
}
}
else
{
pinMode(IN_PIN, OUTPUT);
pinMode(OUT_PIN, INPUT_PULLUP);
unsigned long u1 = micros();
unsigned long t;
int digVal;
do
{
digVal = digitalRead(OUT_PIN);
unsigned long u2 = micros();
t = u2 > u1 ? u2 - u1 : u1 - u2;
}
while ((digVal < 1) && (t < 40000L));
pinMode(OUT_PIN, INPUT);
val = analogRead(OUT_PIN);
digitalWrite(IN_PIN, HIGH);
int dischargeTime = (int)(t / 1000L) * 5;
delay(dischargeTime);
pinMode(OUT_PIN, OUTPUT);
digitalWrite(OUT_PIN, LOW);
digitalWrite(IN_PIN, LOW);
float capacitance = +(float)t / R_PULLUP / log(2.84 - (float)val / (float)MAX_ADC_VALUE);
if (capacitance > 10.0)
{
display.setCursor(36, 16);
display.print("switch");
display.setCursor(28, 8);
display.print("1");
display.setCursor(35, 8);
display.print("2");
}
else
{
display.setCursor(36, 16);
display.print(capacitance, 0);
display.setCursor(72, 16);
display.print("nF");
display.setCursor(28, 8);
display.print("|");
display.setCursor(35, 8);
display.print("|");
}
}
///////////////////////////////2 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ////////////////////////////
pinMode(IN_PIN2, INPUT);
digitalWrite(OUT_PIN2, HIGH);
int val2 = analogRead(IN_PIN2);
digitalWrite(OUT_PIN2, LOW);
if (val2 < 1000)
{
pinMode(IN_PIN2, OUTPUT);
float capacitance2 = (float)val2 * IN_CAP_TO_GND / (float)(MAX_ADC_VALUE - val2);
display.setCursor(36, 24);
display.print(capacitance2, 0);
display.setCursor(72, 24);
display.print("pF");
if (capacitance2 < 45) {
display.setCursor(42, 8);
display.print("-");
display.setCursor(63, 8);
display.print("-");
}
else if (capacitance2 > 45) {
display.setCursor(42, 8);
display.print("|");
display.setCursor(63, 8);
display.print("|");
}
}
else
{
pinMode(IN_PIN2, OUTPUT);
pinMode(OUT_PIN2, INPUT_PULLUP);
unsigned long u3 = micros();
unsigned long t2;
int digVal2;
do
{
digVal2 = digitalRead(OUT_PIN2);
unsigned long u4 = micros();
t2 = u4 > u3 ? u4 - u3 : u3 - u4;
}
while ((digVal2 < 1) && (t2 < 40000L));
pinMode(OUT_PIN2, INPUT);
val2 = analogRead(OUT_PIN2);
digitalWrite(IN_PIN2, HIGH);
int dischargeTime2 = (int)(t2 / 1000L) * 5;
delay(dischargeTime2);
pinMode(OUT_PIN2, OUTPUT);
digitalWrite(OUT_PIN2, LOW);
digitalWrite(IN_PIN2, LOW);
float capacitance2 = +(float)t2 / R_PULLUP / log(1.90 - (float)val2 / (float)MAX_ADC_VALUE);
if (capacitance2 > 10.0)
{
display.setCursor(36, 24);
display.print("switch");
display.setCursor(42, 8);
display.print("3");
display.setCursor(63, 8);
display.print("6");
}
else
{
display.setCursor(36, 24);
display.print(capacitance2, 0);
display.setCursor(72, 24);
display.print("nF");
display.setCursor(42, 8);
display.print("|");
display.setCursor(63, 8);
display.print("|");
}
}
////////////////////////////////3 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ///////////////////////////////
pinMode(IN_PIN3, INPUT);
digitalWrite(OUT_PIN3, HIGH);
int val3 = analogRead(IN_PIN3);
digitalWrite(OUT_PIN3, LOW);
if (val3 < 1000)
{
pinMode(IN_PIN3, OUTPUT);
float capacitance3 = (float)val3 * IN_CAP_TO_GND / (float)(MAX_ADC_VALUE - val3);
display.setCursor(36, 32);
display.print(capacitance3, 0);
display.setCursor(72, 32);
display.print("pF");
if (capacitance3 < 45) {
display.setCursor(49, 8);
display.print("-");
display.setCursor(56, 8);
display.print("-");
}
else if (capacitance3 > 45) {
display.setCursor(49, 8);
display.print("|");
display.setCursor(56, 8);
display.print("|");
}
}
else
{
pinMode(IN_PIN3, OUTPUT);
pinMode(OUT_PIN3, INPUT_PULLUP);
unsigned long u5 = micros();
unsigned long t3;
int digVal3;
do
{
digVal3 = digitalRead(OUT_PIN3);
unsigned long u6 = micros();
t3 = u6 > u5 ? u6 - u5 : u5 - u6;
}
while ((digVal3 < 1) && (t3 < 40000L));
pinMode(OUT_PIN3, INPUT);
val3 = analogRead(OUT_PIN3);
digitalWrite(IN_PIN3, HIGH);
int dischargeTime3 = (int)(t3 / 1000L) * 5;
delay(dischargeTime3);
pinMode(OUT_PIN3, OUTPUT);
digitalWrite(OUT_PIN3, LOW);
digitalWrite(IN_PIN3, LOW);
float capacitance3 = +(float)t3 / R_PULLUP / log(2.90 - (float)val3 / (float)MAX_ADC_VALUE);
if (capacitance3 > 10.0)
{
display.setCursor(36, 32);
display.print("switch");
display.setCursor(49, 8);
display.print("4");
display.setCursor(56, 8);
display.print("5");
}
else
{
display.setCursor(36, 32);
display.print(capacitance3, 0);
display.setCursor(72, 32);
display.print("nF");
display.setCursor(49, 8);
display.print("|");
display.setCursor(56, 8);
display.print("|");
}
}
//////////////////////////////4 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ////////////////////////////////
pinMode(IN_PIN4, INPUT);
digitalWrite(OUT_PIN4, HIGH);
int val4 = analogRead(IN_PIN4);
digitalWrite(OUT_PIN4, LOW);
if (val4 < 1000)
{
pinMode(IN_PIN4, OUTPUT);
float capacitance4 = (float)val4 * IN_CAP_TO_GND / (float)(MAX_ADC_VALUE - val4);
display.setCursor(36, 40);
display.print(capacitance4, 0);
display.setCursor(72, 40);
display.print("pF");
if (capacitance4 < 45) {
display.setCursor(70, 8);
display.print("-");
display.setCursor(77, 8);
display.print("-");
}
else if (capacitance4 > 45) {
display.setCursor(70, 8);
display.print("|");
display.setCursor(77, 8);
display.print("|");
}
}
else
{
pinMode(IN_PIN4, OUTPUT);
pinMode(OUT_PIN4, INPUT_PULLUP);
unsigned long u7 = micros();
unsigned long t4;
int digVal4;
do
{
digVal4 = digitalRead(OUT_PIN4);
unsigned long u8 = micros();
t4 = u8 > u7 ? u8 - u7 : u7 - u8;
}
while ((digVal4 < 1) && (t4 < 40000L));
pinMode(OUT_PIN4, INPUT);
val4 = analogRead(OUT_PIN4);
digitalWrite(IN_PIN4, HIGH);
int dischargeTime4 = (int)(t4 / 1000L) * 5;
delay(dischargeTime4);
pinMode(OUT_PIN4, OUTPUT);
digitalWrite(OUT_PIN4, LOW);
digitalWrite(IN_PIN4, LOW);
float capacitance4 = +(float)t4 / R_PULLUP / log(1.97 - (float)val4 / (float)MAX_ADC_VALUE);
if (capacitance4 > 10.0)
{
display.setCursor(36, 40);
display.print("switch");
display.setCursor(70, 8);
display.print("7");
display.setCursor(77, 8);
display.print("8");
}
else
{
display.setCursor(36, 40);
display.print(capacitance4, 0);
display.setCursor(72, 40);
display.print("nF");
display.setCursor(70, 8);
display.print("|");
display.setCursor(77, 8);
display.print("|");
}
}
display.display();
display.clearDisplay();
}
/////////////////////////////////////КОНЕЦ(1СТР. ИЗМЕРЕНИЕ ЕМКОСТИ)///////////////////////////////
Я так понимаю, что все 4 канала постоянно включены и работают, поэтому и получается такая шляпа с наложениями межвходной емкости, от этого происходит типа компенсации одной емкости и второй и они вычитаются, а показывается разница этих емкостей, как-то так...
Надо каким-то образом сделать, чтобы после измерения 1 канала, он отключался и включался 2 канал, и т.д.
ну так это неудивительно "абрам исакович" !!! как оно может работать если ты даже код по правилам форума вставить не можешь...
001
#include <SPI.h>
002
#include <Adafruit_GFX.h> // include adafruit graphics library
003
#include <Adafruit_PCD8544.h>
004
005
// Software SPI (slower updates, more flexible pin options):
006
// pin 7 - Serial clock out (SCLK)
007
// pin 6 - Serial data out (DIN)
008
// pin 5 - Data/Command select (D/C)
009
// pin 4 - LCD chip select (CS)
010
// pin 3 - LCD reset (RST)
011
//Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
012
013
// Hardware SPI (faster, but must use certain hardware pins):
014
// SCK is LCD serial clock (SCLK) - this is pin 13 on Arduino Uno
015
// MOSI is LCD DIN - this is pin 11 on an Arduino Uno
016
// pin 5 - Data/Command select (D/C)
017
// pin 4 - LCD chip select (CS)
018
// pin 3 - LCD reset (RST)
019
Adafruit_PCD8544 display = Adafruit_PCD8544(5, 4, 3);
020
021
// ADC reference voltage / calibration value
022
#define V_REF 5.045
023
024
const
int
IN_PIN = A3;
025
const
int
OUT_PIN = 6;
026
027
const
int
IN_PIN2 = A1;
028
const
int
OUT_PIN2 = 8;
029
030
const
int
IN_PIN3 = A2;
031
const
int
OUT_PIN3 = 7;
032
033
const
int
IN_PIN4 = A0;
034
const
int
OUT_PIN4 = 9;
035
036
const
float
IN_CAP_TO_GND = 70.00;
037
const
float
R_PULLUP = 34.80;
038
const
int
MAX_ADC_VALUE = 1023;
039
040
void
setup
() {
041
display.clearDisplay();
// Очищаем дисплей.
042
display.begin();
// Инициализируем дисплея.
043
display.display();
044
045
pinMode(IN_PIN, OUTPUT);
046
pinMode(OUT_PIN, OUTPUT);
047
048
pinMode(IN_PIN2, OUTPUT);
049
pinMode(OUT_PIN2, OUTPUT);
050
051
pinMode(IN_PIN3, OUTPUT);
052
pinMode(OUT_PIN3, OUTPUT);
053
054
pinMode(IN_PIN4, OUTPUT);
055
pinMode(OUT_PIN4, OUTPUT);
056
}
057
///////////////////////////////////КОНЕЦ(VOID SETUP)////////////////////////////
058
059
060
//-----------------------------НАЧАЛО(1СТР. ИЗМЕРЕНИЕ ЕМКОСТИ)--------------------------//
061
void
loop
()
062
{
063
display.setCursor(5, 0);
064
display.print(
"TyT:"
);
065
display.setCursor(5, 8);
066
display.print(
"TaM:"
);
067
display.setCursor(28, 0);
068
display.print(
"1"
);
069
display.setCursor(35, 0);
070
display.print(
"2"
);
071
display.setCursor(42, 0);
072
display.print(
"3"
);
073
display.setCursor(49, 0);
074
display.print(
"4"
);
075
display.setCursor(56, 0);
076
display.print(
"5"
);
077
display.setCursor(63, 0);
078
display.print(
"6"
);
079
display.setCursor(70, 0);
080
display.print(
"7"
);
081
display.setCursor(77, 0);
082
display.print(
"8"
);
083
084
display.setCursor(0, 16);
085
display.print(
"(1-2)="
);
086
display.setCursor(0, 24);
087
display.print(
"(3-6)="
);
088
display.setCursor(0, 32);
089
display.print(
"(4-5)="
);
090
display.setCursor(0, 40);
091
display.print(
"(7-8)="
);
092
093
/////////////////////////////////1 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ///////////////////////////////
094
pinMode(IN_PIN, INPUT);
095
digitalWrite(OUT_PIN, HIGH);
096
int
val = analogRead(IN_PIN);
097
digitalWrite(OUT_PIN, LOW);
098
099
if
(val < 1000)
100
{
101
pinMode(IN_PIN, OUTPUT);
102
103
float
capacitance = (
float
)val * IN_CAP_TO_GND / (
float
)(MAX_ADC_VALUE - val);
104
105
display.setCursor(36, 16);
106
display.print(capacitance, 0);
107
display.setCursor(72, 16);
108
display.print(
"pF"
);
109
110
if
(capacitance < 45) {
111
display.setCursor(28, 8);
112
display.print(
"-"
);
113
display.setCursor(35, 8);
114
display.print(
"-"
);
115
}
116
117
else
if
(capacitance > 45) {
118
display.setCursor(28, 8);
119
display.print(
"|"
);
120
display.setCursor(35, 8);
121
display.print(
"|"
);
122
}
123
124
}
125
else
126
{
127
pinMode(IN_PIN, OUTPUT);
128
pinMode(OUT_PIN, INPUT_PULLUP);
129
unsigned
long
u1 = micros();
130
unsigned
long
t;
131
int
digVal;
132
133
do
134
{
135
digVal = digitalRead(OUT_PIN);
136
unsigned
long
u2 = micros();
137
t = u2 > u1 ? u2 - u1 : u1 - u2;
138
}
139
140
while
((digVal < 1) && (t < 40000L));
141
142
pinMode(OUT_PIN, INPUT);
143
val = analogRead(OUT_PIN);
144
digitalWrite(IN_PIN, HIGH);
145
146
int
dischargeTime = (
int
)(t / 1000L) * 5;
147
delay(dischargeTime);
148
pinMode(OUT_PIN, OUTPUT);
149
digitalWrite(OUT_PIN, LOW);
150
digitalWrite(IN_PIN, LOW);
151
152
float
capacitance = +(
float
)t / R_PULLUP / log(2.84 - (
float
)val / (
float
)MAX_ADC_VALUE);
153
154
if
(capacitance > 10.0)
155
{
156
display.setCursor(36, 16);
157
display.print(
"switch"
);
158
display.setCursor(28, 8);
159
display.print(
"1"
);
160
display.setCursor(35, 8);
161
display.print(
"2"
);
162
}
163
else
164
{
165
display.setCursor(36, 16);
166
display.print(capacitance, 0);
167
display.setCursor(72, 16);
168
display.print(
"nF"
);
169
display.setCursor(28, 8);
170
display.print(
"|"
);
171
display.setCursor(35, 8);
172
display.print(
"|"
);
173
}
174
}
175
///////////////////////////////2 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ////////////////////////////
176
pinMode(IN_PIN2, INPUT);
177
digitalWrite(OUT_PIN2, HIGH);
178
int
val2 = analogRead(IN_PIN2);
179
digitalWrite(OUT_PIN2, LOW);
180
181
if
(val2 < 1000)
182
{
183
pinMode(IN_PIN2, OUTPUT);
184
185
float
capacitance2 = (
float
)val2 * IN_CAP_TO_GND / (
float
)(MAX_ADC_VALUE - val2);
186
187
display.setCursor(36, 24);
188
display.print(capacitance2, 0);
189
display.setCursor(72, 24);
190
display.print(
"pF"
);
191
192
if
(capacitance2 < 45) {
193
display.setCursor(42, 8);
194
display.print(
"-"
);
195
display.setCursor(63, 8);
196
display.print(
"-"
);
197
}
198
199
else
if
(capacitance2 > 45) {
200
display.setCursor(42, 8);
201
display.print(
"|"
);
202
display.setCursor(63, 8);
203
display.print(
"|"
);
204
}
205
206
}
207
else
208
{
209
pinMode(IN_PIN2, OUTPUT);
210
pinMode(OUT_PIN2, INPUT_PULLUP);
211
unsigned
long
u3 = micros();
212
unsigned
long
t2;
213
int
digVal2;
214
215
do
216
{
217
digVal2 = digitalRead(OUT_PIN2);
218
unsigned
long
u4 = micros();
219
t2 = u4 > u3 ? u4 - u3 : u3 - u4;
220
}
221
222
while
((digVal2 < 1) && (t2 < 40000L));
223
224
pinMode(OUT_PIN2, INPUT);
225
val2 = analogRead(OUT_PIN2);
226
digitalWrite(IN_PIN2, HIGH);
227
228
int
dischargeTime2 = (
int
)(t2 / 1000L) * 5;
229
delay(dischargeTime2);
230
pinMode(OUT_PIN2, OUTPUT);
231
digitalWrite(OUT_PIN2, LOW);
232
digitalWrite(IN_PIN2, LOW);
233
234
float
capacitance2 = +(
float
)t2 / R_PULLUP / log(1.90 - (
float
)val2 / (
float
)MAX_ADC_VALUE);
235
236
if
(capacitance2 > 10.0)
237
{
238
display.setCursor(36, 24);
239
display.print(
"switch"
);
240
display.setCursor(42, 8);
241
display.print(
"3"
);
242
display.setCursor(63, 8);
243
display.print(
"6"
);
244
}
245
else
246
{
247
display.setCursor(36, 24);
248
display.print(capacitance2, 0);
249
display.setCursor(72, 24);
250
display.print(
"nF"
);
251
display.setCursor(42, 8);
252
display.print(
"|"
);
253
display.setCursor(63, 8);
254
display.print(
"|"
);
255
}
256
}
257
////////////////////////////////3 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ///////////////////////////////
258
pinMode(IN_PIN3, INPUT);
259
digitalWrite(OUT_PIN3, HIGH);
260
int
val3 = analogRead(IN_PIN3);
261
digitalWrite(OUT_PIN3, LOW);
262
263
if
(val3 < 1000)
264
{
265
pinMode(IN_PIN3, OUTPUT);
266
267
float
capacitance3 = (
float
)val3 * IN_CAP_TO_GND / (
float
)(MAX_ADC_VALUE - val3);
268
269
display.setCursor(36, 32);
270
display.print(capacitance3, 0);
271
display.setCursor(72, 32);
272
display.print(
"pF"
);
273
274
if
(capacitance3 < 45) {
275
display.setCursor(49, 8);
276
display.print(
"-"
);
277
display.setCursor(56, 8);
278
display.print(
"-"
);
279
}
280
281
else
if
(capacitance3 > 45) {
282
display.setCursor(49, 8);
283
display.print(
"|"
);
284
display.setCursor(56, 8);
285
display.print(
"|"
);
286
}
287
}
288
else
289
{
290
pinMode(IN_PIN3, OUTPUT);
291
pinMode(OUT_PIN3, INPUT_PULLUP);
292
unsigned
long
u5 = micros();
293
unsigned
long
t3;
294
int
digVal3;
295
296
do
297
{
298
digVal3 = digitalRead(OUT_PIN3);
299
unsigned
long
u6 = micros();
300
t3 = u6 > u5 ? u6 - u5 : u5 - u6;
301
}
302
303
while
((digVal3 < 1) && (t3 < 40000L));
304
305
pinMode(OUT_PIN3, INPUT);
306
val3 = analogRead(OUT_PIN3);
307
digitalWrite(IN_PIN3, HIGH);
308
309
int
dischargeTime3 = (
int
)(t3 / 1000L) * 5;
310
delay(dischargeTime3);
311
pinMode(OUT_PIN3, OUTPUT);
312
digitalWrite(OUT_PIN3, LOW);
313
digitalWrite(IN_PIN3, LOW);
314
315
float
capacitance3 = +(
float
)t3 / R_PULLUP / log(2.90 - (
float
)val3 / (
float
)MAX_ADC_VALUE);
316
317
if
(capacitance3 > 10.0)
318
{
319
display.setCursor(36, 32);
320
display.print(
"switch"
);
321
display.setCursor(49, 8);
322
display.print(
"4"
);
323
display.setCursor(56, 8);
324
display.print(
"5"
);
325
}
326
else
327
{
328
display.setCursor(36, 32);
329
display.print(capacitance3, 0);
330
display.setCursor(72, 32);
331
display.print(
"nF"
);
332
display.setCursor(49, 8);
333
display.print(
"|"
);
334
display.setCursor(56, 8);
335
display.print(
"|"
);
336
}
337
}
338
//////////////////////////////4 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ////////////////////////////////
339
pinMode(IN_PIN4, INPUT);
340
digitalWrite(OUT_PIN4, HIGH);
341
int
val4 = analogRead(IN_PIN4);
342
digitalWrite(OUT_PIN4, LOW);
343
344
if
(val4 < 1000)
345
{
346
pinMode(IN_PIN4, OUTPUT);
347
348
float
capacitance4 = (
float
)val4 * IN_CAP_TO_GND / (
float
)(MAX_ADC_VALUE - val4);
349
350
display.setCursor(36, 40);
351
display.print(capacitance4, 0);
352
display.setCursor(72, 40);
353
display.print(
"pF"
);
354
355
if
(capacitance4 < 45) {
356
display.setCursor(70, 8);
357
display.print(
"-"
);
358
display.setCursor(77, 8);
359
display.print(
"-"
);
360
}
361
362
else
if
(capacitance4 > 45) {
363
display.setCursor(70, 8);
364
display.print(
"|"
);
365
display.setCursor(77, 8);
366
display.print(
"|"
);
367
}
368
369
}
370
else
371
{
372
pinMode(IN_PIN4, OUTPUT);
373
pinMode(OUT_PIN4, INPUT_PULLUP);
374
unsigned
long
u7 = micros();
375
unsigned
long
t4;
376
int
digVal4;
377
378
do
379
{
380
digVal4 = digitalRead(OUT_PIN4);
381
unsigned
long
u8 = micros();
382
t4 = u8 > u7 ? u8 - u7 : u7 - u8;
383
}
384
385
while
((digVal4 < 1) && (t4 < 40000L));
386
387
pinMode(OUT_PIN4, INPUT);
388
val4 = analogRead(OUT_PIN4);
389
digitalWrite(IN_PIN4, HIGH);
390
391
int
dischargeTime4 = (
int
)(t4 / 1000L) * 5;
392
delay(dischargeTime4);
393
pinMode(OUT_PIN4, OUTPUT);
394
digitalWrite(OUT_PIN4, LOW);
395
digitalWrite(IN_PIN4, LOW);
396
397
float
capacitance4 = +(
float
)t4 / R_PULLUP / log(1.97 - (
float
)val4 / (
float
)MAX_ADC_VALUE);
398
399
if
(capacitance4 > 10.0)
400
{
401
display.setCursor(36, 40);
402
display.print(
"switch"
);
403
display.setCursor(70, 8);
404
display.print(
"7"
);
405
display.setCursor(77, 8);
406
display.print(
"8"
);
407
}
408
else
409
{
410
display.setCursor(36, 40);
411
display.print(capacitance4, 0);
412
display.setCursor(72, 40);
413
display.print(
"nF"
);
414
display.setCursor(70, 8);
415
display.print(
"|"
);
416
display.setCursor(77, 8);
417
display.print(
"|"
);
418
}
419
}
420
421
display.display();
422
display.clearDisplay();
423
424
}
425
/////////////////////////////////////КОНЕЦ(1СТР. ИЗМЕРЕНИЕ ЕМКОСТИ)///////////////////////////////
Так ? :)
первую часть одолел, можно переходить ко второй части, теоретической, а каковы будут наводки на не нагруженном стандартном куске кабеля в упаковке 305 метров к примеру, то-есть правильно ли выбран принцип измерения длины кабеля
первую часть одолел, можно переходить ко второй части, теоретической, а каковы будут наводки на не нагруженном стандартном куске кабеля в упаковке 305 метров к примеру, то-есть правильно ли выбран принцип измерения длины кабеля
Ну смотрите, у меня есть максимум 34 метра витой пары на руках, наводки вроде как не мешают измерению. Кстати вот полная схема:
первую часть одолел, можно переходить ко второй части, теоретической, а каковы будут наводки на не нагруженном стандартном куске кабеля в упаковке 305 метров к примеру, то-есть правильно ли выбран принцип измерения длины кабеля
Кстати в процессе экспериментов, были нестабильные показания и ввел резисторы по 1 Мом на 4 цифровых пина, вот схема измененная:
ну во первых, если измерять ёмкость пары, достаточно остановиться на одной, к примеру зелёной, по ней и откалиброваться, все четыре пары имеют разный шаг повива, соответственно и разную длину
ну во первых, если измерять ёмкость пары, достаточно остановиться на одной, к примеру зелёной, по ней и откалиброваться, все четыре пары имеют разный шаг повива, соответственно и разную длину
Нет, вы не поняли суть проблемы. Одна пара измеряется без проблем. Проблема как раз в том, что при подключении одновременно 2 и более пар, измерения снижаются десятки раз, вместо 1500 пф показывают каждый из входов по 40-50 пф
Я в середине 2000-х как-то измерял параметры линков LAN в одной организации. Тестер был взят на прокат, мерил кажется 10 параметров, включая длину каждой пары. Длина измерялась посылкой импульсов и подсчётом времени их прохождения.
В кабеле всегда есть паразитные ёмкости между парами, это тоже тестируемый параметр.
Хотел вставить фотку, не вижу как.
наводки, это был мой изначальный посыл
наводки, это был мой изначальный посыл
Для начала бы справится с этой проблемой, а потом, если понадобится буду что-то думать с наводками
тогда 4х-канальный осциллограф тебе в помощь... и как реплика, ёмкость ты заряжаешь, а чем разряжаешь перед измерением?
тогда 4х-канальный осциллограф тебе в помощь... и как реплика, ёмкость ты заряжаешь, а чем разряжаешь перед измерением?
Все, заработало как надо!
Полностью рабочий скетч и схема для самостоятельной сборки:
001
#include <SPI.h>
002
#include <Adafruit_GFX.h> // include adafruit graphics library
003
#include <Adafruit_PCD8544.h>
004
005
// Hardware SPI (faster, but must use certain hardware pins):
006
// SCK is LCD serial clock (SCLK) - this is pin 13 on Arduino Uno
007
// MOSI is LCD DIN - this is pin 11 on an Arduino Uno
008
// pin 5 - Data/Command select (D/C)
009
// pin 4 - LCD chip select (CS)
010
// pin 3 - LCD reset (RST)
011
Adafruit_PCD8544 display = Adafruit_PCD8544(5, 4, 3);
012
013
const
int
IN_PIN = A3;
014
const
int
OUT_PIN = 6;
015
const
int
IN_PIN2 = A1;
016
const
int
OUT_PIN2 = 8;
017
const
int
IN_PIN3 = A2;
018
const
int
OUT_PIN3 = 7;
019
const
int
IN_PIN4 = A0;
020
const
int
OUT_PIN4 = 9;
021
022
const
float
IN_CAP_TO_GND1 = 70.00;
023
const
float
IN_CAP_TO_GND2 = 71.00;
024
const
float
IN_CAP_TO_GND3 = 68.00;
025
const
float
IN_CAP_TO_GND4 = 70.00;
026
027
const
float
R_PULLUP = 34.80;
028
const
int
MAX_ADC_VALUE = 1023;
029
030
void
setup
() {
031
display.clearDisplay();
// Очищаем дисплей.
032
display.begin();
// Инициализируем дисплея.
033
display.display();
034
//display.setContrast(50); // Задаем контрастность дисплея.
035
display.setRotation(0);
// Переворачиваем дисплей.
036
display.invertDisplay(0);
// Инвертируем дисплей.
037
//display.setTextSize(1); // Задаем размер текста дисплея.
038
//display.setTextColor(BLACK,WHITE); // Задаем цвет шрифта дисплея.
039
}
040
//////////////////////////////КОНЕЦ(VOID SETUP)//////////////////////////////////
041
042
//--------------------------------НАЧАЛО(VOID LOOP)-------------------------------//
043
void
loop
() {
044
display.setCursor(5, 0);
045
display.print(
"TyT:"
);
046
display.setCursor(5, 8);
047
display.print(
"TaM:"
);
048
display.setCursor(28, 0);
049
display.print(
"1"
);
050
display.setCursor(35, 0);
051
display.print(
"2"
);
052
display.setCursor(42, 0);
053
display.print(
"3"
);
054
display.setCursor(49, 0);
055
display.print(
"4"
);
056
display.setCursor(56, 0);
057
display.print(
"5"
);
058
display.setCursor(63, 0);
059
display.print(
"6"
);
060
display.setCursor(70, 0);
061
display.print(
"7"
);
062
display.setCursor(77, 0);
063
display.print(
"8"
);
064
065
display.setCursor(0, 16);
066
display.print(
"(1-2)="
);
067
display.setCursor(0, 24);
068
display.print(
"(3-6)="
);
069
display.setCursor(0, 32);
070
display.print(
"(4-5)="
);
071
display.setCursor(0, 40);
072
display.print(
"(7-8)="
);
073
074
075
//----------------------------НАЧАЛО(1СТР. ИЗМЕРЕНИЕ ЕМКОСТИ)--------------------------//
076
077
/////////////////////////////1 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ/////////////////////////
078
pinMode(IN_PIN, INPUT);
079
digitalWrite(OUT_PIN, HIGH);
080
int
val = analogRead(IN_PIN);
081
digitalWrite(OUT_PIN, LOW);
082
083
if
(val < 970)
084
{
085
pinMode(IN_PIN, OUTPUT);
086
087
float
capacitance = (
float
)val * IN_CAP_TO_GND1 / (
float
)(MAX_ADC_VALUE - val);
088
delay (50);
089
display.setCursor(36, 16);
090
display.print(capacitance / 90, 0);
091
display.setCursor(65, 16);
092
display.print(
"M*C"
);
093
094
if
(capacitance < 100) {
095
display.setCursor(28, 8);
096
display.print(
"-"
);
097
display.setCursor(35, 8);
098
display.print(
"-"
);
099
}
100
101
else
if
(capacitance > 100) {
102
display.setCursor(28, 8);
103
display.print(
"|"
);
104
display.setCursor(35, 8);
105
display.print(
"|"
);
106
}
107
}
108
else
109
{
110
pinMode(IN_PIN, OUTPUT);
111
112
pinMode(OUT_PIN, INPUT_PULLUP);
113
unsigned
long
u1 = micros();
114
unsigned
long
t;
115
int
digVal;
116
117
do
118
{
119
digVal = digitalRead(OUT_PIN);
120
unsigned
long
u2 = micros();
121
t = u2 > u1 ? u2 - u1 : u1 - u2;
122
}
123
124
while
((digVal < 1) && (t < 400000L));
125
126
pinMode(OUT_PIN, INPUT);
127
val = analogRead(OUT_PIN);
128
digitalWrite(IN_PIN, HIGH);
129
int
dischargeTime = (
int
)(t / 10L) * 5;
130
delay(dischargeTime);
131
pinMode(OUT_PIN, OUTPUT);
132
digitalWrite(OUT_PIN, LOW);
133
digitalWrite(IN_PIN, LOW);
134
135
float
capacitance = +(
float
)t / R_PULLUP / log(2.94 - (
float
)val / (
float
)MAX_ADC_VALUE);
136
137
display.setCursor(36, 16);
138
display.print(capacitance / 0.041, 0);
139
display.setCursor(65, 16);
140
display.print(
"M*C"
);
141
display.setCursor(28, 8);
142
display.print(
"|"
);
143
display.setCursor(35, 8);
144
display.print(
"|"
);
145
}
146
pinMode(IN_PIN, INPUT);
147
pinMode(OUT_PIN, INPUT);
148
149
/////////////////////////////2 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ/////////////////////////////
150
pinMode(IN_PIN2, INPUT);
151
digitalWrite(OUT_PIN2, HIGH);
152
int
val2 = analogRead(IN_PIN2);
153
digitalWrite(OUT_PIN2, LOW);
154
155
if
(val2 < 970)
156
{
157
pinMode(IN_PIN2, OUTPUT);
158
159
float
capacitance2 = (
float
)val2 * IN_CAP_TO_GND2 / (
float
)(MAX_ADC_VALUE - val2);
160
delay (50);
161
display.setCursor(36, 24);
162
display.print(capacitance2 / 90, 0);
163
display.setCursor(65, 24);
164
display.print(
"M*C"
);
165
166
if
(capacitance2 < 100) {
167
display.setCursor(42, 8);
168
display.print(
"-"
);
169
display.setCursor(63, 8);
170
display.print(
"-"
);
171
}
172
173
else
if
(capacitance2 > 100) {
174
display.setCursor(42, 8);
175
display.print(
"|"
);
176
display.setCursor(63, 8);
177
display.print(
"|"
);
178
}
179
}
180
else
181
{
182
pinMode(IN_PIN2, OUTPUT);
183
184
pinMode(OUT_PIN2, INPUT_PULLUP);
185
unsigned
long
u3 = micros();
186
unsigned
long
t2;
187
int
digVal2;
188
189
do
190
{
191
digVal2 = digitalRead(OUT_PIN2);
192
unsigned
long
u4 = micros();
193
t2 = u4 > u3 ? u4 - u3 : u3 - u4;
194
}
195
196
while
((digVal2 < 1) && (t2 < 400000L));
197
198
pinMode(OUT_PIN2, INPUT);
199
val2 = analogRead(OUT_PIN2);
200
digitalWrite(IN_PIN2, HIGH);
201
202
int
dischargeTime2 = (
int
)(t2 / 10L) * 5;
203
delay(dischargeTime2);
204
205
pinMode(OUT_PIN2, OUTPUT);
206
digitalWrite(OUT_PIN2, LOW);
207
digitalWrite(IN_PIN2, LOW);
208
209
float
capacitance2 = +(
float
)t2 / R_PULLUP / log(2.22 - (
float
)val2 / (
float
)MAX_ADC_VALUE);
210
211
display.setCursor(36, 24);
212
display.print(capacitance2 / 0.041, 0);
213
display.setCursor(65, 24);
214
display.print(
"M*C"
);
215
display.setCursor(42, 8);
216
display.print(
"|"
);
217
display.setCursor(63, 8);
218
display.print(
"|"
);
219
}
220
pinMode(IN_PIN2, INPUT);
221
pinMode(OUT_PIN2, INPUT);
222
223
//////////////////////////////3 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ//////////////////////////////
224
pinMode(IN_PIN3, INPUT);
225
digitalWrite(OUT_PIN3, HIGH);
226
int
val3 = analogRead(IN_PIN3);
227
digitalWrite(OUT_PIN3, LOW);
228
229
if
(val3 < 970)
230
{
231
pinMode(IN_PIN3, OUTPUT);
232
233
float
capacitance3 = (
float
)val3 * IN_CAP_TO_GND3 / (
float
)(MAX_ADC_VALUE - val3);
234
delay (50);
235
display.setCursor(36, 32);
236
display.print(capacitance3 / 90, 0);
237
display.setCursor(65, 32);
238
display.print(
"M*C"
);
239
240
if
(capacitance3 < 100) {
241
display.setCursor(49, 8);
242
display.print(
"-"
);
243
display.setCursor(56, 8);
244
display.print(
"-"
);
245
}
246
247
else
if
(capacitance3 > 100) {
248
display.setCursor(49, 8);
249
display.print(
"|"
);
250
display.setCursor(56, 8);
251
display.print(
"|"
);
252
}
253
}
254
else
255
{
256
pinMode(IN_PIN3, OUTPUT);
257
258
pinMode(OUT_PIN3, INPUT_PULLUP);
259
unsigned
long
u5 = micros();
260
unsigned
long
t3;
261
int
digVal3;
262
263
do
264
{
265
digVal3 = digitalRead(OUT_PIN3);
266
unsigned
long
u6 = micros();
267
t3 = u6 > u5 ? u6 - u5 : u5 - u6;
268
}
269
270
while
((digVal3 < 1) && (t3 < 400000L));
271
272
pinMode(OUT_PIN3, INPUT);
273
val3 = analogRead(OUT_PIN3);
274
digitalWrite(IN_PIN3, HIGH);
275
276
int
dischargeTime3 = (
int
)(t3 / 10L) * 5;
277
delay(dischargeTime3);
278
pinMode(OUT_PIN3, OUTPUT);
279
digitalWrite(OUT_PIN3, LOW);
280
digitalWrite(IN_PIN3, LOW);
281
282
float
capacitance3 = +(
float
)t3 / R_PULLUP / log(2.93 - (
float
)val3 / (
float
)MAX_ADC_VALUE);
283
284
display.setCursor(36, 32);
285
display.print(capacitance3 / 0.041, 0);
286
display.setCursor(65, 32);
287
display.print(
"M*C"
);
288
display.setCursor(49, 8);
289
display.print(
"|"
);
290
display.setCursor(56, 8);
291
display.print(
"|"
);
292
}
293
pinMode(IN_PIN3, INPUT);
294
pinMode(OUT_PIN3, INPUT);
295
296
////////////////////////////////4 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ///////////////////////////
297
pinMode(IN_PIN4, INPUT);
298
digitalWrite(OUT_PIN4, HIGH);
299
int
val4 = analogRead(IN_PIN4);
300
digitalWrite(OUT_PIN4, LOW);
301
302
if
(val4 < 970)
303
{
304
pinMode(IN_PIN4, OUTPUT);
305
306
float
capacitance4 = (
float
)val4 * IN_CAP_TO_GND4 / (
float
)(MAX_ADC_VALUE - val4);
307
delay (50);
308
display.setCursor(36, 40);
309
display.print(capacitance4 / 90, 0);
310
display.setCursor(65, 40);
311
display.print(
"M*C"
);
312
313
if
(capacitance4 < 100) {
314
display.setCursor(70, 8);
315
display.print(
"-"
);
316
display.setCursor(77, 8);
317
display.print(
"-"
);
318
}
319
320
else
if
(capacitance4 > 100) {
321
display.setCursor(70, 8);
322
display.print(
"|"
);
323
display.setCursor(77, 8);
324
display.print(
"|"
);
325
}
326
327
}
328
else
329
{
330
pinMode(IN_PIN4, OUTPUT);
331
332
pinMode(OUT_PIN4, INPUT_PULLUP);
333
unsigned
long
u7 = micros();
334
unsigned
long
t4;
335
int
digVal4;
336
337
do
338
{
339
digVal4 = digitalRead(OUT_PIN4);
340
unsigned
long
u8 = micros();
341
t4 = u8 > u7 ? u8 - u7 : u7 - u8;
342
}
343
344
while
((digVal4 < 1) && (t4 < 400000L));
345
346
pinMode(OUT_PIN4, INPUT);
347
val4 = analogRead(OUT_PIN4);
348
digitalWrite(IN_PIN4, HIGH);
349
350
int
dischargeTime4 = (
int
)(t4 / 10L) * 5;
351
delay(dischargeTime4);
352
pinMode(OUT_PIN4, OUTPUT);
353
digitalWrite(OUT_PIN4, LOW);
354
digitalWrite(IN_PIN4, LOW);
355
356
float
capacitance4 = +(
float
)t4 / R_PULLUP / log(2.23 - (
float
)val4 / (
float
)MAX_ADC_VALUE);
357
358
display.setCursor(36, 40);
359
display.print(capacitance4 / 0.041, 0);
360
display.setCursor(65, 40);
361
display.print(
"M*C"
);
362
display.setCursor(70, 8);
363
display.print(
"|"
);
364
display.setCursor(77, 8);
365
display.print(
"|"
);
366
}
367
pinMode(IN_PIN4, INPUT);
368
pinMode(OUT_PIN4, INPUT);
369
370
////////////////////////////////КОНЕЦ(1СТР. ИЗМЕРЕНИЕ ЕМКОСТИ)////////////////////////////////
371
372
display.display();
373
display.clearDisplay();
374
}
375
/////////////////////////////////КОНЕЦ(VOID LOOP)////////////////////////////////////
мой пинок помог )))
Как говорится - С миру по нитке :))
1) Такую "простынку" надо прятать под "спойлер"
2) Чуть напильником пильнуть и со свистом в 168ю мегу влезет.
Вот так уже (даже с бутлоадером) влазит:
001
#include <SPI.h>
002
#include <Adafruit_GFX.h> // include adafruit graphics library
003
#include <Adafruit_PCD8544.h>
004
005
// Hardware SPI (faster, but must use certain hardware pins):
006
// SCK is LCD serial clock (SCLK) - this is pin 13 on Arduino Uno
007
// MOSI is LCD DIN - this is pin 11 on an Arduino Uno
008
// pin 5 - Data/Command select (D/C)
009
// pin 4 - LCD chip select (CS)
010
// pin 3 - LCD reset (RST)
011
Adafruit_PCD8544 display = Adafruit_PCD8544(5, 4, 3);
012
013
const
uint8_t IN_PIN = A3;
014
const
uint8_t OUT_PIN = 6;
015
const
uint8_t IN_PIN2 = A1;
016
const
uint8_t OUT_PIN2 = 8;
017
const
uint8_t IN_PIN3 = A2;
018
const
uint8_t OUT_PIN3 = 7;
019
const
uint8_t IN_PIN4 = A0;
020
const
uint8_t OUT_PIN4 = 9;
021
022
const
float
IN_CAP_TO_GND1 = 70.00;
023
const
float
IN_CAP_TO_GND2 = 71.00;
024
const
float
IN_CAP_TO_GND3 = 68.00;
025
const
float
IN_CAP_TO_GND4 = 70.00;
026
027
const
float
R_PULLUP = 34.80;
028
const
int
MAX_ADC_VALUE = 1023;
029
030
void
setup
() {
031
display.clearDisplay();
// Очищаем дисплей.
032
display.begin();
// Инициализируем дисплея.
033
display.display();
034
//display.setContrast(50); // Задаем контрастность дисплея.
035
display.setRotation(0);
// Переворачиваем дисплей.
036
display.invertDisplay(0);
// Инвертируем дисплей.
037
//display.setTextSize(1); // Задаем размер текста дисплея.
038
//display.setTextColor(BLACK,WHITE); // Задаем цвет шрифта дисплея.
039
}
040
//////////////////////////////КОНЕЦ(VOID SETUP)//////////////////////////////////
041
042
//--------------------------------НАЧАЛО(VOID LOOP)-------------------------------//
043
void
loop
() {
044
display.setCursor(5, 0);
045
display.print(F(
"TyT:"
));
046
display.setCursor(5, 8);
047
display.print(F(
"TaM:"
));
048
display.setCursor(28, 0);
049
display.print(F(
"1"
));
050
display.setCursor(35, 0);
051
display.print(F(
"2"
));
052
display.setCursor(42, 0);
053
display.print(F(
"3"
));
054
display.setCursor(49, 0);
055
display.print(F(
"4"
));
056
display.setCursor(56, 0);
057
display.print(F(
"5"
));
058
display.setCursor(63, 0);
059
display.print(F(
"6"
));
060
display.setCursor(70, 0);
061
display.print(F(
"7"
));
062
display.setCursor(77, 0);
063
display.print(F(
"8"
));
064
065
display.setCursor(0, 16);
066
display.print(F(
"(1-2)="
));
067
display.setCursor(0, 24);
068
display.print(F(
"(3-6)="
));
069
display.setCursor(0, 32);
070
display.print(F(
"(4-5)="
));
071
display.setCursor(0, 40);
072
display.print(F(
"(7-8)="
));
073
074
075
//----------------------------НАЧАЛО(1СТР. ИЗМЕРЕНИЕ ЕМКОСТИ)--------------------------//
076
077
/////////////////////////////1 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ/////////////////////////
078
pinMode(IN_PIN, INPUT);
079
digitalWrite(OUT_PIN, HIGH);
080
int
val = analogRead(IN_PIN);
081
digitalWrite(OUT_PIN, LOW);
082
083
if
(val < 970)
084
{
085
pinMode(IN_PIN, OUTPUT);
086
087
float
capacitance = (
float
)val * IN_CAP_TO_GND1 / (
float
)(MAX_ADC_VALUE - val);
088
delay (50);
089
display.setCursor(36, 16);
090
display.print(capacitance / 90, 0);
091
display.setCursor(65, 16);
092
display.print(F(
"M*C"
));
093
094
if
(capacitance < 100) {
095
display.setCursor(28, 8);
096
display.print(F(
"-"
));
097
display.setCursor(35, 8);
098
display.print(F(
"-"
));
099
}
100
101
else
if
(capacitance > 100) {
102
display.setCursor(28, 8);
103
display.print(F(
"|"
));
104
display.setCursor(35, 8);
105
display.print(F(
"|"
));
106
}
107
}
108
else
109
{
110
pinMode(IN_PIN, OUTPUT);
111
112
pinMode(OUT_PIN, INPUT_PULLUP);
113
unsigned
long
u1 = micros();
114
unsigned
long
t;
115
int
digVal;
116
117
do
118
{
119
digVal = digitalRead(OUT_PIN);
120
unsigned
long
u2 = micros();
121
t = u2 > u1 ? u2 - u1 : u1 - u2;
122
}
123
124
while
((digVal < 1) && (t < 400000L));
125
126
pinMode(OUT_PIN, INPUT);
127
val = analogRead(OUT_PIN);
128
digitalWrite(IN_PIN, HIGH);
129
int
dischargeTime = (
int
)(t / 10L) * 5;
130
delay(dischargeTime);
131
pinMode(OUT_PIN, OUTPUT);
132
digitalWrite(OUT_PIN, LOW);
133
digitalWrite(IN_PIN, LOW);
134
135
float
capacitance = +(
float
)t / R_PULLUP / log(2.94 - (
float
)val / (
float
)MAX_ADC_VALUE);
136
137
display.setCursor(36, 16);
138
display.print(capacitance / 0.041, 0);
139
display.setCursor(65, 16);
140
display.print(F(
"M*C"
));
141
display.setCursor(28, 8);
142
display.print(F(
"|"
));
143
display.setCursor(35, 8);
144
display.print(F(
"|"
));
145
}
146
pinMode(IN_PIN, INPUT);
147
pinMode(OUT_PIN, INPUT);
148
149
/////////////////////////////2 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ/////////////////////////////
150
pinMode(IN_PIN2, INPUT);
151
digitalWrite(OUT_PIN2, HIGH);
152
int
val2 = analogRead(IN_PIN2);
153
digitalWrite(OUT_PIN2, LOW);
154
155
if
(val2 < 970)
156
{
157
pinMode(IN_PIN2, OUTPUT);
158
159
float
capacitance2 = (
float
)val2 * IN_CAP_TO_GND2 / (
float
)(MAX_ADC_VALUE - val2);
160
delay (50);
161
display.setCursor(36, 24);
162
display.print(capacitance2 / 90, 0);
163
display.setCursor(65, 24);
164
display.print(F(
"M*C"
));
165
166
if
(capacitance2 < 100) {
167
display.setCursor(42, 8);
168
display.print(F(
"-"
));
169
display.setCursor(63, 8);
170
display.print(F(
"-"
));
171
}
172
173
else
if
(capacitance2 > 100) {
174
display.setCursor(42, 8);
175
display.print(F(
"|"
));
176
display.setCursor(63, 8);
177
display.print(F(
"|"
));
178
}
179
}
180
else
181
{
182
pinMode(IN_PIN2, OUTPUT);
183
184
pinMode(OUT_PIN2, INPUT_PULLUP);
185
unsigned
long
u3 = micros();
186
unsigned
long
t2;
187
int
digVal2;
188
189
do
190
{
191
digVal2 = digitalRead(OUT_PIN2);
192
unsigned
long
u4 = micros();
193
t2 = u4 > u3 ? u4 - u3 : u3 - u4;
194
}
195
196
while
((digVal2 < 1) && (t2 < 400000L));
197
198
pinMode(OUT_PIN2, INPUT);
199
val2 = analogRead(OUT_PIN2);
200
digitalWrite(IN_PIN2, HIGH);
201
202
int
dischargeTime2 = (
int
)(t2 / 10L) * 5;
203
delay(dischargeTime2);
204
205
pinMode(OUT_PIN2, OUTPUT);
206
digitalWrite(OUT_PIN2, LOW);
207
digitalWrite(IN_PIN2, LOW);
208
209
float
capacitance2 = +(
float
)t2 / R_PULLUP / log(2.22 - (
float
)val2 / (
float
)MAX_ADC_VALUE);
210
211
display.setCursor(36, 24);
212
display.print(capacitance2 / 0.041, 0);
213
display.setCursor(65, 24);
214
display.print(F(
"M*C"
));
215
display.setCursor(42, 8);
216
display.print(F(
"|"
));
217
display.setCursor(63, 8);
218
display.print(F(
"|"
));
219
}
220
pinMode(IN_PIN2, INPUT);
221
pinMode(OUT_PIN2, INPUT);
222
223
//////////////////////////////3 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ//////////////////////////////
224
pinMode(IN_PIN3, INPUT);
225
digitalWrite(OUT_PIN3, HIGH);
226
int
val3 = analogRead(IN_PIN3);
227
digitalWrite(OUT_PIN3, LOW);
228
229
if
(val3 < 970)
230
{
231
pinMode(IN_PIN3, OUTPUT);
232
233
float
capacitance3 = (
float
)val3 * IN_CAP_TO_GND3 / (
float
)(MAX_ADC_VALUE - val3);
234
delay (50);
235
display.setCursor(36, 32);
236
display.print(capacitance3 / 90, 0);
237
display.setCursor(65, 32);
238
display.print(F(
"M*C"
));
239
240
if
(capacitance3 < 100) {
241
display.setCursor(49, 8);
242
display.print(F(
"-"
));
243
display.setCursor(56, 8);
244
display.print(F(
"-"
));
245
}
246
247
else
if
(capacitance3 > 100) {
248
display.setCursor(49, 8);
249
display.print(F(
"|"
));
250
display.setCursor(56, 8);
251
display.print(F(
"|"
));
252
}
253
}
254
else
255
{
256
pinMode(IN_PIN3, OUTPUT);
257
258
pinMode(OUT_PIN3, INPUT_PULLUP);
259
unsigned
long
u5 = micros();
260
unsigned
long
t3;
261
int
digVal3;
262
263
do
264
{
265
digVal3 = digitalRead(OUT_PIN3);
266
unsigned
long
u6 = micros();
267
t3 = u6 > u5 ? u6 - u5 : u5 - u6;
268
}
269
270
while
((digVal3 < 1) && (t3 < 400000L));
271
272
pinMode(OUT_PIN3, INPUT);
273
val3 = analogRead(OUT_PIN3);
274
digitalWrite(IN_PIN3, HIGH);
275
276
int
dischargeTime3 = (
int
)(t3 / 10L) * 5;
277
delay(dischargeTime3);
278
pinMode(OUT_PIN3, OUTPUT);
279
digitalWrite(OUT_PIN3, LOW);
280
digitalWrite(IN_PIN3, LOW);
281
282
float
capacitance3 = +(
float
)t3 / R_PULLUP / log(2.93 - (
float
)val3 / (
float
)MAX_ADC_VALUE);
283
284
display.setCursor(36, 32);
285
display.print(capacitance3 / 0.041, 0);
286
display.setCursor(65, 32);
287
display.print(F(
"M*C"
));
288
display.setCursor(49, 8);
289
display.print(F(
"|"
));
290
display.setCursor(56, 8);
291
display.print(F(
"|"
));
292
}
293
pinMode(IN_PIN3, INPUT);
294
pinMode(OUT_PIN3, INPUT);
295
296
////////////////////////////////4 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ///////////////////////////
297
pinMode(IN_PIN4, INPUT);
298
digitalWrite(OUT_PIN4, HIGH);
299
int
val4 = analogRead(IN_PIN4);
300
digitalWrite(OUT_PIN4, LOW);
301
302
if
(val4 < 970)
303
{
304
pinMode(IN_PIN4, OUTPUT);
305
306
float
capacitance4 = (
float
)val4 * IN_CAP_TO_GND4 / (
float
)(MAX_ADC_VALUE - val4);
307
delay (50);
308
display.setCursor(36, 40);
309
display.print(capacitance4 / 90, 0);
310
display.setCursor(65, 40);
311
display.print(F(
"M*C"
));
312
313
if
(capacitance4 < 100) {
314
display.setCursor(70, 8);
315
display.print(F(
"-"
));
316
display.setCursor(77, 8);
317
display.print(F(
"-"
));
318
}
319
320
else
if
(capacitance4 > 100) {
321
display.setCursor(70, 8);
322
display.print(F(
"|"
));
323
display.setCursor(77, 8);
324
display.print(F(
"|"
));
325
}
326
327
}
328
else
329
{
330
pinMode(IN_PIN4, OUTPUT);
331
332
pinMode(OUT_PIN4, INPUT_PULLUP);
333
unsigned
long
u7 = micros();
334
unsigned
long
t4;
335
int
digVal4;
336
337
do
338
{
339
digVal4 = digitalRead(OUT_PIN4);
340
unsigned
long
u8 = micros();
341
t4 = u8 > u7 ? u8 - u7 : u7 - u8;
342
}
343
344
while
((digVal4 < 1) && (t4 < 400000L));
345
346
pinMode(OUT_PIN4, INPUT);
347
val4 = analogRead(OUT_PIN4);
348
digitalWrite(IN_PIN4, HIGH);
349
350
int
dischargeTime4 = (
int
)(t4 / 10L) * 5;
351
delay(dischargeTime4);
352
pinMode(OUT_PIN4, OUTPUT);
353
digitalWrite(OUT_PIN4, LOW);
354
digitalWrite(IN_PIN4, LOW);
355
356
float
capacitance4 = +(
float
)t4 / R_PULLUP / log(2.23 - (
float
)val4 / (
float
)MAX_ADC_VALUE);
357
358
display.setCursor(36, 40);
359
display.print(capacitance4 / 0.041, 0);
360
display.setCursor(65, 40);
361
display.print(F(
"M*C"
));
362
display.setCursor(70, 8);
363
display.print(F(
"|"
));
364
display.setCursor(77, 8);
365
display.print(F(
"|"
));
366
}
367
pinMode(IN_PIN4, INPUT);
368
pinMode(OUT_PIN4, INPUT);
369
370
////////////////////////////////КОНЕЦ(1СТР. ИЗМЕРЕНИЕ ЕМКОСТИ)////////////////////////////////
371
372
display.display();
373
display.clearDisplay();
374
}
375
/////////////////////////////////КОНЕЦ(VOID LOOP)////////////////////////////////////
Скетч использует 14762 байт (93%) памяти устройства. Всего доступно 15872 байт.
Глобальные переменные используют 727 байт (70%) динамической памяти, оставляя 297 байт для локальных переменных. Максимум: 1024 байт.
А если учесть, что 4 раза практически один и тот же код повторяется, то можно ещё сократить. Но не сильно. Библиотеки тяжёлые.
классика жанра...
Как написать код для 4х-канального измерителя емкости? - написать для 1-канального и потом скопировать 4 раза...
Gladiator - чтобы в следующий раз не выкладывать подобную х-ню вместо кода, почитайте что-нибудь про циклы и процедуры.
Gladiator - чтобы в следующий раз
да, код написан в лоб, не умеет пока человек, но это исправимо )))
классика жанра...
Как написать код для 4х-канального измерителя емкости? - написать для 1-канального и потом скопировать 4 раза...
Gladiator - чтобы в следующий раз не выкладывать подобную х-ню вместо кода, почитайте что-нибудь про циклы и процедуры.
Я вообще не программист, и не знаю ни одного языка программирования, я электрощик :) Но очень интересно ковыряться с ардуиной и совмещать с электроникой, пробовать делать то, что необходимо. И мне кажется не важно, что я кучу кода написал может ненужного, зато работает :) Сейчас этот приборчик использую на работе, а работаю интернетчиком.
И кстати, это только часть кода, которую я запихнул в ардуинку нано. У меня скетч с меню на одной кнопке, где 7 подпрограмм:
1 - это 4 канальный измеритель длины витой пары по емкости . С индикацией по каждой паре, в случае подключенного кабеля к свитчу или роутеру.
2 - это 4 канальный измеритель длины витой пары по сопротивлению, с сигнализацией (пищалка) перекоса между парами на 1 Ом (можно настраивать).
3 - это 4 канальный измеритель длины витой пары по сопротивлению, со звуковой сигнализацией (пищалка) целостности каждой пары с разными тонами.
4 - это 4 канальный измеритель длины витой пары по сопротивлению, с переводом в метраж.
5 - Двухканальный Тон генератор на 1 Кгц
6 - Двухканальный Тон генератор на 9 Кгц
7 - Двухканальный Тон генератор на 18 Кгц
Тональные генераторы для поиска нужного кабеля в пучке кабелей.
Сегодня кстати испытал Тональный генератор на 18Кгц и приборчик отлично справился с поиском нужного мне кабеля. Вместо приемника использовал смартфон с прогой Анализатор спектра и приблудой (на полевом транзисторе) втыкаемой в разьем для гарнитуры.
классика жанра...
Как написать код для 4х-канального измерителя емкости? - написать для 1-канального и потом скопировать 4 раза...
Gladiator - чтобы в следующий раз не выкладывать подобную х-ню вместо кода, почитайте что-нибудь про циклы и процедуры.
И на счет выкладывания... я бы и не выкладывал, но не мог справится с той проблемой, что описывал в самом начале. Поэтому и решил спросить у народа подсказку.
Ну ок, больше не буду ничего выкладывать :)) Буду для себя изобретать :)
1) Такую "простынку" надо прятать под "спойлер"
2) Чуть напильником пильнуть и со свистом в 168ю мегу влезет.
Вот так уже (даже с бутлоадером) влазит:
001
#include <SPI.h>
002
#include <Adafruit_GFX.h> // include adafruit graphics library
003
#include <Adafruit_PCD8544.h>
004
005
// Hardware SPI (faster, but must use certain hardware pins):
006
// SCK is LCD serial clock (SCLK) - this is pin 13 on Arduino Uno
007
// MOSI is LCD DIN - this is pin 11 on an Arduino Uno
008
// pin 5 - Data/Command select (D/C)
009
// pin 4 - LCD chip select (CS)
010
// pin 3 - LCD reset (RST)
011
Adafruit_PCD8544 display = Adafruit_PCD8544(5, 4, 3);
012
013
const
uint8_t IN_PIN = A3;
014
const
uint8_t OUT_PIN = 6;
015
const
uint8_t IN_PIN2 = A1;
016
const
uint8_t OUT_PIN2 = 8;
017
const
uint8_t IN_PIN3 = A2;
018
const
uint8_t OUT_PIN3 = 7;
019
const
uint8_t IN_PIN4 = A0;
020
const
uint8_t OUT_PIN4 = 9;
021
022
const
float
IN_CAP_TO_GND1 = 70.00;
023
const
float
IN_CAP_TO_GND2 = 71.00;
024
const
float
IN_CAP_TO_GND3 = 68.00;
025
const
float
IN_CAP_TO_GND4 = 70.00;
026
027
const
float
R_PULLUP = 34.80;
028
const
int
MAX_ADC_VALUE = 1023;
029
030
void
setup
() {
031
display.clearDisplay();
// Очищаем дисплей.
032
display.begin();
// Инициализируем дисплея.
033
display.display();
034
//display.setContrast(50); // Задаем контрастность дисплея.
035
display.setRotation(0);
// Переворачиваем дисплей.
036
display.invertDisplay(0);
// Инвертируем дисплей.
037
//display.setTextSize(1); // Задаем размер текста дисплея.
038
//display.setTextColor(BLACK,WHITE); // Задаем цвет шрифта дисплея.
039
}
040
//////////////////////////////КОНЕЦ(VOID SETUP)//////////////////////////////////
041
042
//--------------------------------НАЧАЛО(VOID LOOP)-------------------------------//
043
void
loop
() {
044
display.setCursor(5, 0);
045
display.print(F(
"TyT:"
));
046
display.setCursor(5, 8);
047
display.print(F(
"TaM:"
));
048
display.setCursor(28, 0);
049
display.print(F(
"1"
));
050
display.setCursor(35, 0);
051
display.print(F(
"2"
));
052
display.setCursor(42, 0);
053
display.print(F(
"3"
));
054
display.setCursor(49, 0);
055
display.print(F(
"4"
));
056
display.setCursor(56, 0);
057
display.print(F(
"5"
));
058
display.setCursor(63, 0);
059
display.print(F(
"6"
));
060
display.setCursor(70, 0);
061
display.print(F(
"7"
));
062
display.setCursor(77, 0);
063
display.print(F(
"8"
));
064
065
display.setCursor(0, 16);
066
display.print(F(
"(1-2)="
));
067
display.setCursor(0, 24);
068
display.print(F(
"(3-6)="
));
069
display.setCursor(0, 32);
070
display.print(F(
"(4-5)="
));
071
display.setCursor(0, 40);
072
display.print(F(
"(7-8)="
));
073
074
075
//----------------------------НАЧАЛО(1СТР. ИЗМЕРЕНИЕ ЕМКОСТИ)--------------------------//
076
077
/////////////////////////////1 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ/////////////////////////
078
pinMode(IN_PIN, INPUT);
079
digitalWrite(OUT_PIN, HIGH);
080
int
val = analogRead(IN_PIN);
081
digitalWrite(OUT_PIN, LOW);
082
083
if
(val < 970)
084
{
085
pinMode(IN_PIN, OUTPUT);
086
087
float
capacitance = (
float
)val * IN_CAP_TO_GND1 / (
float
)(MAX_ADC_VALUE - val);
088
delay (50);
089
display.setCursor(36, 16);
090
display.print(capacitance / 90, 0);
091
display.setCursor(65, 16);
092
display.print(F(
"M*C"
));
093
094
if
(capacitance < 100) {
095
display.setCursor(28, 8);
096
display.print(F(
"-"
));
097
display.setCursor(35, 8);
098
display.print(F(
"-"
));
099
}
100
101
else
if
(capacitance > 100) {
102
display.setCursor(28, 8);
103
display.print(F(
"|"
));
104
display.setCursor(35, 8);
105
display.print(F(
"|"
));
106
}
107
}
108
else
109
{
110
pinMode(IN_PIN, OUTPUT);
111
112
pinMode(OUT_PIN, INPUT_PULLUP);
113
unsigned
long
u1 = micros();
114
unsigned
long
t;
115
int
digVal;
116
117
do
118
{
119
digVal = digitalRead(OUT_PIN);
120
unsigned
long
u2 = micros();
121
t = u2 > u1 ? u2 - u1 : u1 - u2;
122
}
123
124
while
((digVal < 1) && (t < 400000L));
125
126
pinMode(OUT_PIN, INPUT);
127
val = analogRead(OUT_PIN);
128
digitalWrite(IN_PIN, HIGH);
129
int
dischargeTime = (
int
)(t / 10L) * 5;
130
delay(dischargeTime);
131
pinMode(OUT_PIN, OUTPUT);
132
digitalWrite(OUT_PIN, LOW);
133
digitalWrite(IN_PIN, LOW);
134
135
float
capacitance = +(
float
)t / R_PULLUP / log(2.94 - (
float
)val / (
float
)MAX_ADC_VALUE);
136
137
display.setCursor(36, 16);
138
display.print(capacitance / 0.041, 0);
139
display.setCursor(65, 16);
140
display.print(F(
"M*C"
));
141
display.setCursor(28, 8);
142
display.print(F(
"|"
));
143
display.setCursor(35, 8);
144
display.print(F(
"|"
));
145
}
146
pinMode(IN_PIN, INPUT);
147
pinMode(OUT_PIN, INPUT);
148
149
/////////////////////////////2 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ/////////////////////////////
150
pinMode(IN_PIN2, INPUT);
151
digitalWrite(OUT_PIN2, HIGH);
152
int
val2 = analogRead(IN_PIN2);
153
digitalWrite(OUT_PIN2, LOW);
154
155
if
(val2 < 970)
156
{
157
pinMode(IN_PIN2, OUTPUT);
158
159
float
capacitance2 = (
float
)val2 * IN_CAP_TO_GND2 / (
float
)(MAX_ADC_VALUE - val2);
160
delay (50);
161
display.setCursor(36, 24);
162
display.print(capacitance2 / 90, 0);
163
display.setCursor(65, 24);
164
display.print(F(
"M*C"
));
165
166
if
(capacitance2 < 100) {
167
display.setCursor(42, 8);
168
display.print(F(
"-"
));
169
display.setCursor(63, 8);
170
display.print(F(
"-"
));
171
}
172
173
else
if
(capacitance2 > 100) {
174
display.setCursor(42, 8);
175
display.print(F(
"|"
));
176
display.setCursor(63, 8);
177
display.print(F(
"|"
));
178
}
179
}
180
else
181
{
182
pinMode(IN_PIN2, OUTPUT);
183
184
pinMode(OUT_PIN2, INPUT_PULLUP);
185
unsigned
long
u3 = micros();
186
unsigned
long
t2;
187
int
digVal2;
188
189
do
190
{
191
digVal2 = digitalRead(OUT_PIN2);
192
unsigned
long
u4 = micros();
193
t2 = u4 > u3 ? u4 - u3 : u3 - u4;
194
}
195
196
while
((digVal2 < 1) && (t2 < 400000L));
197
198
pinMode(OUT_PIN2, INPUT);
199
val2 = analogRead(OUT_PIN2);
200
digitalWrite(IN_PIN2, HIGH);
201
202
int
dischargeTime2 = (
int
)(t2 / 10L) * 5;
203
delay(dischargeTime2);
204
205
pinMode(OUT_PIN2, OUTPUT);
206
digitalWrite(OUT_PIN2, LOW);
207
digitalWrite(IN_PIN2, LOW);
208
209
float
capacitance2 = +(
float
)t2 / R_PULLUP / log(2.22 - (
float
)val2 / (
float
)MAX_ADC_VALUE);
210
211
display.setCursor(36, 24);
212
display.print(capacitance2 / 0.041, 0);
213
display.setCursor(65, 24);
214
display.print(F(
"M*C"
));
215
display.setCursor(42, 8);
216
display.print(F(
"|"
));
217
display.setCursor(63, 8);
218
display.print(F(
"|"
));
219
}
220
pinMode(IN_PIN2, INPUT);
221
pinMode(OUT_PIN2, INPUT);
222
223
//////////////////////////////3 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ//////////////////////////////
224
pinMode(IN_PIN3, INPUT);
225
digitalWrite(OUT_PIN3, HIGH);
226
int
val3 = analogRead(IN_PIN3);
227
digitalWrite(OUT_PIN3, LOW);
228
229
if
(val3 < 970)
230
{
231
pinMode(IN_PIN3, OUTPUT);
232
233
float
capacitance3 = (
float
)val3 * IN_CAP_TO_GND3 / (
float
)(MAX_ADC_VALUE - val3);
234
delay (50);
235
display.setCursor(36, 32);
236
display.print(capacitance3 / 90, 0);
237
display.setCursor(65, 32);
238
display.print(F(
"M*C"
));
239
240
if
(capacitance3 < 100) {
241
display.setCursor(49, 8);
242
display.print(F(
"-"
));
243
display.setCursor(56, 8);
244
display.print(F(
"-"
));
245
}
246
247
else
if
(capacitance3 > 100) {
248
display.setCursor(49, 8);
249
display.print(F(
"|"
));
250
display.setCursor(56, 8);
251
display.print(F(
"|"
));
252
}
253
}
254
else
255
{
256
pinMode(IN_PIN3, OUTPUT);
257
258
pinMode(OUT_PIN3, INPUT_PULLUP);
259
unsigned
long
u5 = micros();
260
unsigned
long
t3;
261
int
digVal3;
262
263
do
264
{
265
digVal3 = digitalRead(OUT_PIN3);
266
unsigned
long
u6 = micros();
267
t3 = u6 > u5 ? u6 - u5 : u5 - u6;
268
}
269
270
while
((digVal3 < 1) && (t3 < 400000L));
271
272
pinMode(OUT_PIN3, INPUT);
273
val3 = analogRead(OUT_PIN3);
274
digitalWrite(IN_PIN3, HIGH);
275
276
int
dischargeTime3 = (
int
)(t3 / 10L) * 5;
277
delay(dischargeTime3);
278
pinMode(OUT_PIN3, OUTPUT);
279
digitalWrite(OUT_PIN3, LOW);
280
digitalWrite(IN_PIN3, LOW);
281
282
float
capacitance3 = +(
float
)t3 / R_PULLUP / log(2.93 - (
float
)val3 / (
float
)MAX_ADC_VALUE);
283
284
display.setCursor(36, 32);
285
display.print(capacitance3 / 0.041, 0);
286
display.setCursor(65, 32);
287
display.print(F(
"M*C"
));
288
display.setCursor(49, 8);
289
display.print(F(
"|"
));
290
display.setCursor(56, 8);
291
display.print(F(
"|"
));
292
}
293
pinMode(IN_PIN3, INPUT);
294
pinMode(OUT_PIN3, INPUT);
295
296
////////////////////////////////4 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ///////////////////////////
297
pinMode(IN_PIN4, INPUT);
298
digitalWrite(OUT_PIN4, HIGH);
299
int
val4 = analogRead(IN_PIN4);
300
digitalWrite(OUT_PIN4, LOW);
301
302
if
(val4 < 970)
303
{
304
pinMode(IN_PIN4, OUTPUT);
305
306
float
capacitance4 = (
float
)val4 * IN_CAP_TO_GND4 / (
float
)(MAX_ADC_VALUE - val4);
307
delay (50);
308
display.setCursor(36, 40);
309
display.print(capacitance4 / 90, 0);
310
display.setCursor(65, 40);
311
display.print(F(
"M*C"
));
312
313
if
(capacitance4 < 100) {
314
display.setCursor(70, 8);
315
display.print(F(
"-"
));
316
display.setCursor(77, 8);
317
display.print(F(
"-"
));
318
}
319
320
else
if
(capacitance4 > 100) {
321
display.setCursor(70, 8);
322
display.print(F(
"|"
));
323
display.setCursor(77, 8);
324
display.print(F(
"|"
));
325
}
326
327
}
328
else
329
{
330
pinMode(IN_PIN4, OUTPUT);
331
332
pinMode(OUT_PIN4, INPUT_PULLUP);
333
unsigned
long
u7 = micros();
334
unsigned
long
t4;
335
int
digVal4;
336
337
do
338
{
339
digVal4 = digitalRead(OUT_PIN4);
340
unsigned
long
u8 = micros();
341
t4 = u8 > u7 ? u8 - u7 : u7 - u8;
342
}
343
344
while
((digVal4 < 1) && (t4 < 400000L));
345
346
pinMode(OUT_PIN4, INPUT);
347
val4 = analogRead(OUT_PIN4);
348
digitalWrite(IN_PIN4, HIGH);
349
350
int
dischargeTime4 = (
int
)(t4 / 10L) * 5;
351
delay(dischargeTime4);
352
pinMode(OUT_PIN4, OUTPUT);
353
digitalWrite(OUT_PIN4, LOW);
354
digitalWrite(IN_PIN4, LOW);
355
356
float
capacitance4 = +(
float
)t4 / R_PULLUP / log(2.23 - (
float
)val4 / (
float
)MAX_ADC_VALUE);
357
358
display.setCursor(36, 40);
359
display.print(capacitance4 / 0.041, 0);
360
display.setCursor(65, 40);
361
display.print(F(
"M*C"
));
362
display.setCursor(70, 8);
363
display.print(F(
"|"
));
364
display.setCursor(77, 8);
365
display.print(F(
"|"
));
366
}
367
pinMode(IN_PIN4, INPUT);
368
pinMode(OUT_PIN4, INPUT);
369
370
////////////////////////////////КОНЕЦ(1СТР. ИЗМЕРЕНИЕ ЕМКОСТИ)////////////////////////////////
371
372
display.display();
373
display.clearDisplay();
374
}
375
/////////////////////////////////КОНЕЦ(VOID LOOP)////////////////////////////////////
Скетч использует 14762 байт (93%) памяти устройства. Всего доступно 15872 байт.
Глобальные переменные используют 727 байт (70%) динамической памяти, оставляя 297 байт для локальных переменных. Максимум: 1024 байт.
Не влезет :) У меня же не только измеритель длины кабеля по емкости, а приборчик 10 в 1. Я выше писал :) Хотя профи я думаю сможет всунуть и такой код в 168 атмегу :) У меня сейчас код занимает 23 840 байт
кстати тональный генератор с приёмником весьма хорошая вещь для монтажников, надысь пришлось из полсотни кабелей два десятка отбирать, генератора не было, обошлось разделкой всех кабелей на две патч-панели, с последующей переразделкой на рабочую, а был бы генератор кучу времени сэкономил бы
На Али имеется, надо будет заказать )))
Можно покумекать, как засунуть/улучшить. Штука полезная, если действительно работает.
Напишите мне на wrk.sadman@gmail.com, если хотите - на выходных посмотрю, что сделать можно.
1) Такую "простынку" надо прятать под "спойлер"
2) Чуть напильником пильнуть и со свистом в 168ю мегу влезет.
Вот так уже (даже с бутлоадером) влазит:
001
#include <SPI.h>
002
#include <Adafruit_GFX.h> // include adafruit graphics library
003
#include <Adafruit_PCD8544.h>
004
005
// Hardware SPI (faster, but must use certain hardware pins):
006
// SCK is LCD serial clock (SCLK) - this is pin 13 on Arduino Uno
007
// MOSI is LCD DIN - this is pin 11 on an Arduino Uno
008
// pin 5 - Data/Command select (D/C)
009
// pin 4 - LCD chip select (CS)
010
// pin 3 - LCD reset (RST)
011
Adafruit_PCD8544 display = Adafruit_PCD8544(5, 4, 3);
012
013
const
uint8_t IN_PIN = A3;
014
const
uint8_t OUT_PIN = 6;
015
const
uint8_t IN_PIN2 = A1;
016
const
uint8_t OUT_PIN2 = 8;
017
const
uint8_t IN_PIN3 = A2;
018
const
uint8_t OUT_PIN3 = 7;
019
const
uint8_t IN_PIN4 = A0;
020
const
uint8_t OUT_PIN4 = 9;
021
022
const
float
IN_CAP_TO_GND1 = 70.00;
023
const
float
IN_CAP_TO_GND2 = 71.00;
024
const
float
IN_CAP_TO_GND3 = 68.00;
025
const
float
IN_CAP_TO_GND4 = 70.00;
026
027
const
float
R_PULLUP = 34.80;
028
const
int
MAX_ADC_VALUE = 1023;
029
030
void
setup
() {
031
display.clearDisplay();
// Очищаем дисплей.
032
display.begin();
// Инициализируем дисплея.
033
display.display();
034
//display.setContrast(50); // Задаем контрастность дисплея.
035
display.setRotation(0);
// Переворачиваем дисплей.
036
display.invertDisplay(0);
// Инвертируем дисплей.
037
//display.setTextSize(1); // Задаем размер текста дисплея.
038
//display.setTextColor(BLACK,WHITE); // Задаем цвет шрифта дисплея.
039
}
040
//////////////////////////////КОНЕЦ(VOID SETUP)//////////////////////////////////
041
042
//--------------------------------НАЧАЛО(VOID LOOP)-------------------------------//
043
void
loop
() {
044
display.setCursor(5, 0);
045
display.print(F(
"TyT:"
));
046
display.setCursor(5, 8);
047
display.print(F(
"TaM:"
));
048
display.setCursor(28, 0);
049
display.print(F(
"1"
));
050
display.setCursor(35, 0);
051
display.print(F(
"2"
));
052
display.setCursor(42, 0);
053
display.print(F(
"3"
));
054
display.setCursor(49, 0);
055
display.print(F(
"4"
));
056
display.setCursor(56, 0);
057
display.print(F(
"5"
));
058
display.setCursor(63, 0);
059
display.print(F(
"6"
));
060
display.setCursor(70, 0);
061
display.print(F(
"7"
));
062
display.setCursor(77, 0);
063
display.print(F(
"8"
));
064
065
display.setCursor(0, 16);
066
display.print(F(
"(1-2)="
));
067
display.setCursor(0, 24);
068
display.print(F(
"(3-6)="
));
069
display.setCursor(0, 32);
070
display.print(F(
"(4-5)="
));
071
display.setCursor(0, 40);
072
display.print(F(
"(7-8)="
));
073
074
075
//----------------------------НАЧАЛО(1СТР. ИЗМЕРЕНИЕ ЕМКОСТИ)--------------------------//
076
077
/////////////////////////////1 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ/////////////////////////
078
pinMode(IN_PIN, INPUT);
079
digitalWrite(OUT_PIN, HIGH);
080
int
val = analogRead(IN_PIN);
081
digitalWrite(OUT_PIN, LOW);
082
083
if
(val < 970)
084
{
085
pinMode(IN_PIN, OUTPUT);
086
087
float
capacitance = (
float
)val * IN_CAP_TO_GND1 / (
float
)(MAX_ADC_VALUE - val);
088
delay (50);
089
display.setCursor(36, 16);
090
display.print(capacitance / 90, 0);
091
display.setCursor(65, 16);
092
display.print(F(
"M*C"
));
093
094
if
(capacitance < 100) {
095
display.setCursor(28, 8);
096
display.print(F(
"-"
));
097
display.setCursor(35, 8);
098
display.print(F(
"-"
));
099
}
100
101
else
if
(capacitance > 100) {
102
display.setCursor(28, 8);
103
display.print(F(
"|"
));
104
display.setCursor(35, 8);
105
display.print(F(
"|"
));
106
}
107
}
108
else
109
{
110
pinMode(IN_PIN, OUTPUT);
111
112
pinMode(OUT_PIN, INPUT_PULLUP);
113
unsigned
long
u1 = micros();
114
unsigned
long
t;
115
int
digVal;
116
117
do
118
{
119
digVal = digitalRead(OUT_PIN);
120
unsigned
long
u2 = micros();
121
t = u2 > u1 ? u2 - u1 : u1 - u2;
122
}
123
124
while
((digVal < 1) && (t < 400000L));
125
126
pinMode(OUT_PIN, INPUT);
127
val = analogRead(OUT_PIN);
128
digitalWrite(IN_PIN, HIGH);
129
int
dischargeTime = (
int
)(t / 10L) * 5;
130
delay(dischargeTime);
131
pinMode(OUT_PIN, OUTPUT);
132
digitalWrite(OUT_PIN, LOW);
133
digitalWrite(IN_PIN, LOW);
134
135
float
capacitance = +(
float
)t / R_PULLUP / log(2.94 - (
float
)val / (
float
)MAX_ADC_VALUE);
136
137
display.setCursor(36, 16);
138
display.print(capacitance / 0.041, 0);
139
display.setCursor(65, 16);
140
display.print(F(
"M*C"
));
141
display.setCursor(28, 8);
142
display.print(F(
"|"
));
143
display.setCursor(35, 8);
144
display.print(F(
"|"
));
145
}
146
pinMode(IN_PIN, INPUT);
147
pinMode(OUT_PIN, INPUT);
148
149
/////////////////////////////2 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ/////////////////////////////
150
pinMode(IN_PIN2, INPUT);
151
digitalWrite(OUT_PIN2, HIGH);
152
int
val2 = analogRead(IN_PIN2);
153
digitalWrite(OUT_PIN2, LOW);
154
155
if
(val2 < 970)
156
{
157
pinMode(IN_PIN2, OUTPUT);
158
159
float
capacitance2 = (
float
)val2 * IN_CAP_TO_GND2 / (
float
)(MAX_ADC_VALUE - val2);
160
delay (50);
161
display.setCursor(36, 24);
162
display.print(capacitance2 / 90, 0);
163
display.setCursor(65, 24);
164
display.print(F(
"M*C"
));
165
166
if
(capacitance2 < 100) {
167
display.setCursor(42, 8);
168
display.print(F(
"-"
));
169
display.setCursor(63, 8);
170
display.print(F(
"-"
));
171
}
172
173
else
if
(capacitance2 > 100) {
174
display.setCursor(42, 8);
175
display.print(F(
"|"
));
176
display.setCursor(63, 8);
177
display.print(F(
"|"
));
178
}
179
}
180
else
181
{
182
pinMode(IN_PIN2, OUTPUT);
183
184
pinMode(OUT_PIN2, INPUT_PULLUP);
185
unsigned
long
u3 = micros();
186
unsigned
long
t2;
187
int
digVal2;
188
189
do
190
{
191
digVal2 = digitalRead(OUT_PIN2);
192
unsigned
long
u4 = micros();
193
t2 = u4 > u3 ? u4 - u3 : u3 - u4;
194
}
195
196
while
((digVal2 < 1) && (t2 < 400000L));
197
198
pinMode(OUT_PIN2, INPUT);
199
val2 = analogRead(OUT_PIN2);
200
digitalWrite(IN_PIN2, HIGH);
201
202
int
dischargeTime2 = (
int
)(t2 / 10L) * 5;
203
delay(dischargeTime2);
204
205
pinMode(OUT_PIN2, OUTPUT);
206
digitalWrite(OUT_PIN2, LOW);
207
digitalWrite(IN_PIN2, LOW);
208
209
float
capacitance2 = +(
float
)t2 / R_PULLUP / log(2.22 - (
float
)val2 / (
float
)MAX_ADC_VALUE);
210
211
display.setCursor(36, 24);
212
display.print(capacitance2 / 0.041, 0);
213
display.setCursor(65, 24);
214
display.print(F(
"M*C"
));
215
display.setCursor(42, 8);
216
display.print(F(
"|"
));
217
display.setCursor(63, 8);
218
display.print(F(
"|"
));
219
}
220
pinMode(IN_PIN2, INPUT);
221
pinMode(OUT_PIN2, INPUT);
222
223
//////////////////////////////3 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ//////////////////////////////
224
pinMode(IN_PIN3, INPUT);
225
digitalWrite(OUT_PIN3, HIGH);
226
int
val3 = analogRead(IN_PIN3);
227
digitalWrite(OUT_PIN3, LOW);
228
229
if
(val3 < 970)
230
{
231
pinMode(IN_PIN3, OUTPUT);
232
233
float
capacitance3 = (
float
)val3 * IN_CAP_TO_GND3 / (
float
)(MAX_ADC_VALUE - val3);
234
delay (50);
235
display.setCursor(36, 32);
236
display.print(capacitance3 / 90, 0);
237
display.setCursor(65, 32);
238
display.print(F(
"M*C"
));
239
240
if
(capacitance3 < 100) {
241
display.setCursor(49, 8);
242
display.print(F(
"-"
));
243
display.setCursor(56, 8);
244
display.print(F(
"-"
));
245
}
246
247
else
if
(capacitance3 > 100) {
248
display.setCursor(49, 8);
249
display.print(F(
"|"
));
250
display.setCursor(56, 8);
251
display.print(F(
"|"
));
252
}
253
}
254
else
255
{
256
pinMode(IN_PIN3, OUTPUT);
257
258
pinMode(OUT_PIN3, INPUT_PULLUP);
259
unsigned
long
u5 = micros();
260
unsigned
long
t3;
261
int
digVal3;
262
263
do
264
{
265
digVal3 = digitalRead(OUT_PIN3);
266
unsigned
long
u6 = micros();
267
t3 = u6 > u5 ? u6 - u5 : u5 - u6;
268
}
269
270
while
((digVal3 < 1) && (t3 < 400000L));
271
272
pinMode(OUT_PIN3, INPUT);
273
val3 = analogRead(OUT_PIN3);
274
digitalWrite(IN_PIN3, HIGH);
275
276
int
dischargeTime3 = (
int
)(t3 / 10L) * 5;
277
delay(dischargeTime3);
278
pinMode(OUT_PIN3, OUTPUT);
279
digitalWrite(OUT_PIN3, LOW);
280
digitalWrite(IN_PIN3, LOW);
281
282
float
capacitance3 = +(
float
)t3 / R_PULLUP / log(2.93 - (
float
)val3 / (
float
)MAX_ADC_VALUE);
283
284
display.setCursor(36, 32);
285
display.print(capacitance3 / 0.041, 0);
286
display.setCursor(65, 32);
287
display.print(F(
"M*C"
));
288
display.setCursor(49, 8);
289
display.print(F(
"|"
));
290
display.setCursor(56, 8);
291
display.print(F(
"|"
));
292
}
293
pinMode(IN_PIN3, INPUT);
294
pinMode(OUT_PIN3, INPUT);
295
296
////////////////////////////////4 КАНАЛ ВЫЧИСЛЕНИЯ И ЦИФРЫ///////////////////////////
297
pinMode(IN_PIN4, INPUT);
298
digitalWrite(OUT_PIN4, HIGH);
299
int
val4 = analogRead(IN_PIN4);
300
digitalWrite(OUT_PIN4, LOW);
301
302
if
(val4 < 970)
303
{
304
pinMode(IN_PIN4, OUTPUT);
305
306
float
capacitance4 = (
float
)val4 * IN_CAP_TO_GND4 / (
float
)(MAX_ADC_VALUE - val4);
307
delay (50);
308
display.setCursor(36, 40);
309
display.print(capacitance4 / 90, 0);
310
display.setCursor(65, 40);
311
display.print(F(
"M*C"
));
312
313
if
(capacitance4 < 100) {
314
display.setCursor(70, 8);
315
display.print(F(
"-"
));
316
display.setCursor(77, 8);
317
display.print(F(
"-"
));
318
}
319
320
else
if
(capacitance4 > 100) {
321
display.setCursor(70, 8);
322
display.print(F(
"|"
));
323
display.setCursor(77, 8);
324
display.print(F(
"|"
));
325
}
326
327
}
328
else
329
{
330
pinMode(IN_PIN4, OUTPUT);
331
332
pinMode(OUT_PIN4, INPUT_PULLUP);
333
unsigned
long
u7 = micros();
334
unsigned
long
t4;
335
int
digVal4;
336
337
do
338
{
339
digVal4 = digitalRead(OUT_PIN4);
340
unsigned
long
u8 = micros();
341
t4 = u8 > u7 ? u8 - u7 : u7 - u8;
342
}
343
344
while
((digVal4 < 1) && (t4 < 400000L));
345
346
pinMode(OUT_PIN4, INPUT);
347
val4 = analogRead(OUT_PIN4);
348
digitalWrite(IN_PIN4, HIGH);
349
350
int
dischargeTime4 = (
int
)(t4 / 10L) * 5;
351
delay(dischargeTime4);
352
pinMode(OUT_PIN4, OUTPUT);
353
digitalWrite(OUT_PIN4, LOW);
354
digitalWrite(IN_PIN4, LOW);
355
356
float
capacitance4 = +(
float
)t4 / R_PULLUP / log(2.23 - (
float
)val4 / (
float
)MAX_ADC_VALUE);
357
358
display.setCursor(36, 40);
359
display.print(capacitance4 / 0.041, 0);
360
display.setCursor(65, 40);
361
display.print(F(
"M*C"
));
362
display.setCursor(70, 8);
363
display.print(F(
"|"
));
364
display.setCursor(77, 8);
365
display.print(F(
"|"
));
366
}
367
pinMode(IN_PIN4, INPUT);
368
pinMode(OUT_PIN4, INPUT);
369
370
////////////////////////////////КОНЕЦ(1СТР. ИЗМЕРЕНИЕ ЕМКОСТИ)////////////////////////////////
371
372
display.display();
373
display.clearDisplay();
374
}
375
/////////////////////////////////КОНЕЦ(VOID LOOP)////////////////////////////////////
Скетч использует 14762 байт (93%) памяти устройства. Всего доступно 15872 байт.
Глобальные переменные используют 727 байт (70%) динамической памяти, оставляя 297 байт для локальных переменных. Максимум: 1024 байт.
Не влезет :) У меня же не только измеритель длины кабеля по емкости, а приборчик 10 в 1. Я выше писал :) Хотя профи я думаю сможет всунуть и такой код в 168 атмегу :) У меня сейчас код занимает 23 840 байт
Да я же даже не разбирался в коде, просто «пильнул чтобы влезло», садмана послушай (если интересно).
кстати тональный генератор с приёмником весьма хорошая вещь для монтажников, надысь пришлось из полсотни кабелей два десятка отбирать, генератора не было, обошлось разделкой всех кабелей на две патч-панели, с последующей переразделкой на рабочую, а был бы генератор кучу времени сэкономил бы
На Али имеется, надо будет заказать )))
Вместо приемника использовал смартфон с прогой Анализатор спектра и приблудой (на полевом транзисторе) втыкаемой в разьем для гарнитуры.
Что именно засунуть/улучшить ? :)
Что именно засунуть/улучшить ? :)
там все можно улучшить, отпишись Садману, пока у него интерес не пропал
Вот кстати я снял видео обзор моего приборчика со всеми функциями - https://www.youtube.com/watch?v=P69QBf6Dyfo
Возможно делать измерения по одному входу как здесь https://vrtp.ru/index.php?s=0b11e4a95abe4123cc7f0b60b53c49da&showtopic=26444&st=0
Возможно делать измерения по одному входу как здесь https://vrtp.ru/index.php?s=0b11e4a95abe4123cc7f0b60b53c49da&showtopic=26444&st=0
Нет, один вход для измерения длины кабеля по емкости, также поиск обрыва.
Второй вход - для измерения длины кабеля по сопротивлению + звуковая сигнализация некачественного кабеля , окисленных контактов RJ45 и плохого обжима коннекторов.
Третий выход для поиска кабеля в пучке кабелей тон генератором и анализатором спектра на смартфоне.
Возможно выложить вашу полную схему и скетч? Есть у вас защита по входах? Есть практика применения подобных устройств и бывали случаи что на линиях было напряжение больше 5В.
Passive POE может поджарить атмегу - это верно.
Возможно выложить вашу полную схему и скетч? Есть у вас защита по входах? Есть практика применения подобных устройств и бывали случаи что на линиях было напряжение больше 5В.
Приборчик пока ещё в процессе разработки и экспериментов, что-то добавляется, что-то убирается. Защиты по входу еще не ставил. Пока не было случаев, чтобы на линии связи было более 5 вольт. В основном пассивные, управляемые свитчи, роутеры, все без POE
Возможно выложить вашу полную схему и скетч? Есть у вас защита по входах? Есть практика применения подобных устройств и бывали случаи что на линиях было напряжение больше 5В.
Приборчик пока ещё в процессе разработки и экспериментов, что-то добавляется, что-то убирается. Защиты по входу еще не ставил. Пока не было случаев, чтобы на линии связи было более 5 вольт. В основном пассивные, управляемые свитчи, роутеры, все без POE
Схемка пока такая:
Можно увидеть схему детектора на полевом транзисторе резисторе и конденсаторе и кусок кода, который формирует для них сигнал ?
Кусок кода - простой tone на определенных частотах.
Можно увидеть схему детектора на полевом транзисторе резисторе и конденсаторе и кусок кода, который формирует для них сигнал ?
Можно увидеть схему детектора на полевом транзисторе резисторе и конденсаторе и кусок кода, который формирует для них сигнал ?
01
void
str_5()
02
{
03
display.setCursor(2, 1);
04
display.print(
"<- GENERATOR"
);
05
display.setCursor(15, 12);
06
display.print(
"13 KHZ(1-2)"
);
07
08
tone(6, 13000);
// ТОН на пине 6 (13 кГц)
09
}
10
11
void
str_6()
12
{
13
display.setCursor(2, 1);
14
display.print(
"<- GENERATOR"
);
15
display.setCursor(15, 12);
16
display.print(
"18 KHZ(3-6)"
);
17
18
noTone(6);
19
tone(9, 18000);
// ТОН на пине 9 (18 кГц)
20
}
вот такой прибор можно использовать для некоторых функций -
всем привет! накидал в редакторе плату и заказал ее изготовление в китае, вдохновившись успехом автора, но допустил ошибку в проектировании и не задействовал функционал кнопки. теперь у меня получилось хоть и функциональное (на что я надеюсь) устройство, но без кнопки. сейчас стал разбираться в рисунке схемы подключения автора оригинального поста и вижу, что пин D2 подтягивается резистором к земле, и дальше уходит пунктирная линия, но, я не понимаю куда. хотел бы попросить помощи: как можно подключить кнопку, чтобы не сильно вмешиваться в печатную плату, пусть даже навесным монтажом? еще очень было бы интересно посмотреть, как выглядит устройство у тех, кто его уже собрал
На +5 через кнопку. Контакты замкнуты на пине HIGH, разомкнуты - LOW...
всем привет! накидал в редакторе плату и заказал ее изготовление в китае, вдохновившись успехом автора, но допустил ошибку в проектировании и не задействовал функционал кнопки. теперь у меня получилось хоть и функциональное (на что я надеюсь) устройство, но без кнопки. сейчас стал разбираться в рисунке схемы подключения автора оригинального поста и вижу, что пин D2 подтягивается резистором к земле, и дальше уходит пунктирная линия, но, я не понимаю куда. хотел бы попросить помощи: как можно подключить кнопку, чтобы не сильно вмешиваться в печатную плату, пусть даже навесным монтажом? еще очень было бы интересно посмотреть, как выглядит устройство у тех, кто его уже собрал
Пин D2 замыкается через кнопку на +5 вольт, тем самым осуществляется переключение подпунктов меню.
Но вы рано плату заказали, ещё ведутся экспериментальные работы по модернизации прошивки и схемы измерителя. На данный момент ведутся работы по устранению межканального влияния витой пары (межпарная емкость) на корректность показаний.
к такой плате просится цветной дисплейчик на st7735
Но вы рано плату заказали, ещё ведутся экспериментальные работы по модернизации прошивки и схемы измерителя.
ничего страшного, меня интересует только возможность поиска провода (режим генератора) и прозвонка розеток на предмет перепутанных пар
к такой плате просится цветной дисплейчик на st7735
Я пробовал на st7735, но потребляемый ток намного больше и на солнце плохо видно, зато красиво )
Но вы рано плату заказали, ещё ведутся экспериментальные работы по модернизации прошивки и схемы измерителя.
ничего страшного, меня интересует только возможность поиска провода (режим генератора) и прозвонка розеток на предмет перепутанных пар
Ну скажем так, поиск кабеля получится только в том случае, если с другой стороны кабель никуда не подключен, иначе через свитч этот сигнал будет наводится на все кабеля, которые вставлены в свитч или роутер.
Перепутанность пар этот приборчик не определит. Задумка была сделать приборчик только для измерения длины кабеля каждой пары по емкости и по сопротивлению. По емкости - для поиска обрыва кабеля. По сопротивлению - для определения качества обжима коннекторов и определения длины кабеля до свитча.
Но вы рано плату заказали, ещё ведутся экспериментальные работы по модернизации прошивки и схемы измерителя.
ничего страшного, меня интересует только возможность поиска провода (режим генератора) и прозвонка розеток на предмет перепутанных пар
На предмет перепутанности пар можно использовать самый дешевый тестер на светодиодах.
Не совсем понял по схеме как подключать провод для измерения его емкости. Прошу пояснить.