Влияние одного выхода на другой!
-
- Рядовой
- Сообщения: 57
- Зарегистрирован: 03 ноя 2017, 06:13
- Откуда: Челябинская обл.
Влияние одного выхода на другой!
Добрый день!
Не знаю пока с чем связано.. делаю проект управления печкой на отработке. есть в проекте несколько выходов ШИМ.. Всё работало, пока не добавил buzzer (пьезописчалку) и вот когда она начинает работать (по программе прерывисто с частотой 1000гц) то выход 5 шим (который в этот момент задействован по программе) так же начинает прерывисто включаться/выключаться. Удаляю блок буззера и всё становиться нормально.
Что не так делаю и где исправить, подскажите.
Кстати, сначала писчалку подцеплял к выходу 9 (с ШИМом) но в дискретном режиме и так же другой выход (5) с ШИМом прерывался, думал может как-то влияние выходов с ШИМ влияют. Посадил писчалку на дискретный 12-й выход- результат такой-же
С уважением!
Отправлено спустя 55 минут 4 секунды:
Вот что заметил... Изначально частота буззера стоит 1000гц, в таком режиме это сильно влияет на другой выход с ШИМом. Меняю частоту буззера на 400- влияние стало менее. Т.е. не хватает вычислительных способностей процессора?
Не знаю пока с чем связано.. делаю проект управления печкой на отработке. есть в проекте несколько выходов ШИМ.. Всё работало, пока не добавил buzzer (пьезописчалку) и вот когда она начинает работать (по программе прерывисто с частотой 1000гц) то выход 5 шим (который в этот момент задействован по программе) так же начинает прерывисто включаться/выключаться. Удаляю блок буззера и всё становиться нормально.
Что не так делаю и где исправить, подскажите.
Кстати, сначала писчалку подцеплял к выходу 9 (с ШИМом) но в дискретном режиме и так же другой выход (5) с ШИМом прерывался, думал может как-то влияние выходов с ШИМ влияют. Посадил писчалку на дискретный 12-й выход- результат такой-же
С уважением!
Отправлено спустя 55 минут 4 секунды:
Вот что заметил... Изначально частота буззера стоит 1000гц, в таком режиме это сильно влияет на другой выход с ШИМом. Меняю частоту буззера на 400- влияние стало менее. Т.е. не хватает вычислительных способностей процессора?
- RedSky
- Лейтенант
- Сообщения: 576
- Зарегистрирован: 19 дек 2016, 20:07
- Откуда: Днепропетровск
- Имя: Алексей
- Поблагодарили: 1 раз
Влияние одного выхода на другой!
В новых версиях IDE вроде как tone может исполнять полифонию, для чего задействуется несколько таймеров. Возможно используется и таймер 0.
[spoiler]Чтобы генерировать прямоугольно-волновые ноты слышимого диапазона, библиотека Tone использует аппаратные таймеры микроконтроллера Arduino.
Генерировать ноты можно на любом контакте Arduino. Количество нот, которые можно проигрывать одновременно, зависит от количества аппаратных таймеров (совместимых с CTC), имеющихся у контроллера.
ATmega8: два таймера (2 и 1)
ATmega168/328: три таймера (2, 1 и 0)
ATmega1280: 6 таймеров (2, 3, 4, 5, 1 и 0)
В скобках указан порядок распределения таймеров. Кроме того, timer0 – это очень чувствительный таймер, поскольку отвечает за функцию millis() и ШИМ.
Диапазон частот, которые может генерировать библиотека, зависит от тактовой частоты микроконтроллера и используемого таймера. Расчет этого диапазона осуществляется следующим образом (здесь первая запись – это частота микроконтроллера, вторая – нижняя граница диапазона для 8-битного таймера, третья – нижняя граница для 16-битного таймера, а четвертая – верхняя граница частотного диапазона):
|8 MHz |16 Hz |1 Hz (1/16 Hz) |4 MHz |
|16 MHz |31 Hz |1 Hz (1/8 Hz) |8 MHz |
Хотя верхней границей частотного диапазона может быть и 8 МГц, верхняя граница диапазона человеческого слуха, как правило, не превышает 20 КГц.
Точность ноты зависит от значения, заданного для предварительного делителя частоты. Благодаря этому делению происходит квантование частоты.
Если вы используете 16-битный таймер (например, timer1 или timer3, timer4, timer5 на 1280), то можете генерировать «ноты» до 1/8 Гц (один цикл каждые 8 секунд), но библиотека Tone, задавая частоты, принимает только целочисленные значения.
Поскольку функция play() принимает только беззнаковые целочисленные значения, максимальной частотой, которую можно сгенерировать, будет 65535 Гц. Кроме того, после округления эта цифра превращается в «ноту» с частотой 65573,77 Гц (на платах с тактовой частотой в 16 МГц). Следовательно, если в функции play() указать для частоты более высокие значения, вы все равно не сможете достичь результата лучше 80 rГц, потому что переключение контактов осуществляется на программном уровне. Причем каждое такое переключение требует КАК МИНИМУМ 50 с лишним циклов.[/spoiler]
Отсюда: http://wikihandbk.com/wiki/Arduino:Библиотеки/Tone
Более точно можно сказать увидев проект и зная версию IDE.
[spoiler]Чтобы генерировать прямоугольно-волновые ноты слышимого диапазона, библиотека Tone использует аппаратные таймеры микроконтроллера Arduino.
Генерировать ноты можно на любом контакте Arduino. Количество нот, которые можно проигрывать одновременно, зависит от количества аппаратных таймеров (совместимых с CTC), имеющихся у контроллера.
ATmega8: два таймера (2 и 1)
ATmega168/328: три таймера (2, 1 и 0)
ATmega1280: 6 таймеров (2, 3, 4, 5, 1 и 0)
В скобках указан порядок распределения таймеров. Кроме того, timer0 – это очень чувствительный таймер, поскольку отвечает за функцию millis() и ШИМ.
Диапазон частот, которые может генерировать библиотека, зависит от тактовой частоты микроконтроллера и используемого таймера. Расчет этого диапазона осуществляется следующим образом (здесь первая запись – это частота микроконтроллера, вторая – нижняя граница диапазона для 8-битного таймера, третья – нижняя граница для 16-битного таймера, а четвертая – верхняя граница частотного диапазона):
|8 MHz |16 Hz |1 Hz (1/16 Hz) |4 MHz |
|16 MHz |31 Hz |1 Hz (1/8 Hz) |8 MHz |
Хотя верхней границей частотного диапазона может быть и 8 МГц, верхняя граница диапазона человеческого слуха, как правило, не превышает 20 КГц.
Точность ноты зависит от значения, заданного для предварительного делителя частоты. Благодаря этому делению происходит квантование частоты.
Если вы используете 16-битный таймер (например, timer1 или timer3, timer4, timer5 на 1280), то можете генерировать «ноты» до 1/8 Гц (один цикл каждые 8 секунд), но библиотека Tone, задавая частоты, принимает только целочисленные значения.
Поскольку функция play() принимает только беззнаковые целочисленные значения, максимальной частотой, которую можно сгенерировать, будет 65535 Гц. Кроме того, после округления эта цифра превращается в «ноту» с частотой 65573,77 Гц (на платах с тактовой частотой в 16 МГц). Следовательно, если в функции play() указать для частоты более высокие значения, вы все равно не сможете достичь результата лучше 80 rГц, потому что переключение контактов осуществляется на программном уровне. Причем каждое такое переключение требует КАК МИНИМУМ 50 с лишним циклов.[/spoiler]
Отсюда: http://wikihandbk.com/wiki/Arduino:Библиотеки/Tone
Более точно можно сказать увидев проект и зная версию IDE.
- Dev1
- Майор
- Сообщения: 1045
- Зарегистрирован: 12 июл 2016, 18:04
- Откуда: Гондурас
- Поблагодарили: 3 раза
Влияние одного выхода на другой!
Лучше вообще не использовать одновременно баззер(тоне) и шим. Используйте баззер со встроенным генератором, либо сделать отдельный на 555 и включать(управлять) от пина. 

Win10-64 FLProg v8.2.3 Portable IDE 1.8.19, 2,x,x 

-
- Рядовой
- Сообщения: 57
- Зарегистрирован: 03 ноя 2017, 06:13
- Откуда: Челябинская обл.
Влияние одного выхода на другой!
Пока исключил баззер из проекта, найду со встроенным, тогда сделаю просто дискретное управление этой писчалкой
-
- Рядовой
- Сообщения: 57
- Зарегистрирован: 03 ноя 2017, 06:13
- Откуда: Челябинская обл.
Влияние одного выхода на другой!
Еще столкнулся с одной ситуацией с ШИМ выходами, правда она была еще ранее, до написания этой темы и вот сейчас опять.. первый раз решилось переписыванием программы с определенного шага. Второй раз переписывать программу не стал, решил попробовать так реанемировать.
В проекте задействовано три выхода ШИМ.. Всё работало нормально. В какой-то момент написания программы (дополнения различных функций, причем не связанных с этими выходами) перестает работать один конкретный выход ШИМ.. Заливаю в другой контроллер- тоже самое. Причем данные на входе этого ШИМ-выхода присутствуют.. Заливаю предыдущий проект- всё работает. Поменял его на другой выход ШИМ и пока работает нормально.
Что не так и что надо изменить, учесть при написании?!
В проекте задействовано три выхода ШИМ.. Всё работало нормально. В какой-то момент написания программы (дополнения различных функций, причем не связанных с этими выходами) перестает работать один конкретный выход ШИМ.. Заливаю в другой контроллер- тоже самое. Причем данные на входе этого ШИМ-выхода присутствуют.. Заливаю предыдущий проект- всё работает. Поменял его на другой выход ШИМ и пока работает нормально.
Что не так и что надо изменить, учесть при написании?!
- Grafsaxar
- Лейтенант
- Сообщения: 377
- Зарегистрирован: 06 сен 2015, 16:04
- Откуда: Маркс-Энгелс
- Имя: Alexander
Влияние одного выхода на другой!
При работе с камнем мега328 это штатная ситуация.
Если таймеры задействованы в других блоках, не все шим выходы будут нормально работать.
так же имел проблеммы с пищалкой. Пришлось добавить микруху PCA9685
PCA9685
Качество — это делать что-либо правильно, даже когда никто не смотрит
-
- Рядовой
- Сообщения: 57
- Зарегистрирован: 03 ноя 2017, 06:13
- Откуда: Челябинская обл.
-
- Рядовой
- Сообщения: 57
- Зарегистрирован: 03 ноя 2017, 06:13
- Откуда: Челябинская обл.
-
- Рядовой
- Сообщения: 57
- Зарегистрирован: 03 ноя 2017, 06:13
- Откуда: Челябинская обл.
Влияние одного выхода на другой!
Пробую м-му PCA9685
Кто подскажет какую частоту ШИМ надо выставить, хотя бы подскажите, какая частота у обычного выхода ШИМ
Кто подскажет какую частоту ШИМ надо выставить, хотя бы подскажите, какая частота у обычного выхода ШИМ
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость