LINUX.ORG.RU

Бинарные часы, требуется помощь с прошивкой

 , ,


0

3

Здравствуйте. Нужна помощь. Возможно небольшое вознаграждение. Я купил на Али бинарные часы. Оказалось их надо прошить. Прошивка выполняется в два этапа, сначала - загрузчик а потом программа с установкой времени. Для этого мне пришлось купить две платы, ArduinoNano и USB>TTL. Я потратил серию вечеров и мне кажется что плата часов умерла и не отвечает. Возможно что я её повредил, возможно - проблемы изготовителя. Но изготовитель помочь не может. Сам я вообще не ардуинщик ни разу. Кто может помочь? Я бы подъехал в Москве с часами, в удобное время.

И так, часы на ATmega328. Вот описание часов: https://usamodelkina.ru/16871-binarnye-chasy-svoimi-rukami.html

Прошиваются они из Ардуино-нано и через FTDI. Через нано - загрузчик. Через FTDI прошивка с установленным временем (пишется в коде прошивки).

У меня такое ощущение что плата сдохла. Может быть нужно посмотреть осциллографом.

Вот как выглядит всё в моём исполнении (фото моего рукожопия): https://disk.yandex.ru/d/yG7H1k3144z2eQ

Вот описание процесса прошивки от продавца: https://disk.yandex.ru/i/As9Z_zoEHMFcHw

Код, который заливается через USBFTDI: https://disk.yandex.ru/d/3kMqZfTRIa1sfA

Может кто то опытный потыкать со мной вместе осцилографом?

PS. Извините если ошибся веткой форума. Поправте в таком случае.

★★★

Последнее исправление: baaba (всего исправлений: 1)

Там ломаться нечему. Меги крайне живучие, а микрушка часов не должна влиять на прошиваемость.

90%, что неправильно подключаешь или криво работает прошивалка, 10%, что уже неправильные фьюзы залил и должен страдать.

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

bo4ok
()

Хай. Ты оригинальные видео и статью проекта видел?

Насколько я понял, Ардуина у тебя прошивается но не прошиваются сами часы. Какие-то может быть сообщения об ошибках IDE выдаёт? Почему ты предполагаешь, что плата часов сдохла? Она до «сдыхания» работала?

Автор говорит, что часто кварц не заводится и проверять в первую очередь следует его. Это такая маленькая блестящая деталька рядом с квадратным контроллером. На видео он с 5:45 про эту проблему говорит и показывает на деталь. Иногда бывает, что достаточно просто спиртом хорошенько от флюса промыть и просушить, без перепаивания.

Прошивается ли загрузчик через ISP? Или его тоже не получается прошить?

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

А ещё у тебя все провода красные. Я бы в них точно запутался :)

ASavonte
()

А кто мне объяснит, если есть нано прошитая в программатор почему бы сразу не прошить через нее прошивку? И если в часах изначально залита какая-то прошивка то там скорее всего уже прошит загрузчик.

Jack_Vo ★★
()

Первый этап сделал, загрузил загрузчик [code=c] Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of lock written avrdude: verifying lock memory against 0x0f: avrdude: load data lock data from input file 0x0f: avrdude: input file 0x0f contains 1 bytes avrdude: reading on-chip lock data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying … avrdude: 1 bytes of lock verified

avrdude done. Thank you. [/code]

А вот через ftdi адаптер (вторая часть) не получается: avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00

Возможно проблема в адаптере, возможно в проводе MicroUSB (вроде мигает, значит данные идут). Я конечно отдельно ещё раз проверю ftdi адаптер и провод (наверное завтра) через эхо (с замыканием контактов).

Может быть ещё проблема в CR3202. Она у меня показывает 1 вольт а должна 1.8 )) завтра поищу свежую. Но мне кажется дело не в батарейке.

PS Извините что не разобрался с LORCODE и Markdown (((

baaba ★★★
() автор топика
Последнее исправление: baaba (всего исправлений: 5)
Ответ на: комментарий от baaba

Замкнул приём с передачей. Модуль FTDI исправен - символы возвращаются. Получается не отвечает плата? Хотя загрузчик же я туда загрузил (первый шаг). Ещё меня гложет одно сомнение. Вместо Arduino Nano я купил Amperka Iskra Nano. В принципе это одно и то же но шут его знает.. впрочем первый шаг, bootloader, прошёл нормально, значит проблема не в этом. Проблема наверное в плате часов?

baaba ★★★
() автор топика
Последнее исправление: baaba (всего исправлений: 1)
Ответ на: комментарий от baaba

Может быть ещё проблема в CR3202. Она у меня показывает 1 вольт а должна 1.8 )

Точно 1.8 cr3202 должна иметь?) На 3в они, если так высадилась, смотри сопротивление за диодом Шоттки, вероятно у тебя проц подбит по линии RTC.

shalom_ ★★
()
Ответ на: комментарий от baaba

во-первых, батарейка. Она не должна влиять, но тезис прост: видишь кривоту - исправляй.

во-вторых, 97.5%, что в качестве загрузчика исользуется OptiBoot. OptiBoot любит не отвечать по UART'у когда он не загружен (к.о.), загружается он при сбросе микроконтроллера и тупит в этом состоянии около секунды, ожидая команды обновления, потом завершается. Если сброс не произошёл, либо команда была подана невовремя (либо не на той скорости), ответа не будет. Можешь почитать раздел Basic Oeration вон там.

Судя по тому, что первая фаза проходит успешно, контроллер жив (ни разу не видел, чтобы они полностью дохли).

Про какой диод было сказано - хз)

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

bo4ok
()
Последнее исправление: bo4ok (всего исправлений: 3)

Да и вообще, я чёрт его знает, зачем нужно извращаться с загрузчиком, если встроенного usb-uart нет. Зашей основную фирмварь по аналогии с первым этапом и не морочь себе голову.

bo4ok
()
Ответ на: комментарий от Jack_Vo

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

ASavonte
()
Ответ на: комментарий от baaba

stk500

Ты выбираешь не тот программатор в IDE, скорее всего, так как FTDI - это обычный последовательный интерфейс, это не STK500. Посмотри внимательно на видео или в статье какой там надо выбирать.

ASavonte
()
Ответ на: комментарий от baaba

Проблема наверное в плате часов?

Если загрузчик прошивается и отвечает (можно наверное проверить просто посылая в /dev/ttyUSB0 и читая ответ через какой-нибудь терминал, типа putty или minicom), то плата исправна.

ASavonte
()
Ответ на: комментарий от shalom_

Точно 1.8 cr3202 должна иметь?) На 3в они

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

ASavonte
()
Ответ на: комментарий от ASavonte

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

не-а, никто в здравом уме не тащит в бутлоадер потенциально обновляемую логику

Ты выбираешь не тот программатор в IDE

нет, там именно эмуляция сабсета STK500. avrdude в сабж умеет с ключом -c arduino, чти ссыль выше

bo4ok
()
Ответ на: комментарий от ASavonte

Как уже говорил, пусть ТС не морочит себе голову, выдернет hex скомпилированной прошивки из ArduinoIDE и зашьёт его по тому же алгоритму, что бутлоадер

bo4ok
()
Ответ на: комментарий от bo4ok

Лул-схема. https://content.instructables.com/FDT/OQDD/JUSNBC4F/FDTOQDDJUSNBC4F.png

Я, конечно, могу ошибаться, но мне кажется, что прошивать нужно без батарейки.

В случае прошивки через SPI на часы подаётся 3.3В от ардуиновской FT232RL. У FTDI-адаптера же напряжение, которое подаётся на часы можно выбрать джампером между 3.3В (от такой же FT232RL) и 5В идущих напрямую с USB.

Моя гипотеза такова, что ТС шьёт со вставленной батарейкой и с джампером установленным на 5В. Загрузчик прошивается по SPI, так как «просевших 3.3В» хватает, а вот сама программа часов, при прошивке через FTDI не прошивается, так как USB-контроллер ПК отрубает закоротившую 5В линию.

OptiBoot

Да, там OptiBoot, а точнее custom version of Optiboot, так что выбор программатора STK500 должен быть правильным.

ASavonte
()
Ответ на: комментарий от bo4ok

Там не самом деле они шьют не голый загрузчик а вот эту пепяку: https://github.com/MCUdude/MiniCore

Автор пишет причину, по которой он выбрал эту систему:

Because this is at times an ultra low voltage application of the Atmega328P it needs a special kind of bootloader.

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

нет, там именно эмуляция сабсета STK500

Да, это я уже понял. У меня просто пинг большой)

ASavonte
()
Ответ на: комментарий от bo4ok

Попробовал загрузить вторую часть не через FTDI адаптер а через Ардуино Нано. Вроде прошло успешно но часы всё равно не работают:

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

     System wide configuration file is "/home/ivan/.arduino15/packages/MiniCore/hardware/avr/2.1.3/avrdude.conf"
     User configuration file is "/home/ivan/.avrduderc"
     User configuration file does not exist or is not a regular file, skipping

     Using Port                    : /dev/ttyUSB1
     Using Programmer              : stk500v1
     Overriding Baud Rate          : 19200
     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
     Hardware Version: 2
     Firmware Version: 1.18
     Topcard         : Unknown
     Vtarget         : 0.0 V
     Varef           : 0.0 V
     Oscillator      : Off
     SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e950f (probably m328p) avrdude: NOTE: «flash» memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude: erasing chip avrdude: reading input file «/tmp/arduino_build_712398/Binary_Wrist_Watch.ino.with_bootloader.hex» avrdude: writing flash (32768 bytes):

Writing | ################################################## | 100% 7.35s

avrdude: 32768 bytes of flash written avrdude: verifying flash memory against /tmp/arduino_build_712398/Binary_Wrist_Watch.ino.with_bootloader.hex: avrdude: load data flash data from input file /tmp/arduino_build_712398/Binary_Wrist_Watch.ino.with_bootloader.hex: avrdude: input file /tmp/arduino_build_712398/Binary_Wrist_Watch.ino.with_bootloader.hex contains 32768 bytes avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 4.06s

avrdude: verifying … avrdude: 32768 bytes of flash verified

avrdude done. Thank you.

baaba ★★★
() автор топика
Последнее исправление: baaba (всего исправлений: 1)

Проверь ещё, выходит ли с FTDI 3.3 вольта. В даташите сказано, что ток по этой линии не должен превышать 24 миллиампера, хотя в другом месте того же даташита есть упоминание о 50 миллиамперах. В любом случае, если ты пытался прошить со вставленной разряженной батарейкой, то есть верьятность, что мог спалить линию 3.3В.

Попробуй на FTDI поставить джампер на 5 вольт и прошить, но обязательно без батарейки.

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

ASavonte
()
Ответ на: комментарий от ASavonte

Спасибо, попробую 5 вольт. Но мне кажется так можно спалить схему. Сейчас стоит 3.3V перемычка. Подключаю я сначала часы а потом к компу.

baaba ★★★
() автор топика
Ответ на: комментарий от baaba

Но мне кажется так можно спалить схему.

По какой причине? Что у атмеги, что у DS3231 5 вольт - допустимое напряжение питания. На светодиодах стоят сопротивления по 200 Ом так что на один придётся около 15 миллиампер. Разве что если загорят все 4, то будет превышен допустимый ток на 1 пин, но все 4 не могут гореть, так это уже число «15», какого нет десятичных цифрах. У атмеги328 допустимый ток на 1 выход - 40 миллиампер. И ещё, в авторской статье он пишет про 200 Ом резисторы, а на схеме нарисованы 330 Ом.

В крайнем случае, для эксперимента можно выставить время часов, скажем, в 12:00, тогда не будут гореть одновременно даже 3 светодиода.

мог спалить линию 3.3В

Кстати, там те же самые 3.3В с внутреннего регулятора FT232RL, которые выходят наружу микросхемы, используются для связи по USB. Так что, наверное, если бы спалил, то сама FTDI бы к компу не подключалась.

А BOD левел у тебя на 1.8 вольта выставлен? В Ардуино IDE есть возможность просто прочитать фьюзы? Попробуй по SPI их прочитать и сюда можешь запостить результат.

ASavonte
()

Ещё я думаю, что можно как-то скомпилировать прошивку часов вместе с загрузчиком и прошить всё вместе по SPI.

И разводка кварца, конечно, всё ещё вызывает большие вопросы: https://i.imgur.com/PH4pVhe.png Обычно стараются дорожки сделать как можно короче, чтобы не вносить лишнюю ёмкость, а тут, блин, размотаны чуть ли не через полплаты. Может быть в ардуино есть какая-то возможность использовать внутренний осциллятор атмеги, вместо кварца? Внешний кварц, как бы, в этом девайсе вообще не нужен. В RTC-микросхеме есть свой, встроенный.

ASavonte
()
Ответ на: комментарий от bo4ok

.hex ты имеешь в виду? Ну да, должно получиться, если не копировать последнюю строчку из первого файла. Типа (head -n -1 file1.hex; cat file2.hex) > result.hex.

ASavonte
()
Ответ на: комментарий от ASavonte

В общем удалось мне их запустить (с помощью знающего человека а потом сам). Ну как запустить - светятся они по кнопке а ещё нажатием - показывают дату. Но время одно и то же и выставить другое не получается. Делается это строками 35 и 36: https://pastebin.com/SRKVMwPi

В описании говорится что сначала их надо раскомментировать, прошить и закомментировать, снова прошить. Знающий человек говорил что вроде только одну строку (что логично) или 35 или 36. То есть первый раз прошиваешь - часы не откликаются на кнопку, комментируешь строки, снова прошиваешь - по кнопки они светятся. Но показывают одно и то же время и дату, 12:06 6 января. При этом проходит время, но время не прибывает, стоит. Есть у кого то какие то мысли? Можете глянуть код?

baaba ★★★
() автор топика
Ответ на: комментарий от baaba

Можете глянуть код?

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

Функция setup() выполняется каждый раз после сброса контроллера. Чтобы перепрошивкой не сбивать однажды установленное время, строчку с его установкой нужно закомментировать. Изначально нужно раскомментировать лишь одну строку, либо 35 (тогда время установится автоматически на время момента прошивки), либо 36 (время установится на то, которое указано в аргументах DateTime() в этой строке). При последующих прошивках, если более не требуется устанавливать время, ту единственную строку, которую ты до этого раскомментировал, нужно обратно закомментировать.

Если вытащить батарейку, то время собьётся. Я точно не помню, но, вроде бы, после выхода из некоторых режимов сна контроллер сбрасывается, то есть может быть так, каждый раз, нажимая на кнопку выполняется setup().

На функцию кнопки настройка времени никак не должна влиять.

При этом проходит время, но время не прибывает, стоит. Есть у кого то какие то мысли?

Может что-то сбрасывает контроллер? Если точно такой же код работает в часах их автора, то навряд ли в самой программе дело. Может быть ещё в BOD уровне причина или в слабой батарейке, что, когда светодиоды загораются, напряжение падает и МК уходит в сброс.

удалось мне их запустить

В чём была причина, если не секрет?

ASavonte
()
Ответ на: комментарий от ASavonte

В чём была причина, если не секрет? В том что нужно раскомментировать, затем прошить, закомментировать и ещё раз прошить. Я этого не понимал и невнимательно читал инструкцию, потому что был сфокусирован на ином. Я первый раз сталкиваюсь с ардуино. Мне объяснили по шагам и часы заработали, но криво, как я говорил. На счёт слабости батарейки - не уверен. Схема, судя по описаниям, терпима к напряжению. Оно сейчас 2.85V. К тому же светодиоды не светят всё время. Так что идти часы должны.

PS. У автора прошивка идёт через FTDI адаптер. Почему то он использует ардуино как программатор только для заливки загрузчика. Код идёт через FTDI, хотя зачем, если есть ардуино, которое уже настроено и было использовано для заливки загрузчика? У меня через FTDI залить код не получается, только черз Ардуино. Не знаю почему. Возможо я не умею запускать FTDI в Arduino IDE

На счёт батарейки то же странная ситуация. CR2032 (даёт сейчас 3.23V) не влезает. Возможно мешает пайка. CR2025 влезает свободно. Но у неё ниже напряжение сейчас. Но вообще, я как понимаю, часы могут идти и без батарейки, если их не отключать от ардуино (батарейку купить сейчас не могу, поздно, да я и не понимаю какую и в ней ли дело то)

baaba ★★★
() автор топика
Последнее исправление: baaba (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.