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

ATmega16 - Błąd rc=-1 i nieznana sygnatura przy programowaniu USBasp

azeros 12 Lut 2013 15:08 3357 29
  • #1 11924324
    azeros
    Poziom 11  
    Witam, przyszedł mi mikrokontroler ATmega16, więc wszystko popodłączałem i chciałem go zaprogramować. No i zaczęły się schody. Wszystko jest dobrze podłączone, sprawdzałem kilka razy, a avrdude wypluwa błąd rc=-1, i nieznana sygnatura. Sprawdzałem połączenia miernikiem, na ustawieniu sprawdzania diod, i się okazało, że nie ważne której nóżki bym dotknął sondą to i tak wykrywa połączenie na kablu podłączonym do MISO, MOSI, SCK i Reset. Ponadto, wykrywa mi także połączenie między + i - na płytce stykowej. Nie mam pojęcia co robić... Programator do procka podpięty jest kabelkami z goldpinami, więc nic nie wypada, i wszystko się dobrze trzyma.
  • #3 11924403
    mirekk36
    Poziom 42  
    Polecam ci obejrzeć ten poradnik:

    http://mirekk36.blogspot.com/2012/12/avr-jak-zaczac.html

    Nie przejmuj się, że tam mowa o programie MkAvrCalculator, który akurat w wersji free nie będzie działał z twoim prockiem m16, ale spokojnie możesz skorzystać nie tylko z jego podpowiedzi odnośnie wywoływania avrdude w konsoli lecz także zainstalować sobie z jego zakładki "Ustawienia" poprawną wersję AVRDUDE, a wtedy wszystkie porady będą aktualne.

    Sprawdź też czy przypadkiem nie pomyliłeś pinów w złączu programatora - rzuć okiem proszę tutaj:

    http://mirekk36.blogspot.com/2012/06/isp-kanda-koniec-problemow.html
  • #4 11924406
    tmf
    VIP Zasłużony dla elektroda
    To co kolega dondu wyżej radzi to oczywiście podstawa, ale z drugiej strony jest to w ostatnich 2 tygodniach kolejny wątek o problemach z USBasp. Naprawę zaoszczędzenie 30 zł na klonie niesprawiającego najmniejszych problemów AVRISPMkII jest takie istotne?
    Wynalazki typu USBasp mają rację bytu jeśli chcesz zaprogramować 1-2 procki i o tym zapomnieć, ale nie jeśli w świat AVR chcesz wniknąć na dłużej.
    Co do twoich problemów z miernikiem - układy scalone mają zabezpiecznia wejść, jeśli nie są zasilane przy pewnych polaryzacjach sondy wykryjesz to jako zwarcie. Podobnie jako coś w stylu zwarcia uzyskać mierząc Vcc i GND - w końcu ukłąd pobiera prąd, więc opór pomiędzy tymi pinami jest skończony. Opisz dokładniej co to za programator, jakie masz zasilanie, schematy połączenia.
  • #5 11924635
    azeros
    Poziom 11  
    Mirek oglądałem ten poradnik już, mkavrcalculator też mi instalował avrdude. Przewody wszystkie podłączone do złącza dobrze.

    Programator ten http://electropark.pl/programatory/284-programator-dla-avr-na-usb-usbasp-5901000284009.html , zworka numer 3 przestawiona na OFF (zresztą na ON też nie działa), zasilanie z programatora. To jest zdjęcie układu, dalej jest tylko podłączona dioda i rezystor.
    https://obrazki.elektroda.pl/1053739100_1360682292.jpg . Kabelek MOSI podłączony do wejścia w złączu od strony kluczyka, przy czerwonym przewodzie. Podłączyłem diodę zamiast do nóżki procka, to do masy na płytce stykowej, plus owej diody jest podłączony przez rezystor do plusa na płytce, po podłączeniu programatora powinna się świecić? Diodę sprawdziłem miernikiem - działa.
  • #6 11924740
    dondu
    Moderator na urlopie...
    Choć na problem samego zaprogramowania nie powinno mieć to znaczenia, ale czy prawa szyna masy na stykówce jest podłączona? Na zdjęciu połączone są tylko szyny zasilania po stronie dodatniej.

    Poza tym na stronie, która podałeś jest dokumentacja techniczna i manual do tego programatora - sprawdzałeś?
  • #7 11924810
    azeros
    Poziom 11  
    Sorry, zapomniałem napisać. Prawa szyna masy jest podłączona, tyle że po drugiej stronie płytki. Manuala przerobiłem, dokumentację techniczną także - zasilanie nie było podawane ponieważ w instrukcji źle napisali, pierwszy przełącznik służy do zasilania układu z programatora. I owszem, zasilanie płynie, ale nie zmienia to faktu że procek nadal nie chce się zaprogramować.


    E: Gitarka. Przełączyłem jeszcze 3 przełącznik na ON, czyli uC pracuje z częstotliwością mniejszą niż 1,5MHz. Dzięki dondu za zwrócenie uwagi na dokumentację techniczną ;)

    Dodano po 1 [godziny] 37 [minuty]:

    Wybaczcie doublepost, ale już z tym nie wyrabiam, a nie chcę zakładać nowego tematu dla migającej diody... No więc spisałem sobie program z poradnika Mirka, żeby sprawdzić czy wszystko jest ok.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Kompiluje się dobrze, atmega się programuje, ale dioda świeci się cały czas, żadnego migania. Nawet jeśli diodę podłączę do PB2, i w kodzie pozmieniam też PB1 na PB2 to wtedy się nie świeci, a jeśli znowu podłączę ją do PB1 to znowu się świeci.
  • #8 11925412
    dondu
    Moderator na urlopie...
    azeros napisał:
    Dzięki dondu za zwrócenie uwagi na dokumentację techniczną ;)

    Tak czasami bywa, że człowiek się zapomni. Ja ostatnio także zadałem pytanie niepotrzebnie, bo w manualu kompilatora C18 wszystko było pięknie opisane :)

    Żadnych warningów, czyli F_CPU masz w opcjach wpisane?
    Pokaż schemat jak to masz połączone - pamiętaj, że schemat to podstawa.
  • #9 11925475
    azeros
    Poziom 11  
    Żadne warningi nie wyskakują, nie wiem czy mam wpisane F_CPU, dzisiaj się rozpoczęła moja przygoda z mikrokontrolerami, więc moja wiedza jest w granicach zera. Dioda jest podłączona do nóżki PB1, oraz rezystorem 220R do plusa na płytce. Na prawdę konieczny będzie schemat do takiego prostego układu?
  • #10 11925499
    dondu
    Moderator na urlopie...
    azeros napisał:
    Żadne warningi nie wyskakują, nie wiem czy mam wpisane F_CPU, dzisiaj się rozpoczęła moja przygoda z mikrokontrolerami, więc moja wiedza jest w granicach zera.

    Więc dioda może mrugać, a Ty o tym nie wiesz, bo może robic to zbyt szybko :-)
    Choć przy takim programie, nowym mikrokontrolerze z nieprzestawianymi fusebitami, nieustawienie F_CPU powinno dać mrugającą diodę. Ale skoro nie masz warninga to trochę dziwne? Pokaż komunikaty z kompilacji.


    azeros napisał:
    Dioda jest podłączona do nóżki PB1, oraz rezystorem 220R do plusa na płytce. Na prawdę konieczny będzie schemat do takiego prostego układu?

    Samo podłączenie diody to nie wszystko: http://mikrokontrolery.blogspot.com/2011/04/minimalne-podlaczanie-pinow.html

    Dlatego ważne są schematy, tym bardzie jeżeli jak piszesz właśnie zacząłeś przygodę.
    Dlatego rysuj schemat dla siebie i dla nas, byśmy mogli Ci szybciej pomóc, byś na 1 stopniu piekiełka nie stał niepotrzebnie :-)

    Na takim schemacie sam szybko własne błędy wyłapiesz.


    EDIT:
    Gdzie ustawiać F_CPU i dlaczego: http://mikrokontrolery.blogspot.com/2011/03/fcpu-gcc-gdzie-definiowac.html
  • #11 11925642
    azeros
    Poziom 11  
    
    **** Build of configuration Release for project PIERWSZY ****
    
    make all 
    Invoking: Print Size
    avr-size --format=avr --mcu=atmega16 PIERWSZY.elf
    AVR Memory Usage
    ----------------
    Device: atmega16
    
    Program:     116 bytes (0.7% Full)
    (.text + .data + .bootloader)
    
    Data:          0 bytes (0.0% Full)
    (.data + .bss + .noinit)
    
    
    Finished building: sizedummy
     
    
    **** Build Finished ****
    

    o to chodzi? Schemat postaram się wrzucić niedługo, tylko dowiem się co i jak narysować.
  • #12 11925672
    dondu
    Moderator na urlopie...
    Schemat możesz narysować na karce i wrzucić zdjęcie. Ważne by było wszystko dokładnie tak jak podłączyłeś. Jeżeli na kartce to opisz piny ich nazwami a nie numerami.

    Możesz w ostateczności użyć Paint'a i fragment datasheet z obudową mikrokontrolera.

    A w przyszłości Eagle: http://mikrokontrolery.blogspot.com/2011/04/kicad-projektowanie-schematow-i-pytek.html
  • #14 11925777
    dondu
    Moderator na urlopie...
    A RESET? Przeczytaj artykuł, który podałem Ci pisząc że diody to nie wszystko.
    W pierwszym poście podałem Ci link do najczęściej pojawiających się problemów, a w nim RESECIE:
    http://mikrokontrolery.blogspot.com/2011/04/P...a-stanu-powoduje-permanentny-stan-resetu.html
    Nie czytałeś ... a czas leci ...
  • #15 11925861
    azeros
    Poziom 11  
    Boże, przepraszam bardzo, zapomniałem na schemacie zaznaczyć... Reset jest podciągnięty do Vcc przez rezystor 10k, oraz kondensator 100nF. Bez kondensatora jest to samo.
  • #17 11925919
    azeros
    Poziom 11  
    Tak, wszystko podsumowałeś dobrze. Programuje się chyba prawidłowo, to mam w okienku po zakończeniu programowania
    
    
    Launching C:\WinAVR-20100110\bin\avrdude -pm16 -cusbasp -Uflash:w:PIERWSZY.hex:a 
    Output:
    
    avrdude: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.02s
    
    avrdude: Device signature = 0x1e9403
    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 "PIERWSZY.hex"
    avrdude: input file PIERWSZY.hex auto detected as Intel Hex
    avrdude: writing flash (116 bytes):
    
    Writing | ################################################## | 100% 0.60s
    
    avrdude: 116 bytes of flash written
    avrdude: verifying flash memory against PIERWSZY.hex:
    avrdude: load data flash data from input file PIERWSZY.hex:
    avrdude: input file PIERWSZY.hex auto detected as Intel Hex
    avrdude: input file PIERWSZY.hex contains 116 bytes
    avrdude: reading on-chip flash data:
    
    Reading | ################################################## | 100% 0.50s
    
    avrdude: verifying ...
    avrdude: 116 bytes of flash verified
    
    avrdude done.  Thank you.
    
    avrdude finished
    


    Korzystam z Eclipse, może trzeba coś gdzieś przestawić? Aha, i dioda świeci się tylko na PB1. Nie ważne jaki byłby kod, przykładowo taki sam kod jaki podałem wcześniej, tylko zamiast PB1 jest PB2, nie zmienia nic w działaniu układu - dioda świeci się na PB1, na PB2 natomiast jest wyłączona.
  • #20 11926082
    dondu
    Moderator na urlopie...
    1. Kondensator masz źle podłączony. Na razie możesz go w ogóle usunąć.
    2. Ta płytka stykowa, nie ma przerwy na szynach zasilania - zworki niepotrzebne, ale sprawdź multimetrem.

    Skoro:
    - programuje się poprawnie,
    - RESET podciągnięty do Vcc,
    - Fusebity nie zmieniane czyli prawdopodobnie 1MHz wewnętrzny
    to dioda powinna mrugać, a nie świecić cały czas.

    Masz jakiś oscyloskop? Jeżeli nie to: http://mikrokontrolery.blogspot.com/2011/04/darmowy-oscyloskop-i-analizator.html
    Warto byłoby zobaczyć, co jest faktycznie na pinie PB1.
  • #21 11926138
    azeros
    Poziom 11  
    Jak się podpiąć do tej karty dźwiękowej? Mam laptopa, więc rozkręcić na mogę. Może łatwiej byłoby po prostu wymienić mikrokontroler?
  • #23 11926239
    azeros
    Poziom 11  
    A bez tego oscyloskopu nic więcej nie wymyślisz? Miałbym duże obawy przed podłączaniem tego do kompa...
  • Pomocny post
    #24 11926280
    dondu
    Moderator na urlopie...
    Nie musisz się obawiać. Zwykły dzielnik rezystorowy jak w artykule wystarczy. Sprawdzałem osobiście - ładnie działa. Ale oczywiście rozumie Twoje obawy.

    Możesz po prostu zmienić długość opóźnienia próbując na większych i mniejszych niż 1000ms. Wtedy albo zobaczysz miganie, albo będziesz miał potwierdzenie, że mikrokontroler "stoi".

    Możesz także dodać przycisk i napisać program tak, by zapalał diodę, gdy przycisk jest naciśnięty i gasił w przeciwnym wypadku. To uniezależni Ciebie od ewentualnego problemu zbyt szybkiego zegara (chociaż teoretycznie nie zmieniałeś fusebitów).

    Możesz także próbować na innych pinach (co już robiłeś).

    No i w końcu możesz wymienić na inny jak sam zaproponowałeś, ale to ostateczność.
  • #25 11926366
    azeros
    Poziom 11  
    No więc tak: komputer zachciał mi instalować aktualizacje, więc zrezygnowany je zainstalowałem. Po ponownym uruchomieniu komputera, zaprogramowałem mikrokontroler jeszcze raz, i ku mojemu zdziwieniu dioda zaczęła migać... Dlaczego na to wcześniej nie wpadliśmy...
    Wielkie dzięki dondu za pomoc :)
  • #26 11926407
    dondu
    Moderator na urlopie...
    azeros napisał:
    ... komputer zachciał mi instalować aktualizacje, więc zrezygnowany je zainstalowałem. Po ponownym uruchomieniu komputera, zaprogramowałem mikrokontroler jeszcze raz, i ku mojemu zdziwieniu dioda zaczęła migać... Dlaczego na to wcześniej nie wpadliśmy...

    Nie pisałeś, to jak mogliśmy wpaść? :)
    Aktualizację czego? Windows'ów?
    Jeżeli tak, to małe prawdopodobieństwo, że to było przyczyną.

    Ważne, że działa :)
  • #27 11926470
    azeros
    Poziom 11  
    Tak, aktualizacja Windowsa. To na pewno nie było przyczyną, pewnie coś się z portem USB popaprało, a po restarcie się naprawiło, i zaczęło działać.
    E: Kurde, ale coś znów nie działa. Tak jakby program źle się wgrywał do mikrokontrolera, bo mimo zmiany programu, dioda nadal mruga tylko na PB1 i tylko przez 1 sekundę, mimo, ze zmieniłem na 2 sekundy, i na PB2...
  • #29 11926549
    azeros
    Poziom 11  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Kod jest dobry (już działa), problem w tym, że przed kompilacją i zaprogramowaniem mikrokontrolera trzeba restartować Eclipse. Spróbuję jutro z jakimś innym środowiskiem, mam nadzieję, ze pomoże.
  • #30 11926575
    dondu
    Moderator na urlopie...
    To jakiś drobny problem, nie należy od razu zmieniać całego środowiska :-)
    Zapytaj Mirekk36 on się w nim specjalizuje, to na pewno pomoże.

    Jeżeli jednak masz szybki komputer, to oryginalne Atmel Studio 6, zapewni ci to samo co Eclipse + wiele innych możliwości: http://mikrokontrolery.blogspot.com/2011/04/atmel-studio-spis-tresci.html
REKLAMA