Atmega2560 PWM на PH4

Я пытаюсь преобразовать следующий код для вывода на вывод 7 (PH4, OC4B) на Arduino Mega. Код выводится на вывод 6. Этот код взят из GitHub для GRBL на Mega "https://github.com/fra589/grbl-Mega-5X" из cpu_map.h ясно, что PH6 и PH7 находятся на одном и том же порту, но я просто не знаю, какие биты нужно изменить, чтобы GRBL выводился на вывод 7.Любая помощь будет приветствоваться.

#elif defined (SPINDLE_PWM_ON_D6)

    // Установите таймер для использования TIMER4C, который крепится к цифровому контакту 6 - Ramps Servo 2
    #define SPINDLE_PWM_MAX_VALUE     255.0 // Переводится на частоту ШИМ около 1,9 кГц при 1/8 прескалере
    #ifndef SPINDLE_PWM_MIN_VALUE
      #define SPINDLE_PWM_MIN_VALUE   1   // Должно быть больше нуля.
    #endif
    #define SPINDLE_PWM_OFF_VALUE     0
    #define SPINDLE_PWM_RANGE         (SPINDLE_PWM_MAX_VALUE-SPINDLE_PWM_MIN_VALUE)

    //Control Digital Pin 6 which is Servo 2 signal pin on Ramps 1.4 board
    #define SPINDLE_TCCRA_REGISTER    TCCR4A
    #define SPINDLE_TCCRB_REGISTER    TCCR4B
    #define SPINDLE_OCR_REGISTER      OCR4A
    #define SPINDLE_COMB_BIT          COM4A1

    // Прескалер 1/8, 16-битный быстрый ШИМ-режим
    #define SPINDLE_TCCRA_INIT_MASK (1<<WGM41)
    #define SPINDLE_TCCRB_INIT_MASK ((1<<WGM42) | (1<<WGM43) | (1<<CS41))
    #define SPINDLE_OCRA_REGISTER   ICR4 // 8-битный быстрый ШИМ-режим требует верхнего значения сброса, хранящегося здесь.
    #define SPINDLE_OCRA_TOP_VALUE 0xFF // Значение сброса счетчика ШИМ. Должно быть то же самое, что и PWM_MAX_VALUE в шестнадцатеричном формате.

    // Определить выходные штифты шпинделя.
    #define SPINDLE_PWM_DDR   DDRH
    #define SPINDLE_PWM_PORT  PORTH
    #define SPINDLE_PWM_BIT   3 // Цифровой вывод MEGA2560 6

, 👍2


1 ответ


1

Вы хотите заменить вывод 6 (PH3, OC4A) на вывод 7 (PH4, OC4B). Есть три вещи, которые вы должны изменить. Во-первых, выходной регистр сравнения, который является OCR4A для pin OC4A и OCR4B для pin OC4B. Таким образом:

-#define SPINDLE_OCR_REGISTER      OCR4A
+#define SPINDLE_OCR_REGISTER      OCR4B

Затем бит конфигурации, который позволяет выводить данные:

-#define SPINDLE_COMB_BIT          COM4A1
+#define SPINDLE_COMB_BIT          COM4B1

Наконец, бит для установки в регистре направления данных, который равен 3 для PH3 и 4 для PH4:

-#define SPINDLE_PWM_BIT 3 // Цифровой вывод MEGA2560 6
+#define SPINDLE_PWM_BIT 4 // Цифровой вывод MEGA2560 7

Примечание: как и в формате diff -u, префикс - означает “удалить это”, префикс + означает “добавить это”.

,

Спасибо за помощь. Я потратил несколько часов, пытаясь разобраться в таблице данных., @Mr.Spriggs