Licznik - prośba o wytłumaczenie;)

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Sevotharte
-
Posty: 3
Rejestracja: 08 wrz 2009, 11:43
Lokalizacja: warszawa

Licznik - prośba o wytłumaczenie;)

Post autor: Sevotharte » 27 kwie 2010, 13:49

Witam.

Jestem poczatkujacym programista atmeg (8 i 16). Jeżeli chodzi o liczniki/timery - umiem zrobić wyzwalanie wyjść po określonym przedziale czasu. Podstawy tez juz znam.

Mam taki problem: chciałbym zliczać impulsy z wejścia atmegi 8. Gdy licznik zliczy do 2, nastepuje jakas tam akcja i bit na okreslonym wyjsciu zmienia sie na przeciwny. Sygnaly sterujace (te dwa do zliczenia) musza byc podane w okreslonym czasie. Algorytm jaki sobie omyslilem:

- deklaracja in/out.
- petla if (wejscie)=1 to wlacza sie timer, ktory odlicza do 1sek. (wyzwalanie 1 sygnalem z wejscia)
- Gdy w czasie, w którym timer odlicza czas zostanie wyzwolone wejscie jeszcze raz - ustaw na wyjsciu stan przeciwny.
- Jezeli nie, zeruj licznik impulsow wyzwalajacych.

Moglby mnie ktos tak troszke nakierowac, jak odpowiednio posterowac timerami by taki zabieg sie udal

Pozdrawiam

Awatar użytkownika
haterkmp
Użytkownik
Posty: 652
Rejestracja: 08 sie 2008, 11:47
Lokalizacja: Wałbrzych

Post autor: haterkmp » 27 kwie 2010, 15:52

a w czym programujesz procka? na poczatek polecam bascoma - do zrozumienia o co chodzi w mikrokontrolerach itd do tego ksiazka P. Góreckiego o programowaniu w bascomie. to na poczatek fajnie sobie poczytac i sie pouczyc.

Sevotharte
-
Posty: 3
Rejestracja: 08 wrz 2009, 11:43
Lokalizacja: warszawa

Post autor: Sevotharte » 27 kwie 2010, 16:45

szczerze mowiac programuje w c. Rozpocząłem od kursu mikrokontrolerów na diodzie. Bascoma też spróbuje :) Chodzi tylko o ładne i spójne wyjasnienie o co chodzi z tymi licznikami:)

keruseykaryu

Post autor: keruseykaryu » 27 kwie 2010, 18:44

Sevotharte, użyłbyś kolego kalkulatora AVR do timerów i byś miał gotowe.

http://frank.circleofcurrent.com/cache/avrtimercalc.htm

Sevotharte
-
Posty: 3
Rejestracja: 08 wrz 2009, 11:43
Lokalizacja: warszawa

Post autor: Sevotharte » 04 maja 2010, 19:23

Witam. Wymyslilem cos takiego, ale niezbyt chce mi to chodzić. Czy coś źle w tym kodzie jest?

Kod: Zaznacz cały

include <avr/io.h>
#include <util/delay.h>
int main (void)
{

DDRB=0x01; //ustawienie pinu 0 portu B na wyjście
DDRC=0x00; //wejscie klaskacza z portu B
PORTC=0x01;

TCCR0 |= ((1 << CS00) | (1 << CS01));
unsigned char licznik = 0;

while(1)
{
	if((PINC & 0x01)&(licznik==0))
	{
	licznik=0;
		licznik++;
		PORTB = 0x00;
		
	}
	_delay_ms(80);
	if (licznik == 1)
	{
		TCNT0=0x00;
		if(TCNT0 <= 15625)
		{
			if ((PINC & 0x01)&(licznik==1))
			{
			licznik++;
			TCNT0=0x00;
			}
		}
	}
	while (licznik == 2)
	{
		PORTB ^=0x01;
	}

}
}

keruseykaryu

Post autor: keruseykaryu » 05 maja 2010, 17:10

Sevotharte pisze:Czy coś źle w tym kodzie jest?
A i owszem. Brak komentarzy nie pozwala nam śledzić Twojego toku pojmowania tego programu.
I jeszcze jedno nie mieszaj sobie operatorów bitowych z logicznymi.

Kod: Zaznacz cały

if((PINC & 0x01)&(licznik==0))
http://pl.wikibooks.org/wiki/C/Operatory

ODPOWIEDZ