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

Brak komunikacji pomiędzy USBasp a ATmegą328P na kwarcu 16MHz

mrWiWi 18 Sty 2018 15:27 786 4
  • #1 16970883
    mrWiWi
    Poziom 7  
    Cześć,

    kupiłem nową ATmegę328P do projektu na studia. Działała bez problemu przy prostych programach sterujących świeceniem diody. Schody zaczęły się gdy podpiąłem kwarc 16MHz i przestawiłem fusebity (lfuse = 0xFF). AVRDUDE co prawda wykrywał podpięte urządzenie, ale niepoprawna była jego sygnatura. Co ciekawe, przy każdym wywołaniu komendy zmieniała się. Czasami udawało się nawet trafić w sygnaturę charakterystyczną dla ATmegi328P, ale odczytywane wartości fusów bywały przekłamywane.
    Postanowiłem przywrócić pierwotne wartości fusebitów. W tym celu kupiłem ATmegę8A, żeby posłużyła jako generator częstotliwości. W ten sposób udało mi się przywrócić komunikację z ATmegą328P. Ale każda kolejna próba zmiany fusów kończyła się tym samym problemem. Nie dało mi się wypalić bootloadera Arduino, ponieważ IDE "nie widziało" ATmegi.
    Myśląc, że problem leży po stronie mikrokontrolera, kupiłem nową ATmegę328P już z wgranym bootloaderem. Przy okazji wymieniłem też kwarc. To też nie poprawiło sytuacji, nadal był ten sam problem. Uznałem, że wina leży po stronie programatora USBasp, kupiłem nowy, ale tu też bez zmian.
    Próbowałem przeinstalowywać sterowniki programatora, sprawdzałem na drugim komputerze, wymieniałem kondensatory 22pF, używałem zasilania zewnętrznego i z programatora, wpisywałem przełącznik -b do zmiany szybkości, wielokrotnie sprawdzałem przewody i nic. Wykluczam uszkodzenie mikrokontrolera, bo już wgrany program działa, np. migający diodą. Z kwarcem robi się to z większą częstotliwością.
    Kończą mi się pomysły, nie jestem w stanie wskazać winowajcy, a czas ukończenia projektu nieustannie się zbliża.

    Obecne ustawienia fusebitów: lfuse - 0xFF, hfuse - 0xDE, efuse - 0x05.

    Zdjęcie układu (linie zasilania i masy są połączone poniżej):
    Brak komunikacji pomiędzy USBasp a ATmegą328P na kwarcu 16MHz

    Błędy z avrdude:
    Kod: Dos
    Zaloguj się, aby zobaczyć kod


    Pozdrawiam
  • #2 16970939
    matej1410
    Poziom 25  
    Pamiętaj, że dla kwarcu >10MHz zasilanie ma być większe niż 4.5V.
  • Pomocny post
    #4 16970957
    michalko12
    Specjalista - Mikrokontrolery
    Te kondensatory przy kwarcu są właściwe? Próbowałeś z kwarcem o mniejszej częstotliwości?

    Dodano po 2 [minuty]:

    Próbowałeś bez tych szeregowych rezystorów 1k?
  • #5 16970984
    mrWiWi
    Poziom 7  
    @matej1410, po podpięciu drugiej ATmegi (jako generatora) przestawiałem fusy na wewnętrzny oscylator - zarówno na 1 MHz, jak i 8 MHz. Wszystko działało poprawnie. Fusy ustawiałem zgodnie z dokumentacją, potem znalazłem kilka poradników i wątków na forach i najczęściej takie wartości były zalecane.

    @tronics, przed chwilą badałem miernikiem linie zasilania - jest 4,97 V +- 0,01 V. Czy takie delikatne zmiany mogłyby wpłynąć na działanie układu? Mam kondensatory 100 nF pomiędzy Vcc a masą i cewkę 10 uH na zasilaniu.

    @michalko12, kondensatory przy kwarcu mają 22 pF (liczba 220 na obudowie). Próbowałem je podmieniać na inne egzemplarze i nie pomogło. Mniejszych kwarców nie sprawdzałem.

    Spróbowałem podpiąć SCK, MISO i MOSI z pominięciem rezystorów i wydaje się, że jest dobrze (choć efuse jest trochę inne) :D Spróbuję jeszcze coś wgrać z Arduino IDE.

    C:\Users\Wojciech\Desktop>avrdude -c usbasp -p atmega328p
    
    avrdude: warning: cannot set sck period. please check for usbasp firmware update.
    avrdude: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% -0.00s
    
    avrdude: Device signature = 0x1e950f (probably m328p)
    
    avrdude: safemode: Fuses OK (E:FD, H:DE, L:FF)
    
    avrdude done. Thank you.
    


    Dodano po 16 [minuty]:

    Faktycznie, problem sprawiały te rezystory. Myślałem, że muszą tam być i lepiej ich nie ruszać :P Programy z Arduino IDE się wgrywają. Dzięki za pomoc!
REKLAMA