• Объявления

    • admin

      Просьба всем принять участие!   24.11.2017

      На форуме разыгрывается спектроанализатор Arinst SSA-TG LC (цена 18500 руб). Просьба всем перейти по ссылке ниже и принять участие!
Максим Окатов

ATmega8a не работает if

2 сообщения в этой теме

 

Товарищи, помогите пожалуйста. Данная програмулина при нажатии на кнопку входит в функцию MinU() в которой инициализирует таймер для задержки(ждем отпустит пользователь кнопку или нет) если кнопка не отпущена то уменьшаем скважность ШИМ.

проблема в выделенной красным строчке! когда count больше 3 уменьшаем скважность, но в отладчике AVR studio, Proteus и в железе не робит.

Перепрыгивает действие в {} так будь-то условие не выполнено...

#define F_CPU 1000000L
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
unsigned char count = 0;
unsigned char a=5,s=3,b=0;

    //===================================Насройка таймера====================
void Timer_ini(void){
   TCCR1B = (1<<CS12)|(0<<CS11)|(0<<CS10);
   TCNT1 = 65535-976;
   TIMSK |= (1<<TOIE1);
   count = 0;
  }

    //===========================настройка шим===========================
void PWM_ini(void){
   ASSR=0x00;
   TCCR2=0b01101110; //На выводе OC1A единица, когда OCR1A==TCNT1, восьмибитный ШИМ
   OCR2=200;
}

//===============

void MinU(){
    unsigned char i=0;
    Timer_ini();
    while (!(PINB&0b00000010)){
        if(count>2){        //Если таймер считал более двух раз
          _delay_ms(100); // ждем 100 мс
          OCR2--; // Уменьшаем скважность
          i=1;        // были в плавном уменьшении
      }
      
   }
   if (i!=1) // если не были в плавном уменьшении
   {
       OCR2=OCR2-50;
       i=0;
   }
}

        //=======================================================
int main(void)
    {
       
        // Настраиваем порт D на выход
        DDRB = 0b00001000;
        PWM_ini();
        //Timer_ini();
        sei();
        
        
        while(1)
        {
            b=a-s;
            if (!(PINB&0b00000010))
            {
                MinU();
            }/*
            //if (!(PINB&0b00000100))
            //{
                //PlsU();
            //}*/
        }
        return 0;
    }
    
    ISR (TIMER1_OVF_vect)
    {
        count++;
        TCNT1 = 65535-976;
            }

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
ARV    261

Все переменные, обрабатываемые и в прерывании и в основном цикле, должны быть объявлены volatile.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Гость самодельщик
      Автор: Гость самодельщик
      Здравствуйте. Посоветуйте пожалуйста схемы программаторов для AVR и STM- универсальный не надеюсь.
      Имеется в наличии usbasp китайский-работает как гнилой еврей раз в неделю. Сделал PICKIT2 за 4 года ни одного отказа. usbasp может сегодня тупо отказываться работать на 3 компьютерах, на следующий день как часики прошивает 1-2 камня и опять отдыхает. Надоело. 
    • Автор: Serge77
      Обязанности:
      · Разработка радиоэлектронных и GSM-устройств: разработка схем, программирование, разводка печатных плат, разработка документации.
      · Программирование микроконтроллеров STM, AVR, ARM, PIC на языке С/С++
       
      в личку или en@argument74.com
    • Автор: Flash6300
      Приветствую всех. 
      Как на 2313 рассчитать значение для записи в эти регистры, если я хочу получить задержку в 6 секунд?
      OCR1AH
      OCR1AL
      TCCR1B
       
    • Автор: Maoser
      Всем доброго времени суток.
      Помогите пожалуйста начинающему.Нужна программа для Attiny13a на языке С.
      Вот такой алгоритм:
      Нажимают кнопку и начинают мигать светодиоды типа "Бегущие огни", при отпускании остается светится один из четырех, причем в случайном порядке как в рулетке.Нажимают и снова начинают бежать- отпускают остается гореть один.
    • Автор: hardbar
      Есть проект СГУ на AVR. Музой проекта послужил не безызвестный проект  СГУ на PIC.
      Хотел сделать его ещё в 2012 но знаний не хватало. А вот сейчас знаний хватает, вот и сбылась моя мечта. 
      Пока что прикреплю видео, когда напишу статью о нем, ждите публикацию на ГЛ странице сайта. 
      В качестве динамика использовал колонку от Соньки музыкалки.