Hallo Dominik,
ich habe die Files geschickt.
Hier nochmal ein paar Beispiele für alle anderen, wie man so etwas machen kann:
#if TLC_TIMER5 == 0
GSCLK_DDR |= _BV(GSCLK_PIN); // alter Code
#else
GSCLK2_DDR |= _BV(GSCLK2_PIN); // Pin 45 ist OCR5B neuer Code !!
#endif
Anstatt GSCLK_DDR verwende ich GSCLK2:
/** OC2B (Mega pin 9) -> GSCLK (TLC pin 18) */
#define GSCLK_PIN PH6
#define GSCLK_PORT PORTH
#define GSCLK_DDR DDRH
/** OC5B (Mega pin 45) -> GSCLK (TLC pin 18) */
#define GSCLK2_PIN PL4
#define GSCLK2_PORT PORTL
#define GSCLK2_DDR DDRL
Wichtig ist die Konfiguration des Timer5 selbst:
#if TLC_TIMER5 == 0
/* Timer 2 - GSCLK */
TCCR2A = _BV(COM2B1) // set on BOTTOM, clear on OCR2A (non-inverting),
// output on OC2B
| _BV(WGM21) // Fast pwm with OCR2A top
| _BV(WGM20); // Fast pwm with OCR2A top
TCCR2B = _BV(WGM22); // Fast pwm with OCR2A top
OCR2B = 0; // duty factor (as short a pulse as possible)
OCR2A = TLC_GSCLK_PERIOD; // see tlc_config.h
TCCR2B |= _BV(CS20); // no prescale, (start pwm output)
#else
/* Timer 5 - GSCLK */
TCCR5A = _BV(COM5B1) // set on BOTTOM, clear on OCR5A (non-inverting),
// output on OC2B
| _BV(WGM51) // Fast pwm with OCR5A top
| _BV(WGM50); // Fast pwm with OCR5A top
TCCR5B = _BV(WGM52) // Fast pwm with OCR5A top
| _BV(WGM53); // Fast pwm with OCR5A top /* This line is new to get Timer 5 in same Mode like Timer2 */
OCR5B = 0; // duty factor (as short a pulse as possible)
OCR5A = TLC_GSCLK_PERIOD; // see tlc_config.h
TCCR5B |= _BV(CS50); // no prescale, (start pwm output)
#endif
Die Library zu ändern ist kein Hexenwerk, da diese auch nur aus C-Code besteht.
Wenn man genauer verstehen will, was passiert, sollte man das Prozessorhandbuch dazu legen.
Timer 5 muß so konfiguruert werden, das seine Betriebsart der von Timer2 entspricht.
Aber auch dies ist im Prozessorhandbuch gut beschrieben.
Gruß