Licznik T0 , T1 i T2 w AVR

Tu piszemy wiadomość, jeżeli zadanie domowe sprawia kłopot
i szybko potrzebujemy pomocy w rozwiązaniu.
ODPOWIEDZ
elektronikopo
Użytkownik
Posty: 182
Rejestracja: 16 gru 2007, 22:28
Lokalizacja: Poznań

Licznik T0 , T1 i T2 w AVR

Post autor: elektronikopo » 10 kwie 2011, 13:21

W internecie jest bardzo mało materiałów na temat timerów T0, T1 i T2 AVR na procesorze atmega8. Ogólnie cieżko cokolwiek znaleźć na ten temat. Wieć prosiłbym was o pomoc.
Chodzi mi o progrmaowanie timerów T0,T1,T2 w języku C na Atmedze8.

Awatar użytkownika
kayron
Użytkownik
Posty: 2070
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 10 kwie 2011, 14:01

Cóż nota katalogowa powinna ci wystarczyć, ostatecznie książka o M8. C to nie Bascom więc i tak wszystko będziesz robił na piechotę, ustawiając odpowiednie bity.

elektronikopo
Użytkownik
Posty: 182
Rejestracja: 16 gru 2007, 22:28
Lokalizacja: Poznań

Post autor: elektronikopo » 10 kwie 2011, 15:10

Coś nota katalogowa zawiera informacje teoretyczne dotyczące tych timerów. A ja potrzebuje opisane obsługę timerów t0,t1,t2 w jeżyku C z przykładami wszytsko dobrze wyjaśnione tak jak to jest na stronie dioda.com. Znalazłem tą strone www.wkretak.com
tam było wszytsko wyjaśnione tylko niestety już na strona nie istnieje.

[ Dodano: 2011-04-10, 16:11 ]
kayron pisze:Cóż nota katalogowa powinna ci wystarczyć, ostatecznie książka o M8. C to nie Bascom więc i tak wszystko będziesz robił na piechotę, ustawiając odpowiednie bity.
A jaka książka podaj tytuł ?

Awatar użytkownika
kayron
Użytkownik
Posty: 2070
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 10 kwie 2011, 15:27


Coś nota katalogowa zawiera informacje teoretyczne dotyczące tych timerów.
Nota zawiera wszystko co trzeba, żeby było śmieszniej nawet przykłady kodu w C. Więcej informacji jest w tak zwanych notach aplikacyjnych.
Np:
http://www.atmel.com/dyn/resources/prod ... oc2505.pdf
Tak przy okazji jest to kompletna dokumentacja Timerów, z tego co to przeglądałem.
Co do książki to mam tylko taką do BASCOMA, C na AVR się już nie brudzę (w sensie że uczę się C na inne uC) bo przechodzę na procesory MICROCHIPA PIC16/18 oraz dsPIC30Fxxx.

elektronikopo
Użytkownik
Posty: 182
Rejestracja: 16 gru 2007, 22:28
Lokalizacja: Poznań

Post autor: elektronikopo » 10 kwie 2011, 16:07

dzięki bardzo mi przydatny pdf.
Ostatnio zmieniony 10 kwie 2011, 16:11 przez elektronikopo, łącznie zmieniany 2 razy.

kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

Post autor: kaliska5 » 10 kwie 2011, 16:10

Tutaj masz bardzo fajny artykuł, przykłady w asm ale bardzo łatwo zmienić na C

elektronikopo
Użytkownik
Posty: 182
Rejestracja: 16 gru 2007, 22:28
Lokalizacja: Poznań

Post autor: elektronikopo » 10 kwie 2011, 16:11

A zna ktos jakieś materiały w języku polskim C z przykładami, bo nietety w tym kursie ogólnei dostępnym w internecie nie ma timerów.

ogólnie rzecz biorać mam takei programy

Kod: Zaznacz cały


T0

#include <avr/io.h>                // dostęp do rejestrów
#define pocz_t0 (256-173)

int main( void )
{
  DDRC = 0xFF; 
  PORTC = 0xff;
  TCNT0 = pocz_t0;        // wartość początkowa T/C0
  unsigned long i;

  TCCR0 = _BV(CS00)|_BV(CS01); //preskaler 64

  while(1)
  {
    //loop_until_bit_is_set(TIFR,TOV0);
	if ((TIFR)&(_BV(TOV0))){ //jesli flaga jest ustawiona
    TCNT0 = pocz_t0;       //wpisz ponownie do tcnt0
    PORTC ^= _BV(1);         // zmien stan diody

    TIFR = _BV(TOV0); 		//zeruj flage
	i++;			
	if(i==100){		//jesli powtorzylo sie 1000x (1 sek)
		PORTC ^= _BV(0); //zmien stan
		i=0;		//zeruj
		}
    }
	}
	
}

T1

#include <avr/io.h>
int main(void) 
{
 
DDRC = _BV(1);
TCCR1B = _BV(CS11) | _BV(CS10);   
TCNT1H = 222;
TCNT1L = 64;   
TIFR = _BV(TOV1); 
int i=0;
      
while(1)
{

	if((TIFR) & (_BV(TOV1))) 
	{
		
		TCNT1H = 222;
		TCNT1L = 64;
	    TIFR = _BV(TOV1);
	    i++;
   	

	if(i==20)
	{
	PORTC ^= (_BV(1));
		i=0;
	}
    
}
}

	return 0;

}

T2
#include <avr/io.h>
int main(void) 
{
 
DDRC = _BV(1);
TCCR2 = _BV(CS22) | _BV(CS21) | _BV(CS20);   
TCNT2= 55;
TIFR = _BV(TOV2); 
int i=0;
      
while(1)
{

	if((TIFR) & (_BV(TOV2))) 
	{
		
		TCNT2 = 55;
	    TIFR = _BV(TOV2);
	    i++;
   	

	if(i==27*2)
	{
	PORTC ^= (_BV(1));
		i=0;
	}
    
}
}

	return 0;

}



licznik T0 do migania diodą L1 co 5ms
licznik T1 do migania diodą L2 co 50ms
licznik T2 do migania diodą L3 co 500ms

Mam problem ze zrozumieniem tych programów więc potzrebuje jakieś materiały na temat timerów z przykładami.

ODPOWIEDZ