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

[Atmega32][C] - Program w języku c i asemblerze

kiabonov 13 Sie 2012 20:36 4329 46
  • #31
    Andrzej__S
    Poziom 28  
    napisał:
    Jest to ewidentny błąd programowania (objawia się dopiero przy weryfikacji).

    ...i objawia się tylko dla programów napisanych w C?

    Ja tylko chciałem się upewnić, czy kompilacja faktycznie przebiega prawidłowo i czy autor wątku wybiera prawidłowy plik do wgrania.
  • #32
    kiabonov
    Poziom 9  
    Samo napisanie programu, kompilacja oraz wybranie odpowiedniego pliku przebiega prawidłowo. To dla obu języków assemblera i C, natomiast sam proces programowania mikrokontrolera działa dla assemblera. Programy napisane w języku c nie mogą zostać nawet zapisane w pamięci flash.
  • #33
    mickpr
    Poziom 39  
    Skompiluj taki program, żeby coś się zmieniało
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Sprawdź też, czy nie masz czegoś podłączonego, co uniemożliwia programowanie.
    To bzdura, że to samo oprogramowanie programatora jakoś "wykrywa", że dany HEX jest z pliku skompilowanego w C i w ogóle nie daje mu programować MCU.
    Hex powstały z ASM, czy z pliku C po kompilacji, czy też nawet stworzony ręcznie powinieneś programować bezproblemowo.
    Jeśli nie możesz - wina programatora lub raczej sposobu programowania przez ciebie.
  • #34
    Andrzej__S
    Poziom 28  
    Kolega mickpr ma rację, to jest błąd programowania. Ja bym jednak tego nie wiązał z kompilatorem. Raczej nie sądzę, żeby którykolwiek kompilator generował nieprawidłowy plik "*.hex". Co najwyżej generują różne pliki "*.hex".

    Myślę, że trzeba się raczej skoncentrować na samym procesie programowania mikrokontrolera (wgrywaniu programu). Nie znam Twojego programatora, więc niewiele pomogę. Spróbowałbym może zmienić prędkość transmisji (ISP frequency w zakładce "Programmer setup").

    EDIT: Widzę, że się spóźniłem trochę :)
  • #35
    atom1477
    Poziom 43  
    Adresy w plikach są pewnie inne.
    Przy C wykraczają poza zakres pamięci mikrokontrolera, stąd błędy.
    Zamieść te HEXy.
  • #36
    mickpr
    Poziom 39  
    atom1477 napisał:
    Adresy w plikach są pewnie inne.
    Przy C wykraczają poza zakres pamięci mikrokontrolera, stąd błędy.
    Zamieść te HEXy.

    Kolega zamieścił hex - programowanie przechodzi mu gładko, za to weryfikacja - już nie.
    Dlatego sądzę, że to problem sprzętowy. Dziwne, że nie występuje przy innym hex-ie.

    Też myślałem, że może ma kod , który leci gdzieś poza granice Flasha, albo zły wybrany procek.
    Podałem kod na 2 migające diody, bo na kodzie kolegi ciężko cokolwiek zauważyć czy działa - czy nie. Nie wiem jednak, co ma podpięte do PB0 i PB1?
  • #37
    kiabonov
    Poziom 9  
    Próbowałem wgrać ten program co mi podałeś i też nie działa ale zauważyłem coś dziwnego. Jak chciałem po tym wgrać program napisany przedtem na assemblerze (juz działał) to nie chciał się wgrać do pamięci flash.Ręczne kasowanie pamięci (chip erase f8) nie działało, dopiero gdy ustawiłem automatyczne kasowanie pamięci flash wraz z weryfikacją program napisany w assemblerze wgrał się do pamięci i działa. Przy tym wgraniu wyskoczył mi błąd TAdvProgress property out of range. ale assemblerowski program działa.

    PB0 i PB1 są połączone zwykłymi przewodami do diod
  • #38
    LordBlick
    VIP Zasłużony dla elektroda
    Ja bym spróbował innym programatorem(np. USBasp) za pomocą avrdude.
  • Pomocny post
    #39
    mickpr
    Poziom 39  
    Cały czas mam dziwne wrażenie, że jestem w ukrytej kamerze ( ze względu na poziom dyskusji).
    Skoro oprogramowanie tak działa - to nic dziwnego.
    Musisz doprowadzić do sytuacji, w której ten twój flash z programu w C będziesz wgrywał bezproblemowo (nawet 50 razy, jak będziesz chciał).
    To jest problem, a nie IDE, czy ustawienia.
    Widząc po kodzie hex (który sobie przerzuciłem do BIN - hex2BIN) - wszystko generuje się ok. Problemem jest programator i jego fanaberie.

    Słusznie zauważył kolega wyżej.
  • Pomocny post
    #40
    atom1477
    Poziom 43  
    Chodziło mi o oba HEXy :D
    Choć ten z assemblera w sumie niewiele podpowie.
    W ogóle to trzeba spróbować jakiś bardziej skomplikowany program w assemblerze.
    Nawet jakieś byle instrukcje bez sensu (nic nie robiące).
    Chodzi o to żeby sprawdzić poprawność programowania (weryfikowania).
    Bo puki co to ten program w assemblerze jest bardzo krótki i być może po prostu podczas programowania nie występują błędy bo nie zdążają wystąpić.
    Może procesor nie ma zasilania dobrego? Podczas krótkiego programowania (krótkim HEXem) zasila się przez piny ISP i daje radę się za programować.
    Przy dłuższym HEXie już nie.

    EDIT. Tym bardziej że jak właśnie zobaczyłem (pisałem jak Wy odpisywaliście) że jednak i przy programowaniu HEXem z assemblera błędy także potrafią wystąpić. Czyli tak jak się spodziewałem.
  • #41
    mickpr
    Poziom 39  
    atom1477 napisał:
    Bo puki co to ten program w assemblerze jest bardzo któtki i być może po prostu podczas programowania nie występują błędy bo nie zdążają wystąpić.

    Masz racje, ale ten w C jest również bardzo krótki.
    80% (w obu przypadkach) zabierają wektory przerwań.
  • #42
    LordBlick
    VIP Zasłużony dla elektroda
    atom1477 napisał:
    Może procesor nie ma zasilania dobrego?
    O właśnie, poproszę sprawozdanie ze sposobu podłączenia (wskazane zdjęcie i schemat) oraz z pomiaru napięć zasilania zarówno pomiędzy Vcc-GND jak i AVcc-AGND.
  • #43
    mickpr
    Poziom 39  
    No właśnie, skąd zasilasz płytkę? Z zewnętrznego zasilacza?
    Jeśli tak - to ile V?
  • Pomocny post
    #45
    Andrzej__S
    Poziom 28  
    Nie napisałeś, czy próbowałeś zmieniać ISP frequency.

    EDIT: Na marginesie, ten program w ASM ma zaledwie kilka bajtów, on nie ma wektorów przerwań.
  • Pomocny post
    #46
    LordBlick
    VIP Zasłużony dla elektroda
    kiabonov napisał:
    Atmega znajduje się na płytce uruchomieniowej ZL3AVR
    dokumentacja: http://www.btc.pl/pdf/zl3avr.pdf
    podłączone zasilanie to 9V do wejścia AC/DC.
    1.Pytałem o napięcia na określonych wyprowadzeniach µC.
    2 Zestaw uruchomieniowy też wymaga jakichś podłączeń....
  • #47
    kiabonov
    Poziom 9  
    Działa, zmieniłem częstotliwość z 1kHz na 100kHz i program napisany w C na miganie diod zadziałał. Wygląda na to że już jest wszystko w porządku. Dziękuje za pomoc i poświęcony czas :)