Witam,
Piszę prosty program który ma sterować elektrozaworem hydraulicznym. Dawno nie pisałem w C, więc wybaczcie może prosty temat...
Po włączeniu zasilania modułu, jeśli nawet sygnał sterujący jest podany to elektrozawór nie może się włączyć. (chodzi o to, gdyby ktoś zostawił przełącznik w pozycji załączony a maszynę wyłączył, to po ponownym uruchomieniu nie może się ten zawór otworzyć, tylko trzeba cofnąć przełącznik sterujący do pozycji wyłączony i załączyć ponownie).
Poniżej warunek który to sprawdza (gdy wraz z zasilaniem podany jest sygnał sterujący, ma sygnalizować to miganiem dwóch diod LED):
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Jest on umieszczony zaraz na początku funkcji main, po inicjalizacji portów, przetwornika ADC, zmiennych itd.
Chodzi o to, że gdy nie dam tego _delay_us(1); lub jakiejkolwiek innej instrukcji to procek wchodzi w pętlę, ale nie wykonuje się instrukcja if, układ jest resetowany przez WDT, nawet jak ustawię WTD na 2s... Ale w pętlę wchodzi, ponieważ gdy zabiorę sygnał sterujący, to ładnie wychodzi z tego warunku i działa dalej normalnie. Sprawdziłem to wyłączając WDT - jest w pętli, tylko nie wykonuje instrukcji warunkowej. Zmienną "tog_led" ustawiam w przerwaniu od ADC w trybie FreeRun. Dlaczego musi być dosłownie "cokolwiek" dopisane w samej pętli żeby to działało?
Program pisany w AtmelStudio 6.
Pozdrawiam