Skocz do zawartości

[C] ATtiny 13, serwa i przyciski


Pomocna odpowiedź

Hmm powinno działać. A program się kompiluje i układ nie działa czy w ogóle się nie kompiluje??

Spróbuj wpisać do pętli nieskończonej jakąś instrukcje. Może być zupełnie niezwiązana z działaniem układu. U mnie czasem się zawiesza jak jest pusty while(1){}.

#define SERW_PWMSRODEK    ((SERW_PWMMAX - SERW_PWMMIN)/2) 

= 900

Powinno być

#define SERW_PWMSRODEK    ((SERW_PWMMAX + SERW_PWMMIN)/2) 

= 1500

A tak to nie wiem. Może jednak coś źle podłączone? Często błąd jest w miejscu najmniej spodziewanym (zwarcie chociażby).

Sprawdziłem raz jeszcze połączenie, zbudowałem układ na nowo i bez zmian... ;|

Dodatkowo żeby sprawdzić czy wszystko podłączone jest prawidłowo wgrałem inny program, do obsługi jednego serwa przez sprzętowy PWM i tamto działa.... ;/

Próbowałem z optymalizacją ustawioną na "Os" i na bez optymalizacji. Efekt taki sam.

Przez chwilę myślałem że uC jest jakiś walnięty ale okazało się że nie... na innym jest dokładnie to samo

W takim razie pozostało sprawdzanie metodą prób i błędów.

Podłącz do procka diodę led. Wewnątrz pętli while(1){} napisz kod żeby dioda migała co ok 1 sec. I uruchom. Jeżeli będzie migać to znaczy, że procek pracuje i funkcje od serw są złe. Jeżeli nie będzie migać to znaczy, że się zawiesza i będziemy szukać gdzie.

  • Pomogłeś! 1

Problem został rozwiązany, chodziło o nieprawidłowo ustawione FUSEBITY... ;/ teraz jest okey...

Dziękuję bardzo za pomoc!

//EDIT...

Pozwolę sobie odgrzebać trochę ten temat.

Wszystko działa ładnie, bez problemu tylko nie rozumiem jednej rzeczy. Chodzi o same tablice.

Chciałbym aby tablica po naciśnięciu przycisku zmieniła swoje wartości a następnie po np 10s znowu zmieniła i tak cyklicznie aż do wciśnięcia innego przycisku.

jeśli zrobię to w taki sposób:

if(bit_is_clear(BUTTPIN,BUTT_1))
	{
	        SERW_TablicaPWM[1]=1500;
		_delay_ms(10000); 
                       SERW_TablicaPWM[1]=900;
		_delay_ms(20);

	}

Po wciśnięciu przycisku komórka po prostu po 10s zmienia swoją wartość na 900 bez wcześniejszego zmienienia się na 1500. Dlaczego tak się dzieje?

Edit...

Po drugie, czy poprawnym jest stosowanie tak długich opóźnień funkcją DELAY?

//okey, źle zrozumiałem to co przeczytałem... już wiem o co chodzi z delayami... 😳

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...