Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.03.2016, 15:10   #1
cyberlab
Senior Member
 
Регистрация: 25.11.2013
Сообщений: 116
Вес репутации: 0
cyberlab is an unknown quantity at this point
По умолчанию Re: Помогите с аналогичной функцией analogWrite

Понять бы для чего это нужно?
Не понимаю что это будет, могу предложить использовать таймер, а в прерывании таймера обрабатывать Ваш ШИМ

Последний раз редактировалось cyberlab; 11.03.2016 в 15:53.
cyberlab вне форума   Ответить с цитированием
Старый 11.03.2016, 18:44   #2
Tatarin
Junior Member
 
Регистрация: 11.03.2016
Сообщений: 3
Вес репутации: 0
Tatarin is an unknown quantity at this point
По умолчанию Re: Помогите с аналогичной функцией analogWrite

Цитата:
Сообщение от cyberlab Посмотреть сообщение
Понять бы для чего это нужно?
Не понимаю что это будет, могу предложить использовать таймер, а в прерывании таймера обрабатывать Ваш ШИМ
Задача сделать функцию analogWrite().

Цитата:
Сообщение от Arhat109 Посмотреть сообщение
Очень странный подход к моделированию ШИМ.
Вы скорость работы МК себе представляете? Передаете в качестве ШИМ "1" и думаете что вы способны заметить одиночный импульс меньше микросекунды среди 10 секундных задержек?

Для справки: МК с частотой в 16Мегагерц исполняет в среднем 1 команду за 1.5 такта (многие за 1, некоторые за 3 и редко чуть больше) .. соответственно за 1 мегагерц (миллион раз в сек) он исполняет в среднем 10-12 команд. Ваши циклы имеют длительность в несколько команд МК .. и?
Это мой первый опыт с микроконтроллером. Хочется разобраться как и что работает.
С таймерами, что то ничего не вышло. За справку спасибо, буду знать теперь.

Код переделал на такой и всё работает.
Код:
void setup() {
  int start;
  int i;

  Serial.begin(9600);
  Serial.print("Start test: ");
  start = millis() ;
  for (i = 0 ; i < 30000 ; i++){
    bitSet(DDRB, 3); //pin 11 
    bitSet(DDRD, 3); //pin 3
    //pinMode(11, OUTPUT);
    //analogWrite(3, 0);
    TCCR2A |= _BV(COM2B1);
    OCR2B = 0;
  }
  Serial.print(millis() - start);
  Serial.println(" msec \nend test");
}


void loop() {
  PORTB |=B00001000; 
  OCR2B=255;
  delay(10);
  if(PINB & B00001000) Serial.println("Gorit") ;
  delay(1000);
  PORTB &=B11110111; 
  OCR2B = 0;
  delay(10);
  if(!(PINB & B00001000)) Serial.println("Ne gorit") ;
  delay(1000);
}
P.S. не знаю на сколько правильная реализация.

Последний раз редактировалось Tatarin; 12.03.2016 в 10:15.
Tatarin вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 20:02. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика