Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Niestety po kompilacji programu i wgraniu go do tego procka na LCD pojawia się napis "start..." i nic się nie dzieje. Dopiero po zakomentowaniu poniższej linii, zegar rusza, no ale oczywiście nie działa dawca czasu.
Niestety po kompilacji programu i wgraniu go do tego procka na LCD pojawia się napis "start..." i nic się nie dzieje. Dopiero po zakomentowaniu poniższej linii, zegar rusza, no ale oczywiście nie działa dawca czasu.
Ale pomyśl, nie można tak podchodzić do rozwiązywania problemu - że po zakomentowaniu jakiejś tam linii działa albo nie działa jakaś tam funkcja - bo w ogóle nie zbliżasz się do rozwiązania ani na milimetr
Gdyby mi to nie działo ustawianie timera to od czego zacząłbym sprawdzać ? Np od debugera na jednej diodzie LED
i PIERWSZE co bym sprawdzał i jakbym sprawdzał to:
1. Założyłbym na szybko nowy mały projekt - taki żeby tylko odpalić przerwanie CTC 2. i wstawiałbym miganie diodą LED gdzie ? No Qurczę do przerwania - żeby zobaczyć czy dobrze mi działa to przerwanie
zamiast bawić się na jakimś przepastnym kodzie i załamywać się, że od złego ustawienia timera sprzętowego nie działa mi jakaś tam odległa funkcja.
To co ci opisałem wyżej - to nazywa się WYIZOLOWANIE PROBLEMU - i nie mów mi że to trudne albo że czasochłonne bo to PODSTAWA ... ja np tylko i wyłącznie w ten sposób działam. A jak nabierzesz praktyki to pewnie i podstawowe rzeczy nauczysz się testować tą jedną diodą LED nawet w większym projekcie. Mówię ci obejrzyj ten poradnik dokładnie. A później również ten:
I na zakończenie - gdybyś już doszedł z diodą LED, że przerwanie CompareA ci nie działa - bo dioda w nim np nie miga - to jaki wniosek mógłbyś wysnuć ?
Ano taki prosty, że coś skopałeś w inicjalizacji tegoż przerwania, albo że nie włączyłeś przerwań globalnych za pomocą sei() ... można powiedzieć, że dzieląc problem na dwa - nagle okazało się, że tylko w jednej połowie masz błąd i już jest mniej miejsc do jego znalezienia
No to skoro np źle skonfigurowałeś timer2 do pracy - to przyglądasz się jak przysłowiowa "sroka w kość" ja tak zawsze robię bo mnie też się takie błędy zdarzają - więc przyglądam się jak sroka w kość - na fragment w którym wiem, że jest problem - w twoim wypadku:
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
i co?
czasem oczy się tak przyzwyczajają do tekstu który napiszemy że za choinkę nie można dojść gdzie babol, więc czasem trzeba odejść - ochłonąć, napić się jakiegoś zacnego trunku i podejść od nowa do kodu i wraz z notą PDF sprawdzać linijka po linijce i np zastanowić się, czy aby na pewno dany bit jest w tym rejestrze w którym go właśnie ustawiam ? Bo głupia literówka zawsze tu rozwala ludziom wszystko
no i zobaczyłbyś wcześniej czy później pewnie, że :
Cytuj:
TCCR2B |= (1<<WGM21);
chyba bit WGM21 nie jest w tym rejestrze w którym próbujesz go czochrać .... sprawdź w nocie PDF ona nie kłamie - a ja mogłem się pomylić. I wcale to nie oznacza, że to może być tylko jeden błąd. Mam nadzieję, że po tym całym opisie o ile go dokładnie przeczytasz ale i obejrzysz DOKŁADNIE chociaż pierwszy poradnik - to spokojnie
1. pewnie sam znajdziesz kolejny problem 2. a nawet jak nie znajdziesz to kolejnym razem na forum opiszesz konkretną sytuację, co testujesz, jak testujesz - bo tym razem WYIZOLOWAŁEŚ problem i będzie po tysiąckroć łatwiej tobie pomóc
Co do poniższego błędu, to oczywiście po wielu próbach z różnymi danymi, już nie zauważyłem, że wkradł się błąd. A tu wystarczył jeden rzut twojego oka i już go wykryłeś
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Ale to nie on był przyczyną. Idąc za twoją radą, stworzyłem oddzielny projekt w którym była jedynie procedura obsługi Timera wraz z migającą diodą. Okazało się, że w tym projekcie Timery pracują poprawni. Skoro tak, to w Dawcyczasu2 po przeportowaniu, też powinny działać bezbłędnie. W funcji GetNtpTime_EVENT za komentowałem wszystkie linie, oprócz licznika i okazało się, że tutaj też procedura obsługi Timerów działa prawidłowo. Dlatego doszedłem do wniosku, że błąd musi się znajdować w obsłudze UART-a. I rzeczywiści, był w poniższej funkcji, która w oryginale na Atmega32 wyglądała tak:
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Po obejrzeniu twojego poradnika dotyczącego przeportowywania, poleciałem po całości jak małpa nie zagłębiając się w szczegóły noty katalogowej i bit URSEL, ponieważ w nocie od Atmega1284 nie ma takiego bitu, zastąpiłem bitem UMSEL0, wpadając na genialny pomysł, że producent teraz tak go będzie nazywał. Wystarczyło zagłębić się w notę i poprawić ostatni wiersz na taki:
ale to jest nasz chleb powszedni więc żadne to przestrogi ... a to że samemu się odnajdzie problem - no tego nikt nie odbierze a za to też sklill wiedzy praktycznej rośnie nieuchronnie
Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 6 gości
Nie możesz rozpoczynać nowych wątków Nie możesz odpowiadać w wątkach Nie możesz edytować swoich postów Nie możesz usuwać swoich postów Nie możesz dodawać załączników