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

Atmega16 - program nie działa po wgraniu, sprawdzenie fuse bitów i kodu

wojgore 10 Maj 2012 08:18 1940 29
  • #1 10880336
    wojgore
    Poziom 9  
    W trakcie pracy z Atmegą16 zaczęło się coś sypać. Po kolejnych modyfikacjach i wgraniu programu przestał się wykonywać. Dla sprawdzenia co jest nie tak napisałem prosty program, żeby zobaczyć czy on zadziała, ale niestety.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Fuse bity:
    hFuse : D9
    lFuse : E1
    Lock bit: 3F

    Wszystko się ładnie kompiluje i wgrywa bez żadnych problemów, pomijając ten jeden, że nie działa. Czego to może być wina, proszę o pomoc.
  • #3 10880457
    wojgore
    Poziom 9  
    Po tym programie oczekuje, żeby wystawił stan wysoki na połowie portu A, a otrzymuje stan niski na całym porcie, co oznacza, że coś po drodze nie zadziałało jak potrzeba.
  • #4 10880572
    piotrva
    VIP Zasłużony dla elektroda
    Spróbuj:
    
    #include<avr/io.h>
    
    int main(void){
        DDRA=0xFF;
        PORTA=0xF0;
        while(1);
    }
    
  • #5 10880614
    wojgore
    Poziom 9  
    Tu raczej nie chodzi o błąd w kodzie, bo właściwie nie ma gdzie. Żeby nie było sprawdziłem Twój kod i też nic. Procek jest raczej OK (sprawdziłem na 2 płytkach), programator wydaje się w porządku, bo widzi procek i programuje bez marudzenia. I tu się nasuwa pytanie, jeśli nie to, to co?
  • #7 10880694
    piotrva
    VIP Zasłużony dla elektroda
    Dokładnie, albo coś masz źle połączone, albo procek uszkodzony - pamiętaj, że to że procek komunikuje się z programatorem nie oznacza że jest sprawny...
  • #8 10880695
    wojgore
    Poziom 9  
    Jest to bardzo prosty układ składający się z układu zasilania oraz mikrokontrolera (wraz z 4 kondensatorami separującymi 100 nF). Wyjścia mikrokontrolera są wyprowadzone na listwę typu goldpin i już . Obecnie nie korzystam z układu zasilania , gdyż zasilanie jest czerpane z programatora. a jest jeszcze złącze do programowania 6 pinowe i koniec schematu.

    Mogę napisać nawet jeszcze, że układ elektrycznie jest poprawny gdyż 3 miesiące temu był na nim odpalany wyśietlacz graficzny i wszystko działało i się programowało. dopiero 2 dni temu wgrywanie tego samego kodu nie dało nic więc zacząłem sprawdzać wszystko po kolei począwszy od prostego kodu na wystawienie wysokiego stanu na pin.

    @piotrva:
    procek jest raczej sprawny bo ten program został wgrany na 2 różne płytki, po czym na jednej z nich "na wszelki" został przelutowany procek
  • #10 10880742
    wojgore
    Poziom 9  
    układ:
    Atmega16 - program nie działa po wgraniu, sprawdzenie fuse bitów i kodu

    Build started 10.5.2012 at 11:24:13
    avr-gcc.exe -mmcu=atmega16 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT test.o -MF dep/test.o.d -c ../test.c
    avr-gcc.exe -mmcu=atmega16 -Wl,-Map=test.map test.o -o test.elf
    avr-objcopy -O ihex -R .eeprom test.elf test.hex
    avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex test.elf test.eep || exit 0
    avr-objdump -h -S test.elf > test.lss

    AVR Memory Usage
    ----------------
    Device: atmega16

    Program: 122 bytes (0.7% Full)
    (.text + .data + .bootloader)

    Data: 0 bytes (0.0% Full)
    (.data + .bss + .noinit)


    Build succeeded with 0 Warnings...
    [/img]
  • #11 10880755
    dondu
    Moderator na urlopie...
    1. Zacznijmy od tego, że nie masz podciągniętego resetu do Vcc.

    2. Wygląda także na to, iż przylutowane przewody zasilające, zasilają jedynie piny 17 i 18 chyba, że nie widzę przelotek po drugiej stronie płytki lub ścieżek pod mikrokontrolerem.

    Zacznij od prawidłowego podłączenia mikrokontrolera: http://mikrokontrolery.blogspot.com/2011/04/minimalne-podlaczanie-pinow.html

    A kondensatory filtrujące montuj jak najbliżej pinów mikrokontrolera.
  • #12 10880841
    wojgore
    Poziom 9  
    co do resetu racja wisiał sobie. podciągnąłem. zasilania są podłączone prawidłowo(sprawdziłem już n-ty raz). problem pozostaje
  • #13 10880859
    dondu
    Moderator na urlopie...
    wojgore napisał:
    zasilania są podłączone prawidłowo(sprawdziłem już n-ty raz).

    Konkretnie - czy wszystkie 8 pinów zasilających jest podłączone?

    Program podany przez piotrva jest tak prosty, że jeżeli prawidłowo programujesz uC i masz tak ustawione fusebity jak podałeś, to musi działać. Pozostaje więc niestety albo złe połączenia na PCB, albo jak już pisał piotrva uszkodzony uC.

    Ostatnia deska ratunku, to po zaprogramowaniu uC odłącz programator.
  • #14 10880883
    wojgore
    Poziom 9  
    Tak, 4x GND 4x Vcc jest podpięte.
    Co do procka to jeszcze raz opisze jak kolejne etapy wyglądały:
    1. Program działa na płytce nr1
    2. Zmiana programu + kolejne jego wgranie, brak oznak na płytce że program działa
    3. Próba wgrania prostego programu na tą samą płytkę. Nie działa
    4. Zmiana płytki na tą pokazaną na zdjęciu (działała wcześniej). Ten sam prosty program. Nic
    5. Przelutowanie procka na płytce nr2
    6. Wgranie prostego programu. Brak efektów.

    Tak wiec myślę że szansa że wszystkie 3 procki (w tym jeden świeży) są uszkodzone i nawaliły w tym samym momencie jest mała
  • #16 10880910
    wojgore
    Poziom 9  
    Hm no odczytać zawartość mogę, ale to będzie w hexie, co mi nie wiele da(chyba że czegoś nie wiem). A co do fuse bitów, to są cały czas takie jak podałem na początku
  • #17 10880924
    dondu
    Moderator na urlopie...
    wojgore napisał:
    Hm no odczytać zawartość mogę, ale to będzie w hexie, co mi nie wiele da(chyba że czegoś nie wiem). A co do fuse bitów, to są cały czas takie jak podałem na początku

    Odczytaj i sprawdź, czy odczytany hex jest zgodny z tym, którym programujesz uC oraz sprawdź, czy odczytane fusebity są na pewno tak jak podałeś.

    A czy czasem nie masz wyłączonej opcji czyszczenia flash'a uC przed ponownym programowaniem?
  • #18 10880937
    wojgore
    Poziom 9  
    Odczytanie hexa i sprawdzenie czy to to samo co programuje to chyba załatwia opcja VERIFY przy programowaniu (no bo chyba na 2 kompach nie zaczęło się to równolegle sypać).
    A co do czyszczenia procka przed programowaniem to czyszczony jest za każdym razem.
  • #19 10880943
    dondu
    Moderator na urlopie...
    wojgore napisał:
    Odczytanie hexa i sprawdzenie czy to to samo co programuje to chyba załatwia opcja VERIFY przy programowaniu ..

    Tak.

    wojgore napisał:
    A co do czyszczenia procka przed programowaniem to czyszczony jest za każdym razem.

    No to ja już nie mam więcej pomysłów :(
  • #20 10880947
    wojgore
    Poziom 9  
    Jedyne co mi pozostaje to zdobycie innego programatora. To jedyny element wspólny wszystkich układów i programów. Może się w jakiś dziwny sposób zepsuł tak że procek i komp uważa że jest wszystko w porządku.
  • #21 10880953
    dondu
    Moderator na urlopie...
    Skoro punkt 1 (czyli pierwsze programowanie) przechodzi OK, a wysypuje się na pkt 2, to nie bardzo widzę problem w programatorze, ale spróbować zawsze warto. Co to za programator?

    A co oznacza zmiana programu:

    wojgore napisał:
    2. Zmiana programu + kolejne jego wgranie, brak oznak na płytce że program działa

    Na jaki?
  • #22 10880990
    wojgore
    Poziom 9  
    Co do zmiany programu, to nie było nic znaczącego. Dodanie linii wprowadzającej opóźnienie.

    Co do programatora to: STK500 AVR-doper
  • #24 10881003
    wojgore
    Poziom 9  
    Nie mogę niestety pokazać programu, bo to własność firmy.
    Dodana linijka to zwykły:
    _delay_ms(250);
  • #25 10881015
    dondu
    Moderator na urlopie...
    wojgore napisał:
    Nie mogę niestety pokazać programu, bo to własność firmy.
    Dodana linijka to zwykły:
    _delay_ms(250);

    Coś chaotycznie tłumaczysz, trzeba Ciebie ciągnąć za język by po wielu postach dowiedzieć się, że program niedziałający, to zupełnie inny program niż te, które tutaj są pokazane. W ten sposób tracisz czas Ty i my.

    Co jest własnością firmy? Program z Twojego pierwszego postu z dodatkową linijką opóźnienia? Temat zaczyna zahaczać o Kosz.
  • #26 10881091
    wojgore
    Poziom 9  
    No to powoli żeby nie było nieporozumień. myślałem że pytasz o kod jaki był na procku gdy to wszystko się zaczęło(czyli pierwsze objawy że coś nawaliło). Wtedy na procku był dość spory program którego nie mogę tu zamieścić, a jedyną zmianą do wersji poprzedniej było dopisanie linii opóźniającej. Następnie wgrałem prosty program (co napisałem w pkt 3) i to on znajduje się w pierwszym moim poście
  • #27 10881193
    piotrva
    VIP Zasłużony dla elektroda
    A co masz podpięte pod nogi procesora? Jak sprawdzasz stany? Nie zrobiłeś jakiegoś zwarcia? Czy oryginalny program, przed dodaniem tego opóźnienia działa czy nie?
  • #28 10881281
    wojgore
    Poziom 9  
    Oryginalny program działał. Ciężko winić samą linijkę opóźnienia, bardziej fakt przepinania od programatora do układu. Po prostu przestało działać przy tej zmianie.

    W układzie ze zdjęcia pare postów wyżej Port A na którym ma się coś pojawić wychodzi na goldpiny, nie jest podpięte nic. Zwarć szukałem nie znalazłem. Stany sprawdzam miernikiem, przykładając między dany bit portu A a masę.
  • #29 10881417
    piotrva
    VIP Zasłużony dla elektroda
    A czy teraz po wgraniu oryginalny program działa? Czy nie ma w okolicy materiałów, które Ci mogły jakimś wyładowaniem elektrostatycznym strzelić (np. pokrycie fotela + koszula)? Czy masa programatora i układu są/były zawsze połączone?
  • #30 10884013
    wojgore
    Poziom 9  
    Sprawę można uznać za zamkniętą. Po wymianie programatora wszystko śmiga. Musiał się najwidoczniej uszkodzić w jakiś przedziwny sposób, że po zaprogramowaniu i weryfikacji nie było komunikatów o błędzie
REKLAMA