- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 30

Thema: Probleme bei Modellbahnsteuerung mit Microcontroller

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    10.09.2010
    Beiträge
    74

    Probleme bei Modellbahnsteuerung mit Microcontroller

    Hallo Forum,

    Ich habe Anfang November begonnen eine Modellbahnanlage zu bauen. Die Gleise sind bereits verlegt. Ich habe mir vorgenommen die Sensoren (Reedkontakte), Signale und Weichen über zwei Microcontroller zu steuern. Diese arbeiten über den I2C Bus zusammen. Der Master ist ein Atmega 32 und der Slave ein Atmega 16. Ich habe allerdings dabei mehrere Probleme und ich hoffe ihr könnt mir dabei helfen.

    1. Ich hab das Problem, dass wenn ich Weichen schalte, diese manchmal eine Störung auf das komplette System geben. Die Weichenantriebe laufen mit 16VAC und werden mittels eines Relais und einem ULN2004 vom Microcontroller aus gesteuert. Das heißt, es gibt eine galvanische Trennung zwischen µC und dem Antrieb und zum anderen laufen diese beiden über verschiedene Trafos, d.h. auch hier ist eine galvanische Trennung vorhanden. Die Frage ist nur, ob man was machen kann, damit nicht das ganze System zusammenbricht/gestört wird?
    (Ich würde auch gern eine Zeichnung davon mit hochladen, ich hab nur kein geeignetes Zeichenprogramm. Könnt ihr mir ein kostenloses empfehlen?)

    2. Ich verwende den I2C code vom RP6. Der funktioniert einwandfrei. Ich kann vom Master Befehle senden und diese werden vom Slave auch erfolgreich angenommen und verarbeitet. Meine Frage ist nur, ich habe die Reedkontakte am Slave angeschlossen. Jetzt möchte ich aber deren Zustände am Master auslesen. Leider funktioniert das nicht.
    Auszug aus dem Slave, je nachdem ob der Sensor 1 oder 0 hat wird ja das entsprechende Bit in diesem Sensoren1.byte auf 1 oder 0 gesetzt.
    Code:
    union {
        uint8_t byte;
        struct {
            uint8_t S1S4:1;
            uint8_t S2S3:1;
            uint8_t S5S8:1;
            uint8_t S6S7:1;
            uint8_t S9S0S12:1;
            uint8_t S10S11:1;
            uint8_t S20:1;
            uint8_t S21:1;
            
        };
    } Sensoren1;
    ----
    #define I2C_REG_STATUS1          0
    #define I2C_REG_STATUS2          1
    ----
     void task_updateRegisters(void)
    {
        if(!I2CTWI_readBusy) 
        {
            I2CTWI_readRegisters[I2C_REG_STATUS1] =          (uint8_t)(Sensoren1.byte);
            I2CTWI_readRegisters[I2C_REG_STATUS2] =          (uint8_t)(Sensoren2.byte);
    
        }
    }
    ----
    void Gleissensor(void)
    {
    
        if(adc7 < 10)
        {
            Sensoren1.S2S3 = 1;
        }
        else if(adc7 > 300 && adc7 < 700)
        {
            Sensoren1.S1S4 = 1;
        }
    ----
    while(true)
        {
            Gleissensor();
            task_ADC();
            //task_Zugbremsung();
            task_commandProcessor();
            task_updateRegisters();
            
        }
    und über diesen will ich es bei Master abrufen und in eine Testausgabe umwandeln
    Code:
    #define Weichencontroller 10 // Adresse des Slave Microcontrollers
    ----
    uint8_t messageBuf[2]; // Buffer for I2C Data
    void test(void)  //test() wird in der while-Schleife immer wieder abgerufen
    {
        I2CTWI_transmitByte(Weichencontroller, 0); // Start with register 0...
        I2CTWI_readBytes(Weichencontroller,messageBuf, 2); //Sensoren1.byte und Sensoren2.byte auslesen
    
        
            if(messageBuf[0] == 128) // 128 wäre, wenn Sensoren1.S1S4 betätigt wäre
            {
                 Gleis2links.byte = 255; //steht dafür, dass 8 LEDs der Signale vom Gleis 2 leuchten sollen
            }
        
    }
    Ich dachte, dass ich damit die Zustände auslesen konnte. Gibt es eine andere / bessere Lösung dafür, oder was mache ich falsch? Ich bin leider ziemlich ratlos. Könnte man die Abfrage auch so machen, dass sie nur durchgeführt wird, wenn es eine Änderung gab?

    3. Wäre es sinnvoll, wenn ich den Watchdog aktiviere?

    Ich hoffe ihr könnt mir helfen. Ich bin für jede Antwort dankbar. Wenn ihr noch Informationen benötigt, dann sagt es mir bitte. Ein Zeichenprogramm (freeware) wäre auch sehr schön.
    Vielen Dank.
    Frohe Weihnachten
    MfG
    Daniel

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    Wie weit ist der Master und der Slave auseinander? Ich habe mir den Code nicht angesehen, könnte mir aber vorstellen das es Einkopplungen in das Sstem gibt (wenn die beiden µC weit auseinander sind).

    Watchdog hilft nur wenn das Programm nicht mehr weiter kann, hilft aber nicht bei Störungen. Mit der Ausnahme das der µC wartet z.B. auf eine Antwort vom Slave o.Ä. Das kann man aber auch anders lösen. Bei einer Bahnsteuerung ist es nicht nötig (finde ich) da hier kein Risiko besteht. Anders wäre es z.B. in der Sicherheitstechnik o.Ä.

    Welches Programm suchst du? Elektronik CAD, Mechanisches CAD,....? Für einfache Dinge reicht eigentlich Paint.

    MfG Hannes

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    10.09.2010
    Beiträge
    74
    Hey Hannes,
    Danke für die schnelle Reaktion. Die Controller sind etwa 1m auseinander. Außerdem befindet sich vom Master (ebenfalls 1m entfernt) noch ein PCF8574.
    Ich werde mal noch einen Plan von der ungefähren Aufteilung machen.
    Ich hatte erst gedacht, weil die AC-Leitung neben den Busleitungen lag, dass es da Fehler hineininduziert. Aber jetzt liegen diese etwa 20cm auseinander, und da sollte dann nichts mehr passieren.

    Danke, ich werde mal CAD runterladen und den Stromlaufplan erstellen. Das kann aber leider noch bis nächste Woche dauern.
    Vielen Dank und einen Schönen Abend
    MfG
    Daniel

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    Zeichne einmal die Schaltug auf. Vielleicht sehe ich da etwas. Am Besten die gesamte Schaltung von Master und Slave.

    MfG Hannes

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Bei Punkt 1 könnte das Problem bei den Relaiskontakten sein die beim Schalten etwas funken und dadurch die Störungen produzieren.
    Also einen Kondensator parallel zu Den Relaiskontakten. Als Faustformel gilt 0,1µ/A Laststrom.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    10.09.2010
    Beiträge
    74
    Hi,
    Danke, ich werde das mit dem Kondensator mal ausprobieren. Auf diese Idee bin ich noch gar nicht gekommen. Wobei, wenn ich mir das richtig überlege, würden dann ja eine spule und ein Kondensator in Reihe liegen, da der C ja parallel über den Relaiskontakt ist? Und Kondensatoren im Wechelstrom verhalten sich wie Kurzschluss. Ich werde es ausprobieren, aber ich könnte mir vorstellen, dass es probleme geben könnte.

    So, ich habe mich mal hingesetzt und die Schaltung gemalt. Zusätzlich hab ich eine sehr grobe Skizze der Aufteilung mit dazu gemacht, nur dass man es sich besser vorstellen kann.
    Ich hoffe, das hilft euch und ist nicht zu unübersichtlich.

    Schönen 4. Advent
    MfG
    Daniel

    PS: Wie kann man größer Anhänge hochladen, z.B. pdf dateien? weil die Qualität der Bilder sehr schlecht ist)
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Grobe Anordnung.jpg   Master.jpg   SLAVE.jpg   Signal+Reed.jpg  
    Geändert von RP6fahrer (23.12.2012 um 15:55 Uhr)

Ähnliche Themen

  1. Probleme bei Abfallverzögerung mit NE555
    Von M!ni M0nk3y im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 19.01.2010, 22:20
  2. ~~Probleme bei Frequenzerzeugung mit ATmega8~~
    Von Jacob2 im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 01.08.2009, 14:36
  3. Probleme mit Switch bei Asuro
    Von Hoochii im Forum Asuro
    Antworten: 3
    Letzter Beitrag: 25.09.2005, 11:33
  4. Probleme bei Taktung mit c++
    Von Pathfinder im Forum C - Programmierung (GCC u.a.)
    Antworten: 10
    Letzter Beitrag: 22.12.2004, 10:03
  5. [ERLEDIGT] Probleme bei Zeigeroperationen mit PIC16F877
    Von fritzle123 im Forum PIC Controller
    Antworten: 7
    Letzter Beitrag: 28.09.2004, 17:19

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress