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

[Atmega128][c++] Atmega 128 nie działa przy małych modyfikacjach programu

przemczechu 06 Lip 2011 17:33 4729 39
  • #1 9689297
    przemczechu
    Poziom 10  
    Witam!
    Mam problem z ATMEGĄ 128.
    Sprawa wygląda tak, że napisałem program na atmegę 8 - serwokontroler (pamięc mikrokontrolera zapełniłem na styk),
    Ten sam program odpaliłem na atmedze 128 (większa pamięc + więcej wyjśc, mógłbym zmodyfikowac program) - zaprogramowałem ten sam program co wchodził na atmegę 8 (bez modyfikacji).
    Mikrokontroler zaprogramował się pomyślnie i wszystko działało tak jak przy atmedze 8 (serwa chodziły tak jak powinny).
    Problem zaczyna się przy modyfikacji programu - starczy że dodam parę linijek kodu i wszystko się wali (oczywiście programator nie wywala żadnego błędu i programuje mikrokontroler....tylko że nic nie działa tak jak powinno - żadne serwo się nie kręci, a na wyjściach atmegi nie jest podawany sygnał).
    Wygląda to tak, że program działa do pewnego momentu - gdy nie przekroczę pewnego rozmiaru pamięci programu (coś koło 8000 bitów).
    Może byc jakieś tego wytłumaczenie??
    Z góry dzięki za pomoc.
    Pozdrawiam
    Przemek!
  • #2 9689424
    gaskoin
    Poziom 38  
    przemczechu napisał:
    Może byc jakieś tego wytłumaczenie??


    Coś źle zmodyfikowałeś.

    Proszę,
    pozdrawiam :)
  • #3 9689448
    piotrva
    VIP Zasłużony dla elektroda
    Tak, coś źle zmodyfikowałeś, albo źle przeniosłeś. Jak ustawienia Fusebitów? Nie masz włączonej zgodności z m103?
  • #4 9689582
    gaskoin
    Poziom 38  
    piotrva napisał:
    Tak, coś źle zmodyfikowałeś, albo źle przeniosłeś. Jak ustawienia Fusebitów? Nie masz włączonej zgodności z m103?


    Zgaduj dalej, może autor umieści jakiś kod ?
  • #5 9689781
    przemczechu
    Poziom 10  
    Po kompilacji programu atmega powinna zapodac sygnały na portach: PB1,PB2,PB3 - są to sygnały na 3 serwomechanizmy. U mnie właśnie nie ma tych sygnałów.

    Poniżej Kod programu:

    Kod: text
    Zaloguj się, aby zobaczyć kod



    EDIT:

    Wygląda to tak jakby została przekroczona pamięc programu.
    Po skróceniu programu wszystko działa, lecz po małych modyfikacjach np przypisaniu zmiennej L jakiejś wartości program przestaje działac (zmienna L nic nie wnosi do programu)
    dodaje załączniki: w pierwszym załączniku program działa, w drugim załączniku nie działa ponieważ dodałem dwa wiersze:
    L=1000:
    L=1;
    (wiersz 159,160 w funkcji prosta(...) )
  • #6 9690183
    janbernat
    Poziom 38  
    A próbowałeś z math.h?
  • #7 9690298
    przemczechu
    Poziom 10  
    janbernat, dzięki tobie po wstawieniu math.h
    większośc warningów zniknęło :)
    (zapomniałem wogóle że są warningi),
    ale program niestety dalej nie działa.

    warningi, które pozostały:
    
    
    pierwszy.c:10:1: warning: "F_CPU" redefined
    
    <command-line>: warning: this is the location of the previous definition
    
    In file included from pierwszy.c:15:
    e:/winavr-20071221/bin/../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete.  Use <avr/interrupt.h>."
    
    pierwszy.c:51: warning: built-in function 'gamma' declared as non-function
    



    EDIT:

    Ok usunąłem wszystkie warningi, ale program nadal nie działa :(
    A byłem taki szczęśliwy przez te 5 minut zanim zapisałem program na atmegę :\ hehe
  • #8 9690402
    janbernat
    Poziom 38  
    No, o tym że są warningi nie wolno zapominać.
    Ma być 0 ostrzeżeń- co i tak nie gwarantuje poprawnego działania.
    Pierwszy dotyczy zegara- zakomentuj i wstaw w opcje projektu.
    Wtedy będzie ten zam zegar we wszystkich plikach.
    Drugi dotyczy przestarzałej nazwy signal.
    Używasz interrupt- zakomentuj signal.
    Trzeci- coś źle napisałeś.
    Znajdź i popraw.
    Wogóle aż mi głupio komentować- ledwo liznąłem C i tak się wymądrzam.
    Poza tym wszędzie gdzie masz float zastanów się czy nie można by zmienić na int albo unsigned long albo long.
    To są małe procesory i nie lubią float.
  • #9 9690625
    przemczechu
    Poziom 10  
    janbernat, dziękuję za pomoc :)
    Wszystko co opisałeś poprawiłem - powinno hulać, ale niestety jest tak jak na początku, program nadal nie działa.

    zastanawiam się ciągle nad tym o czym pisałem wcześniej:

    program nie działa gdy w funkcję wstawię dwa wiersze:
    L=1000;
    L=1;

    natomiast gdy to usunę to wszystko chodzi tak jek powinno.
    (zauważyłem, że gdy pamięc programu zajmuje 5084b to wszystko działa, a gdy zajmuje więcej - coś koło 5352kb to już nie działa).
    Może to byc związane z przekroczeniem rozmiaru pamięci?
  • #10 9691204
    gaskoin
    Poziom 38  
    Programu czy RAM ?
  • #11 9693225
    przemczechu
    Poziom 10  
    Chodziło mi o przekroczenie pamięci programu.
    Zauważyłem, że niektóre moje programy które działają na atmedze8 nie działają na atmedze128 (te które nie działają mają więcej niż 5000bit)....Nie wiem już co o tym wszystkim myślec. Może są jakieś różnice w programowaniu między tymi dwoma atmegami?!
    Jest może na forum ktoś, kto miał podobny problem? (że niektóre kody działające na Atmedze8 nie działały na atmedze128)?
    Pozdrawiam
  • #12 9693752
    janbernat
    Poziom 38  
    Przerwań chyba gdzieś używasz- bo masz interrupt.h
    Ale w programie ich nie widać.
    Może to jednak nieśmiertelne volatile?
  • #13 9694503
    przemczechu
    Poziom 10  
    Stary, ja nawet nie wiem jak ustawic te przerwania (nigdy nad tym jeszcze nawet nie myślałem)... więc to chyba nie jest tego przyczyna :D
    no chyba że zrobiłem to nieumyślnie :) hehe
    można jakoś sprawdzic te przerwania??
  • #14 9694581
    gaskoin
    Poziom 38  
    Same z siebie się raczej nie ustawiają. Nawet jeżeli gdzieś byś ustawił rejestry przypadkiem to i tak w mainie nie masz sei();

    Bardzo ciężko analizować Twój kod, szczerze - nie podejmowałem nawet próby bo też wrzuciłeś jakiś bałagan. Pokomentowane fragmenty kodu, miliardy parametrów i obliczenia z kosmosu, niepotrzebnie includy - naprawdę ciężko się to czyta nie mówiąc o pomocy Tobie.

    Pokaż też może komunikaty jakie wypluwa kompilator, bo mogą one lepiej nas naprowadzić niż analiza tego kodu. Flasha raczej Ci nie braknie, nawet przy takim kodzie, RAM wydaje mi się, że też nie powinno braknąć.

    No i np:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Nie kapuje idei, po co jest ten start, skoro on nigdy nie będzie 0 i nigdy nie wyjdziesz z tej pętli ?
  • #15 9694712
    przemczechu
    Poziom 10  
    Ten kawałek powinien wyglądac tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Grzebałem coś gdy szukałem błędów w kodzie i zapomniałem cofnąc i wysłałem na forum kod (dlatego ta jedynka została).
    sorki za utrudnienie.

    Nie mam już żadnych warningów.

    Ten program który wkleiłem działa (oczywiście zakładając że ten start=0) na atmedze8 (czyli kod powinien byc prawidłowy), dopiero gdy wrzucam program na atmege128 - to atmega nie odpowiada (no i właśnie nie wiem dlaczego). I dziwne jest to że sprawdziłem tak już 6 programów na atmedze128 (wszystkie te programy działały na atmedze8) - i z tych 6 programów tylko 4 działały (te prostsze i krótsze - według mnie albo wszystko powinno działac albo nic).
    Może mam poprostu tę atmegę uszkodzoną - i nic się nie zrobi.
    Jeśli ktoś mógłby skompilowac ten kod u siebie, oraz zapisac plik na swojej atmedze128 i powiedziec czy program działa, byłbym naprawdę bardzo wdzięczny :) i byłbym pewny na 100% że mam coś nie tak z ta moją atmegą.
    (po skompilowaniu programu który umieściłem, oraz po podłączeniu trzech serwomechanizmów do portów PB1, PB2, PB3 - serwa powinny kręcic się w lewo i w prawo z różnymi prędkościami).

    Dodaję załącznik w którym są już pliki gotowe do zapisania na atmege128 (mfile, hex, itp) wraz z poprawionym programem (bez warningów,oraz startem=0).
    dziękuję wszystkim za pomoc :)
    Pozdrawiam
  • #17 9717013
    przemczechu
    Poziom 10  
    Witam!
    Przepraszam za przerwę, musiałem trochę odpocząc od tej mojej atmegi.
    Korzystam z WinAvr.
    ekrzychoooo, płytke sprawdzałem kilka razy (atmegę lutowałem sam, a widzę że wszystkie nóżki są przylutowane do płytki).
    Moglibyście mnie naprowadzic jak sprawdzic te fusebity? Jest to gdzieś w ustawieniach programu WinAvr/AvrStudio ?
    Pozdrawiam
  • #18 9717054
    piotrva
    VIP Zasłużony dla elektroda
    Jest to w internecie ;-)
    Korzystaj a AvrStudio, bo tam będziesz miał bardzo wygodne ustawianie fusebitów, albo avrdude
  • #19 9996211
    przemczechu
    Poziom 10  
    Witam!
    Czy jest jakiś sposób aby zaprogramowac atmegę128 przez AvrStudio??
    Atmegę8 zaprogramowało mi pomyślnie, na liście nie ma Atmegi128, dlatego nie wiem za bardzo co zrobic, aby zaprogramowac ten mikrokontroler.
    Mam Programator Stk500v2 (tak jak wymaga AvrStudio),
    Pozdrawiam
  • #20 9996442
    piotrva
    VIP Zasłużony dla elektroda
    Ja w AVRStudio4.18SP3 mam normalnie na liście przy STK500v2 procesor ATMega128...
    Poszukaj jeszcze raz...
  • #21 9996839
    janbernat
    Poziom 38  
    Tak było:
    przemczechu napisał:

    Ten sam program odpaliłem na atmedze 128

    A teraz co?
    Programator/ AVRStudio raptem straciło tę umiejętność?
    Coś kręcisz.
    Jak chcesz pomocy- to masz zeznawać jak w Urzędzie Skarbowym.
    Bez kręcenia i zatajania.
    Potem możesz wyrazić "czynny żal".
  • #22 9999356
    przemczechu
    Poziom 10  
    janbernat napisał:
    Tak było:
    przemczechu napisał:

    Ten sam program odpaliłem na atmedze 128

    A teraz co?
    Programator/ AVRStudio raptem straciło tę umiejętność?
    Coś kręcisz.
    Jak chcesz pomocy- to masz zeznawać jak w Urzędzie Skarbowym.
    Bez kręcenia i zatajania.
    Potem możesz wyrazić "czynny żal".


    Hm...nic nie kręcę - wcześniej korzystałem z programu WinAvr (i tam programowało).
    Teraz koledzy zaproponowali mi abym skorzystał z programu AvrStudio, więc próbuję.

    Piotrwa:
    Ja mam AvrStudio 5.0 SP3 - tutaj nie ma opcji programowania Atmegi128 (dziwne - nowsza wersja programu).
    Spróbuję poszukac i zainstalowac wersję taką jaką ty posiadasz - czyli 4.18. Dzięki za podpowiedź :)
  • #23 9999495
    piotrva
    VIP Zasłużony dla elektroda
    No AVRStudio 5.x są w wersji beta (oficjalnie lub wersję beta dają jako RC) i mają buble.
    Skorzystaj z AVRStudio 4.18 (lub 4.19):
    http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725
  • #27 9999987
    janbernat
    Poziom 38  
    Nie należy używać AVRStudio5 aż poprawią.
    Nie należy używać toolchaina z Atmela ani w AVRStudio4 ani 5.
    Bo można się naciąć.
  • #28 10000209
    piotrva
    VIP Zasłużony dla elektroda
    janbernat napisał:
    Nie należy używać AVRStudio5 aż poprawią.
    Nie należy używać toolchaina z Atmela ani w AVRStudio4 ani 5.
    Bo można się naciąć.

    No czyli wszystko Kolega zebrał co należy sądzić o narzędziach od Atmela ;-)
  • #29 10000657
    przemczechu
    Poziom 10  
    Ok...Czwórka zainstalowana (jej atutem jest to, że nie muli tak jak piątka) :D

    Kliknąłem "nowy projekt", wkleiłem kod, a gdy klikam na "build", wyskakuje coś takiego:

    Cytat:

    Build started 6.10.2011 at 23:03:50
    mmcu=atmega128 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT pierwszy.o -MF dep/pierwszy.o.d -c ../pierwszy.c
    /usr/bin/sh: -Wall: command not found
    make: [pierwszy.o] Error 127 (ignored)
    mmcu=atmega128 -Wl,-Map=pierwszy.map pierwszy.o -o pierwszy.elf
    /usr/bin/sh: -Wl,-Map=pierwszy.map: command not found
    make: [pierwszy.elf] Error 127 (ignored)
    [ZIELONA KROPKA] avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature pierwszy.elf pierwszy.hex
    [CZERWONA KROPKA]avr-objcopy: 'pierwszy.elf': No such file
    make: *** [pierwszy.hex] Error 1
    Build failed with 1 errors and 0 warnings...


    O ile dobrze rozumiem - Woła, że brakuje pliku "pierwszy.elf", no ale chyba po to jest ten "build" aby stworzył te pliki .elf .hex i ich kolegów o innych rozszerzeniach?

    EDIT:

    gdy klikam "compile":

    
    mmcu=atmega128 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT pierwszy.o -MF dep/pierwszy.o.d  -c  ../pierwszy.c
    /usr/bin/sh: -Wall: command not found
    make: [pierwszy.o] Error 127 (ignored)
    Build succeeded with 0 Warnings...
    
  • #30 10000730
    janbernat
    Poziom 38  
    No ale WinAVR został- czy nie?
    No bo musi być.
REKLAMA