Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 24 kwi 2024, o 17:32


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 16 cze 2019, o 00:10 
Offline
Nowy

Dołączył(a): 31 sie 2014
Posty: 6
Pomógł: 0

Witam szanowne koleżanki i kolegów.
Mam problem z ustawieniem Timera w Dawcyczasu2 na Atmege1284

Tutaj jest oryginalny kod napisany przez Mirka na Atmega32, który pięknie działa

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



A tu jeż mój kod na Atmega1284, który nie uruchamia Timera

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Po zmianie na taką opcję, na wyświetlaczu jest zamrożony napis "start..."

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A po wpisaniu poniższej, LCD jest prawie że niepodświetlony, w tle widoczny napis "start..."

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Czy ktoś wie jak prawidłowo uruchomić na tym procku Timer do Dawcaczasu2?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 cze 2019, o 02:00 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27225
Lokalizacja: Szczecin
Pomógł: 1041

Nie używaj kanału B tylko i wyłącznie A

czyli OCR2A, TIMER2_COMPA_vect itd

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 cze 2019, o 07:35 
Offline
Nowy

Dołączył(a): 31 sie 2014
Posty: 6
Pomógł: 0

Nie mam bladego pojęcia, co robię nie tak. Zgodnie z sugestią Mirka mój kod do obsługi Timer2, wygląda teraz tak:

Składnia: [ Pobierz ] [ Ukryj ]
język c
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.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 cze 2019, o 07:56 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27225
Lokalizacja: Szczecin
Pomógł: 1041

Alderan napisał(a):
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:

Składnia: [ Pobierz ] [ Ukryj ]
język c
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

powodzenia

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 cze 2019, o 11:16 
Offline
Nowy

Dołączył(a): 31 sie 2014
Posty: 6
Pomógł: 0

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ś :lol:
Składnia: [ Pobierz ] [ Ukryj ]
język c
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:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Natomiast po moim cudowny i błyskotliwym przeportowaniu na Atmega1284 wyglądała tak:

Składnia: [ Pobierz ] [ Ukryj ]
język c
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ł. :twisted:
Wystarczyło zagłębić się w notę i poprawić ostatni wiersz na taki:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I od tej pory wszystko działa prawidłowo :D

Niech moje kilkunastogodzinne boje wynikające z lenistwa, będą przestrogą dla innych. :P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 cze 2019, o 11:37 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27225
Lokalizacja: Szczecin
Pomógł: 1041

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 ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO