Skocz do zawartości

Silnik krokowy program [C]


Pomocna odpowiedź

Napisano

Witam chce napisać bardzo prosty programik który ma działać następująco:

Potencjometr+silnik krokowy. Od zakresu 0-512 silnik kręci sie w lewo im wyższa wartość tym wolniej w zakresie 512-1024 kręci się w prawo im wyższa tym szybciej.

Oto program:

 main(void)
{
Inicjalizacja();  // Inicjalizacja kontrolera

while(1)
{

			ADCSRA |= _BV(ADSC);         // Rozpoczęcie przetwarzania
			while(bit_is_set(ADCSRA,ADSC))	// Oczekiwanie na zakończenie przetwarzania
			{};	
			pomiar=ADCH;			     // Zapisanie starszych 8 bitów wyniku konwersji do



	if(pomiar<512){
	d=pomiar/3;
	if(d<10){
	d=10;}

	//polkrok jedna cewka i troche :)

	PORTD=0x08;// 1000
	_delay_ms(d);
	PORTD=0x0c;// 1100
	_delay_ms(d);
	PORTD=0x04;// 0100
	_delay_ms(d);
	PORTD=0x06;// 0110
	_delay_ms(d);
	PORTD=0x02;// 0010
	_delay_ms(d);
	PORTD=0x03;// 0011
	_delay_ms(d);
	PORTD=0x01;// 0001
	_delay_ms(d);
	PORTD=0x09;// 1001
	_delay_ms(d); 
	}
	if(pomiar>512)
	{
	d=10000/pomiar;
	if(d<10){
	d=10;}

	PORTD=0x09;// 1001
	_delay_ms(d); 
	PORTD=0x01;// 0001
	_delay_ms(d);
	PORTD=0x03;// 0011
	_delay_ms(d);
	PORTD=0x02;// 0010
	_delay_ms(d);
	PORTD=0x06;// 0110
	_delay_ms(d);
	PORTD=0x04;// 0100
	_delay_ms(d);
	PORTD=0x0c;// 1100
	_delay_ms(d);
	PORTD=0x08;// 1000
	_delay_ms(d);

	}





}
}

Problem jest taki kręci się troche wolniej szybciej ale tylko w jedna stronę nie ważne ile kręcę potencjometrem. Co jest nie tak?

if(pomiar<512){ 

zamień na

if(pomiar<128){ 

W zmiennej pomiar masz 8 wyższych bitów wyniku. A zmienna 8 bitowa nie może przekroczyć 255, więc warunek <512 jest zawsze spełniony.

  • Lubię! 1

OO niee dzięki Elvis!!(oczywiście piwo) ale ze mnie niechluj 2^8 to 256 a ja sobie myślę 1024 nie wiem w ogóle czemu tak strzeliłem nie myśląc i jeszcze sobie zmniejszyłem do <256 na próbę 😉 Teraz wszystko chodzi ładnie piknie. Czas na Timmery

I jeszcze jedno pytanie co byście polecili do projektu z 6 bądź więcej silnikami ? Jaką atmege? Narazie na stanie mam 3 atmegi8 i atmege16 ale do 128 też mam dostęp. Czy jakoś można łączyć dwie atmegi ?

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...