Проблема с функцией tone
- Войдите на сайт для отправки комментариев
Втр, 29/09/2015 - 10:17
Привет, ребята! Задался целью сделать генератор прямоугольных импульсов с применением функции tone. Подключен LCD shield, показывает частоту. Все вроде было неплохо, пока не поставил lcd. Теперь tone не реагирует на ручку потенциометра. Понимаю проблема в проге. Помогите разобраться.
#include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7 ); long prevmil = 0; long interval = 500; int pot = A5; int S = 2; int potval = 0; int freq = 30; void setup() { lcd.begin(16, 2); lcd.setCursor(3, 0); lcd.print("BMW GARAGE"); delay(1000); lcd.clear(); Serial.begin(9600); pinMode(S, OUTPUT); } void loop() { unsigned long mil = millis(); //тут я делаю это, потому, что if(mil - prevmil > interval) //когда значения переходят от 3х значных { //к 2х значным, ноль в конце не стирается с экрана prevmil=mil; lcd.setCursor(9, 1); lcd.print(" "); } potval = analogRead(pot); potval = constrain(potval, 0, 1023); freq = map(potval, 0, 1023, 30, 400); freq = constrain(freq, 30, 400); lcd.setCursor(10, 1); lcd.print("Hz"); lcd.setCursor(3, 0); lcd.print("Frequency"); lcd.setCursor(7, 1); lcd.print(freq); //выводим на дисплей частоту tone(S, freq, 20); //на этом пине частота остается неизменной Serial.print(freq);//хотя на экране значения меняются }
Romanoff, минимальная частота, которую генерит тоне() -16000000/1024/256/2 = 30,517578125 Гц Поэтому некорректно требовать от неё гудеть на 30 герцах. Ставьте 31. И уберите констрейны, они тут совершенно не нужны.
Сделал, как вы сказали. Не помогло. До подключения экрана и 30герц генерил(ну может и не 30, но был чувствителен к положению переменника во всем диапазоне). Констрейны поставил , когда пытался побороть глюк с нулями.
Romanoff, значит сделали не так, как я сказал. Сейчас залил ваш скетч с поправкой вместо вместо 30 -31, остальное не менял -всё работает.
Romanoff, т.к. не успел разобрать ардуину - залил ваш скетч из #4 не смотря - работает. Звук есть, частота меняется. Если у вас не работает, значит косяк в аппаратной части.
А LCD shield у вас сопряжен с дуиной?
У меня не шилд , просто Lcd индикатор с проводками.
В общем поменял выход генератора на pin11 и теперь все работает. Видимо pin1-3 не работают, когда подключен шилд.
Подскажите кто нибудь пожалуйста, как можно реалиовать изменение скважности в tone. Или каким либо еще способом.
Romanoff , tone() не умеет , это узко специализированная функция. Посмотрите это, это то-же самое по сути, но с большими возможностями.
Привет всем снова у меня есть вопрос, хоть уже и косвенно связанная с функцией tone. Хочу спросить какая амплитуда сигнала на выходе при использовании этой функции??? У меня 1 вольт по осцилографу. Я думал, что должно быть 5в....
На выход ардуины поставил транзистор дарлингтона TIP 142 в ключевом режиме, в качестве нагрузки должны были быть форсунки... И как итог не работает моя схема. Посмотрел на осцилографе, сигнал получился инвертированым..При этом, до транзистора с выхода дуины сигнал изменяется от 0в до 1в, после транзистора с 0 до -4в. Поставил мосфет IRF640. Тоже самое. Подскажите, я знаю, что делаю что то на так. Мне на выходе транзистора нужны импульсы 0-12в.
сигнал получился инвертированым
Так при схеме с общим эмиттером он всегда инвертированный, а Вы какого ждали?
При этом, до транзистора с выхода дуины сигнал изменяется от 0в до 1в, после транзистора с 0 до -4в.
1. Отключите транзистор вообще, оставьте ногу ардуины голой и померьте амплитуду. Если там будет 5В, то проблема в схеме включения транзистора. Сообщите нам какая амплитуда на голой ноге.
2. Схему включения в любом случае в студию. При правильном включении всё должно нормально работать даже с амплитудой в 0,5В.
На ноге ардуины, как и говорил ранее 1вольт. Схемку накидаю.
например вот на выходе генератора 1вольт. На выходе 5 вольт. В проге все работает . Подключил светодиод.
http://i57.fastpic.ru/big/2015/1019/fc/23a69a1fcc28c4fb497113da7635e3fc.jpg
http://i60.fastpic.ru/big/2015/1019/66/1700445573657876ec38c29270d61e66.jpg
извиняюсь осцил только в dc не поставил
Вы меня не поняли. Меня интересует амплитуда на ноге БЕЗ транзистора - всё отключите и оставьте ногу голой.
Теперь по схеме.
А где токоограничивающий резистор в базе? Там ведь ток "мама не горюй" вылезет. Неудивительно, что напряжение проседает. Поставьте в базу транзистора резистор МИНИМУМ270 ом, а лучше 430 ом или килоом (Вы умеете этот резистор рассчитывать?). Затем от соединения "база-резистор" к земле поставьте ещё один резистор в 10-20 раз больше базового.
Попробую завтра все отключить и посмотреть на сигнал)
Я пробовал ставить резистор между выходом мк и транзистором, в итоге амплитуда на выходе транзистора становится меньше. Стягивающий резистор с базы на землю пробовал, но это не обязательно, tip 142 внутри имеет такой резистор. В общем то при моделировании в Proteus все работает как надо, амплитуда на выходе транзистора 5 вольт, как и acc. На практике амплитуда меньше на 4-5вольт чем acc. Завтра запишу видео чтоль))
Не знаю, что там в протеусе, но падение напряжения на переходе база-эмиттер у составоного траннзистора 1,2 вольта (у обычного - 0,6) - Вот их Вы и видите. Остальное должно упасть на базовом резисторе! А то, что у Вас в коллекторной цепи напряжение упало - Вы какой резистор в базу ставили? В любом случае это не повод брать сч ноги ардуины такой громадный ток, как Вы берёте. Как ещё нога жива (если жива)
хз. Я читал что для составного хватит и 5мА. Все бы хорошо если брать в расчет, что вывод с мк при использовании функции tone 5вольт, то 5-1.2=3,8/68 Ом= 5мА. Пробовал и больше и меньше.
Интересно, как у Вас при 3.8 В и 68 Ом получается 5 мА?
хз. Я читал что для составного хватит и 5мА. Все бы хорошо если брать в расчет, что вывод с мк при использовании функции tone 5вольт, то 5-1.2=3,8/68 Ом= 5мА. Пробовал и больше и меньше.
5-1.2=3,8/68 Ом= 56мА. Надеюсь, Вы не надолго включали.
И ещё, что Вы там меряете между коллектором и эммитером? Что Вы надеятесь там увидеть? Когда транзистор закрыт, там будет напряжение питания, а когда открыт в режиме насыщения, там будет напряженние насыщения Э-К (см. даташит транзистора, обычно для дарлингтонов вольта полтора).
Мерять надо на нагрузке. Тогда при закрытом транзисторе там будет близко к нулю, а при полностью открытом - напряжние птиания за вычетом того самого напряженния насыщения Э-К. Большего на нагрузке Вы не добьётесь.
Простите 680 Ом
Не понял вопроса..??? Между коллектором и эмитером не мерю. Я мерю между acc и коллектором. Под нагрузкой.
По Вашей схеме (первый рисунок) Вы меряете между коллектором и базой на самом деле (а я почему-то подумал, что между коллектором и эммитером). Но между коллектором и базой тоже не очень понятно, что Вы там измеряете.
Спасибо всем ребята) В общем дело оказалось в том, что на 11 pin амплитуда 2в, изменил на 12 pin. Амплитуда 5в. После транзистора чуть больше 10 вольт. Буду пробовать на практике)
По Вашей схеме (первый рисунок) Вы меряете между коллектором и базой на самом деле (а я почему-то подумал, что между коллектором и эммитером). Но между коллектором и базой тоже не очень понятно, что Вы там измеряете.