Непонятка какая-то... наверное я долблюсь в глушняк? или ещё что-то...

Тема в разделе "Флудилка", создана пользователем Igor68, 13 ноя 2021.

  1. Igor68

    Igor68 Гуру

    ...есть шилд ComMotion driver for 4 motors. Всё работало, но надо стало изменить. Заливал в него с помощью Arduino IDE - опция через программатор(в роли программатора выступает Arduino UNO R3, которая и штатно работает с шилдом по I2C). Стоить пояснить что этот шилд содержит ATmega328p - 2 штуки. Программируется сначала один контроллер, потом другой - для этого на шилде трёхпозиционный переключатель (средняя позиция ничего не шьём - просто работа) и он перебрасывает сигналы MOSI и SCK то на один контроллер, то соответственно на другой в крайних положениях идущих от имеющегося разъёма ISP на этой плате. Всё было нормально, но потом вдруг на одном MCU стало:
    Код (Text):
    /usr/share/arduino/hardware/tools/avrdude -C/usr/share/arduino/hardware/tools/avrdude.conf -v -v -v -v -patmega328p -cstk500v1 -P/dev/ttyUSB0 -b19200 -Uflash:w:/tmp/build1556077979809422163.tmp/MyComMotion_Shield.cpp.hex:i

    avrdude: Version 6.1, compiled on Jul  7 2015 at 10:29:47
             Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
             Copyright (c) 2007-2014 Joerg Wunsch

             System wide configuration file is "/usr/share/arduino/hardware/tools/avrdude.conf"
             User configuration file is "/home/bot_gray/.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: Send: 0 [30]   [20]
    avrdude: Send: 0 [30]   [20]
    avrdude: Send: 0 [30]   [20]
    avrdude: Recv: . [14]
    avrdude: Recv: . [10]
             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
                                      Block Poll               Page                       Polled
               Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
               ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
               flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
                                      Block Poll               Page                       Polled
               Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
               ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
               lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                                      Block Poll               Page                       Polled
               Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
               ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
               hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                                      Block Poll               Page                       Polled
               Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
               ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
               efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                                      Block Poll               Page                       Polled
               Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
               ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
               lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                                      Block Poll               Page                       Polled
               Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
               ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
               calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
                                      Block Poll               Page                       Polled
               Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
               ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
               signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

             Programmer Type : STK500
             Description     : Atmel STK500 Version 1.x firmware
    avrdude: Send: A [41] . [80]   [20]
    avrdude: Recv: . [14]
    avrdude: Recv: . [02]
    avrdude: Recv: . [10]
    avrdude: Send: A [41] . [81]   [20]
    avrdude: Recv: . [14]
    avrdude: Recv: . [01]
    ...
    ...
    avrdude: Recv: . [00]
    avrdude: Recv: . [10]
    ################avrdude: Send: V [56] 0 [30] . [00] . [02] . [00]   [20]
    avrdude: Recv: . [14]
    avrdude: Recv: . [00]
    avrdude: Recv: . [10]
    ################################## | 100% 0.05s

    avrdude: Device signature = 0x000000
    avrdude: Yikes!  Invalid device signature.
             Double check connections and try again, or use -F to override
             this check.

    avrdude: Send: Q [51]   [20]
    avrdude: Recv: . [14]
    avrdude: Recv: . [10]

    avrdude done.  Thank you.
    Одним словом один MCU не шьётся... к другому попросов нет. С чего так? Один ATmega328p умер или фьюзы каким-то образом изменились?
    Прошивка на оба идентичная и они отличаются программно этим:
    Код (C++):

    #define IDpin      16    // D16 PC2 (ADC2) - MCU     identification    pin      LOW=MCU1  HIGH=MCU2
    то есть соответствуюая ножка у одного притянута к плюсу, а у другого к копрусу.

    PS: есть ли возможность имея только Arduino UNO R3 восстановить если это фьюзы? Корпус у MCU не DIP и дома не перепаяю на новый - только на работе. Блин его надо ещё купить, а это не так скоро. С ключом "-F" тоже испытывал вот окончание:
    Код (Text):
    ...
    ...
    avrdude: safemode read 2, efuse value: 0
    avrdude: Send: V [56] P [50] . [08] . [00] . [00]   [20]
    avrdude: Recv: . [14]
    avrdude: Recv: . [00]
    avrdude: Recv: . [10]
    avrdude: safemode read 3, efuse value: 0
    avrdude: safemode: efuse reads as 0
    avrdude: safemode: Fuses OK (E:00, H:00, L:00)
    avrdude: Send: Q [51]   [20]
    avrdude: Recv: . [14]
    avrdude: Recv: . [10]

    avrdude done.  Thank you.
    ...и ещё - я люблю ARM/Cortex, потому и не углублялся в AVR... но наткнулся на ATTiny10, который в корпусе SOT-23(6pin) и задумал применять такой для мелочей и сразу зауважал - хоть и такой маленький, но универсальный для мелочей.
     
    Последнее редактирование: 14 ноя 2021
  2. b707

    b707 Гуру

    корпус 6 пин? - из которых два пина питание и один ресет?
    Интересно, для каких мелочей можно использовать МК с тремя пинами или памятью в два байта? (условно)
     
  3. Рокки1945

    Рокки1945 Гуру

    ну например - у тиньки 13 можно INT0 - обрабатывать прерывание и еще и сделать программный уарт и этот вход будет RX
     
  4. Igor68

    Igor68 Гуру

    Это Вы верно заметили - из 6 только 4 в работе. А reset конфигурируется как обычный пин. Итого - 4.
    При 1кб памяти программ и совсем копеечном ОЗУ такое как регулятор (позиционный) температуры сделать можно.
    1-й вход на АЦП датчика (есть АЦП, хоть и 8-и битное). 2-й вход АЦП задания (подстроечный резистор)
    и два пина выхода (хоть IO, хоть PWM который имеется). Чипе и Дипе натыкался на трёхпроводный температурный датчик у которого аналоговый выход с линейной шкалой (0...5В). Вот такая мелочь может быть...

    А никто не скажет про конкретно заданный вопрос?
    Конечно куплю ATmega328p несколько штук, может и ардуину для опытов... ну и как программатор (если её можно использовать как нормальный). И самое важное - судя по началу поста все фьюзы выставлены в ноль и можно ли их восстановить? Как я говорил с фьюзами экспериментов не проводил, а использовал штатную Arduino IDE, где и правил/компилировал код. Arduino IDE на малине в самом устройстве для опытов.
     
  5. Un_ka

    Un_ka Гуру

    Можно его фото. Вдруг он подвёл, и прошивались два чипа одновременно.
     
  6. Igor68

    Igor68 Гуру

    Это конечно не фото (подлезть трудно для фото):
    morors_driver_commotion-manual.pdf
    А это вариант русском:
    morors_driver_commotion-manual_rus.pdf
    по поводу подвёл трудно сказать - прозвоню схему (попозже - сейчас она включена по причине проверки)... для проверки только что снова прошил другой контроллер успешно.

    Это схема (простите за качество - какая есть):
    03791_schematic.pdf

    На всякий случай прошивка как есть ихняя:
    ComMotion_Shield_V2_1.zip
    Странно сделано (несколько файлов INO - хоть и работает). Примечание к файлу ComMotion_Shield_V2_0.ino:
    Код (C++):
    ...
    if(encoders)
      {
        Motors();                                                                 // if encoders are enabled then use then to control motor speeds
      }
      else                                                                        // if encoders are disabled then feed speed values directly to PWM output
      {                                                                        
        analogWrite(pwmapin,abs(mspeed[mcu*2]));                                  // set motor A speed
        digitalWrite(dirapin,mspeed[mcu*2]>0);                                    // set motor A direction
        analogWrite(pwmbpin,abs(mspeed[mcu*2+1]));                                // set motor B speed
        digitalWrite(dirapin,mspeed[mcu*2+1]>0);                                  // set motor B direction
      }
    ...
    в строке 214:
    Код (C++):
    digitalWrite(dirapin,mspeed[mcu*2+1]>0);                                  // set motor B direction
    надо заменить на:
    Код (C++):
    digitalWrite(dirbpin,mspeed[mcu*2+1]>0);                                  // set motor B direction
    Иначе моторы B не меняют направление при варианте конфигурации "индивидуальный без энкодеров"
     

    Вложения:

    Последнее редактирование: 14 ноя 2021
  7. Airbus

    Airbus Радиохулиган Модератор

    Чем шили? И как? Если не ISP программатором то фьюзы слететь не должны. Ардуино в качестве программатора УГ@вно поэтому лучше купи за 150 рублей нормальный программатор AVR. Ну или если есть СОМ порт то сделай программатор Громова из говна и палок. Подключись к AVR и прочти что у тебя там и какие фьюзы. Как то так. Я бы именно так сделал.
     
    Последнее редактирование: 14 ноя 2021
  8. Igor68

    Igor68 Гуру

    Куплю программатор (теперь будет надо)!!! Вопрос в выборе модели. Есть правда ПИТОН (Чип Прог в наличии на работе - дорогущий и умеет почти всё). Есть в наличии и Ulink и JLink(умеет JTAG/SWD) у меня и OpenOCD - но то для ARM/Cortex. Шил через ARDUINO применяя разъём ISP на шилде (именно так в инструкции на шилд) - всё совпадает (все разъёмы) с ардуиной - шилд сверху на ардуину и всё уже подключилось. Программатор, что предлагаете, грубо говоря оперирует RESET, MOSI, MISO, CLCK ??? Или ещё что-то должен уметь? Раньше на PIC16F84 было если 12в на RESET, то он принудительно выходит в свободное программирование - модно стереть что угодно. Может и тут так?
    вот только а аптеках и булочных не продаётся и даже в пивнушках и вино-водочных его нет - надо куда-то ехать.
     
  9. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Может я слепой ? Смотрю схему - вижу шину ISP, но ни переключателя, ни интерфейсного разъема шины.
    ПС. Советуют приткнуть конденсатор 470мкф на пины +5в-GND при работе Ардуины в роли программатора. Сам замечал. Без него шьет нестабильно.
     
    Последнее редактирование: 14 ноя 2021
  10. Igor68

    Igor68 Гуру

    ...вот выжимка от ATTiny10:
    – Either: wait tTOUT (see System and Reset Characteristics) and then set the RESET pin low.This will reset the device and enable the TPI physical layer. The RESET pin must then bekept low for the entire programming session
    – Or: if the RSTDISBL configuration bit has been programmed, apply 12V to the RESET pin.The RESET pin must be kept at 12V for the entire programming session

    тут как раз про 12 вольт на RESET
    что-то в даташите на ATmega328p такого пока не могу найти...
     
  11. Igor68

    Igor68 Гуру

    Это как так? А J13(ISP-6pin) не ISP? А S2(MSS23C02) не переключатель MOSI->MOSI1; SCK->SCK1 и MOSI->MOSI2; SCK->SCK2 разве их нет на схеме?
     
  12. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Это в разделе Параллельное программирование.
    А, ну да. Не заметил. Шину (синяя толстая линия снизу) следовало дорисовать влево до переключателя. Привык к аккуратным чертежам...
     
    Последнее редактирование: 14 ноя 2021
  13. Igor68

    Igor68 Гуру

    Не я делал, ихнее какое есть.
    Про параллельное прогаммирование уточню... неужели внутрисхемно никак и надо выпаивать?
     
  14. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Именно так - выпаивать. В том и прелесть ISP (in-system programming),
    ПС. А проц (который не программится) вообще работает ? То бишь предыдущую прошиву он выполняет ?
     
    Последнее редактирование: 14 ноя 2021
  15. Igor68

    Igor68 Гуру

    По поводу переключателя - Вы правы! При прозвонке, линии на MCU (номер не помню) то очень много, то 200...300 ом, то 4 Ом - чуть движок наклоняешь значения меняются, чего не наблюдается для другого MCU. Поджал пинцетом "жестянку" корпуса переключателя слал переключатся туже, с характерным щелчком (на нём шариковый фиксатор положений), но наверное уже поздно - как и раньше один прошивается, другой опять нет.

    И вопрос: так и не понял по даташиту на ATmega328p должно подаваться завышенное напряжение типа Vpp или нет. Я так понял, что он потерял внешнее тактирование от кварца и перешел на внутренний генератор. Может поправить ArduinoISP_ino.ino для работы которым пользовался, предварительно загрузив в ардуину, которой прошивается шилд.

    Потому как в нём есть такое:
    Код (C++):
    ...
    // Configure SPI clock (in Hz).
    // E.g. for an ATtiny @ 128 kHz: the datasheet states that both the high and low
    // SPI clock pulse must be > 2 CPU cycles, so take 3 cycles i.e. divide target
    // f_cpu by 6:
    //     #define SPI_CLOCK            (128000/6)
    //
    // A clock slow enough for an ATtiny85 @ 1 MHz, is a reasonable default:

    #define SPI_CLOCK         (1000000/6)


    // Select hardware or software SPI, depending on SPI clock.
    // Currently only for AVR, for other architectures (Due, Zero,...), hardware SPI
    // is probably too fast anyway.

    #if defined(ARDUINO_ARCH_AVR)

    #if SPI_CLOCK > (F_CPU / 128)
    #define USE_HARDWARE_SPI
    #endif

    #endif

    // Configure which pins to use:

    // The standard pin configuration.
    #ifndef ARDUINO_HOODLOADER2

    #define RESET     10 // Use pin 10 to reset the target rather than SS
    #define LED_HB    9
    #define LED_ERR   8
    #define LED_PMODE 7

    // Uncomment following line to use the old Uno style wiring
    // (using pin 11, 12 and 13 instead of the SPI header) on Leonardo, Due...

    // #define USE_OLD_STYLE_WIRING

    #ifdef USE_OLD_STYLE_WIRING

    #define PIN_MOSI    11
    #define PIN_MISO    12
    #define PIN_SCK        13

    #endif

    // HOODLOADER2 means running sketches on the ATmega16U2 serial converter chips
    // on Uno or Mega boards. We must use pins that are broken out:
    #else

    #define RESET         4
    #define LED_HB        7
    #define LED_ERR       6
    #define LED_PMODE     5

    #endif

    // By default, use hardware SPI pins:
    #ifndef PIN_MOSI
    #define PIN_MOSI     MOSI
    #endif

    #ifndef PIN_MISO
    #define PIN_MISO     MISO
    #endif

    #ifndef PIN_SCK
    #define PIN_SCK     SCK
    #endif

    // Force bitbanged SPI if not using the hardware SPI pins:
    #if (PIN_MISO != MISO) ||  (PIN_MOSI != MOSI) || (PIN_SCK != SCK)
    #undef USE_HARDWARE_SPI
    #endif


    // Configure the serial port to use.
    //
    // Prefer the USB virtual serial port (aka. native USB port), if the Arduino has one:
    //   - it does not autoreset (except for the magic baud rate of 1200).
    //   - it is more reliable because of USB handshaking.
    //
    // Leonardo and similar have an USB virtual serial port: 'Serial'.
    // Due and Zero have an USB virtual serial port: 'SerialUSB'.
    //
    // On the Due and Zero, 'Serial' can be used too, provided you disable autoreset.
    // To use 'Serial': #define SERIAL Serial

    #ifdef SERIAL_PORT_USBVIRTUAL
    #define SERIAL SERIAL_PORT_USBVIRTUAL
    #else
    #define SERIAL Serial
    #endif


    // Configure the baud rate:

    #define BAUDRATE    19200
    // #define BAUDRATE    115200
    // #define BAUDRATE    1000000
    ...
    Видите там и скорость SPI и Sehial изменить можно. Уж больно не в жилу тащить шилд на работу. Или всё же чипу кирдык?
     
  16. Igor68

    Igor68 Гуру

    А шут его знает - с ним связи нет и осциллографа нет. Купить и перепаять - сделаю! Вопрос: купить... не за сколько купить, а за какое время купить и где купить. Что посылгорг, что Китайцы - долго.
     
  17. Ariadna-on-Line

    Ariadna-on-Line Гуру

    1. Из чего вы поняли, что проц потерял внешнее тактирование и перешел на внутренний генератор ?
    2. Vpp нужен для перевода процессора в режим параллельного программирования.
     
    Последнее редактирование: 14 ноя 2021
  18. akl

    akl Гуру

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

    Igor68 Гуру

    Так сказали бы, ЧТО НАДО!!! Написать/переделать программу прошивки? Доработать аппаратно?
    Был бы признателен если посоветуете плату ARDUINO UNO с местом для монтажа (знаете бывают такие отладочные платы с местом для установки/пайки дополнительных детали, кроме рабочей заводской схемы - у меня такая ADuC7024)
     
  20. akl

    akl Гуру

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