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][C] koncepcja sterowania kilkoma urządzeniami

sajmon5544 08 Lut 2011 20:31 1032 4
REKLAMA
  • #1 9123084
    sajmon5544
    Poziom 10  
    cześć,
    od kilku dni bawię się w programowanie procesora atmega, sporo już wiem, ale brak doświadczenia robi swoje i na realizacje niektórych funkcji nie mam koncepcji.

    potrzebuje napisać program (C), który będzie sterował, powiedzmy, 4 urządzeniami niezależnie (4 przekaźniki), każde urządzenie będzie miało swój czas pracy i czas przerwy (rzędu kilkudziesięciu minut), pytanie brzmi jak to zaimplementować.

    nie prosze o gotowy kod, tylko jakąs koncepcje

    pozdrawiam

    @Edit
    ok trochę pochodziłem po pokoju tam i spowrotem i wykombinowałem takie coś:

    dla każdego urządzenia definiuje parę zmiennych, czas pracy, czas przerwy;
    ustawiam 16b licznik aby generował przerwanie co 0.1s, w przerwaniu do każdego licznika urządzenia dodaje 0.1s (w zależności czy urządzenie aktualnie pracuje czy ma przerwę, to dodaje do odp zmiennej) ;
    w pętli głównej sprawdzam czy czas pracy/czas przerwy == zadanemu czasowi pracy/czasowi przerwy i odpowiednio obsługuje

    nada się?
  • REKLAMA
  • #2 9123202
    janbernat
    Poziom 38  
    Koncepcja jednoczesnej pracy kilku urządzeń jest tu:
    http://atnel.pl/wydawnictwo
    Ogólnie chodzi o wykorzystanie timera sprzętowego i ustawienie w przerwaniu od niego kilku timerów programowych.
  • REKLAMA
  • #3 9123313
    sajmon5544
    Poziom 10  
    mhm dzięki za polecenie książki, może się nią zainteresuje
    w między czasie wyedytowałem swojego 1 posta i dopisałem jeden pomysł, rzucisz okiem?
  • REKLAMA
  • #4 9123627
    dawid512
    Poziom 32  
    Witam.

    Kilka dni temu popełniłem takie "ustrojstwo".
    Zrobiłem to tak(jestem straszny marnotrawca miejsca i timerow):
    -robię zmienne dla każdego kanału (kanały 1-3)
    -dla każdego kanału timer(mówiłem że jestem marnotrawca)
    petla glowna:
    -instrukcja switch a w niej zal/wyl timerow oraz zal/wyl kanałów po uprzednim porównaniu wartości odczytanych i zadanych

    Generalnie działasz sobie w przerwaniach a pętla główna jest po to by coś sprawdzić/zał lub wyłączyć :)
  • #5 9124775
    janbernat
    Poziom 38  
    Np. tak:
    
    //include- to co trzeba
    
    volatile uint8_t flaga_1;
    volatile uint8_t flaga_2;
    vilatile uint16_t flaga_3;
    
    void main(void)
    {
    	//ustawianie timerów, zezwolenia na przerwania, ustawienia portów itp
    
    	while(1)
    	{
    		if(flaga_1)
    		{
    			//zrób/ustaw coś
    		flaga_1=0;
    		}
    	
    	if(flaga_2>=100)
    		{
    			//ustaw/zrób coś
    			flaga_2=0;			
    		}
    	
    	if(flaga_3>=1000)
    		{
    			//ustaw/zrób coś
    			flaga_3=0;
    		}
    
    	}
    }
    
    ISR(TIMER0_OVF_vect)// np.	  
    	{						
    	flaga_1++;
    	flaga_2++;
    	flaga_3++;
    	}
    
REKLAMA