Pro Mini не работает UART

skysilver
Offline
Зарегистрирован: 23.01.2014

Доброго времени суток!

Приобрел клон Arduino Pro Mini 8МГц 3.3В (http://www.ebay.com/itm/200914924969?ssPageName=STRK:MEWNX:IT&_trksid=p3...). При попытке прошить скетч на этапе загрузки hex avrdude выдает ошибку (avrdude: stk500_recv(): programmer is not responding). При этом пробовал разные USB to UART на разных чипах (как с линией сброса DTR, так и без нее - вручную жал reset). 

Далее попробовал прошить через ISP с помощью другой ардуины. Все прошло отлично - скетч залился и выполняется. Но вот, если подключиться к UART, то там тишина - никаких отладочных сообщений нет.

Замена bootloadera (пробовал optiboot) также ни к чему не привела - шьется только через ISP, UART молчит.

Прошу помощи. Что можно предпринять?

 

 

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Сначала хорошо бы разобраться с переходником, с помощью которого Вы подключаете ProMini к USB. Тут такие темы есть.

skysilver
Offline
Зарегистрирован: 23.01.2014

Переходники вот такие - Foca V2.2 FT232RL (http://devicter.ru/goods/Foca-v2-1-FT232RL?mod_id=5749023) и PL2303HX (http://www.ebay.com/itm/PL2303HX-USB-To-RS232-TTL-Auto-Converter-Adapter...)

Оба рабочие. Проверено на других ардуинах - прошиваются и пишут/читают в порт без проблем.

leshak
Offline
Зарегистрирован: 29.09.2011

>Arduino Pro Mini 8МГц 3.3В

А плату правильно выбрали при заливке, именно 8Мгц вариант указали? Именно Pro Mini?

>Далее попробовал прошить через ISP с помощью другой ардуины. Все прошло отлично 

Тогда можно еще попробовать бутлоадер перепрошить. Через ISP. Но это "пробовать после всего стального".

skysilver
Offline
Зарегистрирован: 23.01.2014

leshak пишет:

>Arduino Pro Mini 8МГц 3.3В

А плату правильно выбрали при заливке, именно 8Мгц вариант указали? Именно Pro Mini?

>Далее попробовал прошить через ISP с помощью другой ардуины. Все прошло отлично 

Тогда можно еще попробовать бутлоадер перепрошить. Через ISP. Но это "пробовать после всего стального".

Да, плату выбирал соответствующую.  Пробовал и другие типы выбирать (pro mini 16MHz 5v), но ошибка та же avrdude: stk500_recv(): programmer is not responding. При начале загрузки скетча светодиод TX на переходнике мигает, как положено, а вот RX "молчит", т.е. нет ответа от ардуины.

А какие варианты подразумеваются под "пробовать после всего стального"?

Насчет бутлоадера. Я уже пробовал прошить бутлоадер от optiboot (optiboot-v5.0a, optiboot_atmega328_pro_8MHz.hex). Загрузчик записывается без проблем. Но при попытке загрузить скетч (плата при этом выбирается соответствующая [Optiboot] Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328) получаем тот же самый результат - programmer is not responding.

leshak
Offline
Зарегистрирован: 29.09.2011

А камушек у вас 328 или 168?

leshak
Offline
Зарегистрирован: 29.09.2011

>А какие варианты подразумеваются под "пробовать после всего стального"?

Ну, "все остальное что прийдет в голову". Я бы, например, пытался выяснить проблема, все-таки в "связи" или бутлоадере.

Скажем, раз через ISP скетчи заливаются.

Если влить

setup(){
  Serial.begin(9600);
  Serial.println("Hello from arduino!)
  pinMode(13,OUTPUT);
}

void loop(){
  digitalWrite(13,!digitalRead(13));
  delay(500);
}

То 

1. Диод мигает?
2. "Hello from.." видно?
3. При открытии Serial монитора перезагрузка происходит?

skysilver
Offline
Зарегистрирован: 23.01.2014

leshak пишет:

А камушек у вас 328 или 168?

ATmega328. Это четко видно на корпусе микросхемы.

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

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Я бы порробовал проверить не перепутаны ли RX и TX ( если эхо в терминале приходит)

А чтобы найти где кто слегка поправил leshak , пусть непрерывно шлёт в порт.

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

void loop(){
 Serial.println("Hello from arduino!)
  digitalWrite(13,!digitalRead(13));
  delay(1000);
}

 

skysilver
Offline
Зарегистрирован: 23.01.2014

leshak пишет:

>А какие варианты подразумеваются под "пробовать после всего стального"?

Ну, "все остальное что прийдет в голову". Я бы, например, пытался выяснить проблема, все-таки в "связи" или бутлоадере.

Скажем, раз через ISP скетчи заливаются.

Если влить

setup(){
  Serial.begin(9600);
  Serial.println("Hello from arduino!)
  pinMode(13,OUTPUT);
}

void loop(){
  digitalWrite(13,!digitalRead(13));
  delay(500);
}

То 

1. Диод мигает?
2. "Hello from.." видно?
3. При открытии Serial монитора перезагрузка происходит?

Похожий скетч пробовал.

1. Диод мигает, как положено (менял значение delay, диод реагировал адекватно).

2. Ничего не видно. Ни того, что в setup указано, ни в loop (туда тоже вставлял serial.print для проверки).

3. Вот на этот момент не обратил внимания. Единственное могу сказать, что при reset платы (кнопкой) LED13 перемигивает (это, вроде бы, так и должно быть при старте бутлоадера).

Для проверки работоспособности камушка также заливал скетч тестирования серво-приводов. Сервы крутятся как надо. В serial по-прежнему тишина.

skysilver
Offline
Зарегистрирован: 23.01.2014

trembo пишет:

Я бы порробовал проверить не перепутаны ли RX и TX ( если эхо в терминале приходит)

А чтобы найти где кто слегка поправил leshak , пусть непрерывно шлёт в порт.

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

void loop(){
 Serial.println("Hello from arduino!)
  digitalWrite(13,!digitalRead(13));
  delay(1000);
}

Менять местами RX и TX я пробовал. Несмотря на то, что подключены они были строго согласно обозначениям на плате (подумал, может китайцы напутали с разводкой). Результат все тот же - нулевой. :(

leshak
Offline
Зарегистрирован: 29.09.2011

skysilver пишет:

2. Ничего не видно. Ни того, что в setup указано, ни в loop (туда тоже вставлял serial.print для проверки).

Скорость порта правильную выставляли? Если да, то это может быть признаком. что "влит не тот бутлоадер, или фьюзы не те".

Отсюда происходит "разнобой" по скорости Serial. Ну и естественно "ардуина не слышит комп" (и наоборот).

Попробуйте влить мой скетч. А потом по часам посмотреть, какая получается скорость мигания диодом? Должен "пол секунды горит, пол не горит". Сверх-точность не нужна. Если "что-то не так", то моргание будет отличатся по скорости в разы. Или гореть будет по целой секунде. Или наоборот, мигать в два раза чаще.

leshak
Offline
Зарегистрирован: 29.09.2011

skysilver пишет:

Менять местами RX и TX я пробовал. Несмотря на то, что подключены они были строго согласно обозначениям на плате (подумал, может китайцы напутали с разводкой). Результат все тот же - нулевой. :(

А вот тут, к сожалению никогда нельзя сказать "как же правильно". Не угадаешь в каком смысле китайцы подписали плату. Иногда RX у них означает "нужно подключать к RX-су ардуины". А иногда это имеет смысл "это RX переходника". Тогда, естественно его нужно подключать к TX-су дуины.

skysilver
Offline
Зарегистрирован: 23.01.2014

leshak пишет:

skysilver пишет:

2. Ничего не видно. Ни того, что в setup указано, ни в loop (туда тоже вставлял serial.print для проверки).

Скорость порта правильную выставляли? Если да, то это может быть признаком. что "влит не тот бутлоадер, или фьюзы не те".

Отсюда происходит "разнобой" по скорости Serial. Ну и естественно "ардуина не слышит комп" (и наоборот).

Попробуйте влить мой скетч. А потом по часам посмотреть, какая получается скорость мигания диодом? Должен "пол секунды горит, пол не горит". Сверх-точность не нужна. Если "что-то не так", то моргание будет отличатся по скорости в разы. Или гореть будет по целой секунде. Или наоборот, мигать в два раза чаще.

Скорость в мониторе порта ставил в строгом соответствии с вызовом Serial.begin(9600) в setup ().

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

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

 

leshak
Offline
Зарегистрирован: 29.09.2011

skysilver пишет:

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

Можно попробовать. Это то что я бы вам сказал, если бы вы сообщили что "диод мигает в два раза медленее чем положено" :)

Это два симпотома одной и той же причины.

Но "половинная скорость" - это только "что-бы проверить подозрение". Но никак не "решение проблемы". 

 

skysilver
Offline
Зарегистрирован: 23.01.2014

leshak пишет:

skysilver пишет:

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

Можно попробовать. Это то что я бы вам сказал, если бы вы сообщили что "диод мигает в два раза медленее чем положено" :)

Это два симпотома одной и той же причины.

Но "половинная скорость" - это только "что-бы проверить подозрение". Но никак не "решение проблемы". 

 

Проверил Ваш скетч. Только изменил периоды (ставил 1, 2 и 5 сек), т.к. полсекунды не смог объективно оценить. :) Ардуина мигает в точности, как ей указано в скетче, т.е. секунду (и соответсвенно 2 или 5 сек) горит LED13, секунду не горит. Монитор порта при этом пустой - и на этапе setup, и в loop. При открытии serial монитора перезагрузка ардуины не происходит. На индикаторах TX и RX адаптера также никакой активности.

Смена скорости обмена в serial мониторе (ставил и в 2 раза меньше, и в 2 раза больше) также ни к чему не привела - тишина.

 

leshak
Offline
Зарегистрирован: 29.09.2011

Так. А если мы на ардуине(!) замыкаем между собой D0 и D1, у нас возвращается обратно "эхом" все что мы послали в Serial Port?

>На индикаторах TX и RX адаптера также никакой активности.

А если. В loop(), добавить что-то типа "Serial.println("BLINK");", то же на индикаторах никакой активности?

skysilver
Offline
Зарегистрирован: 23.01.2014

leshak пишет:

Так. А если мы на ардуине(!) замыкаем между собой D0 и D1, у нас возвращается обратно "эхом" все что мы послали в Serial Port?

>На индикаторах TX и RX адаптера также никакой активности.

А если. В loop(), добавить что-то типа "Serial.println("BLINK");", то же на индикаторах никакой активности?

На данный момент залит следующий скетч.


void setup()
{
  delay(2000);
  Serial.begin(19200);
  Serial.println("Start arduino!");
  pinMode(13,OUTPUT);
  // мигнем пару раз, чтобы обозначит setup
  digitalWrite(13,1);
  delay(200);
  digitalWrite(13,0);
  delay(200);
  digitalWrite(13,1);  
  delay(200);
  digitalWrite(13,0);
}

void loop()
{ 
  Serial.println("Hello from arduino!");
  digitalWrite(13,!digitalRead(13));
  delay(5000);
}

При таком раскладе имеем полную тишину в serial мониторе и на индикаторах адаптера.

Если в serial мониторе (при незамкнутых на ардуине D0 и D1) отправить что-либо, то на адаптере моргает только TX, и в ответ ничего не приходит. Если замкнуть D0 и D1, то "эхом" возвращается все, что отправляем, при этом горят оба индикатора на адаптере.

 

leshak
Offline
Зарегистрирован: 29.09.2011

А если "выкинуть все Serial". И "помигать" не D13, а D1. Будет на адаптере мигать RX?

(в мониторе мы точно ничего не увидим, но так хотя-бы узнаем доходит ли до адаптера, хотя-бы что-нибудь).

leshak
Offline
Зарегистрирован: 29.09.2011

О... или лучше вот так попробуйте.

Убераете перемычку между D0/D1

и заливаете вот такой скетч

void setup(){
  pinMode(1,OUTPUT); // TX as output
}

void loop(){
  bitWrite(PORTD,1,bitRead(PIND,0)); // Copy D0 --> D1

}

Возвращается "эхо"?

Эта таже самая "перемычка", только "програмная".

 

skysilver
Offline
Зарегистрирован: 23.01.2014

Вообщем, после предложения поморгать светодиодом на D1 ситуация стала немного проясняться. В скетче заменил пин 13 на 1, залил, результата ноль. Решил подцепить светодиод напрямую к пину камушка. И вот тут-то он замигал! 

skysilver
Offline
Зарегистрирован: 23.01.2014

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

leshak
Offline
Зарегистрирован: 29.09.2011

Ну уж совсем "на всякий случай".

Опишите, по этой картинке, на какие пины вы цеплялись

В виде "верхний ряд, такой-то по счета справа...".

Еще можете попробовать на каки-нибудь других пинах, с помощью SoftwareSerial послать "hello from arduino".

И еще... надеюсь землю переходника и дуины соеденить не забыли?

 

skysilver
Offline
Зарегистрирован: 23.01.2014

У меня плата не совсем такая, но не суть. Цеплял верхний ряд первый справа для D0 и верхний ряд второй справа для D1. Тоже самое проделывал, подключая адаптер к пинам второй и третий снизу на правой части платы. Общую землю, конечно, организовал. Чтоб уж наверняка, пробовал подключать к этим пинам не линии RX/TX адаптера, а просто светодиоды на макетке. Результат везде одинаковый - на пинах платы ничего, а на пинах камушка мигает.

skysilver
Offline
Зарегистрирован: 23.01.2014

SoftwareSerial опробовал на пинах 9 и 8. На отправку работает, на прием не проверял.

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

reset переходника подключен к GRN, а вывод BLK - свободен?

skysilver
Offline
Зарегистрирован: 23.01.2014

Да, именно так и подключал. По крайней мере аналогично, т.к. обозначения на плате другие.

У меня плата от Deek-Robot. Вот такая.

У нее не GRN, а DTR. Но сути это не меняет.

skysilver
Offline
Зарегистрирован: 23.01.2014

Проблема с UARTом была именно в качестве выполнения самой платы. Выяснил, что коряво сделана метализация в отверстиях RX и TX. Т.е. на одной стороне платы есть контакт с пинами камушка, а на другой уже нет. Перепаял 6-типиновый разъем для адаптера на другую сторону, и все завелось!

Следующая задача - это найти для pro mini 8MHz 3.3V бутлоадер, грамотно работающий со сторожевым таймером, и не уходящий в жестокий bootloop (состояние «crazy led»). Пока безуспешно. Буду благодарен, если кто поможет.

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

skysilver пишет:

Следующая задача - это найти для pro mini 8MHz 3.3V бутлоадер, грамотно работающий со сторожевым таймером, и не уходящий в жестокий bootloop (состояние «crazy led»). Пока безуспешно. Буду благодарен, если кто поможет.

Теоретически, должен подходить optiboot от Uno. На Хабре была статья.

B_ru
Offline
Зарегистрирован: 03.01.2018

Добрый вечер,

столкнулся сегодня с похожей проблемой: Arduino pro mini ATmega 168, 8 MHz, 3.3V через USB-UART PL2303HX. Связка прекрасно работала в течение нескольких дней с момента покупки и до сегодня (на ардуину успешно прошивались скетчи, устройство работало согласно программе). Вчера, начитавшись даташитов написал простенький скетч (хотел проверить изменится ли напряжение на пинах):

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  // порт С
  PORTC = (0<<PC5)|(0<<PC4)|(0<<PC3)|(0<<PC2)|(0<<PC1)|(0<<PC0);
  DDRC = (1<<DDC5)|(1<<DDC4)|(1<<DDC3)|(1<<DDC2)|(1<<DDC1)|(1<<DDC0);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(50);
  digitalWrite(LED_BUILTIN, LOW);
  delay(10000);
}

Скетч успешно загрузился в МК, напряжение на пинах А5, А4, А3, А2, А1, А0 стало равно нулю. Светодиод на 13 мигал как надо. Но чуть позже обнаружилось, что залить новый скетч я не могу: происходит ошибка

Sketch uses 954 bytes (6%) of program storage space. Maximum is 14336 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 1015 bytes for local variables. Maximum is 1024 bytes.
/root/my-applications/arduino-1.8.5/hardware/tools/avr/bin/avrdude -C/root/my-applications/arduino-1.8.5/hardware/tools/avr/etc/avrdude.conf -v -patmega168 -carduino -P/dev/ttyUSB0 -b19200 -D -Uflash:w:/tmp/arduino_build_521437/sketch_jan03b.ino.hex:i 

avrdude: Version 6.3, compiled on Jan 17 2017 at 06:01:25
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/root/my-applications/arduino-1.8.5/hardware/tools/avr/etc/avrdude.conf"
         User configuration file is "/root/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/ttyUSB0
         Using Programmer              : arduino
         Overriding Baud Rate          : 19200
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00

avrdude done.  Thank you.

Problem uploading to board.  See http://www.arduino.cc/en/Guide/Troubleshooting#upload for suggestions.

Пробовал по всякому нажимать ресет при отправки скетча - не помогает (т.е. раньше скетчи с нажатием на ресет успешно принимались, а сейчас - нет).

Теперь вопрсы: мог ли я скетчем сделать такое, и что именно в коде вызвало такую ситуацию? Если что-то случилось с переходником - как это диагностировать в отсутсвие других плат? Если что-то случилось с платой МК, как это диагностировать?

Заранее спасибо за помощь.

Апдейт: по не ясным для меня причинам скетчи начали загружаться. Единственное что делал (помимо обмеров всех ног) - разобрал-осмотрел-собрал корпус USB-UART переходника. От греха заказал переходник на другом чипе и второй pro mini.