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

Multiplex na timer0 i zaklocenia w obliczeniach [c][atmeg16]

dturczak 13 Kwi 2010 20:23 950 4
REKLAMA
  • #1 7957430
    dturczak
    Poziom 19  
    Witam
    Problem jest nastepujacy
    uzywam timer0 do multiplexowania.
    co 4ms wywoluje mi sie przerwanie od przepelnienia timera wyswietlajac cyfre na kolejnym wyswietlaczu. Dane do wyswietlenia sa globalne.

    w petli while co pewien czas(0,5 s ) wywoluje funkcje ktora zczytuje dane z czujnika ds1820 po 1wire.
    Na wyswietlaczu LED pojawia sie co jakis czas 'zaklocenia'.
    Podejrzewam ze w trakcie wykonywaniu kodu dotyczacego 1wire zglasza sie przerwanie timera zaburzajac odstepy czasowe tak wazne dla tej magistrali.
    probowalem prosty mutex zrobic tzn zapis do zmiennych wyniku dopiero w przypadku kiedy wyjdzie mi z przerwania(w przeciwnym wypadku wychodzi z funkcji pomiaru) ale niestety tez srednio sie to sprawdza. czesto otrzymuje w czesci calkowitej 0x00;
    W momencie kiedy wrzuce pomiar do przerwania timera ,jest ok. no ale jak latwo sie domyslec wynik strasznie skacze i mruga .
  • REKLAMA
  • Pomocny post
    #2 7957447
    _Robak_
    Poziom 33  
    W miejscach krytycznych korzystaj z sei() i cli(), aby blokować i zezwalać na globalne przerwania.
  • REKLAMA
  • #3 7957519
    dturczak
    Poziom 19  
    ok ale dla mnie cala funkcja do odczytu 1wire jest krytyczna wlasciwie.
    nie wylacze przed nia przerwania a wlacze po niej bo na wyswietlaczu bede mial to samo jak w przypadku kiedy funkcje wrzucam bezposrednio do przerwania.
    wedlug symulatora funkcja wykonuje sie 150 ms.
  • REKLAMA
  • Pomocny post
    #4 7957564
    grysek
    Poziom 19  
    No to daj jeszcze głebiej tj. na początku procedury wysyłania bajtu, odbierania bajtu daj cli , a na koncu tych procedur sei :P

    I jak wyglądają te zakłocenia?
  • #5 7957721
    dturczak
    Poziom 19  
    myslalem ze nie pomoze ale pomoglo,pominiecie kilku instrukcji w funkcji jednak dalo dobry rezultat;) dzieki ;)
REKLAMA