Так глючит все же реле, а не ардуино ? Чем тебе был плох совет прицепить диод ? Реле глючит не сразу, а через 8 часов ? Интересное реле....
что, первый раз что ли такое слышим...все мы тут люди грамотные и знаем, чтобы под кустик сходить сперва штаны снимают... посмотреть который час, нужно запросить время...на нагрузку либо снаббер либо диод повесить ну и т.д.
if (xxx > 8 && xxx < 22) {
digitalWrite(PIN_RELAY, LOW); // Включаем реле - посылаем низкий уровень сигнала
} else {
digitalWrite(PIN_RELAY, HIGH); // Отключаем реле - посылаем высокий уровень сигнала
}
Простите за глупый вопрос: А вот так (как выше написано) постоянно «долбить в лапу», даже если состояние не меняется, как? Сильно страшно или пофиг? Я что-то поймал себя на том, что последнее время так не делаю (использую флаги).
if (xxx > 8 && xxx < 22) {
digitalWrite(PIN_RELAY, LOW); // Включаем реле - посылаем низкий уровень сигнала
} else {
digitalWrite(PIN_RELAY, HIGH); // Отключаем реле - посылаем высокий уровень сигнала
}
Простите за глупый вопрос: А вот так (как выше написано) постоянно «долбить в лапу», даже если состояние не меняется, как? Сильно страшно или пофиг? Я что-то поймал себя на том, что последнее время так не делаю (использую флаги).
постоянно «долбить в лапу», даже если состояние не меняется, как? Сильно страшно или пофиг? Я что-то поймал себя на том, что последнее время так не делаю (использую флаги).
Там delay(5000), так что... другое дело, если бы через несколько микро/ милли секунд, то, ИМХО было-бы лишним
if (xxx > 8 && xxx < 22) {
digitalWrite(PIN_RELAY, LOW); // Включаем реле - посылаем низкий уровень сигнала
} else {
digitalWrite(PIN_RELAY, HIGH); // Отключаем реле - посылаем высокий уровень сигнала
}
Простите за глупый вопрос: А вот так (как выше написано) постоянно «долбить в лапу», даже если состояние не меняется, как? Сильно страшно или пофиг? Я что-то поймал себя на том, что последнее время так не делаю (использую флаги).
Согласен с предыдущим докладчиком ua6em . Зачем флаги и лишняя обработка, если состояние не меняется? МК железный. Ему всё равно куда колотить. А вот кода меньше и это иногда имеет значение.
if (xxx > 8 && xxx < 22) {
digitalWrite(PIN_RELAY, LOW); // Включаем реле - посылаем низкий уровень сигнала
} else {
digitalWrite(PIN_RELAY, HIGH); // Отключаем реле - посылаем высокий уровень сигнала
}
Простите за глупый вопрос: А вот так (как выше написано) постоянно «долбить в лапу», даже если состояние не меняется, как? Сильно страшно или пофиг? Я что-то поймал себя на том, что последнее время так не делаю (использую флаги).
Тут надо разделить общий случай и частный.
Если digitalWrite рассматривать как один из вариантов изменения состояния, то "долбить", конечно, не следует. Но в частном случае установки состояния пина (без какой-либо дополнительной работы), разницы нет.
PS. В качестве примера: если нам нужно писать в порт или ОЗУ, "долбить" вполне допустимо, а если, скажем, в EEPROM - то не следует. Не следует и в том случае, если установка нового состояния, скажем, пишется в протокол работы.
if (xxx > 8 && xxx < 22) {
digitalWrite(PIN_RELAY, LOW); // Включаем реле - посылаем низкий уровень сигнала
} else {
digitalWrite(PIN_RELAY, HIGH); // Отключаем реле - посылаем высокий уровень сигнала
}
Простите за глупый вопрос: А вот так (как выше написано) постоянно «долбить в лапу», даже если состояние не меняется, как? Сильно страшно или пофиг? Я что-то поймал себя на том, что последнее время так не делаю (использую флаги).
Некоторые видят повышенный износ порта PIN_RELAY из-за интенсивного трения электронов об него. Дырки образуются...
Нет там никаких прерываний. Это просто запись значения в регистр вывода. Если в регистре вывода тоже значение что и записывается, то никаких изменений в МК не произойдёт. Только несколько тактов пробегут.
Нет там никаких прерываний. Это просто запись значения в регистр вывода. Если в регистре вывода тоже значение что и записывается, то никаких изменений в МК не произойдёт. Только несколько тактов пробегут.
Возможно, я не прав, я лишь разбираюсь
Не очень ясно, что в стр№8, если можно , объяснте пжлст
А прерывания запрещаются/разрешаются в стр №17, 25
void digitalWrite(uint8_t pin, uint8_t val)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *out;
if (port == NOT_A_PIN) return;
// If the pin that support PWM output, we need to turn it off
// before doing a digital write.
if (timer != NOT_ON_TIMER) turnOffPWM(timer);
out = portOutputRegister(port);
uint8_t oldSREG = SREG;
cli();
if (val == LOW) {
*out &= ~bit;
} else {
*out |= bit;
}
SREG = oldSREG;
}
Не очень ясно, что в стр№8, если можно , объяснте пжлст
А прерывания запрещаются/разрешаются в стр №17, 25
void digitalWrite(uint8_t pin, uint8_t val)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *out;
if (port == NOT_A_PIN) return;
// If the pin that support PWM output, we need to turn it off
// before doing a digital write.
if (timer != NOT_ON_TIMER) turnOffPWM(timer);
out = portOutputRegister(port);
uint8_t oldSREG = SREG;
cli();
if (val == LOW) {
*out &= ~bit;
} else {
*out |= bit;
}
SREG = oldSREG;
}
Да здесь есть запрет прерывания, но он грамотно сделан всего на несколько тактов МК. Такие короткие запреты могут вылезти только если МК будет работать на пределе загрузки другими прерываниями. В своих проектах я стараюсь не использовать digitalWrite. Есть более быстрые и занимающие куда меньше места bitClear(), bitSet(), bitWrite() и прочие битовые операции, описанные на исходном сайте https://www.arduino.cc/reference/en/
Но при использовании этих функций нет защиты от дурака, встроенной в ардуину, и надо точно понимать что делаешь.
Не, не, не. В первую очередь китайский "процессор". Потом уже китайская плата. И т.д. по убывающей. Кривые руки вообще не рассматриваются!
Кривые руки вообще не рассматриваются!
И кривая голова - тоже. Они же не китайские в конце концов!
Это да. Кривая голова ко всем темам подходит.)
Местным дегенератам посвящается: всё работает после покупки другого реле той же модели. Да, просто брак, как я и предполагал вначале
Вам же говорили...
значит проблема с питанием или реле(что тоже может быть).
Так глючит все же реле, а не ардуино ?
Чем тебе был плох совет прицепить диод ?
Реле глючит не сразу, а через 8 часов ?
Интересное реле....
Классическое же "на другом форуме помогли".
что, первый раз что ли такое слышим...все мы тут люди грамотные и знаем, чтобы
под кустик сходить сперва штаны снимают... посмотреть который час, нужно запросить время...на нагрузку либо снаббер либо диод повесить ну и т.д.Простите за глупый вопрос: А вот так (как выше написано) постоянно «долбить в лапу», даже если состояние не меняется, как? Сильно страшно или пофиг? Я что-то поймал себя на том, что последнее время так не делаю (использую флаги).
Простите за глупый вопрос: А вот так (как выше написано) постоянно «долбить в лапу», даже если состояние не меняется, как? Сильно страшно или пофиг? Я что-то поймал себя на том, что последнее время так не делаю (использую флаги).
иголок вроде нет
постоянно «долбить в лапу», даже если состояние не меняется, как? Сильно страшно или пофиг? Я что-то поймал себя на том, что последнее время так не делаю (использую флаги).
Там delay(5000), так что... другое дело, если бы через несколько микро/ милли секунд, то, ИМХО было-бы лишним
Простите за глупый вопрос: А вот так (как выше написано) постоянно «долбить в лапу», даже если состояние не меняется, как? Сильно страшно или пофиг? Я что-то поймал себя на том, что последнее время так не делаю (использую флаги).
Согласен с предыдущим докладчиком ua6em . Зачем флаги и лишняя обработка, если состояние не меняется? МК железный. Ему всё равно куда колотить. А вот кода меньше и это иногда имеет значение.
Не не, я потому вопрос и задал. Спасибо всем ответившим.
Не не, я потому вопрос и задал. Спасибо всем ответившим.
бум, я сам как и ты заморачивался, потом глянул осилографом - иголок нет, и заморочки закончились )))
Простите за глупый вопрос: А вот так (как выше написано) постоянно «долбить в лапу», даже если состояние не меняется, как? Сильно страшно или пофиг? Я что-то поймал себя на том, что последнее время так не делаю (использую флаги).
Если digitalWrite рассматривать как один из вариантов изменения состояния, то "долбить", конечно, не следует. Но в частном случае установки состояния пина (без какой-либо дополнительной работы), разницы нет.
PS. В качестве примера: если нам нужно писать в порт или ОЗУ, "долбить" вполне допустимо, а если, скажем, в EEPROM - то не следует. Не следует и в том случае, если установка нового состояния, скажем, пишется в протокол работы.
Простите за глупый вопрос: А вот так (как выше написано) постоянно «долбить в лапу», даже если состояние не меняется, как? Сильно страшно или пофиг? Я что-то поймал себя на том, что последнее время так не делаю (использую флаги).
Ну а если часто "долбить", ведь так же часто и прерывания будут запрещаться, это же может быть критично? Там, где нужны точные интервалы?
А где здесь запрещение прерываний? Откуда они беруться и для чего используются?
А где здесь запрещение прерываний? Откуда они беруться и для чего используются?
Я имел ввиду digitalWrite(), если конечно не ошибаюсь
Нет там никаких прерываний. Это просто запись значения в регистр вывода. Если в регистре вывода тоже значение что и записывается, то никаких изменений в МК не произойдёт. Только несколько тактов пробегут.
Нет там никаких прерываний. Это просто запись значения в регистр вывода. Если в регистре вывода тоже значение что и записывается, то никаких изменений в МК не произойдёт. Только несколько тактов пробегут.
Возможно, я не прав, я лишь разбираюсь
Не очень ясно, что в стр№8, если можно , объяснте пжлст
А прерывания запрещаются/разрешаются в стр №17, 25
Не очень ясно, что в стр№8, если можно , объяснте пжлст
Если Вы задали неправильный номер пина, ничего не делаем.
Спасибо, не смог найти, "слабоват" ещё))
Возможно, я не прав, я лишь разбираюсь
Не очень ясно, что в стр№8, если можно , объяснте пжлст
А прерывания запрещаются/разрешаются в стр №17, 25
Да здесь есть запрет прерывания, но он грамотно сделан всего на несколько тактов МК. Такие короткие запреты могут вылезти только если МК будет работать на пределе загрузки другими прерываниями. В своих проектах я стараюсь не использовать digitalWrite. Есть более быстрые и занимающие куда меньше места bitClear(), bitSet(), bitWrite() и прочие битовые операции, описанные на исходном сайте https://www.arduino.cc/reference/en/
Но при использовании этих функций нет защиты от дурака, встроенной в ардуину, и надо точно понимать что делаешь.
надо точно понимать что делаешь.
Да уж, верно сказано. С этим не всегда получается, но будем стремиться))