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

atmega16 dziwne działanie

keevek 09 Lis 2011 21:26 2323 11
REKLAMA
  • #1 10121309
    keevek
    Poziom 10  
    Witam wszystkich serdecznie ; )
    Od niedawna rozpocząłem swoją przygodą z mikro-kontrolerami ;]
    Zakupiłem płytkę startową EVBavr05 z Atmega16 i wgrałem bootloadera żeby móc sobie pięknie programować mój układ przez rs232.
    Uczę się chyba z dość popularnego kursu online: http://hobby.abxyz.bplaced.net/index.php?pid=4&aid=1
    i z niego właśnie pochodzi poniższy kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    I tutaj pojawia się pewien problem, gdyż na przedstawionej ilustracji w kursie, diody powinny zapalać się raz jedna, raz druga w krótkim odstępie czasu, następnie po wciśnięciu przycisku powinny migać wolniej, natomiast po wgraniu powyższego programy do pamięci mikro kontrolera efekt jest następujący:
    diody zapalają się naprzemiennie w bardzo krótkim czasie, następnie jest nieprzewidziana pauza (około 6s) i ponownie bardzo szybko migają naprzemiennie. Programowo tego rodzaju przestój nie jest przewidziany i nie mam pojęcia czym to jest spowodowane, wyrzuciłem bibliotekę delay i spróbowałem uzyskać nieprzerwanie świecącą diodę, jednakże nawet wtedy dioda zapala się i po chwili gaśnie na te ~6s.
    Będę bardzo wdzięczny za jakiekolwiek informacje i pomoc.
  • REKLAMA
  • #2 10121588
    INTOUCH
    Poziom 30  
    #define F_CPU 1000000L
    Jeżeli twój mikro-kontroler rzeczywiście pracuje z inną częstotliwością niż wartość zdefiniowana F_CPU to możesz mieć źle liczony czas na przez funkcje typu _delay_ms().
    Druga sprawa czy po wyrzuceniu tej funkcji rzeczywiście ponownie zbudowałeś cały projekt i wgrałeś ten nowy zbudowany projekt (program)?

    W <util/delay.h> są zdefiniowane i zdeklarowane funkcje liczące czas jeżeli tą linijkę wyrzuciłeś a zostawiłeś funkcje _delay_ms() to podczas kompilacji powinieneś mieć błędy ERROR.
    Jak jest ERROR to ci się program nie skompiluje i wgrywasz stary program.
    Trochę zagmatwałem.

    Kursy kursami ale nie ma jak porządna książka dla początkujących.
  • REKLAMA
  • #3 10121601
    keevek
    Poziom 10  
    Tak wiem o co chodzi, zmieniałem już #define F_CPU 1000000L na #define F_CPU 8000000L
    oraz usuwałem linijkę z #include <util/delay.h> oraz funckje _delay_ms() itd i ponownie kompilowałem program i wgrywałem hexa do kontrolera
  • #4 10121610
    darek1632
    Poziom 15  
    Wychodzi na to, że twój procek chodzi na 8MHz. Jak masz ustawione fusebity ?
  • #5 10121626
    INTOUCH
    Poziom 30  
    Nadal te same błędy?
  • #6 10121666
    keevek
    Poziom 10  
    Bootloadera pomagał mi wgrać znajomy za pomocą avr-studio, fuse bity były ustawiane mniej więcej zgodnie z tym co jest tutaj: http://www.and-tech.pl/forum/viewtopic.php?t=114
    jednakże niektórych opcji nie ma w avr bądź się trochę różnią, wiem że problem był z ustawieniem CKSE (kwarcem) jeśli się nie mylę, gdyż po wgraniu bootloader i wgraniu jakiegoś programu ponowne jego zaprogramowanie było niemożliwe, tak jakby program nadpisywał obszar bootloader, po wybraniu innej opcji z CKSE wszystko wydawało się działać, jednakże jest problem taki jak opisałem wyżej
  • REKLAMA
  • #7 10121681
    darek1632
    Poziom 15  
    To może spróbuj wgrać ten program bezpośrednio, nie używając bootloadera. I zobacz jakie bedą efekty.
  • #8 10121697
    dondu
    Moderator na urlopie...
    keevek napisał:
    Bootloadera pomagał mi wgrać znajomy za pomocą avr-studio, fuse bity były ustawiane mniej więcej zgodnie z tym co jest tutaj:...

    Co to znaczy "fusebity ustawione mniej więcej"?
    Albo masz ustawiony albo nie - nie można być trochę w ciąży, a trochę nie - przynajmniej nie w elektronice cyfrowej.
    Konkrety podawaj.
  • REKLAMA
  • #9 10121708
    keevek
    Poziom 10  
    Właśnie analizując problem zastanawiam się czy może faktycznie to nie jest problem bootloadera, gdyż po pojawieniu się problemu z niemożnością ponownego programania i 0 efektem działania programu, na próbę zaprogramowaliśmy płytkę bezpośrednio z ISP i chyba właśnie wtedy działało wszystko normalnie, wgrany był program gdzie dioda świeciła bez przerwy i po wciśnięciu przycisku gasła. Tak mi coś świta, że przez ISP chyba nie było tych dziwnych przerw w działaniu. Z tym że nie mam osobiście programatora ISP, zakupiłem USB/rs232 gdyż jest tańszy. W takim razie wie ktoś może w jaki sposób skonfigurować bootloadera pod atmege16 ? dodam że bootloader był zrobiony za pomocą avrUBD

    Dodano po 9 [minuty]:

    http://belogic.com/uzebox/images/forums/fuses.gif
    Jtagen odznaczone
    eesave zaznaczone
    bootrst zaznaczone
    sut_cksel było coś 16k i +64ms , nie pamiętam całej składni
  • #11 10420428
    tomko18
    Poziom 1  
    witam, mam płytkę EVBavr05 z Atmega32 oraz przejsciówkę USB->RS232 o oznaczeniu HL-340, próbuje przesłać krótki program na płytkę ale wyskakuje błąd:
    avrdude: ser_open(): can't open device "\\.\com4": Odmowa dostępu.
    czy ktoś wie może co się dzieje? mam ustawiony port COM4 bo to jedyny wolny u mnie w laptopie. plik makefile raczej mam prawidłowo zrobiony ale nie jestem pewien czy to ustawienie mam dobre: AVRDUDE_PROGRAMMER = avr109.
  • #12 13594112
    keevek
    Poziom 10  
    zamykam temat.
REKLAMA