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

Dlaczego nie wchodzi do przerwania? Co robię źle?

qudi 04 Paź 2010 20:33 1278 9
REKLAMA
  • #1 8583848
    qudi
    Poziom 15  
    Witam !!!
    Mam problem z uruchomieniem przerwania. Poniżej zamieszczam kod. Nie wiem dlaczego program nie chce nawet wejść do przerwania, co robię źle ?
    
    TCNT1 = 0;                              // wartosc poczatkowa licznika 
    TCCR1B |= (1 << WGM12);
    OCR1A = 1500;
    TIMSK |= (1 << OCIE1A);


    A poniżej przerwanie, które niestety nie chce sie wykonać...

    ISR(TIMER1_COMPA_vect)
    {
    przet=ADC;
    //OCR1A=licznik;
    temperatura = 0.1831*przet - 37.5;			// wartość temperatury jest porównywana
    if(temperatura > -0.8) {					// z wartośćią równą -0.7 gdyż dopiero przy
    tmp = (temperatura - (int)temperatura); 	// ADC = 201 napięcie bedzie już wynosić 0.99 V 
    if(tmp >= 0.5)								// a przy ADC = 202 już 1 V
    temperatura++;
    //ADC = temperatura;
    }
    else {
    temperatura = 666;
    //ADC=666;
    }
    
    temp_int = temperatura;
    tysiace = temp_int/1000;
    setki = (temp_int % 1000)/100;
    dziesiatki = (temp_int % 100)/ 10;
    jednosci = temp_int % 10;
    }


    Proszę o w miarę lakoniczne wytłumaczenie ;]

    A ja proszę o zmianę tematu bo to jest tragedia!
    Robak
  • REKLAMA
  • #2 8583860
    Krzysiek_Z
    Poziom 11  
    A odblokowałeś przerwania poleceniem sei(); ?
  • #3 8583879
    qudi
    Poziom 15  
    tak, mam nawet przerwania od licznika T0 i ono działa
  • REKLAMA
  • #4 8583935
    tadzik85
    Poziom 38  
    A może byś w ogóle wystartował ten licznik bo tego nie widzę.
  • REKLAMA
  • #5 8583984
    qudi
    Poziom 15  
    tzn. ? miałem dużą przerwę w programowaniu i pewnie się trochę zapomniało. Wytłumacz proszę
  • #6 8584044
    landy13
    Poziom 31  
    Ustaw preskaler, to licznik ruszy.
  • REKLAMA
  • #7 8584054
    elektroziom
    Poziom 20  
    Po prostu nie podałeś źródła sygnału zegarowego. Operacja ta włącza licznik. Służą do tego bity CS12, CS11, CS10
  • #8 8584184
    qudi
    Poziom 15  
    ale dlaczego musze dać jakiś preskaler ? działa tylko gdy ustawię jakiś konkretny, kiedy dam cs10 to nie wchodzi dalej do przerwania, dopiero przy preskalerze = 8 działa

    Proszę się zapoznać z regulaminem i poprawić temat!
    Robak
  • #9 8584221
    tadzik85
    Poziom 38  
    Po 1 weź zajrzyj do dokumentacji, jest tam pewna tabelka jasno tłumacząca opcje preskalera. A odpowiedz na pytanie będzie czystą wróżba. Nie podałeś częstotliwości taktowania procesora, więc czas między przerwaniami nie jest nam znany. Dodatkowo w przerwaniu realizujesz multum złożonych obliczeń, wielokrotnie na tym forum już radzono by obsługę przerwania realizować bardzo krótką.
  • #10 8584247
    landy13
    Poziom 31  
    A skąd ktoś ma wiedzieć, jeśli nie napisałeś jaki to procesor?
    No i chciałeś lakoniczne wytłumaczenie, to masz.
REKLAMA