Closed mc-b closed 7 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.
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.)