Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Eclipse avr Avrdude USBasp EvB hello world - wszystko ok - ale nie wgrywa ...

propropro 14 Nov 2011 22:28 4846 16
  • #1
    propropro
    Level 10  
    Witam,
    Przeglądam Internet, w tym forum Elektrody od ok. 3 tygodni. Rozwiązałem mnóstwo problemów początkujących użytkowników zestawów mikroprocesorowych. Nie w tym problem. Jestem już bardzo blisko celu, a jest nim użytkowanie środowiska Eclipce, procesorów Avr (Atmega 644p), zakupionej płytki EvB v. 4.3 (dokumentacja płytki), języka C i programatora zewnętrznego względem płytki, czyli USBasp (tego na płytce - przejściówka przez FT232 nie sposób używać - przynajmniej nie znalazłem informacji o takiej możliwości poza tymi odnoszącymi się do zestawu f. Atnel -> ATBManager).
    Mój (mam nadzieję) jeden z ostatnich problemów jest następujący.
    Korzystam z programu:
    #include <util/delay.h>
    #include <avr/io.h>
    
    int main()
    {
        DDRD=0xFF;
        while(1){
            PORTD=0x00;
            _delay_ms(300);
            PORTD=0xFF;
            _delay_ms(300);
        }
        return 0;
    }

    Po "build" w Eclipse (ikona młotek), w zakładce Console na dole otrzymuje:
    **** Build of configuration Release for project test ****

    make all
    Invoking: Print Size
    avr-size --format=avr --mcu=atmega16 test.elf
    AVR Memory Usage
    ----------------
    Device: atmega16

    Program: 156 bytes (1.0% Full)
    (.text + .data + .bootloader)

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


    Finished building: sizedummy

    Invoking: AVRDude
    C:\WinAVR-20100110\bin\avrdude -pm16 -cusbasp -F -Uflash:w:test.hex:a

    avrdude: AVR device initialized and ready to accept instructions

    Reading | ################################################## | 100% 0.00s

    avrdude: Device signature = 0x1e960a
    avrdude: Expected signature for ATMEGA16 is 1E 94 03
    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 "test.hex"
    avrdude: input file test.hex auto detected as Intel Hex
    avrdude: writing flash (156 bytes):

    Writing | ################################################## | 100% 0.09s

    avrdude: 156 bytes of flash written
    avrdude: verifying flash memory against test.hex:
    avrdude: load data flash data from input file test.hex:
    avrdude: input file test.hex auto detected as Intel Hex
    avrdude: input file test.hex contains 156 bytes
    avrdude: reading on-chip flash data:

    Reading | ################################################## | 100% 0.05s

    avrdude: verifying ...
    avrdude: 156 bytes of flash verified

    avrdude done. Thank you.

    Finished building: avrdudedummy


    Następnie korzystam z "Upload current project to Atmel" (napis AVR i zielona strzałka w dół) i otrzymuję:

    Launching C:\WinAVR-20100110\bin\avrdude -pm16 -cusbasp -F -Uflash:w:test.hex:a
    Output:

    avrdude: AVR device initialized and ready to accept instructions

    Reading | ################################################## | 100% 0.00s

    avrdude: Device signature = 0x000102
    avrdude: Expected signature for ATMEGA16 is 1E 94 03
    avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
    To disable this feature, specify the -D option.
    avrdude: current erase-rewrite cycle count is -50462977 (if being tracked)
    avrdude: erasing chip
    avrdude: reading input file "test.hex"
    avrdude: input file test.hex auto detected as Intel Hex
    avrdude: writing flash (156 bytes):

    Writing | ################################################## | 100% 0.08s

    avrdude: 156 bytes of flash written
    avrdude: verifying flash memory against test.hex:
    avrdude: load data flash data from input file test.hex:
    avrdude: input file test.hex auto detected as Intel Hex
    avrdude: input file test.hex contains 156 bytes
    avrdude: reading on-chip flash data:

    Reading | ################################################## | 100% 0.05s

    avrdude: verifying ...
    avrdude: verification error, first mismatch at byte 0x0000
    0x0c != 0x00
    avrdude: verification error; content mismatch
    avrdude done. Thank you.
    avrdude finished

    Czyli żadnych błędów. Przynajmniej ja nie widzę. Powyższa sekwencja czynności jest wykonywalna tylko raz. Po zmianie np. liczby ms i ponownym wykonaniu powyższych czynności wciąż wykonywany jest pierwszy wgrany program. Nie pomaga wgranie (bez błędów i problemów) bootloadera i ponowne wykonania powyższych czynności. Procesor zaprogramowany został raz i tak zostało i nie pomagają zmiany w kodzie i ponowne upload'y i restarty.
    Proszę :=) : podpowiedzcie Panie i Panowie w czym może być problem i jak go ew. rozwiązać? Przyda się jakakolwiek wskazówka. Próbowałem przejść problem programowania procesora poprzez złącze USB na płytce (przez układ FT232..) i działa wszystko super ale tylko pod Bascom AVR. Kupiłem USBasp - ale to z kolei nie jest obsługiwane przez AVR Studio. MUSZĘ w Basicu programować :=) ? Potrzebuję odrobiny komfortu :=) (jeden, dwa klawisze) do przeniesienia programu z kodu źródłowego do procesora.
    Jeszcze raz proszę o pomoc.
  • #2
    mirekk36
    Level 42  
    Jak klikasz w ten młotek z brązowym trzonkiem to nie powinno ci się na tym etapie nic wgrywać do mikrokontrolera a u ciebie coś się jednak wgrywa od razu tak ??? No to coś może namieszałeś w ustawieniach Eclipse za mocno :(

    Program powinien się wgrywać dopiero po kliknięciu tej strzałeczki zielonej w dół.

    poza tym jak chcesz sprawdzić czy się wgrywa poprawnie za pomocą avrdude to wejdź do folderu gdzie masz plik HEX, odpal konsolę (CMD) i wydaj w konsoli to proste polecenie:

    avrdude -pm16 -cusbasp -F -Uflash:w:test.hex:a

    powinno się wgrać

    no i teraz - czy mam rozumieć że po "młoteczku" to ci się wgrywa do procka a po strzałce zielonej nie ? bo coś niejasno to brzmi
  • #3
    Anonymous
    Anonymous  
  • #4
    Anonymous
    Anonymous  
  • #5
    McMonster
    Level 32  
    Czy modyfikowałeś lub pisałeś własny makefile? Jedyne miejsce, gdzie w Eclipse widzę możliwość wstawienia na siłę wrzucania wsadu do mikrokontrolera przy budowaniu "młoteczkiem" to właśnie ten plik. Pokaż go, albo po prostu zobacz, co jest wpisane pod sekcją zaczynającą się od sizedummy:.

    Co do programowania "zieloną strzałeczką", Project > Properties > AVR > Target hardware i wybierz odpowiedni procesor (możesz też podłączyć programator i nacisnąć Load from MCU). Pamiętaj też na przyszłość, żeby zawsze wybierać odpowiedni przy tworzeniu nowego projektu, naciskaj "Next", aż pojawi się wybór mikrokontrolera.
  • #6
    propropro
    Level 10  
    Witam ponownie,
    bieżący stan wciąż nierozwiązanego problemu:
    - program w C jak powyżej - zmieniam na potrzeby kolejnych kompilacji wyłącznie liczbę ms. Usuwam plik .hex, kompiluję (pojawia się nowy), wgrywam - żadnych zmian wciąż działa ten wgrany na początku. Komunikaty po kompilacji:
    **** Build of configuration Release for project test ****
    
    make all 
    Building target: test.elf
    Invoking: AVR C Linker
    avr-gcc -Wl,-Map,test.map -mmcu=atmega644p -o"test.elf"  ./test.o   
    Finished building target: test.elf
     
    Create Flash image (ihex format)
    avr-objcopy -R .eeprom -O ihex test.elf  "test.hex"
    Finished building: test.hex
     
    Invoking: Print Size
    avr-size --format=avr --mcu=atmega644p test.elf
    AVR Memory Usage
    ----------------
    Device: atmega644p
    
    Program:     216 bytes (0.3% Full)
    (.text + .data + .bootloader)
    
    Data:          0 bytes (0.0% Full)
    (.data + .bss + .noinit)
    
    Finished building: sizedummy


    po upload:
    Launching C:\WinAVR-20100110\bin\avrdude -pm644p -cusbasp -b57600 -Uflash:w:test.hex:a 
    Output:
    
    avrdude: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.00s
    
    avrdude: Device signature = 0x1e960a
    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 "test.hex"
    avrdude: input file test.hex auto detected as Intel Hex
    avrdude: writing flash (216 bytes):
    
    Writing | ################################################## | 100% 0.11s
    
    avrdude: 216 bytes of flash written
    avrdude: verifying flash memory against test.hex:
    avrdude: load data flash data from input file test.hex:
    avrdude: input file test.hex auto detected as Intel Hex
    avrdude: input file test.hex contains 216 bytes
    avrdude: reading on-chip flash data:
    
    Reading | ################################################## | 100% 0.06s
    
    avrdude: verifying ...
    avrdude: 216 bytes of flash verified
    
    avrdude done.  Thank you.
    
    avrdude finished


    Programator świeci diodą na czerwono w chwili wgrywania pliku.hex
    Dioda w porcie D procesora dalej miga w cyklu ustalonym w pierwszym wgranym programie.

    -> mirekk36 - faktycznie Avrdude był na końcu listy w Tool chain - usunąłem - teraz już od razu nie próbuje wgrywać,
    "avrdude -pm16 -cusbasp -F -Uflash:w:test.hex:a" - próbowałem - komunikat jak powyżej - wszystko ok a zmian w działaniu świecenia diod nie widać

    -> majeranek53 - faktycznie ślepota wtórna - pisałem to po naprawdę wielu godzinach walki z problemem

    -> albertb - ślepota wtórna po raz wtóry - kasowałem wielokrotnie cały workspace i od początku konfigurowałem - za którymś razem zapomniałem tego zmienić - już ok

    -> McMonster - nie dotykałem pliku makefile.

    Próba wgrania najświeższego pliku .hex przez avrdude_gui - żadnych zmian - wgrywa się bez żadnych ostrzegawczych komunikatów - i dalej działa ten pierwszy wgrany program. Nie pomaga reset - restart.
    Skróciłem kabelek pomiędzy programatorem usbasp i płytka do ok 8 cm.
    Próbuję wgrywać bootloader przez avrdude do tej płytki - wgrywa się bez problemu - diody migające na płytce przestają świecić. Kompilacja z nowymi wartościami ms w C, upload i do płytki - zaczynają migać tak jak dla pierwszego wgranego jakiś czas temu programu !!! - cały czas tak jakby nic się nie wgrywało.
    Co jakiś czas pojawia sie po upload takie cos:
    Launching C:\WinAVR-20100110\bin\avrdude -pm644p -cusbasp -b57600 -Uflash:w:test.hex:a 
    Output:
    
    avrdude: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.00s
    
    avrdude: Device signature = 0x000102
    avrdude: Expected signature for ATMEGA644P is 1E 96 0A
             Double check chip, or use -F to override this check.
    
    avrdude done.  Thank you.
    
    avrdude finished


    Może macie jakieś podpowiedzi co z tym dalej robić. Może zaproponujcie jaką sekwencję czynności do wykonanie przeze mnie, jakiś screen do pokazania. Niestety, ale wciąż sam nie potrafię sobie z tym poradzić. Z góry dzięki za ew. podpowiedzi.

    Dodano po 23 [minuty]:

    Może to co poniżej w czymś pomoże:
    Gdy próbuję wgrać coś z Bascoma (również miganie diodą na porcie D) - wgrywa się bez problemu. Niemniej program nie jest wykonywany. Reset niczego nie zmienia.
    Ale jak kompiluje i wgrywam znów coś z Eclipse zaczyna się wykonywać nie wgrany program tylko znowu ten pierwszy!!! Nic już nie rozumiem. Nie dotykałem NIGDY na tej płytce żadnych fuse czy lock bitów.
    ...[/img]
  • #7
    Anonymous
    Anonymous  
  • #8
    propropro
    Level 10  
    Witam,
    wstyd przyznać, ale na dzień dzisiejszy się poddaję. Douczę się trochę i spróbuję później jeszcze raz. Może kupie programator, który na pewno działa poprawnie w wybranym przeze mnie środowisku? Zobaczę. Za podpowiedzi wszystkim dziękuję i pozdrawiam.
  • #9
    Anonymous
    Anonymous  
  • #10
    propropro
    Level 10  
    :=) dziękuję za słowa otuchy. Tak do końca to się nie poddam. Po prostu poświęciłem już za dużo czasu na rozpoznanie problemu i się (w tym czasie) nie udało. Zdobędę trochę doświadczenia i do tematu jęz. C na pewno wrócę.
    A korzystając z okazji i istniejącego wątku spróbuję trochę inaczej. Może bardziej doświadczeni koledzy mogliby zaproponować całościowe rozwiązanie dla początkujących i nie tylko. Mam na myśli współpracujące ze sobą poprawnie zestawy składające się ze:
    - środowiska uruchomieniowego (dziś najbardziej interesuje mnie EVB v. 4.3)
    - IDE
    - programatora
    - narzędzia do debug'owania
    w kontekście tworzenia programowania w jęz. C.

    Po własnych doświadczeniach widzę, że początkujący mogą mieć problemy wynikające z braku doświadczenia, a kończy się to najczęściej nietrafionymi zakupami. Tak jak w moim przypadku EVB + usbasp + Eclipse = chwilowa przynajmniej porażka. Może gdybym miał inny programator ...
    Z góry dziękuję za ew. podpowiedzi.
  • #11
    blue_17
    Level 32  
    Mówisz i masz pod windą i pod linuxem :D

    Pod windowsem trzeba przed instalacją eclipse zainstalować winavr

    https://www.elektroda.pl/rtvforum/topic2048779.html

    aby działa poprawnie usb asp pod linuxem zapraszam do zapoznania się z artykułem

    http://www.blue17.elektroda.eu/index.php/2011/10/12/instalacja-usbasp-pod-linuxem/

    W zasadzie wymaga to dodania jednego pliku z prawami roota

    Na filmiku jest pokazany tryb debugowania ale nieprzejmuj się bo na początku mało go się używa :) eclipse tak samo działa pod windą jak ipod linuxem

    Pozdrawiam
  • #12
    propropro
    Level 10  
    Podejrzewałem Eclipse o robienie psikusów. Kompilowało, wgrywało a procek dalej poprzedni program wykonywał. Skopiowałem sobie jednak polecenie z konsoli Eclipse i w cmd Windows wpisałem:
    Quote:
    C:\WinAVR-20100110\bin\avrdude -pm644p -cusbasp -Pusb -b57600 -F -Uflash:w:test.hex:a

    Każdy z parametrów się zgadza z rzeczywistością. Wykonanie:
    Quote:
    C:\Users\Mariusz\workspace\test\Release>avrdude -pm644p -cusbasp -Pusb -b57600 -F -Uflash:w:test.hex:a

    avrdude: AVR device initialized and ready to accept instructions

    Reading | ################################################## | 100% 0.01s

    avrdude: Device signature = 0x1e960a
    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 "test.hex"
    avrdude: input file test.hex auto detected as Intel Hex
    avrdude: writing flash (196 bytes):

    Writing | ################################################## | 100% 0.09s


    avrdude: 196 bytes of flash written
    avrdude: verifying flash memory against test.hex:
    avrdude: load data flash data from input file test.hex:
    avrdude: input file test.hex auto detected as Intel Hex
    avrdude: input file test.hex contains 196 bytes
    avrdude: reading on-chip flash data:

    Reading | ################################################## | 100% 0.06s

    avrdude: verifying ...
    avrdude: 196 bytes of flash verified

    avrdude: safemode: Fuses OK

    avrdude done. Thank you.


    Powiedzcie mi proszę DLACZEGO po takim wyniku działania avrdude procesor nie jest programowany nowym programem. W trakcie wykonywania tego polecenia dioda w USBASP świeci się na czerwono, procek przestaje wykonywać stary program (zamiera na chwilę), dioda w USBASP wraca do stanu zielonego a procek zaczyna wykonywać program, tyle że nie ten co wgrałem, tylko poprzedni. Czy ktoś mógłby mi cokolwiek podpowiedzieć?
    Skoro jest napisane, ... writing, ... verifying, "avrdude: 196 bytes of flash verified". To o co tu chodzi :=) ?
  • #13
    Brutus_gsm
    Level 25  
    A czym różnią się te programy? Nie możliwe, aby nie wgrywał się inny program, jeśli tak pokazują logi. Tym bardziej, że weryfikacja przechodzi ok, to znaczy, że fizycznie w uK siedzi dokładnie ten program, który przed chwilą wgrywałeś.

    Problem musi leżeć gdzie indziej. Może źle ustawiona optymalizacja? Lub jej brak.
  • #14
    janbernat
    Level 38  
    Czy zapisujesz program przed kompilacją?
  • #15
    propropro
    Level 10  
    :=) zapisywanie programu przed kompilacją było rozwiązaniem problemu. To niesamowite, ale pomimo zmian w kodzie wciąż był kompilowany i wysyłany do procesora "stary" program. Po każdorazowej zmianie w kodzie trzeba zapisać zmiany i dopiero później kompilować i wysyłać do procesora. Odkryłem to sam wcześniej, ale Ty jako pierwszy to napisałeś. Wszystko działa ok i nie ma żadnych problemów. Wstyd przyznać że była to aż taka "głupotka". Pozdrawiam wszystkich Eclipse'owców.
  • #16
    janbernat
    Level 38  
    To się daje ustawić żeby zapisał przed kompilacja.
  • #17
    Brutus_gsm
    Level 25  
    W ustawieniach można zmienić taką opcję, żeby sam zapisywał przed kompilacją. Nie trzeba potem o tym pamiętać.

    A dokładnie to: Windows->Preferences->General->Workspace->Save automatically before build