Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 29
  1. #1
    Продвинутый
    Регистрация
    19.02.2010
    Возраст
    46
    Сообщений
    244
    Вес репутации
    230

    По умолчанию ШИМ. Как запрограммировать?

    Приветствую!

    Задача такая. Нужен ШИМ. 50 Гц. Скважность 0-88% (должна задаваться программно).
    Arduino Nano v.4 (если это принципиально).
    Спасибо!

    зы: если было, ткните в ссылку. Поиск не помог.

  2. #2
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: ШИМ. Как запрограммировать?

    Вот пример хардверного ШИМ на 60Гц
    Если ровно 50 Гц нужно, то можно софтовый ШИМ сделать
    PHP код:
    byte val=128;

    void setup()
    {
      
    pinMode(5OUTPUT);
      
    TCCR0B TCCR0B 0b11111000 5;  
    }

    void loop()
    {
      
    analogWrite(5val);  // val значение от 0 до 255


  3. #3
    Продвинутый
    Регистрация
    19.02.2010
    Возраст
    46
    Сообщений
    244
    Вес репутации
    230

    По умолчанию Re: ШИМ. Как запрограммировать?

    Chip, спасибо!

    Если не трудно, есть реализация софтового?

  4. #4
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: ШИМ. Как запрограммировать?

    Вот пример, выдает на D13 51Гц

    Soft PWM для Carduino/Arduino
    PHP код:
    #define D13_High PORTB |=B00100000 
    #define D13_LOW PORTB &= B11011111 
    volatile unsigned int tcnt2
    volatile byte pwm_time
    byte bytes[] = {128};   

    void setup()   
    {  
        
    TIMSK2 &= ~(1<<TOIE2); //разрешения прерывания по переполнению таймера/счетчика Т2  
        
    TCCR2A &= ~((1<<WGM21) | (1<<WGM20));// Режим работы таймера/счетчика 
        
    TCCR2B &= ~(1<<WGM22);// Режим работы таймера/счетчика 
        
    ASSR &= ~(1<<AS2);  //Выбор источника синхронизации таймера если AS2=0 от системного генератора 
        
    tcnt2 237;      
        
    TIMSK2 |= (1<<TOIE2);//Разрешение прерывания по переполнению Т2.   
    }   

    void loop()  
    {  

    //****************обработчик прерывания******************** 
    ISR(TIMER2_OVF_vect)  

        
    TCNT2 tcnt2;   
     
    pwm_time++;       
        if(
    bytes[0] > pwm_timeD13_High; else D13_LOW


  5. #5
    Продвинутый
    Регистрация
    19.02.2010
    Возраст
    46
    Сообщений
    244
    Вес репутации
    230

    По умолчанию Re: ШИМ. Как запрограммировать?

    Сорри, если ламерский вопрос, но, где в этом примере задается скважность?
    И еще. Где можно почитать про TIMSK2, TCCR2A и т.д., используемые в коде?

  6. #6
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: ШИМ. Как запрограммировать?

    bytes[0]=скважность от 0 до 255

  7. #7
    Продвинутый
    Регистрация
    19.02.2010
    Возраст
    46
    Сообщений
    244
    Вес репутации
    230

    По умолчанию Re: ШИМ. Как запрограммировать?

    Уже разобрался, спасибо!

    так понимаю, что используя прерывание, мы отвязываемся от главного цикла loop()?
    код функции loop будет работать асинхронно? правильно?
    Последний раз редактировалось BlkDem; 29.04.2010 в 20:43.

  8. #8
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: ШИМ. Как запрограммировать?

    Все верно

  9. #9
    Продвинутый
    Регистрация
    19.02.2010
    Возраст
    46
    Сообщений
    244
    Вес репутации
    230

    По умолчанию Re: ШИМ. Как запрограммировать?

    Это вообще отлично!

  10. #10
    Продвинутый
    Регистрация
    19.02.2010
    Возраст
    46
    Сообщений
    244
    Вес репутации
    230

    По умолчанию Re: ШИМ. Как запрограммировать?

    Chip, приветствую!
    Если требуется несколько ШИМов, как поступить?
    Как будет выглядеть последний скетч (где используется прерывание) с тремя ШИМ, например, где у каждого можно задать произвольную скважность. Подскажи, если не трудно.

Страница 1 из 3 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •