MinimOSD перестала работать

kost82
Offline
Зарегистрирован: 30.11.2015

Всем привет!

Собираю устройство, выводящее информацию на экран монитора. Для вывода использую плату на базе Max7456 и процессора Atmega328. Вот такую:

Их обычно используют авиамоделисты для отображения на экране полетных данных. Мне же надо выводить на экран только одну строчку, поэтому я использую ее нестандартно. Поскольку не все пины Atmega328 распаяны на плате, а подпаяться напрямую к ножкам мне не позволяют кривые руки и страх потерять эту довольно редкую плату, я залил во встроенную Атмегу скетч, который принимает строку по UART и передает ее с помощью библиотеки на Max7456. Скетч очень простой и работает стабильно:
 

#include <SPI.h>
#include <max7456.h>

Max7456       osd;

char str[20];
String inData;

void setup() {
  SPI.begin();
  Serial.begin(9600);

  osd.init(6);
  osd.activateExternalVideo();
  osd.activateOSD();
}

void loop() {

  while (Serial.available() > 0) {
    char recieved = Serial.read();
    
    if (recieved == '\n'){
      inData.toCharArray(str, 20);
      osd.clearScreen();
      osd.print(str, 4, 30);

      inData = "";
    }
    else {
      inData += recieved;
    }
  }
}

После заливки я подсоединил USB-uart переходник и монитор к плате, отправил на нее пару строк через монитор порта, убедился что они отобразились на экране и продолжил собирать устройство дальше. Собрал все вместе, а именно Arduino Nano + MinimOSD и запитал все это от DC-DC преобразователя LM2596 заранее настроенного на 5В. Включил - не работает. Причем сдохла именно Atmega328: обычно при включении раньше однократно мигал светодиод, соединенный с цифровым пином 13, а теперь перестал. Заменил плату MinimOSD на новую - все заработало как и должно.

Попытки оживить плату были неудачными. Везде на форумах пишут, что у них иногда слетает загрузчик, попытался его залить через разъем ISP на плате, воспользовавшись ардуиной как  программатором - получаю ошибку http://joxi.ru/J2byj0LhVxZBBm

Хотелось бы понять из-за чего дохнут эти платы (из 6 штук у меня так сдохли две) и как можно их вернуть к жизни? Ну, например, может кварц у них хилый или еще какое слабое место. Плата довольно редкая и в магазинах города, ее найти проблематично. А ждать из Китая - месяца полтора точно. И как вообще узнать что произошло с ней. У меня в распоряжении есть мультиметр и простенький осцилограф. 

rkit
Offline
Зарегистрирован: 23.11.2016

Оборудование дохнет из-за ошибок в схеме.

kost82
Offline
Зарегистрирован: 30.11.2015

В схеме сложно что-то накосячить, там всего 4 провода: два на питание, Rx и Tx. Ну и на выходе 4 провода: две земли, видео вход и выход. Но выходные цепи и сама Max7456 остались целыми. Т.е. при подаче питания на нее - видеосигнал начинает проходить.

Если бы я перепутал питание - сгорела бы и Max7456. Если бы я перепутал Rx и Tx - ничего бы не произошло. И еще странно то, что вторая плата в той же схеме работает нормально, без сбоев. Я специально переносил по одному проводку с одной платы на другую, чтоб не перепутать. И проверил все на несколько раз.

rkit
Offline
Зарегистрирован: 23.11.2016

Ты думаешь, что для удачной схемы достаточно что-то подключить проводами, не проверяя электрических параметров?

kost82
Offline
Зарегистрирован: 30.11.2015

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

Перед подключением я проверил питание, что оно не превышает 5 Вольт (еще специально по мультиметру выставил где-то 4.95, на случай если мультиметр имеет погрешность в несколько сотых вольта). UART-интерфейс - я даж не знаю что там проверять, у меня это два коротеньких провода, длиной сантиметра три. Даже можно использовать один провод, в обратку данные не идут. По сути на левой части платы MinimOSD находится Arduino Pro Mini (там даже загрузчик от Pro Mini), только не все выводы у нее доступны, а те которые доступны приспособлены под замеры полетных параметров (напряжения, тока и т.п.). А две ардуины по UART соединяют просто двумя проводами "крест-накрест".

Поэтому я и не могу понять в чем причина их подыхания. Сначала я грешил на кнопку Reset, которая могла заклинить и быть в постоянно замкнутом состоянии (это единственная "подвижная" деталь на плате). Но удаление кнопки с платы ничем не помогло. Вот и теперь не могу понять где искать причину, и главное как диагностировать

kost82
Offline
Зарегистрирован: 30.11.2015

Была мысль еще купить ардуино Pro Mini с таким же камнем и поменять их местами. Но боюсь, что еще больше накосячу, например перегрею проц или сдую феном что-то лишнее. Короче это будет последнее на что я решусь в попытке восстановить этот модуль.

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

kost82 пишет:

Попытки оживить плату были неудачными. Везде на форумах пишут, что у них иногда слетает загрузчик, попытался его залить через разъем ISP на плате, воспользовавшись ардуиной как  программатором - получаю ошибку http://joxi.ru/J2byj0LhVxZBBm


Неужто сложно скопировать сообщение с экрана терминала и вставить в пост? Можно под спойлер.
Нет, нужно лезть на какой то хостинг и рассматривать картинку на которой ничего не видно... 
А вы до этого шили загрузчик на подобную плату? Может имеет смысл потренироваться на...
Бывает что шьётся не с первого раза.

kost82
Offline
Зарегистрирован: 30.11.2015
avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/home/xxx/arduino-1.8.13/hardware/tools/avr/etc/avrdude.conf"
         User configuration file is "/home/xxx/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/ttyUSB0
         Using Programmer              : stk500v1
         Overriding Baud Rate          : 19200
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x15
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : STK500
         Description     : Atmel STK500 Version 1.x firmware

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x14

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x02

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x10
         Hardware Version: 4238814
         Firmware Version: 29541744.0
         Topcard         : STK502
         Vtarget         : 1.8 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: stk500_initialize(): (b) protocol error, expect=0x10, resp=0x01
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x10

avrdude done.  Thank you.

Ошибка при записи загрузчика.

Раньше прошивал загрузчик в обычные ардуинки. Не помню прошивал ли в minimOSD. Схема соединений проста: на обоих ISP разъемах мультиметром нахожу массу и +5В, соединяю массы, на minimOSD подаю питание от отдельного источника, ардуино нано питается от USB. Затем соединяю одноименные контакты на ISP-разъемах, контакт Reset от MinimOSD подсоединяю к пину №10 Nano. На ардуинке остаются два не занятых ISP-контакта: Reset и 5V. Далее включаю источник питания для MinimOSD, ардуину подсоединяю к USB-порту компа. В ардуину зашиваю скетч Arduino as ISP, затем в списке плат выбираю ProMini с процессором Atmega328 5V и нажимаю "Записать загрузчик".

 

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

kost82 пишет:

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/home/xxx/arduino-1.8.13/hardware/tools/avr/etc/avrdude.conf"
         User configuration file is "/home/xxx/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/ttyUSB0
         Using Programmer              : stk500v1
         Overriding Baud Rate          : 19200
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x15
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : STK500
         Description     : Atmel STK500 Version 1.x firmware

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x14

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x02

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x10
         Hardware Version: 4238814
         Firmware Version: 29541744.0
         Topcard         : STK502
         Vtarget         : 1.8 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: stk500_initialize(): (b) protocol error, expect=0x10, resp=0x01
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x10

avrdude done.  Thank you.

Ошибка при записи загрузчика.

Раньше прошивал загрузчик в обычные ардуинки. Не помню прошивал ли в minimOSD. Схема соединений проста: на обоих ISP разъемах мультиметром нахожу массу и +5В, соединяю массы, на minimOSD подаю питание от отдельного источника, ардуино нано питается от USB. Затем соединяю одноименные контакты на ISP-разъемах, контакт Reset от MinimOSD подсоединяю к пину №10 Nano. На ардуинке остаются два не занятых ISP-контакта: Reset и 5V. Далее включаю источник питания для MinimOSD, ардуину подсоединяю к USB-порту компа. В ардуину зашиваю скетч Arduino as ISP, затем в списке плат выбираю ProMini с процессором Atmega328 5V и нажимаю "Записать загрузчик".

 

нет, надо подключиться всеми 6 пинами, никаких иных питаний на pro mini не подавать, она запитается от ISP программатора

kost82
Offline
Зарегистрирован: 30.11.2015

Попробовал запитать от Нано (без сторонних источников) - результат тот же самый

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

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

kost82
Offline
Зарегистрирован: 30.11.2015

Я тоже грешу на кварц, т.к. там другой обвязки особо и нет (ну кроме кнопки, которой уже нет). Встроенный светодиод однократно мигает при подключении нано вместо программатора, значит он исправен. А вот просто при подаче питания - никакой реакции, горит только светодиод питания. Попробую найти SMD-кварц и поменять. Авось поможет. Камень менять побаиваюсь пока. Вдруг еще живой.

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

подкинуть кварц можно и не смд, да попробуйте версию IDE 1.8.3 она через ISP шьёт без проблем, выше у меня не заработали (не шили)