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

ATmega 328P-PU - Nie mogę się połączyć (rc= -1)

24 Gru 2013 10:27 3606 8
  • Poziom 7  
    Witam.
    Jestem tutaj właściwie nowy, 2 dni temu przyszła mi paczka z moim pierwszym zamówieniem. Przeczytałem sporo kursów, obejrzałem wiele poradników dla początkujących na YT ale nadal nie mogę sobie poradzić z problemem. Mam mikrokontroler ATmega328P-PU bootloader Arduino, nowy jeszcze nie programowany ale za żadne skarby nie mogę się z nim połączyć. Ściągnąłem mkAVRCalculator Free ale przy probie sprawdzenia uC wyskakiwał mi komunikat o braku połączenia i błędzie rc=-1. Dzisiaj chciałem go odtworzyć i Wam pokazać ale teraz wyskakuje co
    innego a mianowicie
    Code:
    avrdude.exe: Can't find programmer id "usbasp"
    

    Valid programmers are:
      EvB      = FT232R Synchronous BitBang     [C:\avrdude\avrdude.conf:298]


    Od razu uprzedzam pytania połączenia. Sprawdzałem je wielokrotnie miernikiem, wszystko styka i jest na odpowiednim miejscu. Żadnego kwarcu nigdy nie używałem. Mam spiętą zworkę slow SCK.

    C:\>avrdude -p atmega8 -c usbasp -P usb -t
    Ta komenda w cmd wczoraj również zwracała rc=-1 a dzisiaj:
    Code:

    error at C:\WinAVR-20100110\bin\avrdude.conf:350 unrecognized character: "b"


    Przychodzi mi jeszcze do głowy, że to może to wina programatora. Na stronie sklepu jest napisane:

    Cytat:
    Wspierane mikrokontrolery:

    ATmega8, ATmega88, ATmega8515, ATmega8535, ATmega128, ATmega1280, ATmega1281, ATmega16, ATmega161, ATmega162, ATmega163, ATmega164, ATmega103, ATmega32, ATmega324, ATmega329, ATmega3290, ATmega48, ATmega64, ATmega640, ATmega644, ATmega649, ATmega6490
    ATtiny12, ATtiny13, ATtiny15, ATtiny2313, ATtiny24, ATtiny25, ATtiny26, ATtiny45, ATtiny84, ATtiny85
    AT90S2313, AT90S2333, AT90S1200, AT90S2343, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B, AT90CAN32, AT90CAN64, AT90CAN128


    Mojego na tej liście nie ma. Czy jest możliwe żeby był niekompatybilny z programatorem?

    Proszę pomóżcie albo dajcie jakieś wskazówki bo nie wiem co robić. Jestem jeszcze na tym etapie zabawy z elektroniką, że pytań jest zdecydowanie więcej niż odpowiedzi.
    Pozdrawiam i z góry dziękuję za pomoc
  • AM TechnologiesAM Technologies
  • AM TechnologiesAM Technologies
  • Poziom 37  
    skorpionek93 napisał:
    Witam.
    Mam mikrokontroler ATmega328P-PU bootloader Arduino, nowy jeszcze nie programowany ale za żadne skarby nie mogę się z nim połączyć. Ściągnąłem mkAVRCalculator Free ale przy probie sprawdzenia uC wyskakiwał mi komunikat o braku połączenia i błędzie rc=-1.
    ..................]

    Od razu uprzedzam pytania połączenia. Sprawdzałem je wielokrotnie miernikiem, wszystko styka i jest na odpowiednim miejscu. Żadnego kwarcu nigdy nie używałem. Mam spiętą zworkę slow SCK.

    C:\>avrdude -p atmega8 -c usbasp -P usb -t
    Ta komenda w cmd wczoraj również zwracała rc=-1 a dzisiaj:
    Code:

    error at C:\WinAVR-20100110\bin\avrdude.conf:350 unrecognized character: "b"


    Przychodzi mi jeszcze do głowy, że to może to wina programatora. Na stronie sklepu jest napisane:

    ..........Wspierane mikrokontrolery:


    Mojego na tej liście nie ma. Czy jest możliwe żeby był niekompatybilny z programatorem?


    Może zacznę od końca twoich pytań:
    To że twojego uC ne ma na liście wspieranych processorów przez programator, nie znaczy wiele. Jezeli jest m8, m48, m88 itd, to i twój też nie rózni się od nich pod względem sposobu kommunikacji i programowania.

    Zwracany błąd podczas próby komunikacji mówi tylko o jej braku niezależnie od poprawności podłączeń.
    1. Czy masz zainstalolwany odpowiedni driver (sterownik) w Windows rozpoznający twój programator jako 'USBasp' ? Jezeli nie, to byłaby jedna z możliwych przyczyn.
    Jest wiele instrukcji w internecie jak tego dokonac, byc może dostałeś ja łącznie z programatorem (zależy gdzie kupiony!). Jeżeli masz z tym trudności to przestudiuj tę stronę:
    http://www.freetronics.com/pages/usbasp-icsp-programmer-quickstart-guide#.Urm3fbRjWSo
    2. Jezeli powyższe masz za sobą, to następna sprawa:
    Cytat:

    ....mikrokontroler ATmega328P-PU bootloader Arduino, nowy jeszcze nie programowany....

    Jeżeli tam w nim jest 'wypalony' Arduino bootloader, to można się spodziewac że dokonano również zmiany fusebitów do współpracy z bootloaderem i kwarcem 16 MHz w stylu arduino. W takiej sytuacji należałoby dowiedziec się jak faktycznie są ustawione te fusebity.
    Rozumiem że ten nowy processor Mega328P masz zanstalowany gdzies na oddzielnej płytce (stykowej?), podłącz do niego dowolny quartz (w tym miejscu nie ma znaczenia jego 'f').
    Załóżmy że masz poprawnie zainstalowany driver w Windows i programmer figuruje jako 'usbasp';
    Na razie zostaw na boku te kolorowe graficzne nakładki (zabawki) na avrdude
    i staraj się odczytac z uC bezpośrednio to co potrzebujesz.
    Niezależnie od bootloadera i ustawionych fusebitów, powinienes tu uzyskac łącznośc z processorem.
    w Windows:
    Start/Run>wpisz 'cmd' - otworzy ci sie znane okno 'dosowe'.
    At command prompt wpisz:
    avrdude -B25 -c usbasp -p m328 -t pause
    -naciśnij Enter
    tu wchodzisz w terminal mode i powinieneś otrzymac info o kommunkacji z processorem kończace się:
    avrdude>_
    dalej wpisz: dump lfuse
    -naciśnij enter ; tu powinieneś otrzymac faktyczne ustawienia dolnego bajtu fusów w postaci hex.
    -dalej kolejno wpisz: dump hfuse
    - otrzymasz w odpowiedzi hex wartośc górnego bajtu fuseów;
    podobnie uzyskasz wartośc fusów 'extended' wpisując: dump efuse.
    na zakończenie sesji nie zapomnij wpisac 'quit'.
    Uzyskane wartości fusebitów pozwolą określic jak masz w dalszym ciągu go programowac. Przełącznik -B25 służy do zmniejszenia prędkości transmisji z processorem; czym wyższa liczba przy B -tym wolniejsza kommunikacja, maxymalnie możesz wpisac 64. Więcej info na ten temat znajdź w podanym linku.
    Jeżeli tę procedurę masz za sobą z wynikiem pozytywnym, to możesz przystąpic do wpisania programu.
    W dalszym ciągu radziłbym stosowac podobna procedurę z linii poleceń.

    e marcus
  • Poziom 7  
    Niestety nie mam już dzisiaj dostępu do mojego uC i reszty sprzętu bo trzymam wszystko w pracy ale jutro sprawdzę to rozwiązanie i na pewno dam znać jak wyszło.
    Apropos driverów to na pewno wszystko jest ok, windows rozpoznaje urządzenie a podczas próby sprawdzenia uC w mkAVRCalkulator miga czerwona diodka na programatorze.
    Bardzo mnie cieszy odpowiedź, że to raczej nie problem niekompatybilnego programatora bo tego się obawiałem najbardziej.
    Pozdrawiam
  • Poziom 7  
    Niestety nic to nie dało. mam komunikat:
    Code:
    avrdude: set SCK frequency to 32000 Hz
    
    avrdude: error: programm enable: target doesn't answer. 1
    avrdude: initialization failed, rc=-1
             Double check connections and try again, or use -F to override
             this check.


    Mam podłączony rezonator kwarcowy (12 MHz ale kolega pisał, że to nie jest istotne jaki) do pinów XTAL1 i XTAL2. Podłączyłem go do masy zarówno bezpośrednio jak i poprzez kondensatory 22pF ale w obu przypadkach efekt ten sam. :(
    Powtórzę, że drivery programatora są dobrze zainstalowana, system rozpoznaje usbasp, wszystkie połączenia sprawdzone 10 razy multimetrem, wszystkie piny dobrze podpięte, a jak nie działało tak nie działa...
    Ma ktoś jeszcze jakiś pomysł co mogłem zrobić źle?

    Edit
    mkAVRCalkulator Free pokazuje znowu:
    Code:
    avrdude.exe: set SCK frequency to 187500 Hz
    
    avrdude.exe: error: programm enable: target doesn't answer. 1
    avrdude.exe: initialization failed, rc=-1
    avrdude.exe: AVR device initialized and ready to accept instructions
    avrdude.exe: Device signature = 0x000000
    avrdude.exe: Yikes!  Invalid device signature.
    avrdude.exe: Expected signature for ATMEGA8 is 1E 93 07


    W obu przypadkach jest napisane żeby ustawić częstotliwość ale w obu są inne wartości.
    Mam nadzieję, że komuś te komunikaty mówią więcej niż mi :(

    Cytat:
    Jeżeli tam w nim jest 'wypalony' Arduino bootloader, to można się spodziewac że dokonano również zmiany fusebitów do współpracy z bootloaderem i kwarcem 16 MHz w stylu arduino.


    Też tak wywnioskowałem z opisu produktu na stronie sklepu:
    Cytat:
    Układ posiada zainstalowany bootlader Arduino dla częstotliwości 16 MHz.


    Ale co z tym dalej zrobić?
  • Poziom 37  
    skorpionek93 napisał:
    Niestety nic to nie dało.

    Ma ktoś jeszcze jakiś pomysł co mogłem zrobić źle?

    Edit
    mkAVRCalkulator Free pokazuje znowu:

    avrdude.exe: set SCK frequency to 187500 Hz
    avrdude.exe: error: programm enable: target doesn't answer. 1
    avrdude.exe: initialization failed, rc=-1
    avrdude.exe: AVR device initialized and ready to accept instructions
    avrdude.exe: Device signature = 0x000000
    avrdude.exe: Yikes! Invalid device signature.
    avrdude.exe: Expected signature for ATMEGA8 is 1E 93 07



    Ale co z tym dalej zrobić?


    Darmowa (FREE) versja 'mkAVRCalkulator' nie obsuguje twojego mControlera(!) - obsługuje tylko ATmega8....
    Jeżeli nie posiadasz pełnej (commercjalnej) versji tego softu, to zapomnij o nim i ogranicz się do podstawowego avrdude, który jest w zasadzie bez ograniczeń i jest pewniejszy.
    Jeżeli chcesz dowiedziec się czy avrdude supportuje twój programmer, wpisz:
    avrdude -c asdf; Enter
    zechcesz odszukac czy twój processor jest obsługiwany, wpisz:
    avrdude -c avrisp; Enter
    Zakładam że masz zainstalowany Avrdude
    Dalej, jeżeli ta metoda nie pracuje to albo masz błedy w podłączeniu np. zasilania lub GND albo reset (co arbitralnie wykluczyłeś), abo zwyczajnie masz 'upieczony' processor.


    e marcus
  • Użytkownik usunął konto  
  • Poziom 27  
    Skoro 328 nie odpowiada, to najpierw należy założyć, że ma ustawione fusy na inne niż kwarcowe taktowanie. Pierwsze co zrób, to wykop ze swoich zasobów gotowy generator kwarcowy z wyjściem TTL (czteronóżkowa puszka blaszana z napisem xx MHz) i podłącz jej wyjście to pinu 9(XTAL1) w Mega328. Układ nóżek jest kompatybilny z układami TTL: 1=wolny, oznaczony kropką, 7=GND, 8=out, 14=Vcc. Taki układ działa z fusami ustawionymi obojętnie czy na zewnętrzne taktowanie, czy rezonator kwarcowy.

    Teraz sprawdź czy programator wykrywa sygnaturę.

    Notatka: jeżeli na pinie 10 (XTAL2) pojawi się sygnał zegarowy o takiej samej częstotliwości, jak wchodzi na XTAL1, tylko zanegowany i słabszy/mocniejszy (podczas gdy sygnał RESET jest nieaktywny), to znaczy, że fusy są ustawione na jedno z zewnętrznych taktowań.

    Jeżeli nie posiadasz takiego generatora, to na jednym tranzystorze łatwo można zrobić oscylator kwarcowy.

    Druga możliwość, to założenie, że fusy są ustawione na wewnętrzny oscylator 128kHz, lub zewnętrzny, zegarkowy kwarc 32768Hz. Ustaw programator, by komunikował się z procesorem w trybie "slow sck". Zakładając, że chodzi o wewnętrznie generowane 128kHz, ustaw SPI clock na ... bo ja wiem, żeby było uniwersalnie, to niech będzie nisko: 16kHz (128k/8).
    ** W tej części tematu nie mam doświadczenia, niech ktoś inny podpowie. Być może, aktywny prescaler nie ma wpływu na ISP.

    Kolejna możliwość to włączone DebugWire w 328. Konieczny będzie sprytniejszy programator, który potrafi to wyłączyć, gdyż wtedy pin RESET nie działa normalnie.

    Jeszcze inna możliwość, pewnie przesadna - czasowe nabycie płytki Arduino i wymiana procesorów, w celach testowych, ma się rozumieć. Programator będzie dostępny pod nazwą Arduino, po zainstalowaniu sterowników ze strony http://arduino.cc/en/Main/Software. Ale skoro 328 nie działa z kwarcem 16MHz, to ten sposób też odpada.

    Powodzenia!

    Aha, błąd w avrdude.conf też mi jest znany, ale nie potrafię sobie przypomnieć, które pakiety miały takie błędy (oficjalne WinAvr 2008/2010, AvrStudio. AtmelToolchain, czy też wersja z zasobów MkAvrCalc). Osobiście używam avrdude z pakietu Arduino, jako niedenerwujący.
  • Poziom 9  
    Miałem to samo, nie trzeba nic zmieniać w konfiguracji, po prostu procesor fabrycznie ustawiony wewnętrznie rezonator na 1MHz w wersji PU tego procesora. avrdude działa pewnie z większą prędkością stąd ten problem. Do zaprogramowania fure bitów na zewnętrzny 16MHz rezonator użyłem ISP prog, działa pod Windows 8.1 ale trzeba mieć LPT. Potem można programować już avrdude. Pewnie się jakoś da, ale nie chciało mi się wnikać i pewnie nie wszystkie programatory współpracujące z avrdude to obsługują obniżyć częstotliwość programowania.