RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#26 von MicroBahner , 30.01.2017 19:05

Hallo Frank,

Zitat

Also als Schaltung würde ich das nicht bezeichnen. Es ist ja mehr ein "wie kriege ich das Signal vom Taster, LED und Servo an den Arduino."

Genau das ist ja die Schaltung

Zitat

- Alle Taster sind an GND angeschlossen und dann über einen 10k Widerstand am Arduino Pin.

Keinerlei Verbindung nach 5V? Und woher bekommt der Eingang dann gegebenenfalls HIGH-Pegel?. Im Sketch stellst Du den Mode ja auch nur einfach auf INPUT und nicht INPUT_PULLUP. Wenn deine Taster nach GND schalten, brauchst Du aber zwingend irgendwo einen Pullup-Widerstand, der den Eingang bei offenem Taster auf einen definierten HIG-Pegel legt. Sonst hängt der Eingang bei offenem Taster irgendwo undefiniert zwischen 0 und 5V. Eine Eingangsschaltung könnte dann so aussehen:

Wegen deiner langen Leitung kannst Du gegebenenfalls direkt vor dem Eingangsport noch einen Schutzwiderstand vorsehen, falls beim Basteln da mal unbeabsichtigt eine höhere Spannung draufkommt..


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#27 von Bodo , 30.01.2017 19:15

Hallo zusammen,

Zitat

Keinerlei Verbindung nach 5V? Und woher bekommt der Eingang dann gegebenenfalls HIGH-Pegel?. Im Sketch stellst Du den Mode ja auch nur einfach auf INPUT und nicht INPUT_PULLUP. Wenn deine Taster nach GND schalten, brauchst Du aber zwingend irgendwo einen Pullup-Widerstand, der den Eingang bei offenem Taster auf einen definierten HIG-Pegel legt. Sonst hängt der Eingang bei offenem Taster irgendwo undefiniert zwischen 0 und 5V. Eine Eingangsschaltung könnte dann so aussehen:

Wegen deiner langen Leitung kannst Du gegebenenfalls direkt vor dem Eingangsport noch einen Schutzwiderstand vorsehen, falls beim Basteln da mal unbeabsichtigt eine höhere Spannung draufkommt..


... wäre dann "INPUT_PULLUP" nicht die schnellere und sicherere Variante ? Ich habe jetzt noch nicht alle Beiträge im Detail gelesen, also "Spontan-Einwand" . Ist ja die Frage, ob die Logik so überhaupt stimmt und der Eingang im Sketch wirklich auf FALSE geprüft wird - sonst müsste der Taster ja gegen +5V ...

Viele Grüße, Bodo


Die Freiheit des Menschen liegt nicht darin, dass er tun kann, was er will, sondern dass er nicht tun muss, was er nicht will. (Jean-Jacques Rousseau)

Meine Anlage - Meine Dauerbaustelle
Platinen für Modellbahn- und Arduino-Anwendungen


 
Bodo
InterCityExpress (ICE)
Beiträge: 2.474
Registriert am: 28.04.2005
Homepage: Link
Gleise C-Gleis, Lenz 0
Spurweite H0, 0
Steuerung MS2 & CS2
Stromart Digital


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#28 von fbstr , 30.01.2017 20:02

Ohje, mir schwant übles...

Ich weiß nicht wie ich auf diese Tasteransteuerung gekommen bin...

In meinen Unterlagen finde ich an anderer Stelle die vermutlich richtige Schaltung, die ich irgendwie falsch übernommen habe.


Ich muss mal löten gehen...


Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.533
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital

zuletzt bearbeitet 10.06.2021 | Top

RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#29 von fbstr , 30.01.2017 21:08

Also, hier der aktuelle Stand:
Ich habe jetzt alle Taster des UNO entsprechend der Skizze oben umgelötet.(Bei den Tasten für den MEGA wird das viel mühseliger...)
Nun funktionieren zumindest die LED's korrekt. D.h. drücke ich die rote Taste leuchtet die rote LED und umgekehrt.
Aber die Servos tun keinen Mux (außer beim Einschalten). Ich hatte schon den Verdacht, dass die Analogports A0-A4 doch nicht für Servos geeignet sind und habe mal einen anderen PIN verwendet. Aber gleiches Ergebnis. Ich hoffe nun, dass der Fehler irgendwo im Sketch ist.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
 

#include <MobaTools.h>
 
#define ANZAHL_WEICHEN 3 //Anzahl der Weichen
#define ANZAHL_ENTKUPPLER 2 //Anzahl der Entkuppler
 
Servo8 servoWeiche[ANZAHL_WEICHEN]; //Array Weichen 7 bis 9
Servo8 servoEntkuppler[ANZAHL_ENTKUPPLER]; //Array Entkuppler 8 und 11
EggTimer myTimerE[ANZAHL_ENTKUPPLER]; //Entkuppler sollen 5 sec. aktiv sein
 
// Gleisstellpultweiche Nr.: 7, 8, 9
const byte servoW[ANZAHL_WEICHEN] ={ A2, A1, A3}; //Array Weichen Pins
const byte WAnschlagMIN[ANZAHL_WEICHEN] ={ 80, 80, 80}; //Array Weichenauslenkung Minimum
const byte WAnschlagMAX[ANZAHL_WEICHEN] ={110, 110, 110}; //Array Weichenauslenkung Maximum
const byte buttonGeradeW[ANZAHL_WEICHEN] ={ 5, 7, 2}; //Array Pins "Taster geradeaus"
const byte buttonAbbiegenW[ANZAHL_WEICHEN]={ 4, 6, 3}; //Array Pins "Taster abbiegen"
const byte ledW[ANZAHL_WEICHEN] ={ 11, 9, 10}; //Array LEDs
 
// Gleisstellpultentkuppler Nr.: 8, 11
const byte servoE[ANZAHL_ENTKUPPLER] ={ A0, A4}; //Array Entkuppler Pins
const byte EAnschlagMIN[ANZAHL_ENTKUPPLER] ={ 75, 75}; //Array Entkupplerauslenkung Minimum
const byte EAnschlagMAX[ANZAHL_ENTKUPPLER] ={110, 110}; //Array Entkupplerauslenkung Maximum
const byte buttonE[ANZAHL_ENTKUPPLER] ={ 13, 12}; //Array Pins "Taster Entkuppler"
 

const byte autoOff = 1; //damit die Servos nicht brummen...
 
byte buttonStatusGeradeW[ANZAHL_WEICHEN] ={0,0,0};
byte buttonStatusAbbiegenW[ANZAHL_WEICHEN]={0,0,0};
byte buttonStatusE[ANZAHL_ENTKUPPLER] ={0,0};
 
byte i; //Zählvariable Weichen
byte j; //Zählvariable Entkuppler
 
void setup() {
for (i=0; i<ANZAHL_WEICHEN; i++){
pinMode(buttonGeradeW[i], INPUT);
pinMode(buttonAbbiegenW[i], INPUT);
pinMode(ledW[i], OUTPUT);
servoWeiche[i].attach(servoW[i], autoOff );
servoWeiche[i].setSpeed(5);
}
for (j=0; j<ANZAHL_ENTKUPPLER; j++){
pinMode(buttonE[j], INPUT);
servoWeiche[j].attach(servoW[j], autoOff );
servoWeiche[j].setSpeed(20);
}
}
 
void loop() {
 
// Schleife für Weichen
 
for (i=0; i<ANZAHL_WEICHEN; i++){
buttonStatusGeradeW[i]=digitalRead(buttonGeradeW[i]);
buttonStatusAbbiegenW[i]=digitalRead(buttonAbbiegenW[i]);
if (buttonStatusGeradeW[i] == HIGH)
{
digitalWrite(ledW[i], HIGH);
servoWeiche[i].write(WAnschlagMIN[ANZAHL_WEICHEN]);
}
else
{
if (buttonStatusAbbiegenW[i] == HIGH)
{
digitalWrite(ledW[i], LOW);
servoWeiche[i].write(WAnschlagMAX[ANZAHL_WEICHEN]);
}
else
{

}
}
}
 
// Schleife für Entkuppler
 
for (j=0; j<ANZAHL_ENTKUPPLER; j++){
buttonStatusE[j]=digitalRead(buttonE[j]);
if (buttonStatusE[j] == HIGH) //wenn der Entkuppler-Taster betätigt wird...
{
myTimerE[j].setTime(5000); //sollte der Timer auf 5 Sekunden gestellt werden und starten...
servoEntkuppler[j].write(EAnschlagMIN[ANZAHL_ENTKUPPLER]); //... und das Servo auf 110 Grad (Entkuppeln) gehen...
}
else // wenn der Taster losgelassen wurde ...
{
if (myTimerE[j].running()==false) //...und wenn der Timer abgelaufen ist ...
{
servoEntkuppler[j].write(EAnschlagMAX[ANZAHL_ENTKUPPLER]); //...wieder auf 75 Grad (Ruhezustand)
}
}
}

 
}
 

 


Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.533
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#30 von MicroBahner , 30.01.2017 23:36

Hallo Frank,
was mir auf die Schnelle aufgefallen ist:

Wenn Du in den Schleifen den write-Befehl für die Servos ausgibst schreibst Du immer:

1
2
 
        servoWeiche[i].write(WAnschlagMIN[ANZAHL_WEICHEN]);
 
 

Da musst Du aber statt ANZAHL_WEICHEN deine Schleifenvariable eintragen. Sonst greifst Du immer auf den gleichen Speicher zu, der zudem noch ausserhalb deines Arrays liegt. Wenn ANZAHL_WEICHEN 3 ist, geht der Index des Arrays von 0..2


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#31 von fbstr , 31.01.2017 01:33

Danke Franz-Peter!
Damit funktionieren nun die Weichen!


Nur bei den Entkupplern tut sich noch nichts.
- Dass ich dort eine andere Zählvariable (j statt i) verwende ist richtig?
- Diese im EggTimer verwendet ( myTimerE[j].setTime(5000)) auch?

Hier der aktuelle Sketch:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
 

#include <MobaTools.h>
 
#define ANZAHL_WEICHEN 3 //Anzahl der Weichen
#define ANZAHL_ENTKUPPLER 2 //Anzahl der Entkuppler
 
Servo8 servoWeiche[ANZAHL_WEICHEN]; //Array Weichen 7 bis 9
Servo8 servoEntkuppler[ANZAHL_ENTKUPPLER]; //Array Entkuppler 8 und 11
EggTimer myTimerE[ANZAHL_ENTKUPPLER]; //Entkuppler sollen 5 sec. aktiv sein
 
// Gleisstellpultweiche Nr.: 7, 8, 9
const byte servoW[ANZAHL_WEICHEN] ={ A2, A1, A3}; //Array Weichen Pins
const byte WAnschlagMIN[ANZAHL_WEICHEN] ={ 50, 100, 100}; //Array Weichenauslenkung Minimum
const byte WAnschlagMAX[ANZAHL_WEICHEN] ={100, 50, 50}; //Array Weichenauslenkung Maximum
const byte buttonGeradeW[ANZAHL_WEICHEN] ={ 5, 7, 2}; //Array Pins "Taster geradeaus"
const byte buttonAbbiegenW[ANZAHL_WEICHEN]={ 4, 6, 3}; //Array Pins "Taster abbiegen"
const byte ledW[ANZAHL_WEICHEN] ={ 11, 9, 10}; //Array LEDs
 
// Gleisstellpultentkuppler Nr.: 8, 11
const byte servoE[ANZAHL_ENTKUPPLER] ={ A0, A4}; //Array Entkuppler Pins
const byte EAnschlagMIN[ANZAHL_ENTKUPPLER] ={ 75, 75}; //Array Entkupplerauslenkung Minimum
const byte EAnschlagMAX[ANZAHL_ENTKUPPLER] ={110, 110}; //Array Entkupplerauslenkung Maximum
const byte buttonE[ANZAHL_ENTKUPPLER] ={ 13, 12}; //Array Pins "Taster Entkuppler"
 

const byte autoOff = 1; //damit die Servos nicht brummen...
 
byte buttonStatusGeradeW[ANZAHL_WEICHEN] ={0,0,0};
byte buttonStatusAbbiegenW[ANZAHL_WEICHEN]={0,0,0};
byte buttonStatusE[ANZAHL_ENTKUPPLER] ={0,0};
 
byte i; //Zählvariable Weichen
byte j; //Zählvariable Entkuppler
 
void setup() {
for (i=0; i<ANZAHL_WEICHEN; i++){
pinMode(buttonGeradeW[i], INPUT);
pinMode(buttonAbbiegenW[i], INPUT);
pinMode(ledW[i], OUTPUT);
servoWeiche[i].attach(servoW[i], autoOff );
servoWeiche[i].setSpeed(5);
}
for (j=0; j<ANZAHL_ENTKUPPLER; j++){
pinMode(buttonE[j], INPUT);
servoWeiche[j].attach(servoW[j], autoOff );
servoWeiche[j].setSpeed(20);
}
}
 
void loop() {
 
// Schleife für Weichen
 
for (i=0; i<ANZAHL_WEICHEN; i++){
buttonStatusGeradeW[i]=digitalRead(buttonGeradeW[i]);
buttonStatusAbbiegenW[i]=digitalRead(buttonAbbiegenW[i]);
if (buttonStatusGeradeW[i] == HIGH)
{
digitalWrite(ledW[i], HIGH);
servoWeiche[i].write(WAnschlagMIN[i]);
}
else
{
if (buttonStatusAbbiegenW[i] == HIGH)
{
digitalWrite(ledW[i], LOW);
servoWeiche[i].write(WAnschlagMAX[i]);
}
else
{

}
}
}
 
// Schleife für Entkuppler
 
for (j=0; j<ANZAHL_ENTKUPPLER; j++){
buttonStatusE[j]=digitalRead(buttonE[j]);
if (buttonStatusE[j] == HIGH) //wenn der Entkuppler-Taster betätigt wird...
{
myTimerE[j].setTime(5000); //sollte der Timer auf 5 Sekunden gestellt werden und starten...
servoEntkuppler[j].write(EAnschlagMIN[j]); //... und das Servo auf 110 Grad (Entkuppeln) gehen...
}
else // wenn der Taster losgelassen wurde ...
{
if (myTimerE[j].running()==false) //...und wenn der Timer abgelaufen ist ...
{
servoEntkuppler[j].write(EAnschlagMAX[j]); //...wieder auf 75 Grad (Ruhezustand)
}
}
}

 
}
 

 


Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.533
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#32 von MicroBahner , 31.01.2017 09:25

Hallo Frank,
beim initiieren der Entkuppler (attach) verwendest Du die Objekte und Pins wie bei den Weichen. Die Entkupplerservos initiierst Du gar nicht. Da die Weichenservos schon initiiert sind, wird das attach-Kommando schlicht ignoriert:

1
2
3
4
5
6
7
8
9
10
11
12
13
 
void setup() {
for (i=0; i<ANZAHL_WEICHEN; i++){
pinMode(buttonGeradeW[i], INPUT);
pinMode(buttonAbbiegenW[i], INPUT);
pinMode(ledW[i], OUTPUT);
servoWeiche[i].attach(servoW[i], autoOff );
servoWeiche[i].setSpeed(5);
}
for (j=0; j<ANZAHL_ENTKUPPLER; j++){
pinMode(buttonE[j], INPUT);
servoWeiche[j].[b]attach(servoW[j][/b], autoOff ); //<<<< hier sollte wohl servoEntkuppler[j] und servoE[j] stehen
servoWeiche[j].setSpeed(20); <<<< hier sollte wohl servoEntkuppler[j] tehen
}
 



Zitat

- Dass ich dort eine andere Zählvariable (j statt i) verwende ist richtig?

Da die for-Schleifen nicht ineinander verschachtelt sind, sondern unabhängig nacheinander ausgeführt werden ist es nicht nötig. Es stört aber auch nicht.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#33 von fbstr , 31.01.2017 19:00

Zitat

... hier sollte wohl servoEntkuppler[j] und servoE[j] stehen...



Argh, vollkommen richtig! Stundenlang davorgesessen und nicht gesehen.
Vielen Dank!

Ich mußte noch bei den Entkupplern den MIN- mit MAX-Ausschlag tauschen, aber nun Dienstag 31.1.2017 um 18:40 Uhr funktioniert es!

Hier der Stand für den UNO (rechtes Regal):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
 

#include <MobaTools.h>
 
#define ANZAHL_WEICHEN 3 //Anzahl der Weichen
#define ANZAHL_ENTKUPPLER 2 //Anzahl der Entkuppler
 
Servo8 servoWeiche[ANZAHL_WEICHEN]; //Array Weichen 7 bis 9
Servo8 servoEntkuppler[ANZAHL_ENTKUPPLER]; //Array Entkuppler 8 und 11
EggTimer myTimerE[ANZAHL_ENTKUPPLER]; //Entkuppler sollen 5 sec. aktiv sein
 
// Gleisstellpultweiche Nr.: 7, 8, 9
const byte servoW[ANZAHL_WEICHEN] ={ A2, A1, A3}; //Array Weichen Pins
const byte WAnschlagMIN[ANZAHL_WEICHEN] ={ 50, 100, 100}; //Array Weichenauslenkung Minimum
const byte WAnschlagMAX[ANZAHL_WEICHEN] ={100, 50, 50}; //Array Weichenauslenkung Maximum
const byte buttonGeradeW[ANZAHL_WEICHEN] ={ 5, 7, 2}; //Array Pins "Taster geradeaus"
const byte buttonAbbiegenW[ANZAHL_WEICHEN]={ 4, 6, 3}; //Array Pins "Taster abbiegen"
const byte ledW[ANZAHL_WEICHEN] ={ 11, 9, 10}; //Array LEDs
 
// Gleisstellpultentkuppler Nr.: 8, 11
const byte servoE[ANZAHL_ENTKUPPLER] ={ A0, A4}; //Array Entkuppler Pins
const byte EAnschlagMIN[ANZAHL_ENTKUPPLER] ={ 75, 65}; //Array Entkupplerauslenkung Minimum
const byte EAnschlagMAX[ANZAHL_ENTKUPPLER] ={110, 90}; //Array Entkupplerauslenkung Maximum
const byte buttonE[ANZAHL_ENTKUPPLER] ={ 13, 12}; //Array Pins "Taster Entkuppler"
 

const byte autoOff = 1; //damit die Servos nicht brummen...
 
byte buttonStatusGeradeW[ANZAHL_WEICHEN] ={0,0,0};
byte buttonStatusAbbiegenW[ANZAHL_WEICHEN]={0,0,0};
byte buttonStatusE[ANZAHL_ENTKUPPLER] ={0,0};
 
byte i; //Zählvariable Weichen
byte j; //Zählvariable Entkuppler
 
void setup() {
for (i=0; i<ANZAHL_WEICHEN; i++){
pinMode(buttonGeradeW[i], INPUT);
pinMode(buttonAbbiegenW[i], INPUT);
pinMode(ledW[i], OUTPUT);
servoWeiche[i].attach(servoW[i], autoOff );
servoWeiche[i].setSpeed(5);
}
for (j=0; j<ANZAHL_ENTKUPPLER; j++){
pinMode(buttonE[j], INPUT);
servoEntkuppler[j].attach(servoE[j], autoOff );
servoEntkuppler[j].setSpeed(20);
}
}
 
void loop() {
 
// Schleife für Weichen
 
for (i=0; i<ANZAHL_WEICHEN; i++){
buttonStatusGeradeW[i]=digitalRead(buttonGeradeW[i]);
buttonStatusAbbiegenW[i]=digitalRead(buttonAbbiegenW[i]);
if (buttonStatusGeradeW[i] == HIGH)
{
digitalWrite(ledW[i], HIGH);
servoWeiche[i].write(WAnschlagMIN[i]);
}
else
{
if (buttonStatusAbbiegenW[i] == HIGH)
{
digitalWrite(ledW[i], LOW);
servoWeiche[i].write(WAnschlagMAX[i]);
}
else
{

}
}
}
 
// Schleife für Entkuppler
 
for (j=0; j<ANZAHL_ENTKUPPLER; j++){
buttonStatusE[j]=digitalRead(buttonE[j]);
if (buttonStatusE[j] == HIGH) //wenn der Entkuppler-Taster betätigt wird...
{
myTimerE[j].setTime(5000); //sollte der Timer auf 5 Sekunden gestellt werden und starten...
servoEntkuppler[j].write(EAnschlagMAX[j]); //... und das Servo auf 110 Grad (Entkuppeln) gehen...
}
else // wenn der Taster losgelassen wurde ...
{
if (myTimerE[j].running()==false) //...und wenn der Timer abgelaufen ist ...
{
servoEntkuppler[j].write(EAnschlagMIN[j]); //...wieder auf 75 Grad (Ruhezustand)
}
}
}

 
}
 

 



Was mir aufgefallen ist:
- Bei den 3 Weichenservos geht eines extrem langsam, während die anderen 2 etwas schneller sind. Vermutlich tickt da jedes Billig-SG90-Servo etwas anders. Ich werde deshalb wohl noch eine Variable "Speed" für jedes Servo einzeln in einem Array setzen müssen.
- Die LED's tanzen nicht mehr wenn ich am Kabel wackel. Sehr beruhigend ist das
Dann will ich noch einbauen:
- Grundstellung beim Einschalten. Ich denke es wird das beste sein, die Weichenservos auf Grün (Geradeaus) fahren zu lassen. Dann hat man einen definierten Grundzustand für das Rangierspiel.
- Allerdings das Schreiben ins Eprom will ich auch mal testen...
- Dieses "ANZAHL_WEICHEN = sizeof( servoW )" für Weichen und Entkuppler.

Aber als erstes muß ich diese Woche noch die 21 Taster vom MEGA korrigieren. Bedeutet 21 existierende Kabel umlöten und zusätzlich 21 Kabel einlöten. Sieht jetzt schon chaotisch aus...


Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.533
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#34 von fbstr , 01.02.2017 18:57

Zitat von MicroBahner im Beitrag Arduino MobaTools: Optimierung Drehscheibensteuerung

1
2
3
4
5
6
7
 
//         Pins für Weiche Nr.   0   1  2
const byte servoW[color=#FF0000][][/color] = {A1, 12, 6}; // Servos
const byte buttonGeradeW[] = {A2, 11, 5}; // "Taster geradeaus"
const byte buttonAbbiegenW[] = {A3, 10, 4}; // "Taster abbiegen"
const byte ledGeradeW[] = {A4, 9, 3}; // LEDs geradeaus
const byte ledAbbiegenW[] = {A5, 8, 2}; // LEDs abbiegen
ANZAHL_WEICHEN = sizeof( servoW );
 

Und wenn Du jetzt zusätzliche Spalten einfügst, bekommt ANZAHL_WEICHEN automatisch den richtigen Wert.




Hallo Franz-Peter,
sind da die eckigen Klammern wirklich leer? Woher weiß die const dass dort dann der Wert ANZAHL_WEICHEN stehen soll.
Und wenn dort überall dann doch [ANZAHL_WEICHEN] stehen müsste: Die Definition kommt ja erst nach den ganzen const. Versteht der Sketch das ganze dann?


Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.533
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#35 von stefan83 , 01.02.2017 19:53

Hallo Frank,

ja, das funktioniert wirklich so.
Mit den leeren eckigen Klammern wird grundsätzlich ein Array (vorerst) unbestimmter Länge bzw. Größe angelegt.
Da dann aber direkt Werte (in den geschweiften Klammern durch Kommata getrennt) zugewiesen werden, wird das Array genau so groß, wie es sein muss.
Vorteil: Wenn du weitere Werte hinzufügst, musst du dich nicht auch noch darum kümmern die Größe des Arrays zu verändern, das geschieht dann automatisch.
sizeof(servoW) liest dann die Größe des Arrays servoW aus, so hast du immer die richtige Anzahl an Weichen in der Variablen ANZAHL_WEICHEN.

Ich hoffe, so ist das verständlich erklärt.
Ansonsten einfach nochmal Bescheid geben

Gruß
Stefan


stefan83  
stefan83
Beiträge: 3
Registriert am: 23.02.2013
Spurweite H0
Stromart DC, Digital


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#36 von MicroBahner , 01.02.2017 20:33

Hallo Frank,
Stefan hat's ja schon super erklärt, da brauche ich gar nichts mehr zu schreiben

Vielleicht noch ein kleiner Zusatz, falls Du sowas auch mal woanders einsetzen willst: Das mit dem sizeof(...) funktioniert so einfach nur deshalb, weil deine Arrays als 'byte' deklariert sind. Sizeof() gibt nämlich genau die Größe des Arrays in byte zurück, und das entspricht in dem Fall dann auch der Zahl der Elemente. Bei z.B. einem 'int' Array wäre 'sizeof()' doppelt so groß wie die Zahl der Elemente, da ein 'int' 2 byte groß ist. Aber das ist jetzt in deinem Fall erstmal belanglos.

P.S. Eins ist mir jetzt noch aufgefallen, mein Vorschlag ist so nicht ganz vollständig. Du musst dem Compiler auch noch sagen, was ANZAHL_WEICHEN für eine Variable ist:

1
 
const byte ANZAHL_WEICHEN = sizeof( servoW );
 


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#37 von fbstr , 01.02.2017 23:44

Damit der Sketch erfolgreich compiliert werden konnte, musste ich diesen Part weiter nach unten verschieben:
----
Servo8 servoWeiche[ANZAHL_WEICHEN]; //Array Weichen 7 bis 9
Servo8 servoEntkuppler[ANZAHL_ENTKUPPLER]; //Array Entkuppler 8 und 11
EggTimer myTimerE[ANZAHL_ENTKUPPLER]; //Entkuppler sollen 5 sec. aktiv sein
-----


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 

#include <MobaTools.h>
 
// Gleisstellpultweiche Nr.: 7, 8, 9
const byte servoW[] ={ A2, A1, A3}; //Array Weichen Pins
const byte WAnschlagMIN[] ={ 50, 100, 100}; //Array Weichenauslenkung Minimum
const byte WAnschlagMAX[] ={100, 50, 50}; //Array Weichenauslenkung Maximum
const byte servoSpeedW[] ={ 5, 5, 10}; //Array Servogeschwindigkeit
const byte buttonGeradeW[] ={ 5, 7, 2}; //Array Pins "Taster geradeaus"
const byte buttonAbbiegenW[] ={ 4, 6, 3}; //Array Pins "Taster abbiegen"
const byte ledW[] ={ 11, 9, 10}; //Array LEDs
const byte ANZAHL_WEICHEN = sizeof(servoW);
 
// Gleisstellpultentkuppler Nr.: 8, 11
const byte servoE[] ={ A0, A4}; //Array Entkuppler Pins
const byte EAnschlagMIN[] ={ 75, 65}; //Array Entkupplerauslenkung Minimum
const byte EAnschlagMAX[] ={110, 90}; //Array Entkupplerauslenkung Maximum
const byte servoSpeedE[] ={ 20, 20}; //Array Servogeschwindigkeit
const byte buttonE[] ={ 13, 12}; //Array Pins "Taster Entkuppler"
const byte ANZAHL_ENTKUPPLER = sizeof(servoE);
 
const byte autoOff = 1; //damit die Servos nicht brummen...
 
Servo8 servoWeiche[ANZAHL_WEICHEN]; //Array Weichen 7 bis 9
Servo8 servoEntkuppler[ANZAHL_ENTKUPPLER]; //Array Entkuppler 8 und 11
EggTimer myTimerE[ANZAHL_ENTKUPPLER]; //Entkuppler sollen 5 sec. aktiv sein
 
byte buttonStatusGeradeW[ANZAHL_WEICHEN] ={0,0,0};
byte buttonStatusAbbiegenW[ANZAHL_WEICHEN]={0,0,0};
byte buttonStatusE[ANZAHL_ENTKUPPLER] ={0,0};
 
byte i; //Zählvariable Weichen
byte j; //Zählvariable Entkuppler
....
 
 



Oder soll ich die wie die "const byte" mit leeren Klammern dort einsortieren?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 

#include <MobaTools.h>
 
// Gleisstellpultweiche Nr.: 7, 8, 9
const byte servoW[] ={ A2, A1, A3}; //Array Weichen Pins
const byte WAnschlagMIN[] ={ 50, 100, 100}; //Array Weichenauslenkung Minimum
const byte WAnschlagMAX[] ={100, 50, 50}; //Array Weichenauslenkung Maximum
const byte servoSpeedW[] ={ 5, 5, 10}; //Array Servogeschwindigkeit
const byte buttonGeradeW[] ={ 5, 7, 2}; //Array Pins "Taster geradeaus"
const byte buttonAbbiegenW[] ={ 4, 6, 3}; //Array Pins "Taster abbiegen"
const byte ledW[] ={ 11, 9, 10}; //Array LEDs
Servo8 servoWeiche[]; //Array Weichen 7 bis 9
const byte ANZAHL_WEICHEN = sizeof(servoW);
 
// Gleisstellpultentkuppler Nr.: 8, 11
const byte servoE[] ={ A0, A4}; //Array Entkuppler Pins
const byte EAnschlagMIN[] ={ 75, 65}; //Array Entkupplerauslenkung Minimum
const byte EAnschlagMAX[] ={110, 90}; //Array Entkupplerauslenkung Maximum
const byte servoSpeedE[] ={ 20, 20}; //Array Servogeschwindigkeit
const byte buttonE[] ={ 13, 12}; //Array Pins "Taster Entkuppler"
Servo8 servoEntkuppler[]; //Array Entkuppler 8 und 11
EggTimer myTimerE[]; //Entkuppler sollen 5 sec. aktiv sein
const byte ANZAHL_ENTKUPPLER = sizeof(servoE);
 
const byte autoOff = 1; //damit die Servos nicht brummen...
 
byte buttonStatusGeradeW[ANZAHL_WEICHEN] ={0,0,0};
byte buttonStatusAbbiegenW[ANZAHL_WEICHEN]={0,0,0};
byte buttonStatusE[ANZAHL_ENTKUPPLER] ={0,0};
 
byte i; //Zählvariable Weichen
byte j; //Zählvariable Entkuppler
....
 
 



So richtig will das nicht in mein Hirn rein. Woher weiß z.B. der EggTimer, dass ich [ANZAHL_ENTKUPPLER] möchte und nicht [ANZAHL_WEICHEN]?


Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.533
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#38 von MicroBahner , 02.02.2017 09:26

Hallo Frank,

Zitat

Oder soll ich die wie die "const byte" mit leeren Klammern dort einsortieren?

Nein, damit würdest Du etwas übers Ziel hinausschießen . Das mit den leeren Klammern funktioniert ja nur da, wo Du dem Array auch unmittelbar Werte zuordnest. Nur dann kann der Compiler anhand der Anzahl der zugeordneten Werte die Größe des Arrays selbst bestimmen.
Deine erste Variante ist schon ok. Dass Du die 3 Zeilen nach unten schieben musst, liegt daran, dass der Wert von ANZAHL_WEICHEN bzw. ANZAHL_ENTKUPPLER jetzt etwas später, nämlich nach der Festlegung der IO-Ports, bestimmt wird. Und erst dann kannst Du diese Werte auch verwenden.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#39 von fbstr , 04.02.2017 19:45

Bin über diesen Thread gestolpert und da ich ja auch 2 Drehscheiben mit Arduinos und Motor Shield v2.0 steuern will, speicher ich mir den Link hier mal ab:
http://www.rmweb.co.uk/community/index.p...ntable-project/

Zu mehr als dem Test der Abdeckplatte für das Gleisstellpult bin ich nicht gekommen und die nächsten 10 Tage werde ich nicht groß Zeit für Fortschritte haben.


Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.533
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#40 von fbstr , 25.02.2017 17:57

Oh Mann,
praktisch einen ganzen Tag mit Problemsuche verbraten...

Heute morgen den MEGA in Betrieb genommen und alles funktionierte, bis auf das Entkupplungsservo E6. Quer getauscht, Taste ersetzt, sogar den Widerstand ersetzt, alles nichts gebracht. Die Taste ist am Pin 20 angeschlossen. Ich hatte seltsamerweise da immer 2,5V am Pin.
Nun habe ich einen anderen Pin genommen und alles tut.
Kann es tatsächlich sein, dass man beim MEGA pin 20 nicht verwenden kann?

Wie dem auch sei, jetzt kommt die Feinjustierung der Servos. Das muß ich manuell machen, sprich jedesmal im Sketch ändern, hochladen, testen und von vorne wenns noch nicht passt.


Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.533
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#41 von fbstr , 25.02.2017 18:30

Momentaner Stand des MEGA Sketches als Backup für mich:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
 

#include <MobaTools.h>
 
// Gleisstellpultweiche Nr.: 1, 2, 3, 4, 5, 6
const byte servoW[] ={ 6, 2, 19, 7, 33, 31}; //Array Weichen Pins
const byte WAnschlagMIN[] ={ 80, 120, 120, 70, 60, 100}; //Array Weichenauslenkung Minimum (geradeaus)
const byte WAnschlagMAX[] ={120, 70, 70, 120, 100, 50}; //Array Weichenauslenkung Maximum (abbiegen)
const byte servoSpeedW[] ={ 10, 10, 10, 10, 10, 10}; //Array Servogeschwindigkeit
const byte buttonGeradeW[] ={ A8, A11, A5, 38, A14, 37}; //Array Pins "Taster geradeaus"
const byte buttonAbbiegenW[] ={A10, A12, A4, A7, A15, 39}; //Array Pins "Taster abbiegen"
const byte ledW[] ={ 44, 48, 42, 46, 50, 40}; //Array LEDs
const byte ANZAHL_WEICHEN = sizeof(servoW);
 
// Gleisstellpultentkuppler Nr.: 1, 2, 3, 4, 5, 6, 7, 9, 10
const byte servoE[] ={ 4, 36, 29, 5, 25, 35, 3, 23, 27}; //Array Entkuppler Pins
const byte EAnschlagMIN[] ={ 75, 110, 75, 90, 75, 75, 75, 75, 100}; //Array Entkupplerauslenkung Minimum
const byte EAnschlagMAX[] ={ 90, 60, 110, 70, 90, 90, 90, 90, 70}; //Array Entkupplerauslenkung Maximum
const byte servoSpeedE[] ={ 20, 20, 20, 20, 20, 20, 20, 20, 20}; //Array Servogeschwindigkeit
const byte buttonE[] ={ A9, A13, A0, A3, A6, 13, 52, A1, A2}; //Array Pins "Taster Entkuppler"
const byte ANZAHL_ENTKUPPLER = sizeof(servoE);
 
const byte autoOff = 1; //damit die Servos nicht brummen...
 
Servo8 servoWeiche[ANZAHL_WEICHEN]; //Array Weichen 1 bis 6
Servo8 servoEntkuppler[ANZAHL_ENTKUPPLER]; //Array Entkuppler 1 bis 7, 9 und 10
EggTimer myTimerE[ANZAHL_ENTKUPPLER]; //Entkuppler sollen 5 sec. aktiv sein
 
byte buttonStatusGeradeW[ANZAHL_WEICHEN] ={0,0,0,0,0,0};
byte buttonStatusAbbiegenW[ANZAHL_WEICHEN]={0,0,0,0,0,0};
byte buttonStatusE[ANZAHL_ENTKUPPLER] ={0,0,0,0,0,0,0,0,0};
 
byte i; //Zählvariable Weichen
byte j; //Zählvariable Entkuppler
 
void setup() {
for (i=0; i<ANZAHL_WEICHEN; i++){
pinMode(buttonGeradeW[i], INPUT);
pinMode(buttonAbbiegenW[i], INPUT);
pinMode(ledW[i], OUTPUT);
servoWeiche[i].attach(servoW[i], autoOff );
servoWeiche[i].setSpeed(servoSpeedW[i]);
}
for (j=0; j<ANZAHL_ENTKUPPLER; j++){
pinMode(buttonE[j], INPUT);
servoEntkuppler[j].attach(servoE[j], autoOff );
servoEntkuppler[j].setSpeed(servoSpeedE[j]);
}
}
 
void loop() {
 
// Schleife für Weichen
 
for (i=0; i<ANZAHL_WEICHEN; i++){
buttonStatusGeradeW[i]=digitalRead(buttonGeradeW[i]);
buttonStatusAbbiegenW[i]=digitalRead(buttonAbbiegenW[i]);
if (buttonStatusGeradeW[i] == HIGH)
{
digitalWrite(ledW[i], HIGH);
servoWeiche[i].write(WAnschlagMIN[i]);
}
else
{
if (buttonStatusAbbiegenW[i] == HIGH)
{
digitalWrite(ledW[i], LOW);
servoWeiche[i].write(WAnschlagMAX[i]);
}
else
{

}
}
}
 
// Schleife für Entkuppler
 
for (j=0; j<ANZAHL_ENTKUPPLER; j++){
buttonStatusE[j]=digitalRead(buttonE[j]);
if (buttonStatusE[j] == HIGH) //wenn der Entkuppler-Taster betätigt wird...
{
myTimerE[j].setTime(5000); //sollte der Timer auf 5 Sekunden gestellt werden und starten...
servoEntkuppler[j].write(EAnschlagMAX[j]); //... und das Servo auf 110 Grad (Entkuppeln) gehen...
}
else // wenn der Taster losgelassen wurde ...
{
if (myTimerE[j].running()==false) //...und wenn der Timer abgelaufen ist ...
{
servoEntkuppler[j].write(EAnschlagMIN[j]); //...wieder auf 75 Grad (Ruhezustand)
}
}
}

 
}
 

 



Pinbelegung


Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.533
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#42 von fbstr , 28.02.2017 21:35

Nachdem nun das grobe funktioniert, wäre der nächste Schritt den Sketch zu optimieren.

1. Ich dachte da an die eeprom-Befehle, um die Positionen der Weichen beim Umschalten zu speichern.
2. Dann beim Einschalten der Anlage könnte man die letzte Position wieder einlesen und als Soll anfahren, wobei dadurch die Servos sich nicht bewegen müssen (außer die Servos wurden von Hand verstellt).
3. Danach die Weichen alle auf Geradeaus (Grün) stellen, um einen definierten Zustand zu haben nach dem Einschalten der Anlage. Wenn ich es richtig verstanden habe, dann sollten die Servos nun langsam diese Position anfahren (falls die Position beim Abschalten anders war).

Ist das richtig?
----------------------------------------------------------------------------------------
Als nächstes stolper ich über diese Aussage:
Quelle: https://www.arduino.cc/en/Reference/EEPROMWrite

Zitat
The EEPROM memory has a specified life of 100,000 write/erase cycles, so you may need to be careful about how often you write to it.



Ich habe 9 Weichen beim TimeWaster. Sagen wir mal ich schalte am Abend jede Weiche ca. 10-12 mal, dann wären das 100 Schreib-/Lesevorgänge pro Tag. D.h. nach 1000 Tagen, also in 3 Jahren würde ich Probleme bekommen? Wenn ja, was passiert dann? Ist der Arduino dann defekt?


Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.533
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#43 von Kriwatsch , 01.03.2017 13:56

Hallo Frank
Bin über diesen "Fred" gestolpert, muss dazu sagen dass ich in Punkto Arduino vollkommen unbeleckt bin! ops: Aber zu Deiner Frage wegen den 100 000
Zyklen - Das heisst nichts anderes als das der EEPROM dann unzuverlässig arbeiten KANN, Auf den Arduino dürfte das keine Auswirkungen haben. Denke ich mal.
Nun, da muss ich wohl auch mal schlau machen. Hatte in den 90gn mal mit Assembler für den 880(Z80) angefangen, war aber gruselig
Ciao
Mischa


 
Kriwatsch
InterRegio (IR)
Beiträge: 230
Registriert am: 26.10.2015
Ort: Dresden
Spurweite N
Stromart DC, Analog


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#44 von fbstr , 01.03.2017 17:32

Zitat

Das heisst nichts anderes als das der EEPROM dann unzuverlässig arbeiten KANN, Auf den Arduino dürfte das keine Auswirkungen haben.



Hallo Mischa,

Danke fürs Feedback.

Ich denke Du hast Recht, es deckt sich mit dem was ich so mit Tante Google gefunden habe:

http://tronixstuff.com/2011/05/11/discov...eprom-lifespan/
http://forum.arduino.cc/index.php?topic=902.0

Dann muß ich mich mal in den nächsten Tagen damit beschäftigen


Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.533
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#45 von fbstr , 01.03.2017 21:18

Hier der nächste Schritt beim MEGA:

Beim Weichenstellen wird die Zielposition im EEPROM gespeichert. Soweit scheint es zu funktionieren. Bei der ersten Tastenaktion bleibt das Servo entweder stehen (weil die Zieposition gleich ist) oder fährt langsam in die neue Zielposition.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
 

#include <MobaTools.h>
#include <EEPROM.h>
 
// Gleisstellpultweiche Nr.: 1, 2, 3, 4, 5, 6
const byte servoW[] ={ 6, 2, 19, 7, 33, 31}; //Array Weichen Pins
const byte WAnschlagMIN[] ={ 80, 120, 120, 70, 60, 100}; //Array Weichenauslenkung Minimum (geradeaus)
const byte WAnschlagMAX[] ={120, 70, 70, 120, 100, 50}; //Array Weichenauslenkung Maximum (abbiegen)
const byte servoSpeedW[] ={ 10, 10, 10, 10, 10, 10}; //Array Servogeschwindigkeit
const byte buttonGeradeW[] ={ A8, A11, A5, 38, A14, 37}; //Array Pins "Taster geradeaus"
const byte buttonAbbiegenW[] ={A10, A12, A4, A7, A15, 39}; //Array Pins "Taster abbiegen"
const byte ledW[] ={ 44, 48, 42, 46, 50, 40}; //Array LEDs
const byte addr[] ={ 1, 2, 3, 4, 5, 6}; //Array eeprom address
const byte ANZAHL_WEICHEN = sizeof(servoW);
 
// Gleisstellpultentkuppler Nr.: 1, 2, 3, 4, 5, 6, 7, 9, 10
const byte servoE[] ={ 4, 36, 29, 5, 25, 35, 3, 23, 27}; //Array Entkuppler Pins
const byte EAnschlagMIN[] ={ 50, 130, 55, 120, 70, 70, 60, 60, 120}; //Array Entkupplerauslenkung Minimum
const byte EAnschlagMAX[] ={ 80, 100, 90, 90, 90, 95, 90, 90, 90}; //Array Entkupplerauslenkung Maximum
const byte servoSpeedE[] ={ 20, 20, 20, 20, 20, 20, 20, 20, 20}; //Array Servogeschwindigkeit
const byte buttonE[] ={ A9, A13, A0, A3, A6, 13, 52, A1, A2}; //Array Pins "Taster Entkuppler"
const byte ANZAHL_ENTKUPPLER = sizeof(servoE);
 
const byte autoOff = 1; //damit die Servos nicht brummen...
 
Servo8 servoWeiche[ANZAHL_WEICHEN]; //Array Weichen 1 bis 6
Servo8 servoEntkuppler[ANZAHL_ENTKUPPLER]; //Array Entkuppler 1 bis 7, 9 und 10
EggTimer myTimerE[ANZAHL_ENTKUPPLER]; //Entkuppler sollen 5 sec. aktiv sein
 
byte buttonStatusGeradeW[ANZAHL_WEICHEN] ={0,0,0,0,0,0};
byte buttonStatusAbbiegenW[ANZAHL_WEICHEN]={0,0,0,0,0,0};
byte buttonStatusE[ANZAHL_ENTKUPPLER] ={0,0,0,0,0,0,0,0,0};
 
byte i; //Zählvariable Weichen
byte j; //Zählvariable Entkuppler
 
void setup() {
for (i=0; i<ANZAHL_WEICHEN; i++){
pinMode(buttonGeradeW[i], INPUT);
pinMode(buttonAbbiegenW[i], INPUT);
pinMode(ledW[i], OUTPUT);
servoWeiche[i].attach(servoW[i], autoOff );
servoWeiche[i].setSpeed(servoSpeedW[i]);
servoWeiche[i].write(EEPROM.read(addr[i])); // Bewege Servo zur letzten im EEPROM gespeicherten Position
}
for (j=0; j<ANZAHL_ENTKUPPLER; j++){
pinMode(buttonE[j], INPUT);
servoEntkuppler[j].attach(servoE[j], autoOff );
servoEntkuppler[j].setSpeed(servoSpeedE[j]);
}
}
 
void loop() {
 
// Schleife für Weichen
 
for (i=0; i<ANZAHL_WEICHEN; i++){
buttonStatusGeradeW[i]=digitalRead(buttonGeradeW[i]);
buttonStatusAbbiegenW[i]=digitalRead(buttonAbbiegenW[i]);
if (buttonStatusGeradeW[i] == HIGH)
{
digitalWrite(ledW[i], HIGH);
EEPROM.write(addr[i], WAnschlagMIN[i]); //Schreibe Zielposition in EEPROM
servoWeiche[i].write(WAnschlagMIN[i]);
}
else
{
if (buttonStatusAbbiegenW[i] == HIGH)
{
digitalWrite(ledW[i], LOW);
EEPROM.write(addr[i], WAnschlagMAX[i]); //Schreibe Zielposition in EEPROM
servoWeiche[i].write(WAnschlagMAX[i]);
}
else
{

}
}
}
 
// Schleife für Entkuppler
 
for (j=0; j<ANZAHL_ENTKUPPLER; j++){
buttonStatusE[j]=digitalRead(buttonE[j]);
if (buttonStatusE[j] == HIGH) //wenn der Entkuppler-Taster betätigt wird...
{
myTimerE[j].setTime(5000); //sollte der Timer auf 5 Sekunden gestellt werden und starten...
servoEntkuppler[j].write(EAnschlagMAX[j]); //... und das Servo auf 110 Grad (Entkuppeln) gehen...
}
else // wenn der Taster losgelassen wurde ...
{
if (myTimerE[j].running()==false) //...und wenn der Timer abgelaufen ist ...
{
servoEntkuppler[j].write(EAnschlagMIN[j]); //...wieder auf 75 Grad (Ruhezustand)
}
}
}

 
}
 

 



Jetzt muß ich nur noch erreichen, daß die Weichen-LED's die aktuelle Position anzeigen. Momentan wird beim Einschalten ROT (Low) angezeigt, egal in welcher Position das Servo steht.
Ich muß also im void setup() eine if-Abfrage einbauen: "Wenn die neue Zielposition der Weiche dem WAnschlagMIN entspricht, dann HIGH (Grün)"


Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.533
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#46 von fbstr , 01.03.2017 21:33

Scheint ebenfalls zu funktionieren:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
 

#include <MobaTools.h>
#include <EEPROM.h>
 
// Gleisstellpultweiche Nr.: 1, 2, 3, 4, 5, 6
const byte servoW[] ={ 6, 2, 19, 7, 33, 31}; //Array Weichen Pins
const byte WAnschlagMIN[] ={ 80, 120, 120, 70, 60, 100}; //Array Weichenauslenkung Minimum (geradeaus)
const byte WAnschlagMAX[] ={120, 70, 70, 120, 100, 50}; //Array Weichenauslenkung Maximum (abbiegen)
const byte servoSpeedW[] ={ 10, 10, 10, 10, 10, 10}; //Array Servogeschwindigkeit
const byte buttonGeradeW[] ={ A8, A11, A5, 38, A14, 37}; //Array Pins "Taster geradeaus"
const byte buttonAbbiegenW[] ={A10, A12, A4, A7, A15, 39}; //Array Pins "Taster abbiegen"
const byte ledW[] ={ 44, 48, 42, 46, 50, 40}; //Array LEDs
const byte addr[] ={ 1, 2, 3, 4, 5, 6}; //Array eeprom address
const byte ANZAHL_WEICHEN = sizeof(servoW);
 
// Gleisstellpultentkuppler Nr.: 1, 2, 3, 4, 5, 6, 7, 9, 10
const byte servoE[] ={ 4, 36, 29, 5, 25, 35, 3, 23, 27}; //Array Entkuppler Pins
const byte EAnschlagMIN[] ={ 50, 130, 55, 120, 70, 70, 60, 60, 120}; //Array Entkupplerauslenkung Minimum
const byte EAnschlagMAX[] ={ 80, 100, 90, 90, 90, 95, 90, 90, 90}; //Array Entkupplerauslenkung Maximum
const byte servoSpeedE[] ={ 20, 20, 20, 20, 20, 20, 20, 20, 20}; //Array Servogeschwindigkeit
const byte buttonE[] ={ A9, A13, A0, A3, A6, 13, 52, A1, A2}; //Array Pins "Taster Entkuppler"
const byte ANZAHL_ENTKUPPLER = sizeof(servoE);
 
const byte autoOff = 1; //damit die Servos nicht brummen...
 
Servo8 servoWeiche[ANZAHL_WEICHEN]; //Array Weichen 1 bis 6
Servo8 servoEntkuppler[ANZAHL_ENTKUPPLER]; //Array Entkuppler 1 bis 7, 9 und 10
EggTimer myTimerE[ANZAHL_ENTKUPPLER]; //Entkuppler sollen 5 sec. aktiv sein
 
byte buttonStatusGeradeW[ANZAHL_WEICHEN] ={0,0,0,0,0,0};
byte buttonStatusAbbiegenW[ANZAHL_WEICHEN]={0,0,0,0,0,0};
byte buttonStatusE[ANZAHL_ENTKUPPLER] ={0,0,0,0,0,0,0,0,0};
 
byte i; //Zählvariable Weichen
byte j; //Zählvariable Entkuppler
 
void setup() {
for (i=0; i<ANZAHL_WEICHEN; i++){
pinMode(buttonGeradeW[i], INPUT);
pinMode(buttonAbbiegenW[i], INPUT);
pinMode(ledW[i], OUTPUT);
if (EEPROM.read(addr[i]) == WAnschlagMIN[i]) // Wenn letzte Weichenposition Geradeaus war...
{
digitalWrite(ledW[i], HIGH); // dann wird LED grün geschaltet, ansonsten bleibt sie rot
}

servoWeiche[i].attach(servoW[i], autoOff );
servoWeiche[i].setSpeed(servoSpeedW[i]);
servoWeiche[i].write(EEPROM.read(addr[i])); // Bewege Servo zur letzten im EEPROM gespeicherten Position
}
for (j=0; j<ANZAHL_ENTKUPPLER; j++){
pinMode(buttonE[j], INPUT);
servoEntkuppler[j].attach(servoE[j], autoOff );
servoEntkuppler[j].setSpeed(servoSpeedE[j]);
}
}
 
void loop() {
 
// Schleife für Weichen
 
for (i=0; i<ANZAHL_WEICHEN; i++){
buttonStatusGeradeW[i]=digitalRead(buttonGeradeW[i]);
buttonStatusAbbiegenW[i]=digitalRead(buttonAbbiegenW[i]);
if (buttonStatusGeradeW[i] == HIGH)
{
digitalWrite(ledW[i], HIGH);
EEPROM.write(addr[i], WAnschlagMIN[i]); //Schreibe Zielposition in EEPROM
servoWeiche[i].write(WAnschlagMIN[i]);
}
else
{
if (buttonStatusAbbiegenW[i] == HIGH)
{
digitalWrite(ledW[i], LOW);
EEPROM.write(addr[i], WAnschlagMAX[i]); //Schreibe Zielposition in EEPROM
servoWeiche[i].write(WAnschlagMAX[i]);
}
else
{

}
}
}
 
// Schleife für Entkuppler
 
for (j=0; j<ANZAHL_ENTKUPPLER; j++){
buttonStatusE[j]=digitalRead(buttonE[j]);
if (buttonStatusE[j] == HIGH) //wenn der Entkuppler-Taster betätigt wird...
{
myTimerE[j].setTime(5000); //sollte der Timer auf 5 Sekunden gestellt werden und starten...
servoEntkuppler[j].write(EAnschlagMAX[j]); //... und das Servo auf 110 Grad (Entkuppeln) gehen...
}
else // wenn der Taster losgelassen wurde ...
{
if (myTimerE[j].running()==false) //...und wenn der Timer abgelaufen ist ...
{
servoEntkuppler[j].write(EAnschlagMIN[j]); //...wieder auf 75 Grad (Ruhezustand)
}
}
}

 
}
 

 


Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.533
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#47 von fbstr , 01.03.2017 21:52

Jetzt wollte ich das gleiche für den UNO machen (rechtes Regal mit 3 Weichen),
aber irgendwie kümmert sich der Arduino überhaupt nicht um das EEPROM

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
 

//TimeWaster UNO Version 3
 
#include <MobaTools.h>
#include <EEPROM.h>
 
// Gleisstellpultweiche Nr.: 7, 8, 9
const byte servoW[] ={ A2, A1, A3}; //Array Weichen Pins
const byte WAnschlagMIN[] ={ 50, 100, 100}; //Array Weichenauslenkung Minimum
const byte WAnschlagMAX[] ={100, 50, 50}; //Array Weichenauslenkung Maximum
const byte servoSpeedW[] ={ 5, 5, 10}; //Array Servogeschwindigkeit
const byte buttonGeradeW[] ={ 5, 7, 2}; //Array Pins "Taster geradeaus"
const byte buttonAbbiegenW[] ={ 4, 6, 3}; //Array Pins "Taster abbiegen"
const byte ledW[] ={ 11, 9, 10}; //Array LEDs
const byte addr[] ={ 1, 2, 3}; //Array eeprom address
const byte ANZAHL_WEICHEN = sizeof(servoW);
 
// Gleisstellpultentkuppler Nr.: 8, 11
const byte servoE[] ={ A0, A4}; //Array Entkuppler Pins
const byte EAnschlagMIN[] ={ 75, 65}; //Array Entkupplerauslenkung Minimum
const byte EAnschlagMAX[] ={110, 90}; //Array Entkupplerauslenkung Maximum
const byte servoSpeedE[] ={ 20, 20}; //Array Servogeschwindigkeit
const byte buttonE[] ={ 13, 12}; //Array Pins "Taster Entkuppler"
const byte ANZAHL_ENTKUPPLER = sizeof(servoE);
 
const byte autoOff = 1; //damit die Servos nicht brummen...
 
Servo8 servoWeiche[ANZAHL_WEICHEN]; //Array Weichen 7 bis 9
Servo8 servoEntkuppler[ANZAHL_ENTKUPPLER]; //Array Entkuppler 8 und 11
EggTimer myTimerE[ANZAHL_ENTKUPPLER]; //Entkuppler sollen 5 sec. aktiv sein
 
byte buttonStatusGeradeW[ANZAHL_WEICHEN] ={0,0,0};
byte buttonStatusAbbiegenW[ANZAHL_WEICHEN]={0,0,0};
byte buttonStatusE[ANZAHL_ENTKUPPLER] ={0,0};
 
byte i; //Zählvariable Weichen
byte j; //Zählvariable Entkuppler
 
void setup() {
for (i=0; i<ANZAHL_WEICHEN; i++){
pinMode(buttonGeradeW[i], INPUT);
pinMode(buttonAbbiegenW[i], INPUT);
pinMode(ledW[i], OUTPUT);
if (EEPROM.read(addr[i]) == WAnschlagMIN[i]) // Wenn letzte Weichenposition Geradeaus war...
{
digitalWrite(ledW[i], HIGH); // dann wird LED grün geschaltet, ansonsten bleibt sie rot
}

servoWeiche[i].attach(servoW[i], autoOff );
servoWeiche[i].setSpeed(servoSpeedW[i]);
servoWeiche[i].write(EEPROM.read(addr[i])); // Bewege Servo zur letzten im EEPROM gespeicherten Position
}
for (j=0; j<ANZAHL_ENTKUPPLER; j++){
pinMode(buttonE[j], INPUT);
servoEntkuppler[j].attach(servoE[j], autoOff );
servoEntkuppler[j].setSpeed(servoSpeedE[j]);
}
}
 
void loop() {
 
// Schleife für Weichen
 
for (i=0; i<ANZAHL_WEICHEN; i++){
buttonStatusGeradeW[i]=digitalRead(buttonGeradeW[i]);
buttonStatusAbbiegenW[i]=digitalRead(buttonAbbiegenW[i]);
if (buttonStatusGeradeW[i] == HIGH)
{
digitalWrite(ledW[i], HIGH);
EEPROM.write(addr[i], WAnschlagMIN[i]); //Schreibe Zielposition in EEPROM
servoWeiche[i].write(WAnschlagMIN[i]);
}
else
{
if (buttonStatusAbbiegenW[i] == HIGH)
{
digitalWrite(ledW[i], LOW);
EEPROM.write(addr[i], WAnschlagMAX[i]); //Schreibe Zielposition in EEPROM
servoWeiche[i].write(WAnschlagMAX[i]);
}
else
{

}
}
}
 
// Schleife für Entkuppler
 
for (j=0; j<ANZAHL_ENTKUPPLER; j++){
buttonStatusE[j]=digitalRead(buttonE[j]);
if (buttonStatusE[j] == HIGH) //wenn der Entkuppler-Taster betätigt wird...
{
myTimerE[j].setTime(5000); //sollte der Timer auf 5 Sekunden gestellt werden und starten...
servoEntkuppler[j].write(EAnschlagMAX[j]); //... und das Servo auf 110 Grad (Entkuppeln) gehen...
}
else // wenn der Taster losgelassen wurde ...
{
if (myTimerE[j].running()==false) //...und wenn der Timer abgelaufen ist ...
{
servoEntkuppler[j].write(EAnschlagMIN[j]); //...wieder auf 75 Grad (Ruhezustand)
}
}
}

 
}
 

 




Am Anfang hatte ich statt:
const byte addr[] ={ 1, 2, 3}; //Array eeprom address
dieses drin:
const byte addr[] ={ 7, 8, 9}; //Array eeprom address
Aber beides scheint nicht zu funktionieren.

[Edit] Seit dem dritten Mal Einschalten hat es nun funktioniert.


Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.533
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#48 von MicroBahner , 01.03.2017 22:28

Hallo Frank,
das geht ja wirklich toll voran bei Dir

Zitat

Als nächstes stolper ich über diese Aussage:
Quelle: https://www.arduino.cc/en/Reference/EEPROMWrite

The EEPROM memory has a specified life of 100,000 write/erase cycles, so you may need to be careful about how often you write to it.

Ich habe 9 Weichen beim TimeWaster. Sagen wir mal ich schalte am Abend jede Weiche ca. 10-12 mal, dann wären das 100 Schreib-/Lesevorgänge pro Tag. D.h. nach 1000 Tagen, also in 3 Jahren würde ich Probleme bekommen? Wenn ja, was passiert dann? Ist der Arduino dann defekt?

Bei den Zahlen dauert das fast 10x so lang, denn die 100,000 Schreibzyklen gelten ja für jede Zelle. Wenn Du die Weiche 10x schaltest, sind das auch 10 Schreibvorgänge für die entsprechende Zelle, d.h. Du kannst das 10,000 Tage lang machen. Ausserdem halten die Zellen in der Praxis deutlich länger, weil Du sie ja auch nicht an der oberen Grenze des zulässigen Temperaturbereiches betreibst.
Wenn Du sie in einer Programmschleife 'bombardierst', dann kannst Du sie allerdings schon recht flott niedermachen.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#49 von Kriwatsch , 02.03.2017 12:53

Hallo Frank
Ist doch nicht weiter tragisch. Das EEPROM wird doch nur zweimal benötigt, nämlich beim Einschalten & Ausschalten. Das kann man ja programmtechnisch lösen. Unter DOS konnte ich den Stecker ziehen, unter Windows schoß der Rechner dann Kapriolen. Ein spezieller Resettaster welcher dann den Zustand der Anlage speichert dürfte schon reichen. Der Taster startet dann ein Unterprogramm welches den Zustand speichert. In der Startroutine ein Programm zum lesen des Speichers und gut ist. Oder einfach so lassen - wer weiß schon wie die Sache in fünf Jahren aussieht? Vielleicht haben die Loks dann Drehstrom-Motoren??? Wenn der EEPROM an Inkontinenz leidet wird eben gewechselt. Eine Fassung und Ruhe hat es.
Na ja, ich sehe schon, ich muss mich mal eingehend mit der ganzen Problematik befassen. Bei mir läuft Alles noch schön analog. Die Steuerung ist "halb-digital" mit Relais, der Fahrstrom hat Thyristor-Regelung. Und so eben eine alte Z-Schaltung kann jeden Block auf jeden Regler legen, mit Verriegelung natürlich. Hat mir eben Spaß gemacht - das Austüfteln. Und ist einfach in der Wartung. Die Relais sind gesteckt und ich habe noch eine ganze Kiste vol davon Aber Nichtsdestotrotz - der Thread ist hochinterressant Auch wenn ich von den Programmen keinen blassen Schimmer. Aber der Mensch soll ja lernfähig sein
Ciao
Mischa


 
Kriwatsch
InterRegio (IR)
Beiträge: 230
Registriert am: 26.10.2015
Ort: Dresden
Spurweite N
Stromart DC, Analog


RE: Arduino MobaTools: Optimierung Drehscheibensteuerung

#50 von fbstr , 02.03.2017 17:08

Zitat

Das EEPROM wird doch nur zweimal benötigt, nämlich beim Einschalten & Ausschalten.



Hallo Mischa,

nicht ganz so wenig, der Schreibvorgang findet bei jedem Schaltvorgang der Weiche statt. Aber wie Du selbst schreibst: Wer weiß was in 5 Jahren ist

Also ich bin echt stolz wie ein König als das gestern so einfach geklappt hat und damit dieses Projekt praktisch abgeschlossen ist. Die Hilfe aus diesem Forum und speziell von Franz-Peter ist spitzenmäßig. Mit Programmierung und Mikroprozessoren habe ich mich eigentlich nie so anfreunden können - vermutlich weil mir auch konkrete Problemfälle gefehlt haben, wo ich das einsetzen hätte können.

Ich kann diese Arduino-Geschichte jedem ans Herz legen. Gemütlich in China das Zeugs ordern, dann ist es unglaublich günstig.


Als nächstes werde ich mal an die DCC-Optokoppler rangehen, wo ich die Eagle-Datei von digi_thomas2003 bekommen habe und 20 Stück in China habe machen lassen. Vermutlich bleibe ich mal bei den Servos und versuche zu lernen die Scheunentore damit über DCC zu steuern. So mit "Zurückfedern" beim Aufmachen oder so...


Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.533
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


   


  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz