Hilfe zu einer Modellbahn-Weichenansteuerung

Wer ein Problem hat, kann es hier rein setzen

Moderator: Sebi

Re: Hilfe zu einer Modellbahn-Weichenansteuerung

Beitragvon alterhase » 03.01.2016, 21:07

...So, und wenn jetzt noch einer hier etwas schreibt, ...
ist es dir nicht gelungen, das Thema abzuwürgen. :lol:
Löten verbindet ...manchmals. :mrgreen:
73 55
alterhase
 
Beiträge: 12033
Registriert: 14.11.2008, 08:58
Wohnort: Wien/Kapfenberg

Re: Hilfe zu einer Modellbahn-Weichenansteuerung

Beitragvon Tim Sasdrich » 04.01.2016, 14:59

War ja nicht mein Plan. Aber warum ists plötzlich so still hier?
"Der Kluge lernt aus allem und von jedem, der Normale aus seinen Erfahrungen und der Dumme weiß alles besser." - Sokrates (470 - 399 v. Chr.), griechischer Philosoph
Tim Sasdrich
 
Beiträge: 2958
Registriert: 07.01.2009, 14:15
Wohnort: Villingen-Schwenningen

Re: Hilfe zu einer Modellbahn-Weichenansteuerung

Beitragvon topas » 04.01.2016, 15:22

Arduino war hier noch nicht oft Thema...?

(Wenn ich einen Arduino verwende, programmiere ich ihn in Mikrobasic - ich wette, einige aus dem Forum nehmen Bascom)
topas
 
Beiträge: 3791
Registriert: 16.08.2010, 12:47

Re: Hilfe zu einer Modellbahn-Weichenansteuerung

Beitragvon mfri » 06.01.2016, 18:28

Soo...ich bin auch wieder mal da. Hatte heute einen freudigen Tag. Der Pösteler brachte gegen Mittag den bestellten Arduino. Sogleich habe ich mich an die Arbeit eines Versuchsaufbaus gemacht. Nun ist es halt noch enger geworden in meiner Bastelecke.
Ich denke nicht, dass ich das Programmieren bis in alle Ecken hinaus erlernen möchte. Damit würde ich meine Freizeit zu stark kanalisieren. Mein Vorrat am Zukunft schrumpft und da muss ich schon aufpassen, womit ich die Zeit verbringe. Nun, jedenfalls habe ich ein 24_Kanal Lauflicht zustande gebracht (abgeändertes Programm aus dem Netz). Habe Modifikationen an den verschiedenen Zeiten vorgenommen oder nachprogrammiert. Ich denke auf diese Weise komme ich mit dem Artuino ganz gut zurecht. Elektronik ist ja nicht mein Hobby, es ist nur Mittel zum Zweck.
Nun muss ich noch herausfinden wie das Lauflicht mit einem Tastendruck gestartet werden kann und wie ich es am Schluss des Durchgangs stoppen kann. Dann komme ich meiner Weichensteuerung immer näher. Mit dem Erreichten dieses Nachmittags bin ich jedenfalls glücklich.
mfri
 
Beiträge: 22
Registriert: 28.12.2015, 17:24

Re: Hilfe zu einer Modellbahn-Weichenansteuerung

Beitragvon Anse » 06.01.2016, 19:02

Mit welcher Sprache programmierst Du jetzt? C oder einer anderen.
Anse
 
Beiträge: 1442
Registriert: 09.06.2011, 14:18

Re: Hilfe zu einer Modellbahn-Weichenansteuerung

Beitragvon mfri » 06.01.2016, 19:23

ja mit C
Habe mal die Datei angehängt. Dazu habe ich noch eine Kurzdatei mit ner Schlaufe aber zum Üben ist die Langversion besser verständlich.
mfri
 
Beiträge: 22
Registriert: 28.12.2015, 17:24

Re: Hilfe zu einer Modellbahn-Weichenansteuerung

Beitragvon Anse » 06.01.2016, 20:12

mfri hat geschrieben:ja mit C
Habe mal die Datei angehängt. Dazu habe ich noch eine Kurzdatei mit ner Schlaufe aber zum Üben ist die Langversion besser verständlich.
Wo ist die Datei?
Anse
 
Beiträge: 1442
Registriert: 09.06.2011, 14:18

Re: Hilfe zu einer Modellbahn-Weichenansteuerung

Beitragvon mfri » 06.01.2016, 20:17

Code: Alles auswählen
/*
14-Kanal-Lauflicht
LEDs an den Ausgängen: Digital_0 bis Digital_23
LED Strombegrenzung: R1 = 220 Ohm
 
  www.arduinospielwiese.de 
*/

int zeit = 130; //für delay


void setup() {
pinMode( 0, OUTPUT);
pinMode( 1, OUTPUT);
pinMode( 2, OUTPUT);
pinMode( 3, OUTPUT);
pinMode( 4, OUTPUT);
pinMode( 5, OUTPUT);
pinMode( 6, OUTPUT);
pinMode( 7, OUTPUT);
pinMode( 8, OUTPUT);
pinMode( 9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
pinMode(14, OUTPUT);
pinMode(15, OUTPUT);
pinMode(16, OUTPUT);
pinMode(17, OUTPUT);
pinMode(18, OUTPUT);
pinMode(19, OUTPUT);
pinMode(20, OUTPUT);
pinMode(21, OUTPUT);
pinMode(22, OUTPUT);
pinMode(23, OUTPUT);

}

void loop() {
digitalWrite( 0, HIGH); delay(zeit); digitalWrite( 0, LOW);
digitalWrite( 1, HIGH); delay(zeit); digitalWrite( 1, LOW);
digitalWrite( 2, HIGH); delay(zeit); digitalWrite( 2, LOW);
digitalWrite( 3, HIGH); delay(zeit); digitalWrite( 3, LOW);
digitalWrite( 4, HIGH); delay(zeit); digitalWrite( 4, LOW);
digitalWrite( 5, HIGH); delay(zeit); digitalWrite( 5, LOW);
digitalWrite( 6, HIGH); delay(zeit); digitalWrite( 6, LOW);
digitalWrite( 7, HIGH); delay(zeit); digitalWrite( 7, LOW);
digitalWrite( 8, HIGH); delay(zeit); digitalWrite( 8, LOW);
digitalWrite( 9, HIGH); delay(zeit); digitalWrite( 9, LOW);
digitalWrite(10, HIGH); delay(zeit); digitalWrite(10, LOW);
digitalWrite(11, HIGH); delay(zeit); digitalWrite(11, LOW);
digitalWrite(12, HIGH); delay(zeit); digitalWrite(12, LOW);
digitalWrite(13, HIGH); delay(zeit); digitalWrite(13, LOW);
digitalWrite(14, HIGH); delay(500); digitalWrite(14, LOW);
digitalWrite(15, HIGH); delay(500); digitalWrite(15, LOW);
digitalWrite(16, HIGH); delay(500); digitalWrite(16, LOW);
digitalWrite(17, HIGH); delay(500); digitalWrite(17, LOW);
digitalWrite(18, HIGH); delay(500); digitalWrite(18, LOW);
digitalWrite(19, HIGH); delay(zeit); digitalWrite(19, LOW);
digitalWrite(20, HIGH); delay(zeit); digitalWrite(20, LOW);
digitalWrite(21, HIGH); delay(zeit); digitalWrite(21, LOW);
digitalWrite(22, HIGH); delay(zeit); digitalWrite(22, LOW);
digitalWrite(23, HIGH); delay(zeit); digitalWrite(23, LOW);

}



Und noch die Kurzversion

/*
  24-Kanal-Lauflicht
  LEDs an den Ausgängen: Digital_0 bis Digital_23
  LED Strombegrenzung: R1 = 220 Ohm
   
  www.arduinospielwiese.de
*/

int i; // die Laufvariable

void setup() {               
  for(i=0; i<23; i++) { pinMode( i, OUTPUT); }
}


void loop() {
  for(i=0; i<23; i++) { digitalWrite(i, HIGH); delay(100); digitalWrite(i, LOW); delay(5); }
}
mfri
 
Beiträge: 22
Registriert: 28.12.2015, 17:24

Re: Hilfe zu einer Modellbahn-Weichenansteuerung

Beitragvon Tim Sasdrich » 06.01.2016, 22:12

Ein einfacher, auch wenn nicht perfekter Lösungsansatz:
Code: Alles auswählen
/*
24-Kanal-Lauflicht
LEDs an den Ausgängen: Digital_0 bis Digital_23
LED Strombegrenzung: R1 = 220 Ohm

www.arduinospielwiese.de
*/

int i; // die Laufvariable

void setup() {
for(i=0; i<23; i++) { pinMode( i, OUTPUT); }
//Ausgänge für die Status-LED
//Eingang für den Taster
}

void loop() {
//Status-LED Rot (= Stellvorgang)
for(i=0; i<23; i++) { digitalWrite(i, HIGH); delay(100); digitalWrite(i, LOW); delay(5); }
//Status-LED Gelb (= Warten)
//Sicherheitswartezeit, damit die Weichen beim nächsten Start abgekühlt sind
//Status-LED (Grün = Bereit für erneuten Stellvorgang)
//Warten auf Tastendruck, z.B. while(Taste nicht gedrückt); oder so etwas
}
Die genauen Funktionen kenne ich jetzt nicht, daher habe ich es mal frei gelassen. Die kennst du vielleicht schon selbst? Bekommen wir jedenfalls hin.
Die Status-LED könnte eine DUO-LED mit zwei Beinchen sein. Rot+Grün=Gelb in der Aditiven Farbmischung. Man könnte aber auch eine normale LED nehmen und die Zustände AN, AUS und BLINKEN verwenden.
Bleibt der Taster gedrückt, werden die Weichen immer und immer wieder gestellt. Kann manchmal sicherlich auch nützlich sein.

Um es zu perfektionieren könnte man den Controller in den Sleepmode stecken, wenn er nicht gebraucht wird. Spart minimal Strom.
"Der Kluge lernt aus allem und von jedem, der Normale aus seinen Erfahrungen und der Dumme weiß alles besser." - Sokrates (470 - 399 v. Chr.), griechischer Philosoph
Tim Sasdrich
 
Beiträge: 2958
Registriert: 07.01.2009, 14:15
Wohnort: Villingen-Schwenningen

Re: Hilfe zu einer Modellbahn-Weichenansteuerung

Beitragvon Anse » 06.01.2016, 22:40

Muss man das dämlich "PinMode()" und "DigitalWrite()" immer noch verwenden oder funktioniert auch so was wie "PORTB|=(1<<PIN_NR)"?
Das ist nämlich "echtes" C.
Das Arduino-C ist sehr umständlich. Und verwirrt meiner Meinung nach sehr wenn es doch mal komplexer wird.
Anse
 
Beiträge: 1442
Registriert: 09.06.2011, 14:18

Re: Hilfe zu einer Modellbahn-Weichenansteuerung

Beitragvon Sebi » 06.01.2016, 23:45

Es funktioniert beides; digitalWrite() hat den Vorteil (oder Nachteil ;)), dass es vorher überprüft, ob an dem angegebenen Pin eine PWM angeschalten ist:
Code: Alles auswählen
void digitalWrite(uint8_t pin, uint8_t val)
{
   uint8_t timer = digitalPinToTimer(pin);
   uint8_t bit = digitalPinToBitMask(pin);
   uint8_t port = digitalPinToPort(pin);
   volatile uint8_t *out;

   if (port == NOT_A_PIN) return;

   // If the pin that support PWM output, we need to turn it off
   // before doing a digital write.
   if (timer != NOT_ON_TIMER) turnOffPWM(timer);

   out = portOutputRegister(port);

   uint8_t oldSREG = SREG;
   cli();

   if (val == LOW) {
      *out &= ~bit;
   } else {
      *out |= bit;
   }

   SREG = oldSREG;
}

https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/cores/arduino/wiring.c

Ist nur wie man sieht mit einem ziemlichen Overhead verbunden. Wenn man aber selbst weiß, welchen Pin man in welchem Modus betreibt, kann man auch bei Arduino ganz normal auf die Register zugreifen, oder alternativ cbi() und sbi() benutzen.

@mfri nicht verunsichern lassen, bleibe erstmal bei der Arduino-API ;)
Sebi
 
Beiträge: 839
Registriert: 10.08.2009, 17:57
Wohnort: Darmstadt

Re: Hilfe zu einer Modellbahn-Weichenansteuerung

Beitragvon mfri » 06.01.2016, 23:56

Gucke morge weiter, bekomme langsam viereckige Augen vom starren auf den Bildschirm.
Noch eine Frage: Habe beim vorigen Mail den Dateianhang (Programm) unten im Kasten eingefügt. Scheinbar ist er aber nicht rüber gekommen. Vorhin habe ich ein Bild vom Versuchsaufbau eingefügt, auch dieses kann ich nirgens sehen. Was mache ich falsch
mfri
 
Beiträge: 22
Registriert: 28.12.2015, 17:24

Re: Hilfe zu einer Modellbahn-Weichenansteuerung

Beitragvon Anse » 07.01.2016, 00:18

mfri hat geschrieben:Gucke morge weiter, bekomme langsam viereckige Augen vom starren auf den Bildschirm.
Noch eine Frage: Habe beim vorigen Mail den Dateianhang (Programm) unten im Kasten eingefügt. Scheinbar ist er aber nicht rüber gekommen. Vorhin habe ich ein Bild vom Versuchsaufbau eingefügt, auch dieses kann ich nirgens sehen. Was mache ich falsch
Für Code gibt es das: "[code][/code]"
Bilder kann man durch Datei auswählen hinzugefügt werden. Einfügen geht nicht.

Es funktioniert beides; digitalWrite() hat den Vorteil (oder Nachteil ;)), dass es vorher überprüft, ob an dem angegebenen Pin eine PWM angeschalten ist:
Naja, ich sehe da nur Nachteile. Es wird nicht nur die PWM-Funktion abgeschaltet sondern auch gleich noch das Statusregister gesichert und zurückgeschrieben, dann noch die Interrupts gesperrt, was sogar ernsthafte Probleme geben kann. Ein Pin verändern ist keine Aktion die durch eine Unterbrechung gestört wird. Anders sieht das aus wenn man eine 16Bit Variable in ein Register schreibt und dabei ein Interrupt zwischen den zwei nötigen Schreiboperation auftritt und die zu schreibened Variable verändert. Dann wird Da Lowbyte noch mit dem alten Wert und das Highbyte mit dem neuen Wert geschrieben. Das ergibt sehr schwer zu rekonstruierende Fehlerbilder.
Beim Arduino kann es durch das DigitalWrite vorkommen, das wenn laufend Ausgänge umgeschaltet werden Interrupts verloren gehen.
Anse
 
Beiträge: 1442
Registriert: 09.06.2011, 14:18

Re: Hilfe zu einer Modellbahn-Weichenansteuerung

Beitragvon Tim Sasdrich » 07.01.2016, 00:28

Oh, Anse war schneller. Aber hier dennoch mein Beitrag, da sind glaube ich noch Ergänzungen drin:

Hm, komisch. Meines Wissens wird es dann beim Absenden hochgeladen. Hast du die Datei vor dem Absenden auf deinem PC gelöscht/verschoben? Andernfalls evtl. einfach nach dem Auswählen "Datei hinzufügen" anklicken, dann wird sie direkt hochgeladen. So kannst du auch meahrere Dateien hinzufügen. Quellcodes lassen sich aber besser mit [code]//Quellcodecode hier rein[/code] anhängen, so kann man sie direkt anschauen. Am Smartphone muss man sonst immer schauen, wie man sie herunterlädt, in .txt umbenennt und dann öffnet. Bzw. davor noch die .zip entpacken, da das Forum den Dateityp ja sonst nicht akzeptiert hätte. Ohne der [code]-Funktion werden mehrfache Leerzeichen und ähnliches beim Absenden gelöscht, zudem ist nicht immer ganz ersichtlich, was nun Code ist und was nicht mehr. Mit [code] ist es also deutlich übersichtlicher.
"Der Kluge lernt aus allem und von jedem, der Normale aus seinen Erfahrungen und der Dumme weiß alles besser." - Sokrates (470 - 399 v. Chr.), griechischer Philosoph
Tim Sasdrich
 
Beiträge: 2958
Registriert: 07.01.2009, 14:15
Wohnort: Villingen-Schwenningen

Re: Hilfe zu einer Modellbahn-Weichenansteuerung

Beitragvon mfri » 07.01.2016, 00:53

Ok, ich probiere es noch mal. Füge ein Bild ein..
mfri
 
Beiträge: 22
Registriert: 28.12.2015, 17:24

VorherigeNächste

Zurück zu Probleme und Hilfen

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron