Мой вариант обработчика энкодера. Очень простой и совершенно безглючен. Обработчик сидит в теле внешнего прерывания PCINT. В нижеследующем скетче задействованы входы A0 и A1 как цифровые. Используется подтяжка к питанию (распаянная на платке стандартного энкодера), и антидребезговые конденсаторы 0,1мкф на землю. Кому нужно на другие ноги - смотреть даташит страница 73 и маскировку битов сделать по аналогии.
volatile int enc;
void setup() {
Serial.begin(9600);
PCICR=1<<PCIE1; //разрешить пренрывание
PCMSK1=(1<<PCINT9)|(1<<PCINT8); //выбрать входы
}
ISR (PCINT1_vect){
static byte old_n=PINC&3; // маска B00000011 что б читать только нужные 2 бита
byte new_n=PINC&3;
if (old_n==1&&new_n==3||old_n==2&&new_n==0) {enc++;}
if (old_n==2&&new_n==3||old_n==1&&new_n==0) {enc--;}
old_n= new_n;
}
void loop() {
Serial.println(enc);
}
Tomasina, у операций && приоритет выше, чем у ||, поэтому можно без доп. скобок.
Для меги лучше поменять порты, вход A8, A9
PCICR=1<<PCIE2;
PCMSK2=(1<<PCINT16)|(1<<PCINT17);
Порт и маска соответсвенно: PINK&3 И в ISR исправить на PCINT2
При медленном вращении на один шаг добавляется около 4 единиц, при быстром - много. Диапазон регулируемой величины enc.Get() 0-10000. Немного смахлевал на определении длительности такта - if ((millis()&0xffff)-Time<10), но вроде пашет, жизнь покажет как. Может потом поправлю.
Получится конечно. Но филосовский вопрос появляется - А зачем? Прерывания используются для быстрой реакции на аппаратное событие. Кнопка - штука медленная по сравнению с тем же енкодером, не требующая быстрой реакции. Если луп достаточно быстрый, сотня другая милисекунд, без delay и прочей нечести, то проверять кнопку и реагировать на нажатия адекватней именно в нем. К тому же обработка нажатия кнопки (вывод на экран или канал, например) достаточно громоздкое дело, как для прерывания, будет тормозить реакцию на тот же енкодер. Хотя многое зависит от конкретного проекта.
Энкодеровской кнопкой можно добавить удобство в скролле. Вот например вариант моего обработчика, вращение не нажимая кнопки инкременирует/декременирует по единице. А если вращать с нажатой кнопкой -то прибавляются/убавляются сразу по 100. Очень удобно подстраивать всякие множители, делители, итд. Кнопка на А2, энкодер на А0, А1. Конденсаторы на землю нужны.
volatile int enc;
void setup() {
Serial.begin(9600);
PCICR=1<<PCIE1; //разрешить пренрывание
PCMSK1=(1<<PCINT9)|(1<<PCINT8); //выбрать входы
pinMode(A2,INPUT_PULLUP);
}
ISR (PCINT1_vect){
static byte old_n=PINC&3; // маска B00000011 что б читать только нужные 2 бита
byte new_n=PINC&3;
if (old_n==1&&new_n==3||old_n==2&&new_n==0) {PINC&4? enc++ : enc+=100 ;}
if (old_n==2&&new_n==3||old_n==1&&new_n==0) {PINC&4? enc-- : enc-=100 ;}
old_n= new_n;
}
void loop() {
Serial.println(enc);
}
Можна конечно и так кнопку применить, но интересней другой вариант применения. В меню: без нажатия - навигация по пунктам меню; нажатие - вход в подменю или выбор конечной редактируемой величины; вращение при нажатой - навигация между уровнями меню от корня до последней выбираемой конечной величины или места где находились в меню в момент. После выбора конечной величины: вращение - изменение величины; нажатие(точней отпускание) - подтверждение ввода; вращение при нажатии - перебор вариантов ввод, отмены изменения и нескольких предустановок. Так на одном энкодере делается удобное управление многоуровневым меню. Но все зависит от задачи.
Изначально вопрос о том, почему не рассматриваю кнопку в библиотеке - ускорение сделано и без неё, а остальное - вне библиотечный функционал.
Есть три светодиода. Надо, чтобы работало так: кручу энкодер по часовой - предыдущий светодиод гаснет, следующий загорается (по часовой стрелке), в обратную сторону кручу - светодиоды выключаются и включаются в другую сторону (противчасовой).
В данный момент энкодер подключен через триггер Шмитта и резисторами контакты подтянуты к +5V.
Вот скетч
unsigned long currentTime;
unsigned long loopTime;
const int pin_A = 12; // pin 12
const int pin_B = 11; // pin 11
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev=0;
int a = 8;
void setup() {
Serial.begin(9600);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(10, OUTPUT);
pinMode(pin_A, INPUT);
pinMode(pin_B, INPUT);
currentTime = millis();
loopTime = currentTime;
digitalWrite(a, HIGH);
digitalWrite(pin_A, HIGH);
digitalWrite(pin_B, HIGH);
}
void loop() {
currentTime = millis();
if(currentTime > (loopTime + 2)){ // проверяем каждые 3мс
encoder_A = digitalRead(pin_A); // считываем состояние выхода А энкодера
encoder_B = digitalRead(pin_B); // считываем состояние выхода B энкодера
if((!encoder_A) && (encoder_A_prev)){ // если состояние изменилось с положительного к нулю
if(encoder_B) {
// выход В в полож. сост., значит вращение по часовой стрелке
Serial.print("A="); Serial.println(encoder_A); Serial.print("B="); Serial.println(encoder_B);
if (a == 10) {digitalWrite(a, LOW), a = 8, digitalWrite(a, HIGH); }
else
{
digitalWrite(a, LOW);
a++;
digitalWrite(a, HIGH);
}
}
else {
// выход В в 0 сост., значит вращение против часовой стрелки
Serial.print("A1="); Serial.println(encoder_A); Serial.print("B1="); Serial.println(encoder_B);
if (a == 8) {digitalWrite(a, LOW), a = 10, digitalWrite(a, HIGH);}
else
{
digitalWrite(a, LOW);
a--;
digitalWrite(a, HIGH);
}
}
}
encoder_A_prev = encoder_A; // сохраняем значение А для следующего цикла
loopTime = currentTime;
}
}
Скетч работает, все переключается. Но периодически, особенно если крутить энкодер быстро, включается не следующая лампочка, как должна, а происходит включение предыдущей (на одну лампочку обратно). Если посмотреть монитор последовательного порта и крутить по часовой энкодер, будем видеть A=0, B=1, но стоит крутнуть по-сильнее, как вылезает A1=0, B1=0, в этот момент как раз светодиод переключается в обратном положении.
Hleb13, является, но для кнопки. Для энкодера он плохо подходит, т.к. затягивает сигнал, при определённой скорости вращения энкодера триггер ещё не отпустит старое состояние, когда уже может подойти новое. Вы тему читали? Достаточно пары ёмкостей на землю для аппаратного решения.
dimax, спасибо! Тему читал, но, к сожалению, пока не все понимаю, только начинаю осваивать! То есть, как я понял, нужно два конденсатора от пина A и B энкодера, соединяющиеся с землей? У меня есть конденсаторы 10мкФ, такие подойдут? Подтягивающие резисторы до 5V при этом нужно убрать?
Не могу никак понять откуда это вылезает?
не смотрел код... ещё есть персистенция, даже при правильном коде при трёх светиках можно поймать эффект 25 Hz
....как вращение колёс ( гусениц ) назад в кино
хочу обратить внимание народ на вышеприведённую схему - я не спорю, что оно будет работать, но скажите кто-нибудь, что делают в схеме резисторы выделенные ниже 10К?
*не, ну просто интересно в качестве повышения квалификации.
знака вопроса = нет ! :) Это обратный RC - фильтр низких частот.
t=kRC
...применяется для принудительного поворота энкодера внешним сигналом , на канал А сигнал - крутится влево , на канал B сигнал - крутится вправо
:)
...опробовал только режим - нет сигналов на каналах - вал энка стоит на месте !
т.е. - всё правильно , работает схема !
Резистор 10к является фильтром импульсных помех. В двух словах не объяснить, но если интересно, почитайте статью Алексея Кузнецова - там все подробно. Для "домашних применений" резистор можно не ставить ;)
Резистор 10к является фильтром импульсных помех. В двух словах не объяснить, но если интересно, почитайте статью Алексея Кузнецова - там все подробно. Для "домашних применений" резистор можно не ставить ;)
ок. принимается проходной резистор, как фильтр обладающий одновременно и сопротивлением, и ёмкостью.
Емкость резистора непричем. Резистор расчитывают так, чтобы он не валил скорость нарастания входного сигнала (взодную частоту) - вкупе с монтажной и входной емкостью процессора. А смысл резистора - ослабить импульсную (обычно наведенную) помеху, которая лезет в питание процессора, с коим вход соединен защитными диодами (внутри проца).
Емкость резистора непричем. Резистор расчитывают так,
ок. я предполагаю, а вы располагаете - согласно каким рассчётам в вышеприведённых схемах влупили резисторов куда-попало, но строго по 10К? не 7,5, не 4,2, а 10-ть?
Трудно сказать, почему автор поставил 10к. Значение емкости входа я не нашел, но полагаю, она где-то 10-20 пф, тогда 10к дадут частоту среза примерно 10 МГц. Я ставлю в свои схемы резисторы 510 - 1к (по возможности ближе к процессору). Но это все важно при проэктировании схемы на "голом" процессоре. На плате адуины этим резистором можно смело принебречь.
Р.S. я, когда не знаю, какой номинал воткнуть, тоже беру из линейки 1к, 10к, 100к, 1М :)
Подключил по вышепредложенной схеме с 2 конденсаторами и 4 резисторами, но как-то дребезга еще стало, если крутить энкодер против часовой. По часовой нормально - проскакиввний лишних нет.
Схема с тригером Шмитта и подтягивающим резистором до 5V мне показалась стабильнее.
при правильном коде достаточно одних конденсаторов
При правильном коде и конденсаторы не нужны. Использование конденсаторов без резисторов ускорит окисление контактов енкодера, а они там и так не очень. Это только усилит дребезг в процессе эксплуатации.
И вобще применение ФНЧ - прямая дорога к пропускам при быстром вращении.
У меня все четко пока работает при любой скорости вращения.
Подключение: ножки энокодера А В подтянуты к 5в резистором на 10ком. Между землей и ножками А В по керамическому кондеру на 0.047мкф
Ключевое слово - пока. У вас постоянная времени фильтра 0,5мс и разряд конденсатора на контакты из-за чего они быстрей окислятся, и дребезг усилится, пропадани контакта станет больше постоянной времени фильтра (грубо говоря) и начнет глючить. После этого Вы станете ярым поклонником оптических энкодеров.
А чего сделана внешная подтяжка, а не внутренними резисторами?
С кондёром дела такие:
Заряжаем мы его через резистор допустим 10 килоом.
А вот разряжаем закорачивая на землю контактами энкодэра. Через "0" Ом.
Ну а по второму закону коммутации ток равен бесконечности что не есть хорошо для контактов.
Поэтому сильно завышать емкость конденсатора не стоит.
Ну и на разрядку каких-то символических 100 Ом можно поставить.
Хотя на 1000 пик будет работать и так.
По поводу великоватости внутренних резисторов: ставьте меньше кондёр.
если быстро вращать проскакивает. А если медленно,то все хорошо )))
Мой вариант обработчика энкодера. Очень простой и совершенно безглючен. Обработчик сидит в теле внешнего прерывания PCINT. В нижеследующем скетче задействованы входы A0 и A1 как цифровые. Используется подтяжка к питанию (распаянная на платке стандартного энкодера), и антидребезговые конденсаторы 0,1мкф на землю. Кому нужно на другие ноги - смотреть даташит страница 73 и маскировку битов сделать по аналогии.
Нет слов..... 0.1 мкФ я думаю многовато будет, 10 нан вроде достаточно
0.1 на 20 кил нашей привязки тау будет 2 миллисекунды, 500 Герц и меньше.... вроде не страшно,
но разряжать контактами энкодера ( закорачивать кондёр на землю) 0.1 или 0.01 - лучше поменьше для срока службы контактов. По идее должно и с 1000 пиками работать
http://www.digikey.com/en/resources/conversion-calculators/conversion-calculator-time-constant
Жалко что 10 плюсов нельзя поставить.
а вот это:
if
(old_n==1&&new_n==3||old_n==2&&new_n==0)
в каком порядке обрабатывается?Может лучше так:
if
( (old_n==1&&new_n==3) || (old_n==2&&new_n==0) )
?Для Меги как этот обработчик подправить?
Tomasina, у операций && приоритет выше, чем у ||, поэтому можно без доп. скобок.
Для меги лучше поменять порты, вход A8, A9
PCICR=1<<PCIE2;
PCMSK2=(1<<PCINT16)|(1<<PCINT17);
Порт и маска соответсвенно: PINK&3 И в ISR исправить на PCINT2
Получил с Китая это чудо, такое - http://www.doneathome.ru/wp-content/uploads/2013/11/Encoder5.jpg.
Библиотеки, что нашел не очень, взялся сам писать, получилось очень даже прикольно. Исходные мысли:
1. Подключаем к "малоценным" пинам.
2. Работаем через прерывания.
3. Защита от дребезга логическая, не по времени. Чтоб исключить проблемы при быстром вращении.
4. Учитываем скорость вращения, ускоряем изменение величины при быстром вращении.
5. Внешних элементов не использовать.
6. Кнопку игнорируем.
Получилось дето так:
Encoder.h
Encoder.cpp
Выводы енкодера на пины 11 и 12. Можно и на другие пины порта B
В скетче обявляем
В сетапе -
после этого можно получать значения enc.Get();
При медленном вращении на один шаг добавляется около 4 единиц, при быстром - много. Диапазон регулируемой величины enc.Get() 0-10000. Немного смахлевал на определении длительности такта - if ((millis()&0xffff)-Time<10), но вроде пашет, жизнь покажет как. Может потом поправлю.
кнопу не надо игнорировать, с ней гораздо удобнее.
Разве не получится для нее использовать то же самое прерывание?
Получится конечно. Но филосовский вопрос появляется - А зачем? Прерывания используются для быстрой реакции на аппаратное событие. Кнопка - штука медленная по сравнению с тем же енкодером, не требующая быстрой реакции. Если луп достаточно быстрый, сотня другая милисекунд, без delay и прочей нечести, то проверять кнопку и реагировать на нажатия адекватней именно в нем. К тому же обработка нажатия кнопки (вывод на экран или канал, например) достаточно громоздкое дело, как для прерывания, будет тормозить реакцию на тот же енкодер. Хотя многое зависит от конкретного проекта.
Энкодеровской кнопкой можно добавить удобство в скролле. Вот например вариант моего обработчика, вращение не нажимая кнопки инкременирует/декременирует по единице. А если вращать с нажатой кнопкой -то прибавляются/убавляются сразу по 100. Очень удобно подстраивать всякие множители, делители, итд. Кнопка на А2, энкодер на А0, А1. Конденсаторы на землю нужны.
Можна конечно и так кнопку применить, но интересней другой вариант применения. В меню: без нажатия - навигация по пунктам меню; нажатие - вход в подменю или выбор конечной редактируемой величины; вращение при нажатой - навигация между уровнями меню от корня до последней выбираемой конечной величины или места где находились в меню в момент. После выбора конечной величины: вращение - изменение величины; нажатие(точней отпускание) - подтверждение ввода; вращение при нажатии - перебор вариантов ввод, отмены изменения и нескольких предустановок. Так на одном энкодере делается удобное управление многоуровневым меню. Но все зависит от задачи.
Изначально вопрос о том, почему не рассматриваю кнопку в библиотеке - ускорение сделано и без неё, а остальное - вне библиотечный функционал.
Помогите, пожалуйста, с энкодером.
Есть три светодиода. Надо, чтобы работало так: кручу энкодер по часовой - предыдущий светодиод гаснет, следующий загорается (по часовой стрелке), в обратную сторону кручу - светодиоды выключаются и включаются в другую сторону (противчасовой).
В данный момент энкодер подключен через триггер Шмитта и резисторами контакты подтянуты к +5V.
Вот скетч
Скетч работает, все переключается. Но периодически, особенно если крутить энкодер быстро, включается не следующая лампочка, как должна, а происходит включение предыдущей (на одну лампочку обратно). Если посмотреть монитор последовательного порта и крутить по часовой энкодер, будем видеть A=0, B=1, но стоит крутнуть по-сильнее, как вылезает A1=0, B1=0, в этот момент как раз светодиод переключается в обратном положении.
Не могу никак понять откуда это вылезает?
Hleb13, так и должно быть, вы же с дребезгом никак не боритесь, ни программно, ни аппаратно.
dimax, а разве триггер Шмитта не является аппаратным средством против дребезга?
Hleb13, является, но для кнопки. Для энкодера он плохо подходит, т.к. затягивает сигнал, при определённой скорости вращения энкодера триггер ещё не отпустит старое состояние, когда уже может подойти новое. Вы тему читали? Достаточно пары ёмкостей на землю для аппаратного решения.
dimax, спасибо! Тему читал, но, к сожалению, пока не все понимаю, только начинаю осваивать! То есть, как я понял, нужно два конденсатора от пина A и B энкодера, соединяющиеся с землей? У меня есть конденсаторы 10мкФ, такие подойдут? Подтягивающие резисторы до 5V при этом нужно убрать?
Tomasina, спасибо большое! Буду разбираться...
Не могу никак понять откуда это вылезает?
не смотрел код... ещё есть персистенция, даже при правильном коде при трёх светиках можно поймать эффект 25 Hz
....как вращение колёс ( гусениц ) назад в кино
хочу обратить внимание народ на вышеприведённую схему - я не спорю, что оно будет работать, но скажите кто-нибудь, что делают в схеме резисторы выделенные ниже 10К?
*не, ну просто интересно в качестве повышения квалификации.
чуть-чуть снижают ток пина ( их можно не применять )
чуть-чуть снижают ток пина ( их можно не применять )
какой нахрен токпина? - пины сконфигурированы как входы.
*вопрос остаётся в силе.
втекающий при 1 и вытекающий при 0 ток входного каскада пина в режиме input float :)
втекающий при 1 и вытекающий при 0 ток входного каскада пина в режиме input float :)
ясно, спасибо - больше не отвечайте на мой вопрос.
*у кого есть оригинальные ответы по сабжу - спасибо.
Это обратный RC - фильтр низких частот.
Это обратный RC - фильтр низких частот.
ок. откуда у нас берётся низкочастотный сигнал в цепях энкодера? ...кроме сигнала пререключений генерируемого самим энкодером, конечно.
кто подкован теоретически - рассчитайте частоту, которую фильтрует данный фильтр, пожалуйста.
Частота среза 1,5 Кгц.
знака вопроса = нет ! :)
Это обратный RC - фильтр низких частот.
t=kRC
...применяется для принудительного поворота энкодера внешним сигналом , на канал А сигнал - крутится влево , на канал B сигнал - крутится вправо
:)
...опробовал только режим - нет сигналов на каналах - вал энка стоит на месте !
т.е. - всё правильно , работает схема !
ок. откуда у нас берётся низкочастотный сигнал в цепях энкодера? ...кроме сигнала пререключений генерируемого самим энкодером, конечно.
кто подкован теоретически - рассчитайте частоту, которую фильтрует данный фильтр, пожалуйста.
сам спросил - сам ответил: нифига это не RC - фильтр низких частот.
т.к. меня интересует резистор после конденсатора, который в схеме фильтра отсутсвует.
*гадаем на хрустальном шаре дальше - т.к. схему используют уважаемые производители дуино.
Хорошо. Встречается ещё вот такое подключение где конденсатор после резистора.
*гадаем на хрустальном шаре дальше - т.к. схему используют уважаемые производители дуино.
Хорошо. Встречается ещё вот такое подключение где конденсатор после резистора.
ок.
вывод1: прошлая схема является изначально бессмысленной в применении резистора 10К.
если не получу ответа, зачем нам требуется фильтрация сигнала выше 1,5 Кгц, то и эту признаю бессмысленной.
*заранее благодарю за аргументированные ответы по сабжу.
Да все просто - это защита от дурака, предохранительные резисторы. Ведь можно выводы, к которым подключатся энкодер настроить и на выход.
я об этом тоже думал, но почему не используется аналогичная защита в схемах подключения простой кнопки?
кнопкой тоже можно выход закоротить.
и на Vin можно ~220 подать....
Возможно, потому что у энкодера, в отличии от кнопки (обычной тактовой) в нормальном состоянии один из контактов всегда замкнут.
Возможно, потому что у энкодера, в отличии от кнопки (обычной тактовой) в нормальном состоянии один из контактов всегда замкнут.
ну, да... а, ещё механика контактов энкодера может выйти из строя и замкнуть все три пина энкодера.
*ну, не знаю - может быть.
Резистор 10к является фильтром импульсных помех. В двух словах не объяснить, но если интересно, почитайте статью Алексея Кузнецова - там все подробно. Для "домашних применений" резистор можно не ставить ;)
Резистор 10к является фильтром импульсных помех. В двух словах не объяснить, но если интересно, почитайте статью Алексея Кузнецова - там все подробно. Для "домашних применений" резистор можно не ставить ;)
ок. принимается проходной резистор, как фильтр обладающий одновременно и сопротивлением, и ёмкостью.
Емкость резистора непричем. Резистор расчитывают так, чтобы он не валил скорость нарастания входного сигнала (взодную частоту) - вкупе с монтажной и входной емкостью процессора. А смысл резистора - ослабить импульсную (обычно наведенную) помеху, которая лезет в питание процессора, с коим вход соединен защитными диодами (внутри проца).
Емкость резистора непричем. Резистор расчитывают так,
ок. я предполагаю, а вы располагаете - согласно каким рассчётам в вышеприведённых схемах влупили резисторов куда-попало, но строго по 10К? не 7,5, не 4,2, а 10-ть?
Трудно сказать, почему автор поставил 10к. Значение емкости входа я не нашел, но полагаю, она где-то 10-20 пф, тогда 10к дадут частоту среза примерно 10 МГц. Я ставлю в свои схемы резисторы 510 - 1к (по возможности ближе к процессору). Но это все важно при проэктировании схемы на "голом" процессоре. На плате адуины этим резистором можно смело принебречь.
Р.S. я, когда не знаю, какой номинал воткнуть, тоже беру из линейки 1к, 10к, 100к, 1М :)
Подключил по вышепредложенной схеме с 2 конденсаторами и 4 резисторами, но как-то дребезга еще стало, если крутить энкодер против часовой. По часовой нормально - проскакиввний лишних нет.
Схема с тригером Шмитта и подтягивающим резистором до 5V мне показалась стабильнее.
У меня так всё зарабатоло
А какая у Вас схема подключения энкодера?
А какая у Вас схема подключения энкодера?
при правильном коде достаточно одних конденсаторов - рекомендую специализированную библиотеку.
http://www.pjrc.com/teensy/td_libs_Encoder.html
при правильном коде достаточно одних конденсаторов
При правильном коде и конденсаторы не нужны. Использование конденсаторов без резисторов ускорит окисление контактов енкодера, а они там и так не очень. Это только усилит дребезг в процессе эксплуатации.
И вобще применение ФНЧ - прямая дорога к пропускам при быстром вращении.
У меня все четко пока работает при любой скорости вращения.
Подключение: ножки энокодера А В подтянуты к 5в резистором на 10ком. Между землей и ножками А В по керамическому кондеру на 0.047мкф
Ключевое слово - пока. У вас постоянная времени фильтра 0,5мс и разряд конденсатора на контакты из-за чего они быстрей окислятся, и дребезг усилится, пропадани контакта станет больше постоянной времени фильтра (грубо говоря) и начнет глючить. После этого Вы станете ярым поклонником оптических энкодеров.
А чего сделана внешная подтяжка, а не внутренними резисторами?
Пока собираю все на макетке, купил на али для бредборда, энкодер уже собранный на маленькой плате там он подтянут с завода резисторами на10к
Вопрос, есть какая нибудь статистика как долго живет энкодер если оставить кондеры?
Если так подумать то контакты энкодера всегда подтянуты к +5в так какая разница если оставить кондер, ведь они всегда или + или gnd.
0.047 мкФ многовато... Достаточно 0.01 мкФ или даже 1000 пФ. А внутренние резисторы подтяжки великоваты.
С кондёром дела такие:
Заряжаем мы его через резистор допустим 10 килоом.
А вот разряжаем закорачивая на землю контактами энкодэра. Через "0" Ом.
Ну а по второму закону коммутации ток равен бесконечности что не есть хорошо для контактов.
Поэтому сильно завышать емкость конденсатора не стоит.
Ну и на разрядку каких-то символических 100 Ом можно поставить.
Хотя на 1000 пик будет работать и так.
По поводу великоватости внутренних резисторов: ставьте меньше кондёр.