logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

FT232RL i ATmega: Problemy z wgrywaniem kodu po wypaleniu bootloadera

lis04 21 Paź 2024 15:48 351 12
REKLAMA
  • #1 21271642
    lis04
    Poziom 11  
    Posty: 27
    Ocena: 3
    Wgrywanie kodu przez FT232RL.

    Zrobilem sobie programator z nano do wypalania bootloader i do wgrywania kodu przez przystawkę, wkładam tam wylutowany układ, wypalam bootloadera i wgrywam pozniej szkic za użyciem programatora.


    wlutowuje pozniej atmega na pcb. na PCB mam wyprowadzone tulejki do pinów gnd,cts,5v,tx,rx,dtr.
    mam FT232RL i chcialbym przez to nowy kod do mikrokontrolera i tak:
    jak wypale bootloadera i wlutuje czysty to mogę raz góra 2 razy za pomocą FT232RL wgrać kod.
    Ale pozniej a ciagle na tym samych ustawieniach wyskakuje mi błąd.
    avrdude urclock_getsync() warning: attempt 1 of 10: not in sync

    Dopiero znów musze wylutować układ wrzucic do przystawki, albo przez przystawkę wrzucić nowy kod, albo wypalic znów bootloader i wtedy bede mogł wgrać nowy kod za pomocą FT232
    Dlaczego raz działa raz nie?
    Jak mogę na to poradzić, aby moc ciagle udoskonalać kod i wrzucać sobie przez FT232 zebym ciągle nie musiał wylutowywać atmegi ?
    Jakieś porady pomysly ?
  • REKLAMA
  • #2 21272403
    elktrod
    Poziom 41  
    Posty: 5155
    Pomógł: 761
    Ocena: 1337
    Nie napisałeś jaki typ obudowy ma Twoja Atmega?
    Zastosuj dla Atmegi na płytce pcb urządzenia jak i na płytce pcb do programowania tu i tu podstawki wysuwane o ile masz Atmegę o podobnej podstawce np. takiej:
    https://www.elektroda.pl/rtvforum/topic4003840.html
    A przejściówki można sobie samemu zrobić:
    https://www.elektroda.pl/rtvforum/topic4080761.html#21260852#gallery-2
  • REKLAMA
  • #3 21273389
    cedrom
    Poziom 20  
    Posty: 229
    Pomógł: 35
    Ocena: 80
    A fusebity dla bootloadera dobrze ustawiłeś?

    Jak masz wykonany układ resetu atmegi przez FT232?
  • #4 21273441
    lis04
    Poziom 11  
    Posty: 27
    Ocena: 3
    Obudowę mam atmega328 tqfp.

    Bootloadera wypalam przez ten zbudowany programator i przez tę podstawkę, jak mam wylutowany układ, kod ładnie bezproblemowo mi się wgrywa.
    Płytka stykowa z modułem programatora i mikrokontrolerem ATmega328.

    Nie chcę ciągle wylutowywać atmegi, to jak wlutowany mam na pcb, to mam wyciągnięte piny do komunikacji.

    Okrągła płytka PCB z elementami elektronicznymi, w tym ATmega328 TQFP i modułem RF.

    Od strony RF24, czyli od prawej do lewej, jest GND, CTK 5V, TX, RX, reset_cap.

    Do tych pinów podłączam FT232 według oznaczeń, przy czym TxD -> RxD, oraz RxD -> TxD.

    Czerwona płytka z układem FTDI FT232RL

    No i jak mam wgrany sam bootloader, to przez piny pójdzie mi z raz/2 razy, a później już kaplica avrdude urclock_getsync() warning: attempt 1 of 10: not in sync.

    A jak wgram przez podstawkę kod, to od razu avrdude urclock_getsync() warning: attempt 1 of 10: not in sync.

    Kod mi coś nie działa ciągle, a słabo jest ciągle wylutowywać atmegę, wrzucać na podstawkę, żeby zaprogramować ją, zwłaszcza że mam tam RF24, więc muszę przynajmniej 2 urządzenia wylutowywać.

    Gdzie sprawdzić te fusebity?
    Przy wypalaniu bootloadera mam
    Board: ATmega328
    Bootloader: Yes
    Clock: 16 MHz external
    Compiler LTO: Disabled
    Variant: 328P / 328PA
    BOD: 1.8V
  • REKLAMA
  • #5 21273685
    ex-or
    Poziom 28  
    Posty: 785
    Pomógł: 147
    Ocena: 151
    Jak już wspomniał kolega wyżej - układ resetu może być skopany. Poza tym na pinach Rx/Tx może coś wisieć i zakłócać transmisję. Pokaż schemat tego cuda.
    Nie prościej podłączyć się programatorem bezpośrednio do układu i programować in situ bez kombinacji na około?
  • #6 21278168
    kaczakat
    Poziom 34  
    Posty: 1748
    Pomógł: 317
    Ocena: 230
    @eX_-or, wręcz go nie ma, wgrywa mu raz bo uC jest czysty i bootloader i tak czeka na wsad, potem program rusza i pa pa.
    @kus04, albo odtwarzasz tę część schematu Arduino UNO z kondensatorem 100n dla resetu, albo robisz reset paluchem, z czasem da się wyczuć moment kiedy należy puścić uC do pracy by wsad się zahaczył o startujący bootloader.
    Pomogłem? Kup mi kawę.
  • #7 21281219
    lis04
    Poziom 11  
    Posty: 27
    Ocena: 3
    Cytat:
    @eX_-or, wręcz go nie ma, wgrywa mu raz bo uC jest czysty i bootloader i tak czeka na wsad, potem program rusza i pa pa.


    Z tego co zaobserowowałem to tak jest.


    Cytat:
    @kus04, albo odtwarzasz tę część schematu Arduino UNO z kondensatorem 100n dla resetu, albo robisz reset paluchem, z czasem da się wyczuć moment kiedy należy puścić uC do pracy by wsad się zahaczył o startujący bootloader.


    Faktycznie nie dawałem kondesatora pomiedzy DTR. pewnie w tym problem jest. Ale mam piny na plytce gdzie mogę pęsetą złączyć GND z RESET. ale nie wiem kiedy złączyć te dwa piny. Podczas naciskania update? czy jak klikne update wgrywania kodu i czekam sekunde dwie? bo na Arduino Ide wywala mi juz błąd
    Cytat:
    avrdude urclock_getsync() warning: attempt 1 of 10: not in sync
  • #8 21281342
    kaczakat
    Poziom 34  
    Posty: 1748
    Pomógł: 317
    Ocena: 230
    lis04 napisał:
    Podczas naciskania update?

    To trzeba wyczuć, jakbyś miał jakieś led sygnalizujące pracę UART na liniach TX/RX to wtedy mniej więcej przy pierwszym błysku. Jak już zobaczysz komunikat "... 1of 10" to już jest za późno, nigdy mi się nie udało w tych ponownych próbach. RST można trzymać i zwolnić go w odpowiedniej chwili, bootloader typowo stopuje się na 2s, więc to jest dość dużo czasu by trafić w okienko. Ja to robiłem gdy zobaczyłem komunikat upload po zakończonej kompilacji, nie zadziała to 0.5s później, 1s później, zależy jaki komputer to różnie się do tego zbierał. Można sobie taki kod wygenerować do HEX i robić sam upload zewnętrznym programem jak AVR LAB++, odpada ciągła kompilacja przy każdej próbie wgrania.
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #9 21292429
    lis04
    Poziom 11  
    Posty: 27
    Ocena: 3
    1) Podłączyłem do resetu ten 100nF kondensator. Pytanie mam, czy on ciągle ma być wpięty? Ale raczej tak.
    2) Dalej to samo jest, że nie łączy mi się.
    3) Wylutuję Atmegę, wypalę od nowa bootloader, lutowanie, podłączenie przez FT232, klikam update i normalnie działa, odłączę FT232, znowu podłączam i dalej już kaplica, nie ma połączenia..
    Trochę mnie to demotywuje, bo bezsensu ciągle nagrzewam laminat płytki PCB/ układ Atmega etc., aż się czekam, aż coś się w końcu uszkodzi.

    Chyba że z tym FT232 jest problem? Jaki mogę programator kupić, bardziej niezawodny, co polecacie? Ale miło by było, abym mógł korzystać z tego, co mam.
  • #10 21292489
    cedrom
    Poziom 20  
    Posty: 229
    Pomógł: 35
    Ocena: 80
    1) daj 10nF
    Ja mam zestaw AVT-5311. Reset podciągnięty do +5V rezystorem 10k i 10uF wiszący na kabelkach, między RESET a DTR z FT232 i bootloadery mi działają. Testowane na ATmega 16, 32, 328p, 644. Przy 100uF były czasem problemy.

    2) Jak masz ustawione fusebity? BOOTRST musi być na 0, bo inaczej bootloader działa do pierwszego wgrania programu.
  • #11 21294844
    kaczakat
    Poziom 34  
    Posty: 1748
    Pomógł: 317
    Ocena: 230
    W Arduino wypalając bootloader ustawiane są fusebity, oczywiście musi być wybrana płytka z bootloaderem, bo można też wgrać bootloader do płytki, która ma wybrany brak bootloadera, wtedy wgranie bootloadera nie wgrywa bootloadera tylko ustawia fusebity. Tak jak radzi @cederom, zwiększenie kondensatora zwiększa szarpnięcie resetem, można to robić stopniowo, bo te piki napięcia są duże, 100n jest na schemacie, kojarzę, że do modułu HC05 by wgrywać przez BT musiałem dać nieco większy.
    Możesz sobie wgrać jakiś program testowy, który drukuje na UART jakąś liczba++ co 1s, każde otwarcie portu COM powinno resetować płytkę, jak nie widać mignięcia led to tak można sprawdzić, czy RST działa OK i zaczyna drukować liczby od początku.
    Pomogłem? Kup mi kawę.
  • #12 21294963
    cedrom
    Poziom 20  
    Posty: 229
    Pomógł: 35
    Ocena: 80
    Chodziło mi o 10nF nie uF pomyłka
  • #13 21295407
    emarcus
    Poziom 21  
    Posty: 347
    Pomógł: 41
    Ocena: 69
    cedrom napisał:
    Chodziło mi o 10 nF, nie uF, pomyłka

    Teraz też jest pomyłka.
    Powinno być 100 nF (NANO F... -ów).
    Nie kojarzę, dlaczego ludzie zgadują, albo tworzą nowe teorie dla rzeczy dawno określonych przez twórców sprzętu, sprecyzowanych i dyskutowanych w różnego rodzaju publikacjach.
    Dla przykładu proponowałbym zajrzeć tu:
    https://rheingoldheavy.com/arduino-from-scrat...ga328p-dtr-and-reset/#ARDUINO_RESET_CAPACITOR
    i przeczytać całą dyskusję zawartą w tym wątku.
    Ponadto, w razie wątpliwości wystarczyłoby zaglądnąć do dowolnego schematu jakiejkolwiek płytki arduino i taki kondensator tam jest umieszczony.
    Można go także znaleźć na płytkach PRO-MINI (pierwszy element z lewej strony diagramu na linii portu Reset); - mimo że nie zawierają konwertera Usb/UART, to taką prowizję dla sygnału DTR mają wbudowaną!

    e marcus

Podsumowanie tematu

✨ Użytkownik ma problemy z wgrywaniem kodu do mikrokontrolera ATmega328 po wypaleniu bootloadera za pomocą programatora FT232RL. Po pierwszym lub drugim wgraniu kodu pojawia się błąd "avrdude urclock_getsync() warning: attempt 1 of 10: not in sync". Użytkownik podłączył piny do komunikacji, ale nie ma stabilnego połączenia. Wskazówki dotyczące rozwiązania problemu obejmują sprawdzenie układu resetu, podłączenie kondensatora 100nF między DTR a RESET, oraz odpowiednie ustawienie fusebitów. Użytkownik rozważa również zakup bardziej niezawodnego programatora, ponieważ ciągłe wylutowywanie ATmegi jest uciążliwe.
Wygenerowane przez model językowy.
REKLAMA