Witam opiszę w czym tkwi problem, zaprojektowałem i wykonałem układ sterujący dwoma siłownikami- wykorzystuję do tego rygle samochodowe. Odpowiadają one za nastawianie przełożeń w pewnej przekładni.
Założenia projektu:
2 przyciski- wyższy bieg, niższy bieg
7-segmentowy wyświetlacz LED wskazujący aktualną pozycję. Co to znaczy? Ano tylko tyle, że gdy naciskamy + na wyświetlaczu dostajemy 1,2,3,4,5 gdy minus 5,4,3,2,1. Oczywiście gdy np jesteśmy na stanie wyświetlacza 3 i naciskamy - to otrzymamy 2 i analogicznie gdy mamy 3 i naciśniemy + dostaniemy 4. Zakres to 1-5.
2 elektromagnesy załączające się w zależności który przycisk naciśniemy
czujnik biegu- sprzężenie zwrotne pozwalające sprawdzić czy po wyzwoleniu siłownika bieg wszedł czy też nie udało się go wbić. W wypadku gdy się nie powiodło stan wyświetlacza zostaje niezmieniony. Płytkę i schemat sprawdziłem 150 000 razy i tam błędów nie stwierdziłem. Wyświetlacz to wyświetlacz ze wspólną katodą- sterowany 1kami z procesora. Siłowniki wyzwalane są 0-1kowo za pomocą 2 mosfetów.
Przyciski podłaczone do JP2, JP5 obsługuje wyświetlacz, JP7 siłowniki natomiast JP3 odbiera sygnały z czujnika biegu- aktualny bieg daje stan wysoki na odpowiedni pin złącza, tam do działania wkraczają transoptory które złączają odpowiednie piny procesora do masy.
Teraz troszkę o programie:
program zawiera 3 podstawowe moduly
klawiatura (keyboard.c)
wyswietlacz (display.c)
elektromagnesy ( elektro.c)
czujnik biegu(gsens.c)
kazdy modul ma swoje zadanie i zdarzenia z niego lub informacje sa odbierane lub wysylane w aplikacji.
klawiatura :
funkcja init ktora zawsze raz na poczatku inicjuje rozne zeczy.
z kontekstu przerwania sprawdzany jest stan obydwu przyciskow
jezeli jest on stabilny przez 50ms to znaczy ze drgania stykow sie skonczyly i mozna powiedzec ze przycisk jest nacisniety. Przerwanie wtedy ustawia odpowieno dla tego przycisku flage signal. Potem przychodzi kontekst Main i widzi ze jeden z przyciskow ma flage do zgloszenia i zglasza funkcje callback ktora jest odbierana w glownej aplikacji. Po czym flaga jest zerowana.
display jest prosty i chyba nie trzeba wiele tlumaczyc.
elektromagnesy przyjmuja rozkazy z aplikacji.
jezeli dany elektromagnes zostanie pobudzony to wtedy jest on zalaczany i zostaje ustawiony licznik ktory jest co 1ms dekrementowany w przerwaniu.
Jezeli dekrementacja osiagnie zero ( po 500ms ) to wtedy zostaja wylaczone elektromagnesy.
czujnik biegu sprawdza czy po odpaleniu trigger'ze czyli naciśnięciu przycisku wszedł kolejny lub poprzedni bieg, jeżlei tak to wszystko gra jeżeli coś się nie zgadza- biegu nie udało się wrzucić to dekrementuje lub inkrementuje cyfrę na wyświetlaczu. Po co? By nie doszło do sytuacji, że wskazanie wyświetlacza rozjedzie się z aktualnym przełożeniem.
Na czym polega problem?
Po podłączeniu zasilania nic się nie grzeje napięcia są ok jednak na wyświetlaczu palą się segmenty a, b, g oraz dp. Gdy naciskam przyciski nie dzieje się nic, nie załączają się ani mosfety ani nie zmienia się nic na wyświetlaczu. Nie mam pojęcia gdzie może leżeć błąd.
Nie ukrywając, kod jest dość mocno skomplikowany a stworzony został w istnych męczarniach (do tej pory znałem język C lecz tylko od strony programowania komputerowego- pierwszy raz programuję procesory), dlatego też prosiłem o pomoc osoby z forum ponieważ sam nie jestem jeszcze na takim etapie zaawansowania by to obsłużyć.
Na pomysły w czym rzecz czekam gorąco, zwłaszcza interesuje mnie wypowiedź kolegi Mirka ponieważ między innymi jego książką i blogiem się pożytkowałem podczas tworzenia kodu

Pozdrawiam, Krzysiek!


Kody:
display:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
electro:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
gsens:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
keyboard:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
atmega 16
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
macros
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
system
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.