- 3D-Druck Einstieg und Tipps         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 30

Thema: Probleme bei Modellbahnsteuerung mit Microcontroller

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    10.09.2010
    Beiträge
    74

    Probleme bei Modellbahnsteuerung mit Microcontroller

    Anzeige

    Praxistest und DIY Projekte
    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.056
    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.056
    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 14:55 Uhr)

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.056
    Andere Dateien kannst du gleich hochladen wie die Bilder, solange diese das Größenlimit nicht überschreitet.
    Ansonsten könntest du noch die Dateien extern hochladen (es gibt kostenlose Filehoster) und diese verlinken.

    Auf den Bildern sieht man nicht sehr viel.

    Auf den Bildern fällt mir nichts auf. Du könntest noch die Reset Leitung mit einem 100nF entstören.

    MfG Hannes

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Ein Kondensator im Wechselstrom verhält sich wie ein Widerstand, abhängig von der Frequenz.
    Ein 100n Kondensator hat bei 50Hz etwa 30k.
    Was mir an deiner Schaltung aufgefallen ist, AREF nicht mit VCC verbinden und für AVCC einen eigenen Kondesator vorsehen.
    Wenn du den ADC nicht benötigst AREF frei lassen, sonst 100n nach GND.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    10.09.2010
    Beiträge
    74
    Ok, du hast recht mit dem Kondensator. Ich sollte das ja als angehender Elektroniker wissen. Meine Lehrerin hatte nur mal so nen Ausspruch gebracht. Ein Kondensator im Gleichstrom ist wie eine Unterbrechung und im Wechselstrom wie ein Kurzschluss. Dabei ging es aber, glaube ich um Wechselspannungsverstärkung... naja, lassen wir das.
    Ok, sobald ich wieder Zuhause bin, werde ich das mit den Kondensatoren ausprobieren.

    Den ADC benötige ich bei beiden. Ich möchte für den Schrank, in dem die Trafos und der Master sind, einen Lüfter einbauen, der sich bei einer bestimmten Temperatur einschaltet. Außerdem möchte ich noch weitere Messungen machen. Und bei dem Slave brauche ich es ja, um die Sensoren auszuwerten, und um Platz zu sparen, nehme ich 2 Sensoren pro ADC Kanal.

    AREF nicht mit VCC verbinden
    Du wirst lachen, dass hatte ich schon, aber damit hat die ADC Messung nicht fehlerfrei funktioniert. Jetzt funktioniert sie. Was mich aber da jetzt gleich interessiert, warum gibt es da verschiedene Anschlussmöglichkeiten. Ich hab mal ein bisschen im Internet gesucht und da gibt es Seiten, wo an AREF ein Kondensator zu GND hängt, und dann noch wo VDD direkt dran ist. Macht das denn einen Unterschied?
    Ich hab gelesen, dass wenn ein Kondensator dran ist, dann ist die Referenzspannung etwa 2,56V, oder wenn ich eine andere Spannung (bis VDD des Mikrocontrollers) anlege, dann dient diese als Referenz. Theoretisch, wenn ich richtig lieg, dann macht das ja nur nen Unterschied in der Auswertung.

    @Hannes
    Kann ich dir die Bilder direkt schicken? Vorausgesetzt du hast dazu lust?

    Mir ist grad noch ne Frage in den Sinn gekommen, soll ich eine gemeinsame Resetleitung machen? Also das ich Pin9 des Masters mit Pin9 des Slave verbinde oder ist das sinnlos?

    MfG
    Daniel
    Geändert von RP6fahrer (23.12.2012 um 20:07 Uhr) Grund: Schreibfehler

  10. #10
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Bei der Beschaltung des ADC Pins ist der Kondensator nach GND (genauer AGND) die richtige Wahl. Auch hat man die Wahl zwischen ca. 2,5 V von der internen Ref. und AVCC durch eine interne schaltbare Verbindung. Auch wenn man per software AVcc als Ref. wählt wirkt dann der Kondensator als Filter.
    Eine Spannung legt man an den Pin eigentlich nur an, wenn es um was anderes als die internen 2,5 V oder AVCC geht.

    Kondensatoren an den Relaiskontakten sind schon eine gute Idee, dann aber besser als Snubber, mit einem Widerstand (z.B. 10 Ohm) in Reihe - sonst werden die Relaiskontakte stark belastet, wenn der zufällig gerade geladene Kondensator entladen wird.
    Bei den Weichen könnte man ggf. probieren, ob die nicht auch mit Gleichstrom schalten - das könnte die Relais sparen. Wenn es mehr weichen werden kann das einiges einsparen bei der Schaltung.

    Für so lange Leitungen beim I2C wären ggf. etwas kleinere Pullup Widerstände sinnvoll.

    Der eine sonst nicht benutzte Pin beim ULN200x ist für interne Freilaufdioden. Den Pin könnte man zur Sicherheit auch noch verbinden. Falls es da zu Störungen kommt, ist das oft eine Frage des Layouts, also wir die Leitungen verlaufen, nicht so sehr welche Teile im Plan stehen. Gerade bei den Abblockkondensatoren ist das Wo und der Typ des Kondensators ggf. wichtig.

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

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

Stichworte

Berechtigungen

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

LiFePO4 Speicher Test