Не могу вылечить ватчдог на "голой" атмеге328р с внутр тактированием 8 МГц

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

b707 пишет:

Штирлиц пишет:

Попробуй поменять время собаке на меньшее.

Попробовал 1сек - без разницы.

 

Упростил тест до предела, чтобы эксперимент был максимально чистым:

1. Взял новую (еще ни разу не шитую) атмегу328р

2. Собрал на макетке классическую обвязку

3. Прошил оптибутовский загрузчик с фьзами 0xE2 0xDE 0x05

4. подключил к 7 пину светодиод

5. 3алил мега-простой скетч

#include <avr/wdt.h> 
int led =7;

void setup()
 {
   wdt_disable(); 
   pinMode(led,OUTPUT);
   digitalWrite(led,HIGH);
   delay(16000);
   wdt_enable (WDTO_1S);
 } 
 
void loop()
 {
    //wdt_reset(); 
    digitalWrite(led, ! digitalRead(led));
   
    delay(1000);
   
  
}
 

Итог - при включении светик горит 16сек, потом начинает мигать. После срабатывания ватчдога - мигает часто-часто - то есть типичный случай бесконечного ресета.

Этот же самый бутлоадер в Нано - работает!!!  ватчдог ресетится как положено.

Вывод - налицо несовместимость оптибута с атмегой328 с внутренним клоком 8МГц. Если это так = давно бы куча других ардуинщиков столкнулась бы с этим. Вопрос - почему я не вижу в гугле десятков подобных жалоб?

Варианты:

А) - я идиот. Уже готов согласится, при условии, что кто0нибудь обьяснит, в чем именно.

Б) - мне попалась бракованая партия контроллеров. Не исключено. Проверить просто - нужна другая папртия. Может кто-нибудь не пожалеет получаса, повторит перечисленные выше пп 1-5 и напишет свой результат?

В) - предлагайте свои варианты

 

что то не выходит у меня :(

Arduino Nano от Robotdyn

простой скетч:

#include <avr/wdt.h>
/*uint8_t mcusr_mirror __attribute__ ((section (".noinit")));
void get_mcusr(void) \
__attribute__((naked)) \
__attribute__((used)) \
__attribute__((section(".init3")));
void get_mcusr(void)
{
  mcusr_mirror = MCUSR;
  MCUSR = 0;
  wdt_disable();
}*/

void setup() {
  for (byte i = 0; i <= 10; ++i) {
    pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH);
    delay(50);
    pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW);
    delay(50);
  }
  pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH);
  wdt_enable(WDTO_4S);
}

void loop() {
  wdt_reset();
  delay(5000);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
}

 

Вываливается в бесконечный ресет :(

я правильно понимаю загрузчик необходимо прошивать?

Не поделитесь ссылочкой на скачку?

bwn
Offline
Зарегистрирован: 25.08.2014

andycat пишет:

Вываливается в бесконечный ресет :(

я правильно понимаю загрузчик необходимо прошивать?

Не поделитесь ссылочкой на скачку?

Загрузчики в начале темы. Оптибутовский HEX в моем сообщении и нановский от Дракулы.

P/S То, что в Вашем скетче, это для голого МК, почитайте у Влада в постах.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Спасибо.

bwn пишет:

P/S То, что в Вашем скетче, это для голого МК, 

в смысле? на любом Ардуино это должно вроде работать. 

Нет?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

итак прошил загрузчик

Optiboot on 32pin (SMT) CPUs (Nano, Pro Micro, etc.)

вот такой скетч заработал ОК

#include <avr/wdt.h>
/*uint8_t mcusr_mirror __attribute__ ((section (".noinit")));
void get_mcusr(void) \
__attribute__((naked)) \
__attribute__((used)) \
__attribute__((section(".init3")));
void get_mcusr(void)
{
  mcusr_mirror = MCUSR;
  MCUSR = 0;
  wdt_disable();
}*/

void setup() {
  MCUSR = 0;
  wdt_disable();
  for (byte i = 0; i <= 10; ++i) {
    pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH);
    delay(50);
    pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW);
    delay(50);
  }
  pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH);
  wdt_enable(WDTO_4S);
}

void loop() {
  wdt_reset();
  delay(5000);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
}

 

но у меня перестали загружаться скетчи по USB, скорость ком порта ставил на 115200

как прописано в boards

optiboot32.upload.speed=115200

 

что я делаю не так?

bwn
Offline
Зарегистрирован: 25.08.2014

Вот здесь скорость пониже. Работает.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

bwn пишет:

Вот здесь скорость пониже. Работает.

спасибо, но там частота МК 8 Мгц, с моим 16 Мгц не совместимо :(

буду дальше искать

bwn
Offline
Зарегистрирован: 25.08.2014

Так на 16 обычные оптибуты нормально работают, тот же уновский из поставки.

кудрявый
Offline
Зарегистрирован: 14.12.2017

Кинь в личку e-mail, у меня есть откомпилированный для 16 и для 8 мгц, со скоростью обмена 57600

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

bwn пишет:

Так на 16 обычные оптибуты нормально работают, тот же уновский из поставки.

э.... не понял, просьба разьяснить.

мне на Nano залить от UNO 16 мгц оптибутовский?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

кудрявый пишет:

Кинь в личку e-mail, у меня есть откомпилированный для 16 и для 8 мгц, со скоростью обмена 57600

andycat2013@yandex.ru

спасибо

 

кудрявый
Offline
Зарегистрирован: 14.12.2017

Именно так. В Нано залить УНО и потом всегда выбирать плату как УНО.  Будет все намного лучше

P.S. два файлика отправил

 

bwn
Offline
Зарегистрирован: 25.08.2014

andycat пишет:

мне на Nano залить от UNO 16 мгц оптибутовский?

Истинно, тот, что с IDE идет. И не париться.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

загрузил UNO который штатный, не помогло, с USB не загружаются скетчи :(

Скетч использует 1050 байт (3%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 9 байт (0%) динамической памяти, оставляя 2039 байт для локальных переменных. Максимум: 2048 байт.
Произошла ошибка при загрузке скетча
 
ЗЫ. Мне как бы и не очень надо, если что и через USB ASP загружу,
но обидно блин, нафига переплачивал за Nano, брал бы Pro Mini И не мучался.
 
При загрузке даже RX TX светодиоды не моргают :(
 
andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

прошил оптибутовский на скорость 1 мгц и скоростью обмена 9600 - все равно не работает

что же там китайцы интересно напаяли 

bwn
Offline
Зарегистрирован: 25.08.2014

А с родным нановским загружались? Если да, то хня какая то, я голые чипы сразу на уновский перешиваю, а если без кварца то тем, что ссылался. Все без проблем шьется потом.
Вы перед загрузкой, плату как Уно выбираете?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

bwn пишет:

А с родным нановским загружались? Если да, то хня какая то, я голые чипы сразу на уновский перешиваю, а если без кварца то тем, что ссылался. Все без проблем шьется потом.
Вы перед загрузкой, плату как Уно выбираете?

свежекупленная через USB прекрасно загружалась, но не работал WDT

за сегодня перепробовал уже массу загрузчиков, и штатных UNO NANO и присланные и оптибут

https://github.com/Optiboot/optiboot

бесполезно - платка Nano категорически отказывается прошиваться через USB

RX TX не моргают при загрузке

 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

может быть я конечно делаю что то не так ?

записываю загрузчик через Arduino IDE, выбираю нужную плату и Записать загрузчик

подключено естественно через USB ASP

после мне IDE пишет что загрузчик успешно записан.

bwn
Offline
Зарегистрирован: 25.08.2014

Давайте, по шагам. Взяли дуню, залили в нее скетч "ArduinoISP", подключили вашу нану пятью проводками, выбрали программатор "Arduino as ISP", выбрали плату "Uno" и свой порт. Дальше жмем "Записать загрузчик", у которой как программатор мигают RX,TX, на принимающей вроде на 13 пине тоже блымкает. Так делаете?

P/S через USB ASP не лил, не знаю.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

bwn пишет:

Давайте, по шагам. Взяли дуню, залили в нее скетч "ArduinoISP", подключили вашу нану пятью проводками, выбрали программатор "Arduino as ISP", выбрали плату "Uno" и свой порт. Дальше жмем "Записать загрузчик", у которой как программатор мигают RX,TX, на принимающей вроде на 13 пине тоже блымкает. Так делаете?

P/S через USB ASP не лил, не знаю.

да, только вместо дуни ArduinoISP (уже не первый раз Tiny и ProMini им много прошивал), так что здесь ошибок нет,

я думал что вдруг загрузчик надо строго через AVRDUDEPROG прошивать.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

мысль возникла: может такое быть что производитель заложил в загрузчик инциализацию/включение USB/UART конвертера? и он тупо не включается

bwn
Offline
Зарегистрирован: 25.08.2014

Чет сомнения берут, нахрена тогда и загрузчик нужен. Попробуйте тестером пробегитесь, может лапка где отошла, где то жаловались недавно на кривые наны.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

bwn пишет:

Чет сомнения берут, нахрена тогда и загрузчик нужен. Попробуйте тестером пробегитесь, может лапка где отошла, где то жаловались недавно на кривые наны.

да не....уж сколько Robotdyn покупаю - пайка вечная, опять же - утром то работало ок, до заливки другого загрузчика, но проверю, не долго времени займет.

щас наверное USB UART напрямую подключу к пинам 0 и 1 посмотрю что получиться - проверил - не работает - светодиод TX на Nano вспыхнул пару раз на доли секунды и все....

 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

причем при загрузке через USB видно что контроллер перезагружается, но заливка не происходит

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Итак победил я эту Arduino Nano v3 от Robotdyn.

Перепробовал все советы, перечитал кучу форумов, сносил и полностью переустанавливал Arduino IDE и драйверы, экспериментировал на трех компах.

Решение: взял optiboot_atmega328.hex последнюю версию, прошил им flash через avrdudeprog33.

Прекрасно стал загружаться со скоростью COM порта 115200, WDT заработал, причем без строк обнуления MCUSR.

Единственная проблема: после моих экспериментов в списке плат Arduino IDE исчезли платы Optiboot, файлы boards все проверил - все вроде ОК. При загрузке выбираю плату Arduino Nano/

Никто не подскажет как вылечить?

 

b707
Offline
Зарегистрирован: 26.05.2017

andycat пишет:

Единственная проблема: после моих экспериментов в списке плат Arduino IDE исчезли платы Optiboot, файлы boards все проверил - все вроде ОК. При загрузке выбираю плату Arduino Nano/

Никто не подскажет как вылечить?

 

andycat- неделю не был на форуме, а тут такая активность :)

Насчет списка плат - насколько знаю, он определяется только записями в файле boards - так что проверяйте. У этих файлов для разных версий ИДЕ немного разный формат, так что если брали файлы из инете, они могут в вашей ИДЕ не распознаваться.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

b707 пишет:

 

Насчет списка плат - насколько знаю, он определяется только записями в файле boards - так что проверяйте. У этих файлов для разных версий ИДЕ немного разный формат, так что если брали файлы из инете, они могут в вашей ИДЕ не распознаваться.

версия 1.8.5 и не менялась....буду ковыряться дальше....

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

платы появились теперь какая то ошибка которую не могу понять :(

Текущая выбранная плата зависит от ядра 'arduino:arduino', которое не установлено.

 

servilat
Offline
Зарегистрирован: 12.12.2013

День добрый!

Выкладываю как я боролся с wdt. и победил, и только по информации этой темы.

на руках есть 3 nano 2 из них промаркированны как v4.

1. одну из них делаю ArduinoISP вливанием примера.

2. к ней подключаю вторую 10-rst, 11-11, 12-12, 13-13, gnd-gnd, +5-+5.

3. в IDE1.8.1 выбираю программатор Arduino as ISP

4. в IDE выбираю плату UNO

5. в IDE выбираю Записать Загрузчик - загрузчик не записывается. ошибка.

6. в IDE выбираю плату NANO

7. в IDE выбираю Записать Загрузчик - загрузчик загружен удачно.

8. повторяю процесс с выбором платы UNO. в IDE выбираю плату UNO

9. в IDE выбираю Записать Загрузчик - загрузчик загружен удачно.

проверил работоспособность 2 кодов этой темы 30 и 51 если не ошибаюсь.

выбрав програматор AVRISP, а на програматоре по умолчанию AVRISP mkII NANO шилась только при нажатии ресета  только, AVRISP без нажатия ресета шется из среды IDEv181.

проверил варианты с разными нанами,  все работает.

один

#include <avr/wdt.h>

void setup() {
  wdt_disable(); // бесполезная строка до которой не доходит выполнение при bootloop
  Serial.begin(9600);
  Serial.println("Setup..");
  
  Serial.println("Wait 5 sec..");
  delay(5000); // Задержка, чтобы было время перепрошить устройство в случае bootloop
  wdt_enable (WDTO_8S); // Для тестов не рекомендуется устанавливать значение менее 8 сек.
  Serial.println("Watchdog enabled.");
}

int timer = 0;

void loop(){
  // Каждую секунду мигаем светодиодом и значение счетчика пишем в Serial
  if(!(millis()%1000)){
    timer++;
    Serial.println(timer);
    digitalWrite(13, digitalRead(13)==1?0:1); delay(1);
  }
// wdt_reset();
}

два

#include <stdint.h>
#include <avr/wdt.h>
uint8_t mcusr_mirror __attribute__ ((section (".noinit")));
void get_mcusr(void) \
  __attribute__((naked)) \
  __attribute__((used)) \
  __attribute__((section(".init3")));
void get_mcusr(void)
{
  mcusr_mirror = MCUSR;
  MCUSR = 0;
  wdt_disable();
}

//#include <Wire.h> 
//#include <LiquidCrystal_I2C.h>


//LiquidCrystal_I2C lcd(0x27,16,2);

void setup() {
 
  pinMode(8,OUTPUT);
  
 // lcd.init();
 // lcd.backlight();
//  lcd.setCursor(0,0);
//  lcd.print("Setup...");
  
  wdt_enable (WDTO_8S);
//  lcd.print(" WDT on");
}

void loop(){
static int timer = 0;  
    if(!(millis()%1000)){
    timer++;
//    lcd.setCursor(0,1);
//    lcd.print("Count: ");
 //   lcd.print(timer);
    digitalWrite(8, !digitalRead(8));
  }
}

Nano стала удачно ребутиться!

Всем спасибо.

Штирлиц
Штирлиц аватар
Offline
Зарегистрирован: 13.06.2015

Атмега328 , голая , прошита загрузчиком на 1Мгц  от внутреннего  тактирования .Все прекрасно работает с дежурной собакой. Проверено. Версия 1.8.5, MiniCore .

Проверить и на 8Мгц ?

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Проверяю работу собаки немного измененным кодом, для включения проверки замкнуть пин 8 на землю.

// modify Victor UA6EM 09.12.2018
// To activity WDT Timer Pse connect Pin8 to GND

#include <avr/wdt.h>
unsigned int timer = 0;

  void setup() {
  wdt_disable(); 
  pinMode(8,INPUT_PULLUP);
 
  Serial.begin(9600);
  Serial.println("Setup..");
  
  Serial.println("Wait  sec..");
  delay(1000); 
  if(digitalRead(8) == LOW){
  wdt_enable (WDTO_8S); // Для тестов не рекомендуется устанавливать значение менее 8 сек.
  Serial.println("Watchdog enabled.");
      }else{
            Serial.println("Watchdog DISABLE.");
           }
       }

void loop(){
  // Каждую секунду мигаем светодиодом и значение счетчика пишем в Serial
  if(!(millis()%1000)){
    timer++;
    Serial.println(timer);
    digitalWrite(13, digitalRead(13)==1?0:1); delay(1);
  }
}

 

bwn
Offline
Зарегистрирован: 25.08.2014

ua6em пишет:

Проверяю работу собаки немного измененным кодом, для включения проверки замкнуть пин 8 на землю.

Что то Вы сложное затеяли. Если не дружит с загрузчиком, сразу вечный перезагруз. Достаточно просто включить. У меня так было.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

bwn пишет:

ua6em пишет:

Проверяю работу собаки немного измененным кодом, для включения проверки замкнуть пин 8 на землю.

Что то Вы сложное затеяли. Если не дружит с загрузчиком, сразу вечный перезагруз. Достаточно просто включить. У меня так было.


Если ушла в постоянный перезагруз как шить без программатора?
Ну или стрельбище устраивать, выставлять делей в 5 секунд в сетапе и попадать в окно при заливке скетча, а здесь снял перемычку, передернул плату и перешивай любой скетч
Вспоминаем 17 мгновений, Штирлиц умел не только зайти, но и выйти ))) (из темы)

Green
Offline
Зарегистрирован: 01.10.2015

ua6em пишет:

Вспоминаем 17 мгновений, Штирлиц умел не только зайти, но и выйти ))) (из темы)

Весьма тонко, учитывая что один из участников темы Штирлиц. Хм...)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

bwn пишет:

ua6em пишет:

Проверяю работу собаки немного измененным кодом, для включения проверки замкнуть пин 8 на землю.

Что то Вы сложное затеяли. Если не дружит с загрузчиком, сразу вечный перезагруз. Достаточно просто включить. У меня так было.


А сложное это Влад затеял, это ж надо же так замутить с условными выражениями , я о состоянии пина 13 (строка 29 скетча), что пришлось лезть в классику (стр.55 РиК)

bwn
Offline
Зарегистрирован: 25.08.2014

ua6em пишет:

Если ушла в постоянный перезагруз как шить без программатора?

Так же, как и загрузчик заливать. Собака, она грозная, но ArduinoISP боится.

P/S 29 строку Влад похоже на автомате писал, я бы там восклицательным знаком обошелся.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

bwn пишет:

ua6em пишет:

Если ушла в постоянный перезагруз как шить без программатора?

Так же, как и загрузчик заливать. Собака, она грозная, но ArduinoISP боится.

P/S 29 строку Влад похоже на автомате писал, я бы там восклицательным знаком обошелся.


Как сказал бы ЕвгенийПетрович - а нахрена ))) (я о программаторе)
Если Влад на автомате такие конструкции пишет, что же он напишет на пулемёте )))

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Я этого НЕ ПИСАЛ!!!! Я, когда кому-то, что-то  советую, то авторский код НЕ МЕНЯЮ, без необходимости.

И millis()%1000 - совсем не мой стиль, неужели не видно???

И, даже с учетом сказанного, я, все равно, не могу понять, почему мне авторство приписали?

Не надо - "мопед не мой".

b707
Offline
Зарегистрирован: 26.05.2017

ua6em пишет:

Если ушла в постоянный перезагруз как шить без программатора?

отлично все шьется, 8 сек до первого срабатывания собаки более чем достаточно для перешивки.

Для проверки ватчдога достаточно обыкновенного блинка, например мой вариант в сообщении #3 этой темы

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Бывает нужно пару раз нажать "записать загрузчик" (на USBASP), но шьется всё.

b707
Offline
Зарегистрирован: 26.05.2017

wdrakula пишет:

Я этого НЕ ПИСАЛ!!!! Я, когда кому-то, что-то  советую, то авторский код НЕ МЕНЯЮ, без необходимости.

И millis()%1000 - совсем не мой стиль, неужели не видно???

Влад, вот не люблю с тобой спорить - но этот код ты выкладывал как свой в сообщении №13. и даже millis()%1000 - там было. Вот цитата:

wdrakula пишет:

==========================

вот пример кода, который я ТОЬКО ЧТО проверил на голом 328 в ДИП корпусе.

Вот видео, снял и кинул на Ютуб

Вот код:

#include <stdint.h>
#include <avr/wdt.h>
uint8_t mcusr_mirror __attribute__ ((section (".noinit")));
void get_mcusr(void) \
  __attribute__((naked)) \
  __attribute__((section(".init3")));
void get_mcusr(void)
{
  mcusr_mirror = MCUSR;
  MCUSR = 0;
  wdt_disable();
}

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>


LiquidCrystal_I2C lcd(0x27,16,2);

void setup() {
 
  pinMode(8,OUTPUT);
  
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("Setup...");
  
  wdt_enable (WDTO_8S);
  lcd.print(" WDT on");
}

void loop(){
static int timer = 0;  
    if(!(millis()%1000)){
    timer++;
    lcd.setCursor(0,1);
    lcd.print("Count: ");
    lcd.print(timer);
    digitalWrite(8, !digitalRead(8));
  }
}

 

b707
Offline
Зарегистрирован: 26.05.2017

Хотя нет, Влад, прощу прощения - у ua6em в сообщении #80 другой код. Твой код в сообщении #78. Но millis()%1000 в твоем коде все же есть.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

ua6em пишет:

Если ушла в постоянный перезагруз как шить без программатора?

отлично все шьется, 8 сек до первого срабатывания собаки более чем достаточно для перешивки.

Для проверки ватчдога достаточно обыкновенного блинка, например мой вариант в сообщении #3 этой темы

Мы люди аульские простые, зачем создавать себе сложности если их можно не создавать, а один дюпон под руками всегда имеется, ткнул перемычку - проверяю, не ткнул - обычная ардуинка и, делай с ней что хошь )))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

wdrakula пишет:

Я этого НЕ ПИСАЛ!!!! Я, когда кому-то, что-то  советую, то авторский код НЕ МЕНЯЮ, без необходимости.

И millis()%1000 - совсем не мой стиль, неужели не видно???

И, даже с учетом сказанного, я, все равно, не могу понять, почему мне авторство приписали?

Не надо - "мопед не мой".

Жду твой мопед про оптибут!
Чего хотелось бы?
Устанока аддона чтобы появились платы с оптибутом и там были все варианты, в том числе и с кварцами в 20 мегагерц и со всеми скоростями компорта

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

b707 пишет:

Хотя нет, Влад, прощу прощения - у ua6em в сообщении #80 другой код. Твой код в сообщении #78. Но millis()%1000 в твоем коде все же есть.


ну значит " и про старушку снимают порнушку"... Я мог чьё-то редактировать и оставить... Стыдно до жути!!! Но ты прав.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

ua6em пишет:

Если ушла в постоянный перезагруз как шить без программатора?

отлично все шьется, 8 сек до первого срабатывания собаки более чем достаточно для перешивки.

Для проверки ватчдога достаточно обыкновенного блинка, например мой вариант в сообщении #3 этой темы

я твой пример пропустил мимо ушей, тады да, там 16 секунд ждёт )))
Как говорил профессор - существует 99 способов...

А вообще loop там интересный, можно включать в песочницу и объяснять новичкам почему именно так написана программа, к примеру - delay(1)

b707
Offline
Зарегистрирован: 26.05.2017

ua6em пишет:

А вообще loop там интересный, можно включать в песочницу и объяснять новичкам почему именно так написана программа, к примеру - delay(1)

это ты про какой код?

не нашел ни в одном из трех кодов (твоем, моем и Дракулы) - строчки delay(1)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

ua6em пишет:

А вообще loop там интересный, можно включать в песочницу и объяснять новичкам почему именно так написана программа, к примеру - delay(1)

это ты про какой код?

не нашел ни в одном из трех кодов (твоем, моем и Дракулы) - строчки delay(1)

Как нет? Вот жеж она, в loop ))) (строка 6)
 

void loop(){
  // Каждую секунду мигаем светодиодом и значение счетчика пишем в Serial
  if(!(millis()%1000)){
    timer++;
    Serial.println(timer);
    digitalWrite(13, digitalRead(13)==1?0:1); delay(1);
  }
}

 

b707
Offline
Зарегистрирован: 26.05.2017

b707 пишет:

А вообще loop там интересный, можно включать в песочницу и объяснять новичкам почему именно так написана программа, к примеру - delay(1)

я с интересом бы послушал, что именно ты будешь обьяснять новичкам.

На мой скромный взгляд - строка 6 совсем не образец для подражания. Как уже сказали. вместо тернарного оператора правильнее было бы поставить отрицание, а делей в 1мс и вовсе лишний.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

b707 пишет:

А вообще loop там интересный, можно включать в песочницу и объяснять новичкам почему именно так написана программа, к примеру - delay(1)

я с интересом бы послушал, что именно ты будешь обьяснять новичкам.

На мой скромный взгляд - строка 6 совсем не образец для подражания. Как уже сказали. вместо тернарного оператора правильнее было бы поставить отрицание, а делей в 1мс и вовсе лишний.

При строке -  if(!(millis()%1000)) ?
Вы точно так думаете?
А если тактовая процессора 1700 Mhz Ваше мнение не изменится?  )))
Писать на С надо жеж аппаратно независимо, не так ли?

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

ua6em пишет:

Писать на С надо жеж аппаратно независимо, не так ли?

Вот это полная херня написана! Писать для микроконтроллера, хоть на С, хоть на Паскале, хоть на Фортране - НЕВОЗМОЖНО "аппаратно независимо".

Идея аппаратно независимого кода, и все эти "стандарты" (кстати запрещающие пользоваться union, например) рождены для огромных, необозримых проэктов, используемых и переносимых на новые платформы, и для коллективной разработки.

------------------------

Теперь про смешной код: ЕЩЕ РАЗ: он не мой!

В этом коде delay(1) - необходим, потому, что millis()%1000 останется равным 0 в течении 1 мс, а цикл - значительно короче.