помогите найти ошибку

Тема в разделе "Микроконтроллеры AVR", создана пользователем ELITE, 9 ноя 2018.

  1. ELITE

    ELITE Гик

    вроде всё просто, герлянда (RGB лента)
    и attyni 13
    простой программный ШИМ на 3 канала
    Код (C++):
    #include <avr/io.h>
    #include <stdlib.h>
    #include <avr/interrupt.h>
    #include <util/delay.h>

    //макросы для включения, выключения светодиодов
    //низкий уровень - на ножке 0 вольт, высокий уровень - на ножке 5 вольт
    #define LED1_OFF PORTB &= ~(1<<PB0); //Низкий уровень ножки PB0 (синий)
    #define LED2_OFF PORTB &= ~(1<<PB1); //Низкий уровень ножки PB1 (зеленый)
    #define LED3_OFF PORTB &= ~(1<<PB2); //Низкий уровень ножки PB2 (красный)
    #define LED1_ON PORTB |= (1<<PB0);  //Высокий уровень ножки PB0
    #define LED2_ON PORTB |= (1<<PB1);  //Высокий уровень ножки PB1
    #define LED3_ON PORTB |= (1<<PB2); //Высокий уровень ножки PB2

    uint8_t counter=0, chenal=0, i=0, j=0, ci=0;
    uint8_t lev_ch[3];
    uint8_t ch[3];
    uint8_t buf_lev_ch[3];


    ISR(TIM0_OVF_vect){

      if (++counter==0) //счетчик перехода таймера через ноль
      {
        buf_lev_ch[0]=lev_ch[0]; //значения длительности ШИМ
        buf_lev_ch[1]=lev_ch[1];
        buf_lev_ch[2]=lev_ch[2];
      LED1_ON; LED2_ON; LED3_ON; // PORTB |=(1<<PB0)|(1<<PB1)|(1<<PB2); //подаем 1 на все каналы BGR (0=B 1=G 2=R)
      }

      if (counter==buf_lev_ch[0]) LED1_OFF; //подаем 0 на канал
      if (counter==buf_lev_ch[1]) LED2_OFF; //по достижении
      if (counter==buf_lev_ch[2]) LED3_OFF; //заданной длительности.

    }

    int main(void)
    {
      DDRB=0b00000111; // установка PortB пины 0,1,2 выходы
      TCCR0B = _BV(CS00);   // таймер работает без предделителя
      TIMSK0 = _BV(TOIE0);// прерывания по переполнению таймера разрешены
      sei();// глобально прерывания так же разрешены

      lev_ch[0]=0;     //Синий цвет
      lev_ch[1]=0;     //Зеленый цвет
      lev_ch[2]=0;     //Красный цвет

    if (lev_ch[0]==0 && lev_ch[1]==0 && lev_ch[2]==0 ) chenal=0;

    while (1)     //бесконечная шарманка
      {
    /*    //формирование значений со сдвигом на 64 (0-64-127)
       ch[0]=i%256;
       ch[1]=(i+64)%256;
       ch[2]=(i+127)%256;
       i++;
          if( ch[0] < 128) {lev_ch[0] = ch[0]; } else {lev_ch[0] = 256-ch[0]; };
          if( ch[1] < 128) {lev_ch[1] = ch[1]; } else {lev_ch[1] = 256-ch[1]; };
          if( ch[2] < 128) {lev_ch[2] = ch[2]; } else {lev_ch[2] = 256-ch[2]; };
    */


        //формирование с полными переходами
     
         j==i%127;

         if( ci==0) {      lev_ch[0]=j;       lev_ch[1]=0;      lev_ch[2]=127;    if (j==127){ci=1;}      }
         if( ci==1) {      lev_ch[0]=127;     lev_ch[1]=0;      lev_ch[2]=127-j;  if (j==127){ci=2;}      }
         if( ci==2) {      lev_ch[0]=127;     lev_ch[1]=j;      lev_ch[2]=0;      if (j==127){ci=3;}      }
         if( ci==3) {      lev_ch[0]=127-j;   lev_ch[1]=127;    lev_ch[2]=0;      if (j==127){ci=4;}      }
         if( ci==4) {      lev_ch[0]=0;       lev_ch[1]=127;    lev_ch[2]=j;      if (j==127){ci=5;}      }
         if( ci==5) {      lev_ch[0]=0;       lev_ch[1]=127-j;  lev_ch[2]=127;    if (j==127){ci=0;}      }
    i++;
     
       
     

          _delay_us(5000); //Пауза 5мс
      }

    }
    не пойму где я ошибся, горит только 1 цвет lev_ch[2]=127....

    явно очень тупая и банальная ошибка, но уже 2 часа не пойму где....
     
  2. ELITE

    ELITE Гик

    нашел == вместо = влепил
     
    Tomasina нравится это.
  3. Un_ka

    Un_ka Гуру

    У меня такое было.
     
  4. ELITE

    ELITE Гик

    удивительно, уже 4й день, а комментов типа "говнокод" "работать не будет" до сих пор нет....

    куда делись "профи".....
     
  5. DetSimen

    DetSimen Guest

    подожди дядяВитю.
     
  6. DetSimen

    DetSimen Guest

    а на будущее, при компиляции включай показ warning-ов, такие ошибки отловишь на раз
     
    Un_ka нравится это.
  7. Airbus

    Airbus Радиохулиган Модератор

    ParovoZZ в отпуске на Мальдивах
     
  8. ELITE

    ELITE Гик

    вотонокак... да, тамже цунами было, инета нет...
     
  9. Igor68

    Igor68 Гуру

    Во блин... везёт! А мне... ох в тюрьму бы не попасть! Благо, что Колыму отменили!