INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino und NmraDcc
23.02.2020, 17:59 (Dieser Beitrag wurde zuletzt bearbeitet: 28.02.2020 16:08 von Bitklopfer.)
Beitrag #1
Arduino und NmraDcc
Hallo Arduino Freunde und Digitale-Modellbahner,
ich habe eine Versuchsaufbau gemacht , um mir einen Weichenfunktionsdecoder mit einem Arduiono Mega 2560 aufzubauen.
Dann habe ich mir die Bibliothek #include <NmraDcc.h> heruntergeladen.

Es hat auch funktioniert, das ich mir im SerialMonitor die geschalteteten Weichenbefehle gesehen habe.

Seit heute läuft gar nichts mehr. Der Optokoppler 6N137 ist aber i.O. und der Pin ist an Eingang 2 angeschlossen.

Warum funktioniert das nicht mehr ?
Ich weiß die Frage ist speziell und richtet sich an die Modellbahner von Euch.
Code:
#include <NmraDcc.h>

// This Example shows how to use the library as a DCC Accessory Decoder or a DCC Signalling Decoder
// It responds to both the normal DCC Turnout Control packets and the newer DCC Signal Aspect packets
// You can also print every DCC packet by uncommenting the "#define NOTIFY_DCC_MSG" line below

NmraDcc  Dcc ;
DCC_MSG  Packet ;

struct CVPair
{
  uint16_t  CV;
  uint8_t   Value;
};

CVPair FactoryDefaultCVs [] =
{
  {CV_ACCESSORY_DECODER_ADDRESS_LSB, 1},
  {CV_ACCESSORY_DECODER_ADDRESS_MSB, 0},
};

uint8_t FactoryDefaultCVIndex = 0;

void notifyCVResetFactoryDefault()
{
  // Make FactoryDefaultCVIndex non-zero and equal to num CV's to be reset
  // to flag to the loop() function that a reset to Factory Defaults needs to be done
  FactoryDefaultCVIndex = sizeof(FactoryDefaultCVs)/sizeof(CVPair);
};

const int DccAckPin = 3 ;

// This function is called by the NmraDcc library when a DCC ACK needs to be sent
// Calling this function should cause an increased 60ma current drain on the power supply for 6ms to ACK a CV Read
void notifyCVAck(void)
{
  Serial.println("notifyCVAck") ;
  
  digitalWrite( DccAckPin, HIGH );
  delay( 6 );  
  digitalWrite( DccAckPin, LOW );
}

// Uncomment to print all DCC Packets
//#define NOTIFY_DCC_MSG
#ifdef  NOTIFY_DCC_MSG
void notifyDccMsg( DCC_MSG * Msg)
{
  Serial.print("notifyDccMsg: ") ;
  for(uint8_t i = 0; i < Msg->Size; i++)
  {
    Serial.print(Msg->Data[i], HEX);
    Serial.write(' ');
  }
  Serial.println();
}
#endif

// This function is called whenever a normal DCC Turnout Packet is received
void notifyDccAccState( uint16_t Addr, uint16_t BoardAddr, uint8_t OutputAddr, uint8_t State)
{
  Serial.print("notifyDccAccState: ") ;
  Serial.print(Addr,DEC) ;
  Serial.print(',');
  Serial.print(BoardAddr,DEC) ;
  Serial.print(',');
  Serial.print(OutputAddr,DEC) ;
  Serial.print(',');
  Serial.println(State, HEX) ;
}

// This function is called whenever a normal DCC Turnout Packet is received
void notifyDccAccTurnoutBoard( uint16_t BoardAddr, uint8_t OutputPair, uint8_t Direction, uint8_t OutputPower )
{
  Serial.print("notifyDccAccTurnoutBoard: ") ;
  Serial.print(BoardAddr,DEC) ;
  Serial.print(',');
  Serial.print(OutputPair,DEC) ;
  Serial.print(',');
  Serial.print(Direction,DEC) ;
  Serial.print(',');
  Serial.println(OutputPower, HEX) ;
}

// This function is called whenever a normal DCC Turnout Packet is received
void notifyDccAccTurnoutOutput( uint16_t Addr, uint8_t Direction, uint8_t OutputPower )
{
  Serial.print("notifyDccAccTurnoutOutput: ") ;
  Serial.print(Addr,DEC) ;
  Serial.print(',');
  Serial.print(Direction,DEC) ;
  Serial.print(',');
  Serial.println(OutputPower, HEX) ;
}

// This function is called whenever a DCC Signal Aspect Packet is received
void notifyDccSigState( uint16_t Addr, uint8_t OutputIndex, uint8_t State)
{
  Serial.print("notifyDccSigState: ") ;
  Serial.print(Addr,DEC) ;
  Serial.print(',');
  Serial.print(OutputIndex,DEC) ;
  Serial.print(',');
  Serial.println(State, HEX) ;
}

void setup()
{
  Serial.begin(115200);
  
  // Configure the DCC CV Programing ACK pin for an output
  pinMode( DccAckPin, OUTPUT );

  Serial.println("NMRA DCC Example 1");
  
  // Setup which External Interrupt, the Pin it's associated with that we're using and enable the Pull-Up
  Dcc.pin(0, 2, 1);
  
  // Call the main DCC Init function to enable the DCC Receiver
  Dcc.init( MAN_ID_DIY, 10, CV29_ACCESSORY_DECODER | CV29_OUTPUT_ADDRESS_MODE, 0 );

  Serial.println("Init Done");
}

void loop()
{
  // You MUST call the NmraDcc.process() method frequently from the Arduino loop() function for correct library operation
  Dcc.process();
  
  if( FactoryDefaultCVIndex && Dcc.isSetCVReady())
  {
    FactoryDefaultCVIndex--; // Decrement first as initially it is the size of the array
    Dcc.setCV( FactoryDefaultCVs[FactoryDefaultCVIndex].CV, FactoryDefaultCVs[FactoryDefaultCVIndex].Value);
  }
}

Um Hilfestellung wird gebeten, Danke
Viele Grüße
Christian
IDE Version 1.8.12
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.02.2020, 21:17
Beitrag #2
RE: Arduiono und NmraDcc
(23.02.2020 17:59)Christian_Moba-Arduino schrieb:  Seit heute läuft gar nichts mehr. Der Optokoppler 6N137 ist aber i.O. und der Pin ist an Eingang 2 angeschlossen.

Was bedeutet denn "gar nichts mehr"? Du hast ja serielle Ausgaben drin, durchläuft es denn wenigstens das setup?

Gruß Jan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.02.2020, 21:23 (Dieser Beitrag wurde zuletzt bearbeitet: 23.02.2020 21:25 von MicroBahner.)
Beitrag #3
RE: Arduiono und NmraDcc
Wenn es vorher funktioniert hat, muss sich ja irgend etwas verändert haben. Hast Du denn die Möglichkeit das DCC-Signal am Eingang irgendwie zu messen ( Oszi oder LA ) ?
Vielleicht zeigst Du auch mal deine genaue Schaltung, wie Du das aufgebaut hast.
Einfach nur 'Es geht gar nichts mehr' ist schon ein bisschen wenig, um helfen zu können. Der Sketch ist ja ein Beispiel aus der Lib. Hast Du daran was geändert?

Und hast Du testweise mal versucht, alle DCC-Telegramme auszugeben:
Code:
// Uncomment to print all DCC Packets
#define NOTIFY_DCC_MSG

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2020, 17:21 (Dieser Beitrag wurde zuletzt bearbeitet: 24.02.2020 17:25 von Christian_Moba-Arduino.)
Beitrag #4
RE: Arduiono und NmraDcc
Hallo Jan, Hallo Peter,
erst einmal recht vielen Dank für Eure schnellen Antworten.
Folgendes, ich habe die unten gezeigt Schaltung aufgebaut.
Mit Zwei verschieden Digitalzentralen getrennt getestet.
Digikeijs DR5000 bzw. einer Lenz LZV100
Beide geben ein einwandfreies DCC Signal weiter. Habe Sie einzeln an die MoBa angeschlossen und geprüft. Lok fahren und Schaltdecoder schalten. Klar ist zwei Digitalzentralen darf ich nicht gleichzeitig an eine MoBa (Modellbahnanlage) betreiben.

Als ich nun das DCC- Track Signal über den Optokoppler geführt habe, hatte der Sketch auch bis Samstag funktioniert. Bis zu diesem Wochenenende, da war nichts mehr im Serial Monitor zu erkennen. Nur diese Zeile hat er ausgeführt
Serial.println("NMRA DCC Example 1"
Ich dachte nun, dass der Opptokoppler Defekt sei, baute deshalb einen anderen ein.
Auch danach ohne Erfolg.
Deinen Ratschlag mit dem Ozzi, kann ich erst Morgen testen, wenn ich wieder auf Arbeit bin. Dort habe ich ein Ozzi zur Verfügung.

Es funktioniert überings keines der Beispiele die in der NmraDcc Bibliothek.
Auch meine alten Projekte funktionieren ebenfalls nicht mehr. Bis vor dem Wochenende gingen sie aber. Lokdecoder und Zubehördecoder.

Kann es doch an der IDE Version liegen ?

Hinweis, testweise auch schonmal die Arduinos ausgetauscht. Um sicher zu gehen das der PIN2 Eingang i.O. ist. Auch hier tut sich nichts und der Eingang ist in Ordnung.

Meine Fragen an Franz-Peter,
Was ist ein LA ?

Dein zweiter Tipp,
Das werde ich gleich mal probieren
// Uncomment to print all DCC Packets
#define NOTIFY_DCC_MSG

Denn der SerialMonitor muss doch was anzeigen. wenn ich über den Handregler Magnetartikeladressen oder Lokbefehle sende.
Ich weiß auch 99,8% der Fehler sitzen vorm dem PC, es ist wahrscheinlich so simpel nur ich komme nicht drauf.

Ich melde mich Mittwoch, nochmal mit weiteren Ergebnissen bei Euch.

Viele Grüße
Christian


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2020, 17:56
Beitrag #5
RE: Arduiono und NmraDcc
Hallo Christian,
(24.02.2020 17:21)Christian_Moba-Arduino schrieb:  Meine Fragen an Franz-Peter,
Was ist ein LA ?
Ein Logik-Analysator. Im Gegensatz zu einem Oszi erhält man keine Info über den genauen Signalverlauf, sondern nur HIGH/LOW. Dafür aber mit deutlich mehr Kanälen. In digitalen Schaltungen reicht das oftmals aus, und die vielen Kanäle erlauben in digitalen Schaltung bessere Analysen.
Sowas gibt's auch in sehr preiswert, was für Tests an Arduino-Schaltung meist ausreicht. ( Ich habe keine Beziehung zu dem verlinkten Händler - ist nur ein Beispiel, und noch nichtmal das billigste ).

P.S. hast Du denn die IDE-Version gewechselt, seit es nicht mehr funktioniert? Mit der 1.8.12 habe ich noch garnichts gemacht. Und hast Du mal probiert ob es mit einer älteren Version geht? ( die IDE gibt's auch als 'noInstall' Variante. Da kann man sogar mehrere Versionen nebeneinander betreiben).

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2020, 18:13
Beitrag #6
RE: Arduiono und NmraDcc
(24.02.2020 17:56)MicroBahner schrieb:  ( die IDE gibt's auch als 'noInstall' Variante. Da kann man sogar mehrere Versionen nebeneinander betreiben).
Die heißt auch portable IDE.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2020, 18:48
Beitrag #7
RE: Arduiono und NmraDcc
Hallo Franz-Peter, hallo Tommy,

ich hatte zuvor die Version 1.8.11 installiert. da hat alles geklappt.
Diesen Wochenende hat mein Modellbahn PC und auch mein Laptop jeweils die 1.8.12 geupdatet. Danach so scheint es klappe es nicht mehr. Weiß aber nicht 100% ob das Update dran schuld ist.

Leider kann ich die vorangegangenen Versionen nicht mehr Installieren, deshalb meine Frage, wo bekommt ihr eigentlich die älteren Versionen der IDE her ?
Ich kann das nirgends finden.
Gibt es die im Windows Store nachträglich irgendwo zu finden. Denn der Arduino IDE wird als App immer automatisch über den Windows Store douwngeloadet.

Bitte um Hilfe, damit ich auch diesen Weg probieren kann.
Vielen Dank
Christian
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2020, 19:08
Beitrag #8
RE: Arduiono und NmraDcc
Lass den Win-Store weg (von dem liest man öfter von Problemen) und nimm die Originalquelle. Dort etwas runter zu Previous Releases.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Wert von einem Arduino zu einem zweiten Arduino senden Thorsten_S 9 2.343 14.10.2019 14:48
Letzter Beitrag: Thorsten_S
  Firmata (Daten senden an den Arduino und empfangen vom Arduino) comfan 6 5.293 29.04.2017 14:29
Letzter Beitrag: hotsystems
  Arduino Ethernet mit USB 2 Serial Converter/Welche Einstellungen im Arduino-Sketch lociluke 1 4.499 05.05.2015 13:40
Letzter Beitrag: Bitklopfer
  Arduino Mega-Projekt mit EEPROM auf Arduino Due portieren Foto-Ralf 17 11.906 16.03.2015 12:06
Letzter Beitrag: Foto-Ralf

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste