mc-b / microSRCP

MicroSRCP Projekt, Steuerung einer Modelleisenbahn auf Basis der Arduino Plattform
14 stars 9 forks source link

microSRCPODCC mit Arduino Mega #2

Closed mc-b closed 7 years ago

mc-b commented 11 years ago

funktioniert die odcc (d.h. die dccout.c mit Interrupt-Routine ) auch auf dem Arduino Mega ? Ich habe an einer Stelle im Code ein entsprechendes #define gefunden woraus ich schliessen würde es geht. (es geht auf jeden Fall zu kompilieren, das habe ich schon ausprobiert.)

mc-b commented 11 years ago
  if (myout == 0) 
      {                                     // 0 - make a long pwm pulse 
        TCCR1A = (1<<COM1A1) | (0<<COM1A0)  //  clear OC1A (=DCC) on compare match 
               | (1<<COM1B1) | (1<<COM1B0)  //  set   OC1B (=NDCC) on compare match 
               | (0<<WGM11)  | (0<<WGM10);  //  CTC (together with WGM12 and WGM13) 
        OCR1A = F_CPU * PERIOD_0 / 2 / 1000000L;               //1856 
        OCR1B = F_CPU * PERIOD_0 / 2 / 1000000L;               //1856 
      } 
    else 
      {                                     // 1 - make a short pwm puls 
        TCCR1A = (1<<COM1A1) | (0<<COM1A0)  //  clear OC1A (=DCC) on compare match 
               | (1<<COM1B1) | (1<<COM1B0)  //  set   OC1B (=NDCC) on compare match 
               | (0<<WGM11)  | (0<<WGM10);  //  CTC (together with WGM12 and WGM13) 
        OCR1A = F_CPU * PERIOD_1 / 1000000L / 2;               //928 
        OCR1B = F_CPU * PERIOD_1 / 1000000L / 2;               //928 
      } 

Die OC1A und OC1B sind im Atmega238 auf Pin 1 + 2 im Register B, umgesetzt auf Arduino (standard/pins_arduino.h) Pin 9 + 10. Diese Pin's stimmen mit der Beschreibung im "https://github.com/mc-b/microSRCP/wiki/Steuerungdigital#wiki-Variante__OpenDCC" überrein.

Die gleichen OC1A und OC1B sind beim Atmega2560 (http://www.atmel.com/Images/2549S.pdf) auf den Pin's 5 + 6 im Register B. Diese Pin wieder umgesetzt laut mega/pins_arduino.h sind 11 + 12.

Mit dem MotoMama Shield, habe ich dann folgendes getestet:

Anschliessend sind folgende Zeilen in microSRCPODCC auszukommentieren:

  // Port A Enable an L298N - MotoMama, DCC Signal an Input 1 + 2 
   //pinMode( 11, OUTPUT); 
   //digitalWrite( 11, HIGH ); 
   // Port B Enable an L298N - MotoMama, DCC Signal an Input 3 + 4 
   //pinMode( 12, OUTPUT); 
   //digitalWrite( 12, HIGH );

compilieren und uploaden, fertig.