RE: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#1 von tobi_bahner , 23.12.2016 16:00

Hallo zusammen,

kann mir jemand bitte helfen meine Servos zu programmieren. Ich bin seit 12h dran und schier am verrückt werden.

Aufgebaut ist folgendes. Mein Ziel ist es 32 Servos zu steuern, also die Adafruits PWM Boards zu kaskadieren.

z21 + Multimaus
DCC Optokopplerschaltung
Arduino Uno 3
Adafruit PWM Board

es ist alles nach Plan angeschlossen, aber mein Servo will sich auf Befehl einfach nicht bewegen.

Wenn ich das Testprogramm 'Servo' von Adafruit hochlade funktionieren die Servos.

programmieren bin ich leider eine Niete.

hat jemand Zeit und Lust mir zu helfen? das wäre sehr nett.

Vielen Dank


Lebe im Moment, freue dich auf die Zukunft


tobi_bahner  
tobi_bahner
InterRegioExpress (IRE)
Beiträge: 259
Registriert am: 01.05.2016
Spurweite N
Stromart DC, Digital


RE: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#2 von MicroBahner , 28.12.2016 11:39

Hallo tobi_bahner,
es gibt zwar für fast alle Themen unter den Stummies welche, die sich auskennen. Nur beim Hellsehen, da tun sich auch die Stummies schwer .

Du musst schon etwas genauer sagen was Du willst, wie dein Aufbau aussieht und was Du bisher getan hast.

Zitat von tobi_bahner
DCC Optokopplerschaltung

Wie sieht die denn aus? wie wird das DCC-Signal decodiert?

Zitat von tobi_bahner
Arduino Uno 3

Dein nicht funktionierender Sketch wäre auch nicht schlecht um helfen zu können.

Zitat von tobi_bahner
es ist alles nach Plan angeschlossen

Nach welchem Plan denn? Du solltest uns schon einen Schaltplan gönnen.


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: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#3 von moppe , 28.12.2016 13:48

Hallo ????(dein Name)

Was kostet ihren zeit?
Was kostet ihren Freizeit (€/stunde).

32 Servomotoren - sollte sie an einer stelle werden oder verteilt über ihren Anlage?

Ich hab an die selber stelle als ihn werden. Arduino ist viel spass und ich hab mehreren Konstruktionen gebaut.
Aber was nutzen ich für meiner servos an die modellbahnanlage?
ESU switchpilot servo.
Warum?
Weil es funktioniert, weil es einfach ist, weil ich kann noch ein Decoder einbauen an welcher stelle ich wünscht, weil ich kann die Leiter bis jeder servo kurz haben - und so weiter.

Ich empfehlen ihn ihren Projekt zu nachdenken. Wenn sie kein Erfahrung hab mit programmieren geht schnell 100 Stunden, vielleicht 300 Stunden.
Ob dieser http://stummiforum.de/viewtopic.php?f=21&t=127899 nicht ihn Hilfen in die richtige Richtung - fertige Decoder kaufen!

Klaus


"Meine" Modellbahn:http://www.modelbaneeuropa.dk
Dänisches Bahnforum: http://www.baneforum.dk
PIKO C4 "Horror Gallery": http://moppe.dk/PIKOC4.html


 
moppe
Trans Europ Express (TEE)
Beiträge: 8.725
Registriert am: 07.08.2011
Homepage: Link
Ort: Norddeusche halbinsel
Gleise Roco, PECO, Märklin/Trix, PIKO,
Spurweite H0, H0e, N, Z
Steuerung Z21, Lenz, MpC Gahler+Ringsmeier, Games on Track/Faller
Stromart AC, DC, Digital, Analog


RE: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#4 von tobi_bahner , 28.12.2016 15:43

Hallo

danke für das Interesse, sorry, mein Name ist Tobi.

so wie der Kollege das hier aufgebaut hat.

https://www.youtube.com/watch?v=Y1ShXjbzcmo

der Schaltplan vom Optokoppler ist



und verdrahtet ist es so



der Sketch ist genau der aus der Videobeschreibung des Youtube Videos
aus diesem Forum
http://forum.opendcc.de/viewtopic.php?f=...d4ceff0adf528ee

jetzt habe ich mal ein neues Arduino Uno bestellt, vielleicht hat das einen Defekt.

weiß jemand wie ich hier einen kompletten Sketch hochladen kann?

Danke
Tobi


Lebe im Moment, freue dich auf die Zukunft


tobi_bahner  
tobi_bahner
InterRegioExpress (IRE)
Beiträge: 259
Registriert am: 01.05.2016
Spurweite N
Stromart DC, Digital


RE: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#5 von MicroBahner , 28.12.2016 16:42

Hallo Tobi,

Zitat von tobi_bahner
jetzt habe ich mal ein neues Arduino Uno bestellt, vielleicht hat das einen Defekt.

Wenn es mit dem Testsketch von Adafruit funktioniert, ist das sehr unwahrscheinlich. Wenn mit Arduino etwas nicht funktioniert, liegt es in 99,9% der Fälle am Sketch

Zitat von tobi_bahner
weiß jemand wie ich hier einen kompletten Sketch hochladen kann?

Füge Code-Tags ein (Button 'Code' oben) und kopiere den Sketch aus der IDE einfach zwischen den Code-Anfang und den Code-Ende Tag hinein (nach dem Einfügen des Code-Tags steht der Cursor schon automatisch an der richtigen Einfügestelle).

1
2
 
// Hier steht dann dein Code
 
 


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: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#6 von tobi_bahner , 29.12.2016 09:29

So sieht mein Sketch aus.

da ich das erste mal mit Arduinos und der Software arbeite, kann auch in der Handhabung mein Fehler liegen.

Am liebsten wäre mir Plug & Play. Alles zusammenbauen, Sketch aufspielen, funktionert, fertig! aber so leicht ist es dann eben bei Selbstbau doch wieder nicht.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Arduino DCC Servo and Function Decoder.
// Author: Author: Ruud Boer - January 2015
// This sketch turns an Arduino into a DCC decoder with max 12 servo motor outputs combined with function outputs.
// The DCC signal is optically separated and fed to pin 2 (=Interrupt 0). Schematics: www.mynabay.com
// Many thanks to www.mynabay.com for publishing their DCC monitor and -decoder code, which is used in this sketch.
//
// Important Change:
// This sketch from Ruud Boer was changed by lordbrummi in April 2016
// Now you can connect a PWM Arduino Servo Shield with 16 possible servos and adress them with DCC adresses
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 

 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// IMPORTANT: GOTO lines 22, 49, 72 to configure some data!
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
 
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
 
#include <DCC_Decoder.h>
#include <Servo.h>
#define kDCC_INTERRUPT 0
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Fill in these 1 value ...
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const byte maxservos = 2; //The number of servos you have connected to this Arduino IMPORTANT!!!!!
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const byte servotimer = 40;
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Set the Servomin and the Servomax of your servo between the gear range possibility IMPORTANT!!!!!
const int SERVOMIN = 150; // this is the 'minimum' pulse length count (out of 4096)
const int SERVOMAX = 600; // this is the 'maximum' pulse length count (out of 4096)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
unsigned long timetoupdatesetpoint = millis() + servotimer;
 

 
struct DCCAccessoryAddress {
int address; // DCC address to respond to
byte output; // State of accessory: 1=on, 0=off (for internal use only)
int outputPin; // Arduino output pin
};
DCCAccessoryAddress accessory[maxservos];
 
struct servoItem {
int angle;
int setpoint;
int offangle;
int onangle;
byte inverted;
int servo;
byte functionnumber;
};
servoItem servos[maxservos];
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Fill in the address and pin for every accessory / function. Servos are 'coupled' to accessory[n] in line 72 and further. IMPORTANT!!!!!
// COPY - PASTE as many times as you have functions. The amount must be same as in line 22 above!
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ConfigureDecoderFunctions()
{
accessory[0].address = 1; // DCC address for this accessory
accessory[0].outputPin = 13; // Arduino pin where accessoryis connected to
 
accessory[1].address = 2; // DCC address for this accessory
accessory[1].outputPin = 13; // Arduino pin where accessory is connected to
 

// Setup output pins for accessories
for(int i=0; i<maxservos; i++)
{
if( accessory[i].outputPin )
{
pinMode (accessory[i].outputPin, OUTPUT );
digitalWrite (accessory[i].outputPin, LOW);
}
}
} // END ConfigureDecoderFunctions
 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Fill in the attributes for every servo
// COPY - PASTE as many times as you have servo's. The amount must be same as maxservos in line 22 above!
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ConfigureDecoderServos()
{
servos[0].angle=90; //initial angle of servo. Make this the same as offangle to avoid startup jitter.
servos[0].offangle=40; //minimum angle. Do not use value too close to 0, servo may stutter at the extremes.
servos[0].onangle=80; //maximum angle. Do not use value too close to 180, servo may stutter at the extremes.
servos[0].servo=0; //Arduino pin number where servo is connected to
servos[0].functionnumber=0; // CONNECTION BETWEEN FUNCTION AND SERVO ()accessory[functionnumber] - see above)
 
servos[1].angle=90;
servos[1].offangle=120;
servos[1].onangle=160;
servos[1].servo=1;
servos[1].functionnumber=1;

 
// A servo is coupled to an accessory[n]. It rotates based on accessory[n].output = 1 or 0
// If you have multiple servos you need to couple them to different accessories. However ...
// accessories may switch the same output pin (e.g. pin 13, which has the on board led attached)

} // END ConfigureDecoderServos
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// DCC packet handler
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void BasicAccDecoderPacket_Handler(int address, boolean activate, byte data)
{
// Convert NMRA packet address format to human address
address -= 1;
address *= 4;
address += 1;
address += (data & 0x06) >> 1;
 
boolean enable = (data & 0x01) ? 1 : 0;

for(int i=0; i<maxservos; i++)
{
if(address == accessory[i].address)
{
if(enable) accessory[i].output = 1;
else accessory[i].output = 0;

}
}
}
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Setup (run once)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup()
{
DCC.SetBasicAccessoryDecoderPacketHandler(BasicAccDecoderPacket_Handler, true);
ConfigureDecoderFunctions();
ConfigureDecoderServos();
DCC.SetupDecoder( 0x00, 0x00, kDCC_INTERRUPT );
pinMode(2,INPUT_PULLUP); //Interrupt 0 with internal pull up resistor (can get rid of external 10k)
//pinMode(A5,INPUT_PULLUP); //If made LOW, all servos go to their min angle, to avoid jitter at starup. - Not to use with PWM Servoshield because it uses already pinMode A5
pinMode(13,OUTPUT);
digitalWrite(13,LOW); //switch off Arduino led at startup

for (int n=0; n<maxservos; n++)
{
pinMode(accessory[n].outputPin,OUTPUT); //Set accessory pins to OUTPUT mode
servos[n].onangle=map(servos[n].onangle,0,180,SERVOMIN,SERVOMAX); // Adjust the angles to the range given by Servomin and Servomax
servos[n].offangle=map(servos[n].offangle,0,180,SERVOMIN,SERVOMAX);
servos[n].angle=map(servos[n].angle,0,180,SERVOMIN,SERVOMAX);
}
 
Serial.begin(9600);
Serial.println("Los gehts");
 
pwm.begin();

pwm.setPWMFreq(60); // Analog servos run at ~60 Hz updates
 
yield();
}
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Main loop (run continuous)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void loop()
{
static int addr = 0;

 
DCC.loop(); // DCC library

if( ++addr >= maxservos ) addr = 0; // Next address to test
 
// Set accessory output pin
if (accessory[addr].output) digitalWrite(accessory[addr].outputPin, HIGH);
else digitalWrite(accessory[addr].outputPin, LOW);
 
// Every 'servotimer' ms, modify setpoints and move servos 1 step (if needed)
if (millis() > timetoupdatesetpoint)
{
timetoupdatesetpoint = millis() + servotimer;
for (int n=0; n<maxservos; n++)
{
if (accessory[servos[n].functionnumber].output) servos[n].setpoint=servos[n].onangle;
else servos[n].setpoint=servos[n].offangle;
pwm.setPWM(servos[n].servo, 0, servos[n].setpoint);
}
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Move all servos to min position and set all function outputs to 0, to eliminate startup servo jerk current draw
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//if (digitalRead(A5)==LOW) {for (int n=0; n<maxservos; n++) accessory[n].output = 0;} - Not to use with PWM Servoshield because it uses already pinMode A5
 
} //END MAIN LOOP
 

 
 


Lebe im Moment, freue dich auf die Zukunft


tobi_bahner  
tobi_bahner
InterRegioExpress (IRE)
Beiträge: 259
Registriert am: 01.05.2016
Spurweite N
Stromart DC, Digital


RE: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#7 von MicroBahner , 29.12.2016 10:56

Hallo Tobi,
was mir zuerst mal aufgefallen ist: In deinem Sketch wird das Standard-Addressierungschema für Zubehördecoder verwendet. D.h. dass die ersten 4 Addressen - wie von der NMRA empfohlen - nicht verwendet werden. Roco hält sich aber nicht an diese Empfehlung. Was bei den meisten Addresse 1 ist, ist bei Roco bereits Adresse 5. Im Sketch ist Addresse 1und 2 eingestellt. Versuche es also mal an deiner Z21 mit Addresse 5+6. Wenn's dann funktioniert war das das einzige Problem. Wenn nicht, muss man weiterforschen

Zitat von tobi_bahner
Am liebsten wäre mir Plug & Play. Alles zusammenbauen, Sketch aufspielen, funktionert, fertig! aber so leicht ist es dann eben bei Selbstbau doch wieder nicht.

Manchmal geht das, wenn man den Sketch genau in der selben Weise und Umgebung verwendet wie derjenige, der ihn geschrieben hat. Aber wenn man versteht, was im Sketch passiert, tut man sich schon leichter


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: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#8 von tobi_bahner , 29.12.2016 11:18

habe die Adresse 5 & 6 ausprobiert, aber es geht leider noch nicht. Danke für den Tipp!

Wie kann ich testen ob meine Optokopplerschaltung richtig funktioniert?


Lebe im Moment, freue dich auf die Zukunft


tobi_bahner  
tobi_bahner
InterRegioExpress (IRE)
Beiträge: 259
Registriert am: 01.05.2016
Spurweite N
Stromart DC, Digital


RE: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#9 von MicroBahner , 29.12.2016 11:30

Hallo Tobi,
ich würde erstmal testen, ob überhaupt ein Telegramm erkannt wird. Das geht am einfachsten in der Empfangsfunktion. Die serielle Schnittstelle ist ja schon aktiviert, und Du kannst Ausgaben auf den Serial Monitor in der IDE machen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
void BasicAccDecoderPacket_Handler(int address, boolean activate, byte data)
{
// Convert NMRA packet address format to human address
address -= 1;
address *= 4;
address += 1;
address += (data & 0x06) >> 1;
 
boolean enable = (data & 0x01) ? 1 : 0;
Serial.print("Adresse:"); Serial.println (address); // <<Testausgabe auf serial Monitor
 
for(int i=0; i<maxservos; i++)
{
if(address == accessory[i].address)
{
if(enable) accessory[i].output = 1;
else accessory[i].output = 0;

}
}
}
 
 


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: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#10 von volkerS , 29.12.2016 14:37

Hallo Tobi,
stimmt die Adresse des Adafruit-Boards? Oben rechts neben Power wird die Adresse über Lötbrücken eingestellt. Für den Adafriut-Test Sketch ja, aber auch für deinen Sketch aus Beitrag6?
Der Pull-Up-Widerstand R3 10k in der DCC-Optokopplerschaltung kann entfallen. Im Sketch ist der Pull-Up für Input2 aktiviert.
Volker


volkerS  
volkerS
ICE-Sprinter
Beiträge: 5.975
Registriert am: 14.10.2014


RE: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#11 von tobi_bahner , 31.12.2016 10:42

@ microbahner
was soll ich damit jetzt machen? einfach rein kopieren in meinen Sketch?

@Volker
den Widerstand R3 habe ich entfernt und die Adresse mal mit 0, 1 oder 2 ausprobiert. Jedoch tut sich noch nichts.

eine weitere Frage: Wenn ich eine Bibliothek eingebunden habe, oder vergessen habe einzubinden, dann merkt das die Software, oder nicht?
kann man einen Sketch schreiben in dem ich mit dem DCC Signal eine LED auf dem Arduino ansteuere? Dann kann ich testen ob das Signal wirklich ankommt

Danke und Gruß


Lebe im Moment, freue dich auf die Zukunft


tobi_bahner  
tobi_bahner
InterRegioExpress (IRE)
Beiträge: 259
Registriert am: 01.05.2016
Spurweite N
Stromart DC, Digital


RE: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#12 von MicroBahner , 31.12.2016 12:48

Hallo Tobi,

Zitat von tobi_bahner
was soll ich damit jetzt machen? einfach rein kopieren in meinen Sketch?

Genau! Die eine Zeile mit der Testausgabe an der entsprechenden Stelle einfügen. Den seriellen Monitor starten und dann schauen ob etwas ausgegeben wird, wenn Du an der Z21 eine Weiche schaltest.
Beim Starten des Programms muss auch schon eine 'Begrüßung' ("Los gehts") auf dem seriellen Monitor erscheinen, die steht im Sketch nämlich auch drin. Daran erkennst Du, ob die Verbindung zum seriellen Monitor überhaupt funktioniert.

Zitat von tobi_bahner
den Widerstand R3 habe ich entfernt und die Adresse mal mit 0, 1 oder 2 ausprobiert. Jedoch tut sich noch nichts.

Volker hat geschrieben, dass Du den Widerstand nicht unbedingt benötigst. Er stört aber auch nicht, sodass Du durch das Entfernen eigentlich nichts änderst.

Zitat von tobi_bahner
Wenn ich eine Bibliothek eingebunden habe, oder vergessen habe einzubinden, dann merkt das die Software, oder nicht?

Wenn Du eine im Sketch benötigte Bibliothek nicht eingebunden hast, bekommst Du eine Fehlermeldung.


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: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#13 von tobi_bahner , 31.12.2016 15:38



also so sieht der Monitor aus. Wenn ich jetzt eine Weiche schalte, verändert sich im Monitor nichts.

danke für deine Geduld


Lebe im Moment, freue dich auf die Zukunft


tobi_bahner  
tobi_bahner
InterRegioExpress (IRE)
Beiträge: 259
Registriert am: 01.05.2016
Spurweite N
Stromart DC, Digital


RE: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#14 von tobi_bahner , 01.01.2017 14:09

ich habe noch einen anderen arduino Decoder aus Ebay gekauft. da hat die DCC Signalübertragung funktioniert.

also funktioniert definitiv meine Optokopplerschaltung nicht, obwohl ich es genau so aufgebaut habe. Ich bin gelernter Mechatroniker und bin fast am durchdrehen!!!


Lebe im Moment, freue dich auf die Zukunft


tobi_bahner  
tobi_bahner
InterRegioExpress (IRE)
Beiträge: 259
Registriert am: 01.05.2016
Spurweite N
Stromart DC, Digital


RE: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#15 von MicroBahner , 01.01.2017 22:00

Hallo Tobi,

Zitat von tobi_bahner
also so sieht der Monitor aus. Wenn ich jetzt eine Weiche schalte, verändert sich im Monitor nichts.

Dann werden deine DCC-Telegramme nicht erkannt. Da Du ja an der DCC-Library nichts verändert hast, vermute ich den Fehler in der Optokopplerschaltung am Port 2. Ob da ein vernünftiges Signal anliegt, kann man eigentlich nur mit einem Oszilloskop feststellen. Mit einem Multimeter stochert man da schon arg im Nebel. Aber wenn Du die Spannung am Port 2 misst (bei anliegendem DCC-Signal), sollte zumindest ein Wert etwa in der Mitte zwischen 0 und 5V rauskommen. Misst Du dort nur 0V oder 5V ist auf jeden Fall etwas faul.

Zitat von tobi_bahner
ich habe noch einen anderen arduino Decoder aus Ebay gekauft. da hat die DCC Signalübertragung funktioniert.

Was hast Du denn da gekauft? Ein Link wäre nicht schlecht. Ist das nur die Optokoppler Eingangsschaltung oder ein komplettes Arduino-System?

P.S. hier wird ein ganz einfaches und billiges Oszilloskop gezeigt. Für einige grundlegende Messungen im Bereich des DCC-Signals könnte das schon hilfreich sein.


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: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#16 von tobi_bahner , 02.01.2017 10:33

Hallo Franz-Peter,

ein Oszilloskop habe ich zwar nicht, aber ich habe es mit einer LED getestet und diese leuchtet schwach, als wäre dauerhaft Spannung vorhanden.

hier ist ein Bild von dem anderen Decoder mit Optokoppler und Arduino.


soll ich mal alles deinstallieren und sämtliche Bibliotheken löschen? Wenn ich richtig gelesen habe, arbeitest du mit der NMRA dcc library. Meinst du man diese in den Sketch integrieren?


Lebe im Moment, freue dich auf die Zukunft


tobi_bahner  
tobi_bahner
InterRegioExpress (IRE)
Beiträge: 259
Registriert am: 01.05.2016
Spurweite N
Stromart DC, Digital


RE: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#17 von MicroBahner , 02.01.2017 10:50

Hallo Tobi,
das auf dem Bild ist ja auch ein selbstgebauter Decoder. Hast Du den so auf ebay erworben? Wenn ich deinen Post oben richtig verstehe, funktioniert der Sketch ja auf diesem 'neuen' Decoder? Dann wird ein Löschen und Neuinstallieren für deine bisherige Schaltung nichts bringen.
Die Messung mit der LED ist natürlich auch nur ein sehr grober Anhaltspunkt. Leuchtet sie den stärker wenn Du sie statt mit Port2 direkt mit 5V verbindest?

Zitat von tobi_bahner
Wenn ich richtig gelesen habe, arbeitest du mit der NMRA dcc library. Meinst du man diese in den Sketch integrieren?

Das stimmt, ich halte die NMRA-Dcc Library für die bessere Alternative. Allerdings unterscheiden sich die Bibliotheksaufrufe doch wesentlich von der in deinem Sketch verwendeten mynabay-Lib. D.h. dass man den Sketch schon etwas umbauen müsste um die NMRAdcc Lib zu 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: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#18 von tobi_bahner , 02.01.2017 10:59

okay, nein auf den ebay-Decoder kann ich nicht zugreifen, da mein PC keinen Treiber findet. Ich habe das nur ausprobiert um zu schauen ob meine Zentrale nicht vielleicht einen Defekt hat.

die LED hat kurzzeitig heller bei 5V geleuchtet und dann ist sie kaputt gegangen, da sie ja nicht bis 5V ausgelegt sind.

Also gesetzt den Falls dass ich alles nochmal lösche und neu installiere wäre das hier dann die Reihenfolge?

Installation von der Arduino Plattform
DCC library in den Arduino Ordner kopieren
Adafruit library in den Arduino kopieren

im Programm auf "Bibliotek hinzufügen" gehen und beide hinzufügen.

Dann den Sketch vom Internet kopieren
kompilieren und übertragen.

dann sollte es doch funktionieren, oder?


Lebe im Moment, freue dich auf die Zukunft


tobi_bahner  
tobi_bahner
InterRegioExpress (IRE)
Beiträge: 259
Registriert am: 01.05.2016
Spurweite N
Stromart DC, Digital


RE: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#19 von MicroBahner , 02.01.2017 11:53

Zitat von tobi_bahner
okay, nein auf den ebay-Decoder kann ich nicht zugreifen, da mein PC keinen Treiber findet. Ich habe das nur ausprobiert um zu schauen ob meine Zentrale nicht vielleicht einen Defekt hat.

Dort ist wohl bereits ein fertiger Sketch drauf, und der funktioniert mit deiner Zentrale? Hast Du denn die .ino-Datei von diesem Sketch?
Das heißt aber, dass Du nicht darauf schliessen kannst, ob bei deinem Aufbau ein Hardware, oder ein Softwareproblem vorliegt.

Zum Treiber: ich vermute mal, dass da ein nano-Klon drauf ist, und die verwenden fast alle den CH340 - Chip für die seriell-USB Umsetzung. Da musst Du dann den CH340-Treiber installieren und dann kannst Du darauf zugreifen. Hier ist eine Beschreibung dazu.

Zitat von tobi_bahner
die LED hat kurzzeitig heller bei 5V geleuchtet und dann ist sie kaputt gegangen, da sie ja nicht bis 5V ausgelegt sind.

Sorry, mein Fehler. Ich bin nicht davon ausgegangen, dass Du die Led ohne Vorwiderstand/Treiberbaustein angeschlossen hast. Wenn Du die Led direkt an den Optokopplerausgang angeschlossen hast ( und also R3 als Vorwiderstand nutzt), könntest Du höchstens prüfen, ob sie heller wird, wenn Du das DCC-Signal abschaltest. Legst Du ca. 14V Gleichspannung (richtig gepolt) an DCCIN an, muss sie ausgehen (sollte mit einer 9V Blockbatterie auch schon funktionieren). Bei anliegendem DCC-Signal muss es eine Helligkeit dazwischen geben. Ob das aber ein sauberes DCC-Signal mit der richtigen Flankensteiheit ist, kann eben nur mit einem Oszilloskop festgestellt werden. Wenn der Optokoppler ok ist, sollte das aber eigentlich so sein.

Zitat von tobi_bahner
Also gesetzt den Falls dass ich alles nochmal lösche und neu installiere wäre das hier dann die Reihenfolge?

Installation von der Arduino Plattform
DCC library in den Arduino Ordner kopieren
Adafruit library in den Arduino kopieren

im Programm auf "Bibliotek hinzufügen" gehen und beide hinzufügen.

Dann den Sketch vom Internet kopieren
kompilieren und übertragen.

Na ja, das solltest Du doch schon alles gemacht haben, und wenn Du keine Fehlermeldungen beim kompilieren bekommst, sind auch alle Libraries vorhanden und werden erkannt.


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: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#20 von tobi_bahner , 02.01.2017 12:53

ja, dass ist die Datei, die auf dem Board drauf 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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Arduino DCC Solenoid Switch Decoder.
// Author: Ruud Boer - January 2015
// This sketch turns an Arduino into a DCC decoder to drive max 8 dual coil solenoid switches.
// The DCC signal is optically separated and fed to pin 2 (=Interrupt 0). Schematics: www.mynabay.com
// Many thanks to www.mynabay.com for publishing their DCC monitor and -decoder code.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// IMPORTANT: GOTO lines 17 and 40 to configure some data!
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
#include <DCC_Decoder.h>
#define kDCC_INTERRUPT 0
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// FILL IN
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const byte maxaccessories=8; //The number of switches you want to control with this Arduino
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
typedef struct
{
int address; // Address to respond to
byte output; // State of accessory: 1=on, 0=off (for internal use only)
int outputPin; // Arduino output pin
int outputPin2; // Arduino output pin2, used for solenoid junctions
byte highlow; // State of outputpin: 1=HIGH, 0=LOW
byte highlow2; // State of outputpin2: 1=HIGH, 0=LOW
boolean finished; // Memory location that says the oneshot is finished
boolean finished2; // Memory location that says the second oneshot (for solenoid) is finished
int durationMilli; // ms flash time
unsigned long onMilli; // for internal use
unsigned long offMilli; // for internal use
}
DCCAccessoryAddress;
DCCAccessoryAddress accessory[maxaccessories];
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Initialization: COPY - PASTE the structure as many times as you have switches and fill in the values you want.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ConfigureDecoderFunctions() // The amount of accessories must be same as in line 26 above!
{
accessory[0].address = 1;
accessory[0].durationMilli = 250;
accessory[0].outputPin = 19;
accessory[0].outputPin2 = 18;
accessory[0].highlow = 0; // Do not change this value
accessory[0].highlow2 = 0; // Do not change this value
accessory[0].finished = false; // Do not change this value
accessory[0].finished2 = true; // Do not change this value
accessory[0].output = 0; // Do not change this value

accessory[1].address = 2;
accessory[1].durationMilli = 250;
accessory[1].outputPin = 17;
accessory[1].outputPin2 = 16;
accessory[1].highlow = 0; // Do not change this value
accessory[1].highlow2 = 0; // Do not change this value
accessory[1].finished = false; // Do not change this value
accessory[1].finished2 = true; // Do not change this value
accessory[1].output = 0; // Do not change this value

accessory[2].address = 3;
accessory[2].durationMilli = 250;
accessory[2].outputPin = 15;
accessory[2].outputPin2 = 14;
accessory[2].highlow = 0; // Do not change this value
accessory[2].highlow2 = 0; // Do not change this value
accessory[2].finished = false; // Do not change this value
accessory[2].finished2 = true; // Do not change this value
accessory[2].output = 0; // Do not change this value

accessory[3].address = 4;
accessory[3].durationMilli = 250;
accessory[3].outputPin = 13;
accessory[3].outputPin2 = 12;
accessory[3].highlow = 0; // Do not change this value
accessory[3].highlow2 = 0; // Do not change this value
accessory[3].finished = false; // Do not change this value
accessory[3].finished2 = true; // Do not change this value
accessory[3].output = 0; // Do not change this value

accessory[4].address = 5;
accessory[4].durationMilli = 250;
accessory[4].outputPin = 11;
accessory[4].outputPin2 = 10;
accessory[4].highlow = 0; // Do not change this value
accessory[4].highlow2 = 0; // Do not change this value
accessory[4].finished = false; // Do not change this value
accessory[4].finished2 = true; // Do not change this value
accessory[4].output = 0; // Do not change this value

accessory[5].address = 6;
accessory[5].durationMilli = 250;
accessory[5].outputPin = 9;
accessory[5].outputPin2 = 8;
accessory[5].highlow = 0; // Do not change this value
accessory[5].highlow2 = 0; // Do not change this value
accessory[5].finished = false; // Do not change this value
accessory[5].finished2 = true; // Do not change this value
accessory[5].output = 0; // Do not change this value

accessory[6].address = 7;
accessory[6].durationMilli = 250;
accessory[6].outputPin = 7;
accessory[6].outputPin2 = 6;
accessory[6].highlow = 0; // Do not change this value
accessory[6].highlow2 = 0; // Do not change this value
accessory[6].finished = false; // Do not change this value
accessory[6].finished2 = true; // Do not change this value
accessory[6].output = 0; // Do not change this value

accessory[7].address = 8;
accessory[7].durationMilli = 250;
accessory[7].outputPin = 5;
accessory[7].outputPin2 = 4;
accessory[7].highlow = 0; // Do not change this value
accessory[7].highlow2 = 0; // Do not change this value
accessory[7].finished = false; // Do not change this value
accessory[7].finished2 = true; // Do not change this value
accessory[7].output = 0; // Do not change this value

// Setup output pins
for(int i=0; i<maxaccessories; i++)
{
if( accessory[i].outputPin )
{
pinMode( accessory[i].outputPin, OUTPUT );
digitalWrite( accessory[i].outputPin, LOW);
}
if( accessory[i].outputPin2 )
{
pinMode( accessory[i].outputPin2, OUTPUT );
digitalWrite( accessory[i].outputPin2, LOW);
}
}
} // END ConfigureDecoderFunctions
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// DCC packet handler
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void BasicAccDecoderPacket_Handler(int address, boolean activate, byte data)
{
// Convert NMRA packet address format to human address
address -= 1;
address *= 4;
address += 1;
address += (data & 0x06) >> 1;
 
boolean enable = (data & 0x01) ? 1 : 0;
 
for(int i=0; i<maxaccessories; i++)
{
if( address == accessory[i].address )
{
if( enable ) accessory[i].output = 1;
else accessory[i].output = 0;
}
}
} // END BasicAccDecoderPacket_Handler
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Setup (run once)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup()
{
DCC.SetBasicAccessoryDecoderPacketHandler(BasicAccDecoderPacket_Handler, true);
ConfigureDecoderFunctions();
DCC.SetupDecoder( 0x00, 0x00, kDCC_INTERRUPT );
pinMode(2,INPUT_PULLUP); //Interrupt 0 with internal pull up resistor (can get rid of external 10k)
pinMode(13,OUTPUT);
digitalWrite(13,LOW); //turn off Arduino led at startup
 
for (int n=0; n<maxaccessories; n++) accessory[n].output = 0; //all servo's to min angle and functions to 0
} //END setup
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Main loop (run continuous)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void loop()
{
static int addr = 0;
 
DCC.loop(); // Loop DCC library
 
if( ++addr >= maxaccessories ) addr = 0; // Bump to next address to test
 
if (accessory[addr].output == 1)
{
if (!accessory[addr].highlow && !accessory[addr].finished)
{
accessory[addr].highlow = 1;
accessory[addr].offMilli = millis() + accessory[addr].durationMilli;
}
if (accessory[addr].highlow && millis() > accessory[addr].offMilli)
{
accessory[addr].highlow = 0;
accessory[addr].finished = true;
}
accessory[addr].finished2 = false;
}
 
else // output==0
{
accessory[addr].highlow=0;
accessory[addr].finished = false;
if (!accessory[addr].highlow2 && !accessory[addr].finished2)
{
accessory[addr].highlow2 = 1;
accessory[addr].offMilli = millis() + accessory[addr].durationMilli;
}
if (accessory[addr].highlow2 && millis() > accessory[addr].offMilli)
{
accessory[addr].highlow2 = 0;
accessory[addr].finished2 = true;
}
}
 
if (accessory[addr].highlow) digitalWrite( accessory[addr].outputPin, HIGH);
else digitalWrite( accessory[addr].outputPin, LOW);
if (accessory[addr].highlow2) digitalWrite( accessory[addr].outputPin2, HIGH);
else digitalWrite( accessory[addr].outputPin2, LOW);
 
} //END loop
 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 

 
 



dieser Sketch lässt sich aber nicht hochladen. Den Treiber habe ich installiert. aber "programmer is not responding"

der Optokoppler ist neu gewesen und ich habe die Schaltung mit einem Elektroingenieur aufgebaut und ich hoffe, dass der alles richtig gemacht hat. Also ich teste es nochmal mit der LED.

Aber wir kommen vorwärts! Vielen Dank bis hierhin schonmal.


Lebe im Moment, freue dich auf die Zukunft


tobi_bahner  
tobi_bahner
InterRegioExpress (IRE)
Beiträge: 259
Registriert am: 01.05.2016
Spurweite N
Stromart DC, Digital


RE: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#21 von MicroBahner , 02.01.2017 14:59

Hallo Tobi,

Zitat von tobi_bahner
dieser Sketch lässt sich aber nicht hochladen. Den Treiber habe ich installiert. aber "programmer is not responding

Hast Du in der Ide unter 'Tools->Board' vor dem kompilieren/hochladen auch auf 'Arduino Nano' umgeschaltet, und den richtigen Port ausgewählt? Du hast ja sonst immer den UNO eingestellt.


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: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#22 von tobi_bahner , 02.01.2017 18:06

ja, habe es umgestellt, jetzt funktioniert das Hochladen.

Ich sehe auf meinem Seriellen Monitor aber nichts. Auch wenn ich die kleine Taste drücke.

welchen Schritt würdest du als nächstes jetzt empfehlen? Denn irgendwie komme ich nicht weiter...


Lebe im Moment, freue dich auf die Zukunft


tobi_bahner  
tobi_bahner
InterRegioExpress (IRE)
Beiträge: 259
Registriert am: 01.05.2016
Spurweite N
Stromart DC, Digital


RE: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#23 von MicroBahner , 02.01.2017 18:23

Wenn Du den original-Sketch aus Post #20 hochgeladen hast, sieht Du freilich nichts, da dort keine Ausgaben programmiert sind.

Du könntest jetzt mal deinen Sketch ( mit der zusätzlich Print-Zeile wie in Post #13 ) hochladen. Auch wenn da dein Adafruit-Board nicht angeschlossen ist, sollte zumindest was auf dem seriellen Monitor zu sehen sein.
Im Prinzip kannst Du dann auch dein Adafruit-Board an den Nano anschliessen. Die Ports A4 und A5 gibt es da ja auch, und es ist auch der gleiche Prozessor-Chip wie auf dem Uno. Nur sollte dann an den beiden Ports nichts anderes angeschlossen sein - das kann ich anhand des Fotos natürlich nicht erkennen.


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: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#24 von tobi_bahner , 03.01.2017 17:32

ich habe mir überlegt, da ich so viele Arduinoboards inzwischen hier rumliegen habe (6Stk) dürften die auch für die Servoansteuerung gut funktionieren.

@ MicroBahner
du hast ja einen Thread der genau das Thema behandelt. Das heißt ich kann einfach meine Servos an meine Arduinos anschließen, wie genau muss ich noch mal schauen und dann einfach die Adressen 1-32 im Sketch vergeben. Das ist glaube ich die einfacherer und schnellere Lösung.

Vielen Dank nochmal für alle Hilfe


Lebe im Moment, freue dich auf die Zukunft


tobi_bahner  
tobi_bahner
InterRegioExpress (IRE)
Beiträge: 259
Registriert am: 01.05.2016
Spurweite N
Stromart DC, Digital


RE: z21, Arduino Uno3, Weichensteuerung, Adafruit, Servo, gelöst!!!!!

#25 von tobi_bahner , 08.01.2017 18:18

jetzt habe ich den Sketch von Moba Tools

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
 
#include <NmraDcc.h>
#include <MobaTools.h>
 
// Demo: ein ganz einfacher Dcc-Servodecoder //
//------------------------------------------ //
// die NmraDcc - Library gibt es unter https://github.com/mrrwa/NmraDcc/archive/master.zip
 
// anzupassende Konstante:
const byte isROCO = 4 ; // wegen unterschiedlicher Weichenadressberechnung bei Roco (sonst = 0)
const byte weichenAdr[] = { 6, 7, 3, 123, 8, 34, 77, 88}; // DCC-Weichenadressen
const byte servoPins[] = { 3, 4, 5, 6, 7, 8, 9, 10}; // output-pin der Servos
const int geradePulse[] = {1200,1200,1200,1200,1200,1200,1200,1200}; // Pulslänge geradeaus
const int abzweigPulse[]= {1800,1800,1800,1800,1800,1800,1800,1800}; // Pulslänge abzweigend
 
const int speed = 8;
const byte autoOff = 1;
const byte ServoZahl = sizeof(weichenAdr);
Servo8 weicheS[ServoZahl];
NmraDcc Dcc;
///////////////////////////////////////////////////////////////
void setup() {
Dcc.init( MAN_ID_DIY, 15, FLAGS_OUTPUT_ADDRESS_MODE | FLAGS_DCC_ACCESSORY_DECODER, 0 );
Dcc.pin(0, 2, 1); // Dcc-Signal an Pin2 ( = Int0 );
 
for ( byte i=0; i<ServoZahl; i++ ) {
// Weichenservos initiieren
weicheS[i].attach( servoPins[i], autoOff );
weicheS[i].setSpeed( speed );
}
}
////////////////////////////////////////////////////////////////
void loop() {
Dcc.process(); // Hier werden die empfangenen Telegramme analysiert

}
//////////////////////////////////////////////////////////////
// Unterprogramme, die von der DCC Library aufgerufen werden:
// Die folgende Funktion wird von Dcc.process() aufgerufen, wenn ein Weichentelegramm empfangen wurde
void notifyDccAccState( uint16_t Addr, uint16_t BoardAddr, uint8_t OutputAddr, uint8_t State ){
// Weichenadresse berechnen
word wAddr = Addr+isROCO; // Roco zählt ab 0, alle anderen lassen die ersten 4 Weichenadressen frei
// Testen ob eigene Weichenadresse
for ( byte i = 0; i < ServoZahl; i++ ) {
if ( wAddr == weichenAdr[i] ) {
// ist eigene Adresse, Servo ansteuern
if ( OutputAddr & 0x1 ) {
weicheS[i].write( geradePulse[i] );
} else {
weicheS[i].write( abzweigPulse[i] );
}
break; // Schleifendurchlauf abbrechen, es kann nur eine Weiche sein
}
}
}
 
 



mit folgendem Aufbau




aber der Servo will sich nicht bewegen, wo könnte das Problem sein?


Lebe im Moment, freue dich auf die Zukunft


tobi_bahner  
tobi_bahner
InterRegioExpress (IRE)
Beiträge: 259
Registriert am: 01.05.2016
Spurweite N
Stromart DC, Digital


   

Eine Frage zur CS 3
CS2 Fenstern ergrössern

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