Скетч не загружается в arduino nano

zzzzza
Offline
Зарегистрирован: 18.11.2016

Всем привет!

Имеется 2-ве Arduino nano и Bluetooth модуль HC-06.

Сначала припаял HC-06 к первой ардуино(которая только пришла) и сразу залил такой скетч:

char val;
byte LED=13;

void setup()
 {
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
 }

void loop()
 {
  if (Serial.available())
   {
    val=Serial.read();

    if (val == "S")
     {
      digitalWrite(LED, HIGH); 
     }
   }
 }

Этот скетч не залился и после него никакие скетчи больше не загружаются. Выдает ошибку:

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x90
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x90
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x90
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x90
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x90
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x90
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x90
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x90
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x90
avrdude: ser_recv(): read error: Отказано в доступе.


avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x90
avrdude: ser_drain(): read error: Отказано в доступе.

Причем "resp=0x90" изначально был "resp=0xd4" (по-моему). Потом чередовались ошибки: сначала "resp=0xe0"(тут тоже точно не помню), потом "resp=0x00".

Почитал на разных форумах, что за ошибка. Попробовал все советы, кроме перепрошивки - ничего не помогает.

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

Загрузил на вторую ардуину такой скетч:

int val;
byte LED=13;

void setup()
 {
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
 }

void loop()
 {
  if (Serial.available())
   {
    val=Serial.read();

    if (val == '1')
     {
      digitalWrite(LED, HIGH); 
     }

    if (val == '2')
     {
      digitalWrite(LED, LOW);   
     }
   }
 }

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

Причем загрузка идет бесконечно и не выдает никакой ошибки пока не нажмешь на "Reset" на самом МК или не выдернешь USB. И, кстати, скетч, который был залит изначально (рабочий), до сих пор работает.

Я так понял, что ошибка в том, что я объявил переменную "val", как char, а Serial.read() принимает байты.

Подскажите, пожалуйста, как это исправить без перепрошивки МК.

У меня имеется третья рабочая arduino nano, но она уже используется в другом проекте и нет никакого желания все отпаивать от нее и потом заного припаивать.

Заранее спасибо!

T.Rook
Offline
Зарегистрирован: 05.03.2016

zzzzza пишет:

avrdude: ser_recv(): read error: Отказано в доступе. avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x90 avrdude: ser_drain(): read error: Отказано в доступе.

Причем "resp=0x90" изначально был "resp=0xd4" (по-моему). Потом чередовались ошибки: сначала "resp=0xe0"(тут тоже точно не помню), потом "resp=0x00".

Почитал на разных форумах, что за ошибка. Попробовал все советы, кроме перепрошивки - ничего не помогает.

Ну раз не перечислили, давайте пробовать снова (точно зная что счетч загруженный с использованием bootloader-а на живучесть не влияет):

1.Перегрузить комп. (убедиться что COM не занят)

2. попробовать другой USB кабель.

"почитал на разных форумах" - та даже тут , куча описанных Ваших ситуаций

 

zzzzza
Offline
Зарегистрирован: 18.11.2016

Перезагрузил и сразу попробовал загрузить скетч, используя другой USB провод.

Результат: все то же самое, кроме ошибки, она теперь выглядит так: 

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x18
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x18
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x18
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x18
avrdude: ser_recv(): read error: Отказано в доступе.


avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x18
avrdude: ser_send(): write error: sorry no info avail
avrdude: ser_recv(): read error: Отказано в доступе.


avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x18
avrdude: ser_send(): write error: sorry no info avail
avrdude: ser_recv(): read error: Отказано в доступе.


avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x18
avrdude: ser_send(): write error: sorry no info avail
avrdude: ser_recv(): read error: Отказано в доступе.


avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x18
avrdude: ser_send(): write error: sorry no info avail
avrdude: ser_recv(): read error: Отказано в доступе.


avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x18
avrdude: ser_send(): write error: sorry no info avail
avrdude: ser_recv(): read error: Отказано в доступе.


avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x18
avrdude: ser_drain(): read error: Отказано в доступе.

Что дальше по плану?:D

sergey1q2w3e
Offline
Зарегистрирован: 06.04.2017

С этими HC-06 всегда такая проблема. Попробуйте отпаять его питание от ардуино на время заливки скетча. А потом припаять снова. Ну и вообще лучше сделать как-нибудь отсоединяемым

zzzzza
Offline
Зарегистрирован: 18.11.2016

Не ожидал такого поворота, но это действительно сработало.

Огромное спасибо!

zzzzza
Offline
Зарегистрирован: 18.11.2016

Отсоединяю HC-06 - загружается скетч. Присоединяю - не хочет.

Удивительно, конечно.

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

zzzzza пишет:

Отсоединяю HC-06 - загружается скетч. Присоединяю - не хочет.

Удивительно, конечно.

Вы случаем HC-06 не к пинам 0 и 1 припаяли? :)

zzzzza
Offline
Зарегистрирован: 18.11.2016

А может такое происходить из-за того, что HC-06 подключен к пинам RX и TX на ардуино?

То есть если подключить к D2 и D3, например, то все будет загружаться нормально?

zzzzza
Offline
Зарегистрирован: 18.11.2016

b707 пишет:

zzzzza пишет:

Отсоединяю HC-06 - загружается скетч. Присоединяю - не хочет.

Удивительно, конечно.

Вы случаем HC-06 не к пинам 0 и 1 припаяли? :)

Именно. Вот как раз из-за этого у меня и возник вопрос. Не увидел Ваше сообщение, пока писал)

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

zzzzza пишет:

А может такое происходить из-за того, что HC-06 подключен к пинам RX и TX на ардуино?

не просто может, а именно в этом и причина. Пины 0 и 1 - это выводы того же UART, через который ппроисходит прошивка платы.

Если подключить модуль HC-06 к другим пинам, придетсяиспользовать SoftwareSerial. в чем есть некоторые минусы. Или же просто отключать модуль на время перезаливки платы.

zzzzza
Offline
Зарегистрирован: 18.11.2016

Насколько я знаю, за  включение/отключение HC-06 отвечает пин, который именуется как "EN" или "KEY" на HC-06. Как программно выключить/включить, я понимаю: подтянуть "EN" или "KEY" к какому-нибудь пину на ардуино и менять состояние этого пина с 0 на 1 или наоборот.

А вот как сделать так, чтобы при загрузки скетча HC-06 выключался сам?

Это я уже ради интереса спрашиваю)

Вот распиновка HC-06, если нужна: