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

ATMEGA - Komunikacja ATMEGA8 po SPI a przepełnienie licznika 1

Mlotek 27 Mar 2015 18:50 771 8
  • #1 27 Mar 2015 18:50
    Mlotek
    Poziom 9  

    Witam,
    Symulacja przesyłania/odbioru przez SPI działa w debugerze AVR Studio 4 gdy nie jest czynna obsługa przerwania przepełnienia licznika1 ISR(TIMER1_COMPA_vect), ale po przepełnieniu licznika zerują się wszystkie zmienne.
    Jeżeli obsługa przerwania jest aktywna (nawet pusta) to symulacja interface SPI nie działa. Brak wtedy sygnału zegarowego na PB5.

    Co robię źle?
    Program poniżej

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Przepraszam za pomyłki.

    0 8
  • #2 27 Mar 2015 20:00
    dondu
    Moderator Mikrokontrolery Projektowanie

    A gdzie Twoja pętla główna, bo to na pewno nie jest ta pętla:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Swoją drogą, to ten kod nie ma prawa się poprawnie skompilować, bo zmienna x nie jest zadeklarowana.

    0
  • #3 27 Mar 2015 20:38
    Mlotek
    Poziom 9  

    Pętla o która pytasz została z dłuższego programu. Usunięcie tej pętli nic nie zmieniło.

    -2
  • #4 29 Mar 2015 13:55
    dondu
    Moderator Mikrokontrolery Projektowanie

    Jeśli zadajesz pytanie:

    Mlotek napisał:
    Co robię źle?

    i dodajesz program, który jest kawałkami wyrwanymi z kontekstu, to nie spodziewaj się poprawnych podpowiedzi.

    Nie napisałem, że masz pętlę usunąć.

    0
  • #5 29 Mar 2015 18:37
    Mlotek
    Poziom 9  

    Witam,
    Program jest początkiem większej całości której dotąd nie będzie, dopóki nie będę mógł sprawdzać na symulatorze działania kolejno rozbudowywanego programu. Potrzebuję transmisji po SPI przy obecności obsługi ISR(TIMER1_COMPA_vect).
    Jeżeli nikt nie może mi pomóc to trudno. Zawsze staram się sam sobie pomagać ale tym razem na razie moja wiedza jest zbyt mała.

    0
  • #6 29 Mar 2015 23:29
    trol.six
    Poziom 30  

    Pierwszą rzeczą jaką bym zrobił, to zaznaczył wszystko co jest pomiędzy klamerkami funkcji {} i użył przycisku Del.

    Następnie wziąść note katalogową i PRZEPISAĆ inicjalizację SPI do funkcji main.
    Oczywiście może będą potrzebne drobne korekty w nazwach.

    Bo w symulacji może to i zadziała, ale w urządzeniu niekoniecznie.

    Następnie wstawić

    Code:
    While(1){}


    A potem uzupełnić wiedze, na temat liczników, obsługi transmisji SPI. Przeczytać przykłady z sieci, nawet może na tym forum są. W zasadzie to dokumentacja powinna wystarczyć.

    No i po co koledze te symulacje skoro nawet nie wiadomo co zeruje rejestry?

    0
  • #7 30 Mar 2015 07:58
    dondu
    Moderator Mikrokontrolery Projektowanie

    Mlotek napisał:
    Program jest początkiem większej całości której dotąd nie będzie, dopóki nie będę mógł sprawdzać na symulatorze działania kolejno rozbudowywanego programu. Potrzebuję transmisji po SPI przy obecności obsługi ISR(TIMER1_COMPA_vect).
    Jeżeli nikt nie może mi pomóc to trudno. Zawsze staram się sam sobie pomagać ale tym razem na razie moja wiedza jest zbyt mała.

    Nie zniechęcaj się tylko czytaj co piszemy i działaj, a w razie dalszych problemów wklej swój kod, opisz jego niepożądane działanie i pytaj.
    W ten sposób dasz nam szansę pomocy Tobie, a sam wiele się nauczysz.

    0
  • #8 30 Mar 2015 13:50
    tmf
    Moderator Mikrokontrolery Projektowanie

    @Mlotek Przede wszystkim pamiętaj, że dla master SPI najpierw pin SS należy ustawić np. na wyjście, a dopiero potem konfigurować MSPI.

    1
  • #9 30 Mar 2015 18:01
    Mlotek
    Poziom 9  

    Kolego tmf! Wielkie dzięki! To właśnie zrobiłem nieprawidłowo - kolejność inicjalizacji. Wszystko działa!:D :D :D

    0