Forum: Compiler & IDEs Autorange 3 Kanal Ohmmeter Schalt Problem


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Joel L. (joel_l)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe ähnlich nach diesen Schaltbild (Anhang) ein drei Kanal Ohmmeter 
mit je 3x3 PNP aufgebaut.

Nun gibt es aber ein Problem mit den Sketch. Und zwar schaltet der 
Arduino nicht die PNP durch, sondern bleibt immer bei den Setup PNP der 
mit einer Variable als Startwert definiert wurde:

channel = 0;
channel2 = 0;
channel3 = 0;

Ich habe auch schon andere Sketch mit der Funktion "Switch" erstellt, 
aber das selbe Problem wie wenn ich die PNP mit einer if Schleife 
ansteuere.

Sobald die Bedinungsschleife erfüllt würden ist:
1
if (volt_bit1 < 341 && channel < 2) {
2
   channel++;
3
  }
4
5
 
6
  if (volt_bit1 > 853 && channel > 0) {
7
    channel--;
8
  }

Kann man am Printout sehen dass der Kanal sich ändert:
1
if (volt_bit1 < 1000 && channel == 0) {
2
    float value = (float)volt_bit1*100000/(1024 - volt_bit1);
3
    Serial.print(value);
4
    Serial.print(" ohm");
5
    Serial.print("    Messkanal ");
6
    Serial.print(channel);
7
    Serial.print("  bit ");
8
    Serial.print(volt_bit1);
9
    Serial.print("\t");
10
  }

Aber leider schaltet der PNP dazu nicht, das kann man über die Abfrage 
von "volt_bit1" festestellen. Die Kanallogik ändert sich zwar aber der 
PNP reagiert nicht:
1
if (channel == 0) {
2
     digitalWrite(CH1, HIGH);
3
     digitalWrite(CH2, HIGH);
4
     digitalWrite(CH3, LOW);
5
  }
6
    
7
  if (channel == 1) {
8
     digitalWrite(CH1, HIGH);
9
     digitalWrite(CH2, LOW);
10
     digitalWrite(CH3, HIGH);
11
  }
12
  
13
  if (channel == 2) {
14
     digitalWrite(CH1, LOW);
15
     digitalWrite(CH2, HIGH);
16
     digitalWrite(CH3, HIGH);
17
  }

Defekt sind die PNP nicht. Denn wenn die Kanalvariable geändert wird:

channel = 0;
channel2 = 0;
channel3 = 0;

Dann wird dementsprechen ein anderer PNP angesteuert. Ich habe es 
Anfangs mit "Switch" versucht, war aber das selbe Problem:
1
switch(n) {
2
    case 0:
3
      digitalWrite(CH0, LOW);
4
      digitalWrite(CH1, HIGH);
5
      digitalWrite(CH2, HIGH);
6
      digitalWrite(CH3, HIGH);
7
      break;
8
    case 1:

Ich versteh nicht warum die funktionierende Schaltlogik nicht angenommen 
wird:
1
if (volt_bit1 < 341 && channel < 2) {
2
   channel++;
3
  }
4
5
 
6
  if (volt_bit1 > 853 && channel > 0) {
7
    channel--;
8
  }

Die sollte doch ganz klar diese Bedingung schalten lassen:
1
if (channel == 0) {
2
     digitalWrite(CH1, HIGH);
3
     digitalWrite(CH2, HIGH);
4
     digitalWrite(CH3, LOW);
5
  }

Der ausgelesene Kanal (Schaltlogik) ändert sicht, aber nicht die 
tatsächliche Schaltung des jeweiligen PNP.

Irgendwie werde ich aus der Programmiersprache C nicht schlau...



Hier mal der komplette Sketch:
1
#define CH1  5
2
#define CH2  6
3
#define CH3  7
4
#define CH4  8
5
#define CH5  9
6
#define CH6  10
7
#define CH7  11
8
#define CH8  12
9
#define CH9  13
10
11
byte channel;
12
byte channel2;
13
byte channel3;
14
15
16
17
void setup() {
18
  Serial.begin(9600);
19
20
  pinMode(CH1, OUTPUT);
21
  pinMode(CH2, OUTPUT);
22
  pinMode(CH3, OUTPUT);
23
  pinMode(CH4, OUTPUT);
24
  pinMode(CH5, OUTPUT);
25
  pinMode(CH6, OUTPUT);
26
  pinMode(CH7, OUTPUT);
27
  pinMode(CH8, OUTPUT);
28
  pinMode(CH9, OUTPUT);
29
30
  channel = 0;
31
  channel2 = 0;
32
  channel3 = 0;
33
 
34
35
}
36
37
void loop() {
38
  
39
  uint16_t volt_bit1 = analogRead(A3);
40
  uint16_t volt_bit2 = analogRead(A4);
41
  uint16_t volt_bit3 = analogRead(A5);
42
43
44
 if (volt_bit1 < 341 && channel < 2) {
45
   channel++;
46
  }
47
48
 
49
  if (volt_bit1 > 853 && channel > 0) {
50
    channel--;
51
  }
52
53
  
54
  if (channel == 0) {
55
     digitalWrite(CH1, HIGH);
56
     digitalWrite(CH2, HIGH);
57
     digitalWrite(CH3, LOW);
58
  }
59
    
60
  if (channel == 1) {
61
     digitalWrite(CH1, HIGH);
62
     digitalWrite(CH2, LOW);
63
     digitalWrite(CH3, HIGH);
64
  }
65
  
66
  if (channel == 2) {
67
     digitalWrite(CH1, LOW);
68
     digitalWrite(CH2, HIGH);
69
     digitalWrite(CH3, HIGH);
70
  } 
71
72
73
 if (volt_bit1 < 1000 && channel == 0) {
74
    float value = (float)volt_bit1*100000/(1024 - volt_bit1);
75
    Serial.print(value);
76
    Serial.print(" ohm");
77
    Serial.print("    Messkanal ");
78
    Serial.print(channel);
79
    Serial.print("  bit ");
80
    Serial.print(volt_bit1);
81
    Serial.print("\t");
82
  }
83
  else if (volt_bit1 < 1000 && channel == 1) {
84
    float value = (float)volt_bit1*10000/(1024 - volt_bit1);
85
    Serial.print(value);
86
    Serial.print(" ohm");
87
    Serial.print("    Messkanal ");
88
    Serial.print(channel);
89
    Serial.print("  bit ");
90
    Serial.print(volt_bit1);
91
    Serial.print("\t");
92
  }
93
  else if (volt_bit1 < 1000 && channel == 2) {
94
    float value = (float)volt_bit1*1000/(1024 - volt_bit1);
95
    Serial.print(value);
96
    Serial.print(" ohm");
97
    Serial.print("    Messkanal ");
98
    Serial.print(channel);
99
    Serial.print("  bit ");
100
    Serial.print(volt_bit1);
101
    Serial.print("\t");
102
  }
103
  else
104
    Serial.print("Overload");
105
    Serial.print("    Messkanal ");
106
    Serial.print(channel);
107
    Serial.print("  bit ");
108
    Serial.print(volt_bit1);
109
    Serial.print("\t");
110
 
111
    delay(500);
112
113
114
115
  if (volt_bit2 < 341 && channel2 < 2) {
116
    channel2++;
117
  }
118
119
120
  if (volt_bit2 > 853 && channel2 > 0) {
121
    channel2--;
122
  }
123
124
125
  if (channel2 == 0) {
126
     digitalWrite(CH4, HIGH);
127
     digitalWrite(CH5, HIGH);
128
     digitalWrite(CH6, LOW);
129
  }
130
    
131
  if (channel2 == 1) {
132
     digitalWrite(CH4, HIGH);
133
     digitalWrite(CH5, LOW);
134
     digitalWrite(CH6, HIGH);
135
  }
136
  
137
  if (channel2 == 2) {
138
     digitalWrite(CH4, LOW);
139
     digitalWrite(CH5, HIGH);
140
     digitalWrite(CH6, HIGH);
141
  } 
142
143
 if (volt_bit2 < 1000 && channel2 == 0) {
144
    float value2 = (float)volt_bit2*100000/(1024 - volt_bit2);
145
    Serial.print(value2);
146
    Serial.print(" ohm");
147
    Serial.print("    Messkanal ");
148
    Serial.print(channel2);
149
    Serial.print("  bit ");
150
    Serial.print(volt_bit2);
151
    Serial.print("\t");
152
  }
153
  else if (volt_bit2 < 1000 && channel2 == 1) {
154
    float value2 = (float)volt_bit2*10000/(1024 - volt_bit2);
155
    Serial.print(value2);
156
    Serial.print(" ohm");
157
    Serial.print("    Messkanal ");
158
    Serial.print(channel2);
159
    Serial.print("  bit ");
160
    Serial.print(volt_bit2);
161
    Serial.print("\t");
162
  }
163
  else if (volt_bit2 < 1000 && channel2 == 2) {
164
    float value2 = (float)volt_bit2*1000/(1024 - volt_bit2);
165
    Serial.print(value2);
166
    Serial.print(" ohm");
167
    Serial.print("    Messkanal ");
168
    Serial.print(channel2);
169
    Serial.print("\t");
170
  }
171
  else
172
    Serial.print("Overload ");
173
    Serial.print("    Messkanal ");
174
    Serial.print(channel2);
175
    Serial.print("  bit ");
176
    Serial.print(volt_bit2);
177
    Serial.print("\t");
178
 
179
    delay(500); 
180
181
182
183
 if (volt_bit3 < 341 && channel3 < 2) {
184
    channel3++;
185
  }
186
187
  
188
  if (volt_bit3 > 853 && channel3 > 0) {
189
    channel3--;
190
  }
191
192
  if (channel3 == 0) {
193
     digitalWrite(CH7, HIGH);
194
     digitalWrite(CH8, HIGH);
195
     digitalWrite(CH9, LOW);
196
  }
197
    
198
  if (channel3 == 1) {
199
     digitalWrite(CH7, HIGH);
200
     digitalWrite(CH8, LOW);
201
     digitalWrite(CH9, HIGH);
202
  }
203
  
204
  if (channel3 == 2) {
205
     digitalWrite(CH7, LOW);
206
     digitalWrite(CH8, HIGH);
207
     digitalWrite(CH9, HIGH);
208
  } 
209
210
211
 if (volt_bit3 < 1000 && channel3 == 0) {
212
    float value3 = (float)volt_bit3*100000/(1024 - volt_bit3);
213
    Serial.print(value3);
214
    Serial.print(" ohm");
215
    Serial.print("    Messkanal ");
216
    Serial.print(channel3);
217
    Serial.print("  bit ");
218
    Serial.print(volt_bit3);
219
    Serial.println("");
220
  }
221
  else if (volt_bit3 < 1000 && channel3 == 1) {
222
    float value3 = (float)volt_bit3*10000/(1024 - volt_bit3);
223
    Serial.print(value3);
224
    Serial.print(" ohm");
225
    Serial.print("    Messkanal ");
226
    Serial.print(channel3);
227
    Serial.print("  bit ");
228
    Serial.print(volt_bit3);
229
    Serial.println("");
230
  }
231
  else if (volt_bit3 < 1000 && channel2 == 2) {
232
    float value3 = (float)volt_bit3*1000/(1024 - volt_bit3);
233
    Serial.print(value3);
234
    Serial.print(" ohm");
235
    Serial.print("    Messkanal ");
236
    Serial.print(channel3);
237
    Serial.print("  bit ");
238
    Serial.print(volt_bit3);
239
    Serial.println("");
240
  }
241
  else
242
    Serial.print("Overload");
243
    Serial.print("    Messkanal ");
244
    Serial.print(channel3);
245
    Serial.print("  bit ");
246
    Serial.print(volt_bit3);
247
    Serial.println("");
248
 
249
    delay(500); 
250
251
}

von W.S. (Gast)


Lesenswert?

Joel L. schrieb:
> ich habe ähnlich nach diesen Schaltbild (Anhang) ein drei Kanal Ohmmeter
> mit je 3x3 PNP aufgebaut.
>
> Nun gibt es aber ein Problem mit den Sketch. Und zwar schaltet der
> Arduino nicht die PNP durch, sondern bleibt immer bei den Setup PNP der
> mit einer Variable als Startwert definiert wurde

Nein, ich will hier nicht mit dir diskutieren, wie man aus 9 
pnp-Transistoren ein Ohmmeter baut oder so. Aber mir fällt auf, wie 
nebulös du deine Probleme beschreibst.
Was ist denn nun anders, als du es dir vorgestellt hast?
a) schalten die betreffenden Portpins nun (mit dem Voltmeter meßbar) auf 
die gewünschten Pegel? Wenn ja, dann liegt es an der Verschaltung deiner 
Transistoren oder daran, daß du beim Bestücken in die verkehrte Tüte 
gegriffen hast.
b) kommst du mit der Programmierung nicht klar, so daß die Funktionen 
zum Schalten der Portpins nicht oder falsch aufgerufen werden? Wenn ja, 
dann versuche mal zu verstehen, was welche Ausdrücke in C zu welchem 
Verhalten führen.

W.S.

von Joel L. (joel_l)


Lesenswert?

Mit anderen Worten, Du hast keine Ahnung!

von mIstA (Gast)


Lesenswert?

So richtig Ahnung, was Du da zu machen versuchst, hab ich nach Deinem 
verworrenen Post ehrlich gesagt auch nicht, aber eins sticht mir bei 
Deinem Sketch direkt ins Auge:

Du liest Deine Meßwerte ein, wechselst dann eventuell den Meßbereich und 
anschließend berechnest Du Dein Ergebnis aus dem originalen Meßwert aber 
für den ggf. veränderten Bereich.

von Teo D. (teoderix)


Angehängte Dateien:

Lesenswert?

Joel L. schrieb:
> Mit anderen Worten, Du hast keine Ahnung!

Das zweite Loch im Knie.... BB

von Peter D. (peda)


Lesenswert?

Joel L. schrieb:
> uint16_t volt_bit1 = analogRead(A3);
>   uint16_t volt_bit2 = analogRead(A4);
>   uint16_t volt_bit3 = analogRead(A5);

Wozu soll das sein?
Lt. Schaltplan benutzt Du A1.

Der Code stimmt doch vorn und hinten nicht!
Erstell Dir erstmal in Worten einen Programmablaufplan, erst dann kann 
man nämlich danach programmieren.
Schlechte Profis erstellen gerne mal den PAP im Kopf, aber soweit bist 
Du noch lange nicht.
Gute Profis nehmen auch erstmal Papier und stift.

von Joel L. (joel_l)


Lesenswert?

Peter D. schrieb:
> Joel L. schrieb:
>> uint16_t volt_bit1 = analogRead(A3);
>>   uint16_t volt_bit2 = analogRead(A4);
>>   uint16_t volt_bit3 = analogRead(A5);
>
> Wozu soll das sein?


Drei Kanal Ohmmeter mit jeweils 3x3 PNP und somit drei analogen 
Messkanälen, hier also A3 - A5.

Einfach die Beispielschaltung bildlich mit drei multiplizieren. Auf der 
Beispielschaltung sieht man nur einen Messkanal.

Inzwischen bin ich etwas weiter:

https://www.arduinoforum.de/arduino-Thread-Autorange-Ohmmeter-mit-Taktung?pid=99693#pid99693

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Hast Du bedacht, daß es bei 100k ne ganze Weile braucht, ehe die 100nF 
auf den Endwert umgeladen sind?
Ich würde die Bereichsumschaltung erstmal nur für einen Eingang 
entwickeln, also nicht alles auf einmal. Teilaufgaben programmieren und 
testen sich erheblich leichter.
Und ruhig in Funktionen unterteilen, nicht alles als Spaghetticode 
hintereinander klatschen.

Und ist es wirklich so schwer, einen stimmenden Schaltplan zu zeichnen?
Papier, Bleistift und Smartphone sind doch schon erfunden.

: Bearbeitet durch User
von Joel L. (joel_l)


Lesenswert?

Peter D. schrieb:
> Hast Du bedacht, daß es bei 100k ne ganze Weile braucht, ehe die 100nF
> auf den Endwert umgeladen sind?

Ohne angeschlossenen Widerstand ist der Kondensator spätestens nach  ~ 
sechs Sekunden entladen.


> Ich würde die Bereichsumschaltung erstmal nur für einen Eingang
> entwickeln, also nicht alles auf einmal. Teilaufgaben programmieren und
> testen sich erheblich leichter.

Habe ich auch schon gemacht. Schlauer bin ich dadurch nicht geworden. 
Der Microcontroller macht was er will und die Fehler sind alle nicht 
reproduzierbar. Auch wenn ich im Ausschlussverfahren jede Code Zeile 
teste.
Zum Glück bin ich nie Programmierer geworden. Eigentlich sollte man 
erwarten das Befehle eben funktionieren. Dem scheint aber nicht so zu 
sein.


>
> Und ist es wirklich so schwer, einen stimmenden Schaltplan zu zeichnen?
> Papier, Bleistift und Smartphone sind doch schon erfunden.

Eigentlich nicht. Aber warum den Schaltplan nicht einfach mal drei 
nehmen?

Jeder Analoge Kanal geht über drei parallele und unterschiedliche 
Referenzwiderstände, geschaltet jeweils durch einen PNP, auf Plus. 
Undist nichts anderes als ein simpler Spannungsteiler mit schaltbaren 
Referenzwiderständen. So schwierig ist der Schaltplan nun eigentlich 
auch wieder nicht. Das kann man sich doch bildlich sehr einfach 
vorstellen. Ist doch keine "Raketentechnik" hier.

von Joel L. (joel_l)


Angehängte Dateien:

Lesenswert?

Scheint wohl benötigt zu werden

von W.S. (Gast)


Lesenswert?

Joel L. schrieb:
> Habe ich auch schon gemacht. Schlauer bin ich dadurch nicht geworden.

Ja, das kann ich dir bestätigen.

> Der Microcontroller macht was er will und die Fehler sind alle nicht
> reproduzierbar. Auch wenn ich im Ausschlussverfahren jede Code Zeile
> teste.

Ähem... nö. Der Mikrocontroller macht, was du ihm programmiert hast - 
und nicht, was du eigentlich beabsichtigt hast.

W.S.

von Peter D. (peda)


Lesenswert?

Joel L. schrieb:
> Scheint wohl benötigt zu werden

paßt aber immer noch nicht zu:

Joel L. schrieb:
> uint16_t volt_bit1 = analogRead(A3);
>   uint16_t volt_bit2 = analogRead(A4);
>   uint16_t volt_bit3 = analogRead(A5);

So ein MC ist ja nicht dumm. Er führt alle Fehler genau so aus, wie Du 
sie hinschreibst.

von Joel L. (joel_l)


Lesenswert?

Peter D. schrieb:

> So ein MC ist ja nicht dumm. Er führt alle Fehler genau so aus, wie Du
> sie hinschreibst.


Der war gut, das ist genau nicht Fall. Ansonsten wären Fehler 
reproduzierbar und leicht per Ausschlussverfahren zu finden.

Ein Mikrokontroller ist dumm oder kann man dem etwa beibringen 
selbstständig zu lernen?

von kenny (Gast)


Lesenswert?

Peter D. schrieb:
> Joel L. schrieb:
>> uint16_t volt_bit1 = analogRead(A3);
>>   uint16_t volt_bit2 = analogRead(A4);
>>   uint16_t volt_bit3 = analogRead(A5);

Wie betreits angemerkt, misst du laut Deinem Schaltplan aber an A1, A2, 
A3.
Was stimmt denn nun?

von Uwe B. (uwebre)


Lesenswert?

Joel L. schrieb:

> Ein Mikrokontroller ist dumm oder kann man dem etwa beibringen
> selbstständig zu lernen?

Ja, kann man. Nennt sich Künstlichen Intelligenz (KI)

Uwe

von Joel L. (joel_l)


Lesenswert?

Uwe B. schrieb:
> Joel L. schrieb:
>
>> Ein Mikrokontroller ist dumm oder kann man dem etwa beibringen
>> selbstständig zu lernen?
>
> Ja, kann man. Nennt sich Künstlichen Intelligenz (KI)
>
> Uwe

Aha, dann müsste es ja im Autonomes fahren schon Level fünf erreicht 
haben und ich muss in der Stadt nicht selber steuern.
Irgendwie ist die Realität wohl eine andere. Lassen wir es, hier kommt 
sowie so nichts sinnvolles mehr und bezüglich der falschen Aussage
Zitat:
"ein Mikrokontroller macht genau das was man programmiert hat"

Dann können die angeblichen Experten ja hier folgenden Sachverhalt 
klären:

Nach der der Programmierung muss bei einem "volt_image" von > 853 bit 
und "ch_ number" == 0 die Variable "ch_number" eindeutig auf den Wert 0 
sein.
Und bei einem volt_image < 341 bit und "ch_number" == 2 die Variable 
"ch_number" auf den Wert 2 sein.

siehe Code.

1
if (flag == 0){
2
    ch_number = 0;
3
    ch_number2 = 3;
4
    ch_number3 = 3;
5
    ch_select(ch_number);
6
    ch_select2(ch_number2);
7
    ch_select3(ch_number3);
8
9
  }
10
11
  if (flag == 0 && volt_image < 341 && ch_number == 0){
12
    ch_number = 1;
13
    ch_number2 = 3;
14
    ch_number3 = 3;
15
    ch_select(ch_number);
16
    ch_select2(ch_number2);
17
    ch_select3(ch_number3);
18
19
  }
20
21
  if (flag == 0 && volt_image < 341 && ch_number == 1){
22
    ch_number = 2;
23
    ch_number2 = 3;
24
    ch_number3 = 3;
25
    ch_select(ch_number);
26
    ch_select2(ch_number2);
27
    ch_select3(ch_number3);
28
  }
29
30
  if (flag == 0 && volt_image < 341 && ch_number == 2){
31
    ch_number = 2;
32
    ch_number2 = 3;
33
    ch_number3 = 3;
34
    ch_select(ch_number);
35
    ch_select2(ch_number2);
36
    ch_select3(ch_number3);
37
  }
38
39
  if (flag == 0 && volt_image > 853 && ch_number == 2){
40
    ch_number = 1;
41
    ch_number2 = 3;
42
    ch_number3 = 3;
43
    ch_select(ch_number);
44
    ch_select2(ch_number2);
45
    ch_select3(ch_number3);
46
  }
47
48
  if (flag == 0 && volt_image > 853 && ch_number == 1){
49
    ch_number = 0;
50
    ch_number2 = 3;
51
    ch_number3 = 3;
52
    ch_select(ch_number);
53
    ch_select2(ch_number2);
54
    ch_select3(ch_number3);
55
  }
56
57
  if (flag == 0 && volt_image > 853 && ch_number == 0){
58
    ch_number = 0;
59
    ch_number2 = 3;
60
    ch_number3 = 3;
61
    ch_select(ch_number);
62
    ch_select2(ch_number2);
63
    ch_select3(ch_number3);
64
  }
65
66
67
  if (flag == 1){
68
    ch_number = 3;
69
    ch_number2 = 0;
70
    ch_number3 = 3;
71
    ch_select(ch_number);
72
    ch_select2(ch_number2);
73
    ch_select3(ch_number3);
74
  }
75
76
77
  if (flag == 2) {
78
    ch_number = 3;
79
    ch_number2 = 3;
80
    ch_number3 = 0;
81
    ch_select(ch_number);
82
    ch_select2(ch_number2);
83
    ch_select3(ch_number3);
84
  }


Und siehe da der angeblich richtig schlaue Mikrocontroller soll machen 
was programmiert wurde, dann frage ich mich mal warum denn die Variable 
"ch_number" -> ständig zwischen den Wert 0 (number_0) und 2 (number_2) 
springt.


38  Temp_1 0.00ohm  10  number_0  bit_933  Temp_2 0ohm  number_3
38  Temp_1 0.00ohm  01  number_2  bit_95  Temp_2 0ohm  number_3
38  Temp_1 0.00ohm  10  number_0  bit_932  Temp_2 0ohm  number_3
38  Temp_1 0.00ohm  01  number_2  bit_95  Temp_2 0ohm  number_3
38  Temp_1 0.00ohm  10  number_0  bit_933  Temp_2 0ohm  number_3
38  Temp_1 0.00ohm  01  number_2  bit_95  Temp_2 0ohm  number_3
39  Temp_1 0.00ohm  10  number_0  bit_933  Temp_2 0ohm  number_3
39  Temp_1 0.00ohm  01  number_2  bit_95  Temp_2 0ohm  number_3

Nach der Programmierung müsste bei (number_0) und bit_933 durch die 
Bedingung:
1
 if (flag == 0 && volt_image > 853 && ch_number == 0){
2
    ch_number = 0;
3
    ch_number2 = 3;
4
    ch_number3 = 3;
5
    ch_select(ch_number);
6
    ch_select2(ch_number2);
7
    ch_select3(ch_number3);
8
  }

Der Wert auf 0 (number_0) sein und drüfte nicht gar nicht auf 2 
(number_2) springen.

von PittyJ (Gast)


Lesenswert?

Da wir hier ja bei Compiler und IDE sind, wollte ich darauf hinweisen, 
dass der Arduino in C++ programmiert wird.
In C++ können Funktionen benutzt werden, und es braucht nicht sämtlicher 
Code in einer loop() stehen.

Durch Verwendung von Funktionen könnte die sehr ähnlichen Abschnitte des 
Codes sinnvoll strukturiert werden, so dass auch erfahrene Programmierer 
den Code verstehen können.
Durch die Copy&Paste Hölle steige z.B. ich nicht durch.

Bei Google findet man schnell:

https://www.cpp-tutor.de/part1/funktionen.html
https://itp.uni-frankfurt.de/~hanauske/VPROG/V4/Funktionen.html

Das könnte ein Anfang sein.

von Peter D. (peda)


Lesenswert?

Joel L. schrieb:
> siehe Code.

Woher kommt denn nun wieder diese ominöse "volt_image"?
Was ist denn so schwer daran: "vollständigen Code als Anhang".

Joel L. schrieb:
> Nach der der Programmierung muss bei einem "volt_image" von > 853 bit
> und "ch_ number" == 0 die Variable "ch_number" eindeutig auf den Wert 0
> sein.

Es ist doch ganz einfach. Wenn da nicht das Vermutete rauskommt, dann 
hat eben eine der 3 Variablen nicht den von Dir gedachten Wert.
Dein "dürfte" und "müßte" läßt die CPU völlig kalt und bringt Dich 
keinen Schritt weiter.

Mit der ganzen Spaghettiprogrammierung machst Du Dir das Leben nur 
unnötig selber schwer. Nebenbei sieht da auch kein anderer durch. Teile 
und herrsche, d.h. machs erstmal nur für einen Eingang.
Und Du hast immer noch keinen Programmablaufplan erstellt.

von Hans-jürgen H. (hjherbert) Benutzerseite


Lesenswert?

Und nict vergessen: Nach der Umschaltung des Messbereiches warten:
10 x 100k Ohm x 100 nF
Das gibt 0.1 Sekunden

(Ich habe darauf verzichtet, das Umschalten im Code zu suchen.)

von Jester (Gast)


Lesenswert?

Joel L. schrieb:
> ich habe ähnlich nach diesen Schaltbild (Anhang) ein drei Kanal Ohmmeter
> mit je 3x3 PNP aufgebaut.

Kurze Zwischenfrage:
- Welchen Wert nimmt Vref an?
- Welchen Wert haben die Steuerspannungen D5 ... D13?
- Wie hoch ist Vref belastbar?

von Uwe B. (uwebre)


Lesenswert?

Jester schrieb:

> Kurze Zwischenfrage:
> - Welchen Wert nimmt Vref an?
> - Welchen Wert haben die Steuerspannungen D5 ... D13?
> - Wie hoch ist Vref belastbar?

Joel hat sein Problem mit dieser (blödsinnigen) Schaltung lösen können:
Er hat den falschen Port ausgelesen. (Wie Peter D schon feststellte)
In einem Arduinoforum hat er auch stolz berichtet.

Uwe

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.