Таймеры

Тема в разделе "Arduino & Shields", создана пользователем kamens4ik, 16 дек 2014.

  1. kamens4ik

    kamens4ik Нуб

    Здравствуйте. Я уже писал здесь. Есть проблема в инициализации таймеров. Если кто сможет то подскажите, буду благодарен. Проблема в том что что на 3 5 6 9 10 11 ногах Лим на разных частотах, в чем беда?

    int inPin = A5; // select the input pin for the potentiometer
    int ledPin = 13; // select the pin for the LED
    int inValue = 0;
    volatile float alfa_grad = 0;
    float alfa_rad = 0;
    byte modul;
    byte modul_1;
    byte modul_2;
    byte modul_3;
    byte modul_4;
    byte modul_5;

    void setup() {
    // declare the Pin as an OUTPUT:
    pinMode(3, OUTPUT);
    pinMode(A5, INPUT);
    Serial.begin(115200); // connect to the serial port
    Serial.println("PWM Test");
    TCCR1A = 0;
    TCCR1B = 0;
    TCNT1 = 0;

    OCR1A =312;
    TCCR1A|= (1 << WGM12);
    TCCR1A |= (1 << CS10);
    TCCR1A |= (0 << CS11);
    TCCR1A |= (1 << CS12);
    TIMSK1 |= (1 << OCIE1A); // Разрешить прерывание по совпадению
    TCCR1B |= (1 << CS10);
    TCCR1B |= (0 << CS11);
    TCCR1B |= (1 << CS12);
    TIMSK1 |= (1 << OCIE1A); // Разрешить прерывание по совпадению
    }

    ISR(TIMER1_COMPA_vect){
    alfa_grad += 0.36;
    if(alfa_grad > 359 && alfa_grad < 361)
    {
    alfa_grad = 0;
    }

    }

    void loop() {
    alfa_rad = (float)alfa_grad*3.14/180;
    inValue = map (analogRead(inPin),0,1023,0,255) - 127;
    modul = map (((float)inValue*sin(alfa_rad))*100,-12700,12700,-127,127) + 127;
    modul_1 = map (((float)inValue*sin(alfa_rad + 2.09))*100,-12700,12700,-127,127) + 127;
    modul_2 = map (((float)inValue*sin(alfa_rad + 4.18))*100,-12700,12700,-127,127) + 127;
    analogWrite (3,modul);
    analogWrite (5,modul_1);
    analogWrite (6,modul_2);
    volatile float alfa = alfa_rad;
    if (alfa >= 6.2832)
    {
    do {alfa = alfa - 6.2832;}
    while (alfa < 6.2832);

    }
    modul_3 = map(((float)inValue*sin(alfa))*100,-12700,12700,-127,127) + 127;
    modul_4 = map (((float)inValue*sin(alfa + 2.09))*100,-12700,12700,-127,127) + 127;
    modul_5 = map (((float)inValue*sin(alfa + 4.18))*100,-12700,12700,-127,127) + 127;
    analogWrite (9,modul_3);
    analogWrite (10,modul_4);
    analogWrite (11,modul_5);

    // if ((int)alfa_grad % 15) { подача на на двигатель для одного шага


    //}









    }
     
  2. altex

    altex Гик

    скорее всего вы ошиблись с битовыми операциями
    не TCCR1A |= (0 << CS11);
    а TCCR1A &= ~(1 << CS11);
     
  3. kamens4ik

    kamens4ik Нуб

    К сожалению это не так. Проверял все норма. Неужели нет идей или никому не интересно ??