Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Rozwiązano] Programator nie wykrywa ATmegi328P po nieudanym wgrywaniu programu

mrWiWi 30 Sty 2018 13:01 732 21
  • #1 30 Sty 2018 13:01
    mrWiWi
    Poziom 5  

    Cześć,

    próbowałem podłączyć moduł WiFi ESP-01 do ATmegi328P. Zrobiłem to zgodnie z poniższym schematem:
    Programator nie wykrywa ATmegi328P po nieudanym wgrywaniu programu
    Po podłączeniu nie zaobserwowałem żadnego niepokojącego działania układu. Zabrałem się więc za wgranie programu do przetestowania WiFi. Wykorzystałem następującą bibliotekę Arduino: Link.
    Kod programu (wycinek):

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Przy próbie wgrania wystąpił błąd:
    Kod: dos
    Zaloguj się, aby zobaczyć kod

    Wcześniej załadowany program nie działa (pewnie się skasował). Od tej pory nie ma komunikacji z układem przez programator USBasp. Nieśmiertelny już komunikat:

    Kod: dos
    Zaloguj się, aby zobaczyć kod


    Czy problemem może być SoftwareSerial, który coś próbuje wysyłać i przez to blokuje cały układ?
    Wydaje mi się, że problemem nie jest samo podłączenie zasilania i pinów ATmegi. Wcześniej wszystko działało, a zmiana samego mikrokontrolera na inny egzemplarz sprawia, że wszystko działa jak należy.
    Sprawdzałem, co się dzieje przy podłączeniu WiFi do RxD i TxD mikrokontrolera, a co jeśli nie podepnę niczego. Później jeszcze odkryłem, że są spadki napięcia na wyjściu ze stabilizatora (zamiast 3,3 V jest około 1,5), ale zmieniłem podłączenie, żeby wszystko było poprawnie. Dalej nic. Podpinałem też RESET do masy, bez skutku.
    Czy to znaczy, że uszkodziłem ATmegę? Boję się wgrać ten program na inną, żeby jej też nie zepsuć.

    0 21
  • #2 02 Lut 2018 13:19
    mrWiWi
    Poziom 5  

    Spróbowałem wgrać trochę inny program na drugą ATmegę:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Fragment tego co wypisało mi IDE przy wgrywaniu na płytkę:
    Kod: dos
    Zaloguj się, aby zobaczyć kod


    Przez to wszystko teraz nie działa też druga ATmega :( Świeżo po wgraniu, a przed odłączeniem zasilania wyświetlana była ostatnia wartość na wyświetlaczu oraz zachowane były stany na sterowniku diod LED.
    Nie pomaga podłączenie ATmegi8A jako generatora do XTAL1, zwieranie RESET-u do masy ani zwieranie RXD z TXD.
    Czy to może być spowodowane wykorzystaniem metod Serial.begin() i Serial.write()? Gdy podłączony jest moduł WiFi, na początku na krótko miga niebieska dioda na nim. Zauważyłem też, że losowo pojawia się masa na porcie PB0 ATmegi - czasem dioda do niego podłączona miga w dosyć równych odstępach, kiedy indziej świecenie zależy od przytrzymania kwarcu palcami.
    Obawiam się, że jak kupię nowy mikrokontroler, to znowu go zepsuję w analogiczny sposób. A za tydzień muszę mieć działający projekt...
    Proszę o pomoc.

    0
  • #4 02 Lut 2018 13:48
    mrWiWi
    Poziom 5  

    Pewnie:
    Programator nie wykrywa ATmegi328P po nieudanym wgrywaniu programu

    Dodam jeszcze, że przy mojej drugiej próbie przełączyłem cały układ na 3,3 V (tym razem już bez dzielnika napięcia na TXD) - działał zanim wgrałem program wykorzystujący ESP.

    0
  • #6 02 Lut 2018 14:24
    mrWiWi
    Poziom 5  

    Słyszałem o tym wcześniej, ale czy nie dotyczy to błędnie ustawionych fusebitów? A tym razem ich nie ruszałem.
    Zresztą jestem gotów kupić nową ATmegę, tylko chciałbym wiedzieć co robię źle, że wszystkie się po kolei psują/blokują.

    0
  • #8 02 Lut 2018 15:28
    mrWiWi
    Poziom 5  

    To mogła być przyczyna awarii? Wydawało mi się, że przy resecie wystarczy ten rezystor, zresztą na wielu schematach wystarczał. Przecież nie powinno się wszystko wywalać jak wciąż mikrokontroler był podpięty pod programator (?).

    0
  • #9 02 Lut 2018 21:13
    J_23_666
    Poziom 13  

    Hej
    1. Układ zmontowałeś na płytce stykowej? Mogą być kłopoty ze stykami.
    2. Zewrzyj zworkę LOW SCK na programatorze lub zastosuj w komendzie dla avrdude parametr "-B 8"; (liczba może sięgać nawet 400.
    3. Jeżeli programujesz przez ISP, to nie ustawiaj w IDE Arduino portu szeregowego. ( nie wiem , nie używam tego IDE). Nowa ATmega ze sklepu nie ma wgranego bootloadera i przez port szeregowy nic nie wgrasz. Ma natomiast fabrycznie ustawione fusy na zegar 1 MHz, stąd konieczność stosowania pkt'u 2.

    0
  • #10 02 Lut 2018 21:38
    mrWiWi
    Poziom 5  

    1. Tak, na płytce. Jak działał jeszcze drugi mikrokontroler, to wystarczyło go podmienić i działał z innym wgranym programem. Wielokrotnie sprawdzałem styki, nawet wyjąłem wszystko i złożyłem od nowa samą ATmegę z zasilaniem.
    2. Próbowałem zwierać i używałem tego parametru, ale nic nie pomogło. Zresztą ATmega działała już na zewnętrznym kwarcu 16 MHz, więc i tak to chyba nie to.
    3. Programowałem z użyciem USBasp w IDE Arduino, portu szeregowego na porcie COM nie mam.
    Programator nie wykrywa ATmegi328P po nieudanym wgrywaniu programu
    Jedna z ATmeg była kupiona z bootloaderem, na drugiej wgrałem sam. Działały w rezultacie tak samo - korzystały z kwarcu, miały ustawione poprawnie wszystkie fusy. No i wgrywały się wszystkie programy aż do czasu, gdy chciałem wykorzystać UART do komunikacji z WiFi.

    0
  • #11 03 Lut 2018 05:00
    J_23_666
    Poziom 13  

    Z komunikatów jakie wyświetla avrdude wynika, że masz źle podłączony programator (styki) oraz brak spowolnienia SCK. W sumie to wygląda, że się nic nie wgrało.
    Masz pomieszane zasilanie : układy zasilasz z VCC a sterujesz je poziomem 3,3V.
    Na schemacie nie pokazałeś jak podłączasz programator.
    Skoro łączysz wszystko na płytce stykowej, to odłącz wszystkie peryferia. Zostaw tylko ATmegę, kwarc i kondensatory, które potrzebne. Zamieszczaj pełne komunikaty avrdude. Pokaż zdjęcia z tego co połączyłeś.

    0
  • #12 05 Lut 2018 22:06
    mrWiWi
    Poziom 5  

    Zacząłem od nowa: kupiłem nową ATmegę328P. Podłączyłem ją do pustej płytki stykowej, dodałem zasilanie, kwarc, kondensatory i WiFi. Ustawiłem fusy w avrdude z użyciem spowolnienia -B8 na USBasp (low: 0xFF, high: 0xDE, extended: 0x05). Układ zaczął działać z kwarcem. Nie wgrywałem bootloadera Arduino, tylko program z Arduino IDE obsługujący WiFi. Działało - łączyło się z AP i lokalnym serwerem.
    Przy kilku wcześniejszych próbach wgrania programów pojawiały się sporadycznie błędy. Wystarczyło poprawić styki i działało. W avrdude jakieś 2 razy miałem komunikaty typu "safemode: hfuse changed! Was d9, and is now 00 Would you like this fuse to be changed back?" (podaję teraz przypadkowe wartości, bo nie pamiętam dokładnie), wpisałem "n".
    Dodałem czujnik temperatury DS18B20 i wyświetlacz OLED na sterowniku SSD1306. Wgrałem odpowiedni program. Za bardzo to nie działało - wyświetlacz nie świecił, WiFi łączyło z routerem, ale nie z serwerem. Wgrałem program przykładowy dla wyświetlacza - też nie działało. Sprawdziłem fusy - okazały się trochę zmienione - nie do końca wiem czemu (pewnie z powodu tych błędów wcześniej). Ustawiłem poprawne i wyświetlacz się zaświecił.
    Postanowiłem ponownie wgrać poprzedni program z WiFi, OLED i czujnikiem. Był odczyt, zapis, odczyt tego co wgrał, weryfikacja... i tutaj znowu pojawił się problem:

    Kod: dos
    Zaloguj się, aby zobaczyć kod

    Od tej pory nie ma jakiejkolwiek komunikacji z ATmegą. Nie pomaga poprawianie styków. Komunikaty z avrdude (próbowałem używać też SLOW SCK):
    Kod: dos
    Zaloguj się, aby zobaczyć kod


    Dołączam pełny kod programu, zaktualizowany schemat (złącze KANDA z perspektywy żenskiej wtyczki, a Vcc jest albo nie, gdy zasilam z zewnątrz) i zdjęcia układu.
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Programator nie wykrywa ATmegi328P po nieudanym wgrywaniu programu
    Programator nie wykrywa ATmegi328P po nieudanym wgrywaniu programuProgramator nie wykrywa ATmegi328P po nieudanym wgrywaniu programuProgramator nie wykrywa ATmegi328P po nieudanym wgrywaniu programu

    Układ zasilam zasilaczem DC 9 V/0,6 A na wyjściu - może być za dużo albo za mało prądu? No ale nawet jak odepnę któreś z peryferiów, to nic się nie dzieje.
    Czy gdybym kupił moduł USB <> UART i wgrywał z użyciem bootloadera, byłoby bezpieczniej?
    Wybaczcie być może głupie pytania, ale siedzę nad tym projektem długo, wydałem już kupę forsy, tak ostrożny jestem z tym wszystkim, a cały czas coś nie wychodzi... Dalej nie mam pojęcia, dlaczego wgrywając (chyba) dobre programy do (chyba) dobrze podłączonego układu wszystko się psuje. Przeglądałem Internet, ale nie znalazłem odpowiedzi.
    Da się coś z tym zrobić?

    0
  • #13 05 Lut 2018 22:31
    lukaszd82
    Poziom 23  

    Niech jeszcze ktoś to potwierdzi bo mało na Atmega328P robiłem, ale czy aby ten procesor przy 16Mhz nie potrzebuje zasilania 5V? Dodatkowo całość zasilasz z MB102 a tu na 3,3V wyciśniesz max ok 300mA. Ja zawsze Atmega 328P zasilałem z 3,3V przy 8Mhz.

    0
  • #14 05 Lut 2018 22:39
    mrWiWi
    Poziom 5  

    Hmmm... Próbowałem wypiąć WiFi i OLED, które wymagają 3,3 V i przełączyłem się na 5 V. Czy to by mogło zadziałać? Bo u mnie nie zadziałało. Zresztą pierwsza z trzech ATmeg zepsuła się, będąc zasilana 5 V, a WiFi było podłączone jak w pierwszym poście. Czy zmiana kwarcu na 8 MHz mogłaby pomóc?
    Ogólnie to mój pierwszy praktyczny projekt, który robię.

    0
  • #15 05 Lut 2018 22:46
    lukaszd82
    Poziom 23  

    Na płytce stykowej pomiędzy +3,3v a Gnd jest cewka 20mH? Chyba coś tam źle podpiąłeś.
    I taka mała uwaga, część płytek stykowych nie ma przejścia linii zasilania za połowę płytki. Należy to sprawdzić i ewentualnie porobić mostki.
    Jeśli zrobiłeś zwarcie na 3,3v to stabilizator na MB102 jest uszkodzony i masz pełne zasilanie na procka.... Zmierz napięcia z MB102 (płytki zasilającej).
    Sprawdź procesor podpinając go z zasilania usbasp. Wypnij wszystko poza prockiem, zasilaniem z programatora 5v, zostaw kwarc.

    0
  • #16 05 Lut 2018 23:27
    mrWiWi
    Poziom 5  

    Cewka jest na zasilaniu - miała być przy AVCC, faktycznie trochę w złym miejscu, ale na pewno nie między 3,3 V a GND. Linie zasilania przechodzą za połowę, nie ma zwarcia, upewniłem się miernikiem - przy 5 V jest ok. 4,97, a przy 3,3 V - ok. 3,29).
    Wypinanie wszystkiego też już przechodziłem, bez skutku. Sprawdzałem wszystko na zasilaniu z MB102 albo z programatora. Jakby co to mam dwa programatory :P

    0
  • #17 06 Lut 2018 07:02
    rs6000
    Poziom 26  

    Widzę, ze używasz usbasp i avrdude w wersji 6.3 (prawdopodobnie z arduino IDE 1.8.x), niestety ta wersja avrdude ma problem z prawidłowa obsługa części programatorow usbasp. Podmien avrdude na 5.1 wraz plikiem konfiguracje avrdude.conf i powinno być ok, lub odinstaluj obecne arduino IDE i zainstaluj 1.0.6.
    Tu znajdziesz wiecej info https://www.elektroda.pl/rtvforum/viewtopic.php?p=16980003#16980003

    Pozdr

    0
  • #18 06 Lut 2018 07:23
    J_23_666
    Poziom 13  

    Troszkę odwrotnie narysowałeś złącze Kanda programatora, ale połączenia na zdjęciach wyglądają poprawnie.
    Spróbuj w złączu programatora (na tasiemce) przepiąć ten niebieski GND ze styku 9 na styk nr 3 wg Twojego schematu. Niektóre programatory na 9 (Twojej) nie mają GND połączone.

    Dodano po 12 [minuty]:

    I chyba RESET na którymś zdjęciu, źle na tasiemce połączony. Nie jednoznaczne, nie wyraźne zdjęcie w tym szczególe.

    0
  • #20 06 Lut 2018 20:08
    mrWiWi
    Poziom 5  

    Próbowałem robić tak jak mi podpowiedzieliście, ale nie pomogło. Tak sobie myślałem co by mogło być przyczyną problemów. Doszedłem do wniosku, że przeciążyłem układ. Potwierdźcie, czy dobrze myślę: zasilacz (z routera) daje prąd max 600 mA, moduł zasilania do płytki stykowej ma obciążalność max 700 mA (przy 3,3 V podobno spada to 300 mA). I teraz tak: ATmega coś pobiera, WiFi w porywach może brać 200-300 mA - i o ile tylko one działają, to jest prawie w porządku. Ale jak dokładam OLED i czujnik temperatury to układ się przeciąża, dochodzi do jakiegoś przekroczenia wartości krytycznych i procesor siada.
    Układ ATmega + czujnik + OLED + sterownik z jedną diodą LED działał bezbłędnie. Tak samo ATmega + WiFi. Połączenie wszystkich elementów kończyło się porażką. Czy do tych samych efektów doprowadziłoby podłączenie do sterownika 5 diod RGB (20 mA * 3 * 5 = 300 mA)?
    Zamierzam polutować układ na płytce uniwersalnej, zastosować przetwornicę step down 5 V -> 3,3 V dla WiFi i wyświetlacza. Zasilacz tym razem będzie inny: 5 V/2 A. Nie przesadzę w drugą stronę z prądem dla ATmegi?
    Czy to co napisałem ma sens?

    0
  • #22 10 Lut 2018 20:22
    mrWiWi
    Poziom 5  

    Problemy już rozwiązane :D Pomogło polutowanie całego układu, użycie przetwornicy i porządniejszego zasilacza.

    0