ATNEL tech-forum
https://forum.atnel.pl/

Atmega 328P i initializacja licznika T1 (16bit) i CTC
https://forum.atnel.pl/topic22180.html
Strona 1 z 1

Autor:  szymanskim [ 17 kwi 2019, o 22:14 ]
Tytuł:  Atmega 328P i initializacja licznika T1 (16bit) i CTC

Cześć,
Mam problem z właściwym ustawieniem licznika T1 tak żeby przerywanie uruchamiało się co 1s.
Licznik konfiguruje w następujący sposób:

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


i obsługa przerywania

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


Przerywanie uruchamia się ale nie co 1s i co więcej mam wrażenie że zmiany wartości w OCR1A nie wpływają na częstotliwość przerywania :( Błąd jest pytanie tylko jaki?

Dodatkowo jak dodałem blok konfiguracji i obsługi przerywania przestał działać mi odbiór pakietów z atnelowskiej biloteki NRF.

Autor:  szymanskim [ 17 kwi 2019, o 23:40 ]
Tytuł:  Re: Atmega 328P i initializacja licznika T1 (16bit) i CTC

Mam trop, dopiero teraz zauważyłem że są dwa tryby ctc i jak używam ocr1a to muszę użyć inny tryb. Sprawdzę rano..

Autor:  piotr8605 [ 17 kwi 2019, o 23:51 ]
Tytuł:  Re: Atmega 328P i initializacja licznika T1 (16bit) i CTC

W rejestrze TCCR1B masz bity WGM13 oraz WGM12, a nie w rejestrze TCCR1A.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  mczarny [ 18 kwi 2019, o 07:39 ]
Tytuł:  Re: Atmega 328P i initializacja licznika T1 (16bit) i CTC

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

Natomiast wysyłanie czegoś przez uart w przerwaniu to nie jest dobry pomysł.

Autor:  szymanskim [ 18 kwi 2019, o 07:56 ]
Tytuł:  Re: Atmega 328P i initializacja licznika T1 (16bit) i CTC

mczarny napisał(a):
Po pierwsze to tryb CTC to tryb - 4
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Natomiast wysyłanie czegoś przez uart w przerwaniu to nie jest dobry pomysł.


Dzięki teraz działa. O ustawianiu bitów WGM13/12 wspominali w rozdziale o TCCR1A i to mnie zmyliło.
Natomiast pytanie dlaczego wysyłanie (a właściwie wrzucanie do bufora, wysyłka jest zrobiona na podstawie bluebooka) w przrywaniu to zły pomysł? Faktycznie jak dodam tą linijke to program przestaje dobrze działać - przestaje wykonywać się kod w pętli głównej?

Autor:  mczarny [ 18 kwi 2019, o 08:58 ]
Tytuł:  Re: Atmega 328P i initializacja licznika T1 (16bit) i CTC

szymanskim napisał(a):
Natomiast pytanie dlaczego wysyłanie (a właściwie wrzucanie do bufora, wysyłka jest zrobiona na podstawie bluebooka) w przrywaniu to zły pomysł? Faktycznie jak dodam tą linijke to program przestaje dobrze działać - przestaje wykonywać się kod w pętli głównej?

Przeanalizuj sobie procedurę wysyłania znaków przez uart. Jak myślisz czy wysyłanie korzysta z przerwań? Ano korzysta wiec następuje przerwanie w przerwaniu i robi się kaszana. Powołaj sobie lepiej timer programowy na podstawie sprzętowego i wysyłaj to co chcesz w pętli głównej korzystając już z timera programowego.

Autor:  szymanskim [ 18 kwi 2019, o 09:46 ]
Tytuł:  Re: Atmega 328P i initializacja licznika T1 (16bit) i CTC

mczarny napisał(a):
szymanskim napisał(a):
Przeanalizuj sobie procedurę wysyłania znaków przez uart. Jak myślisz czy wysyłanie korzysta z przerwań? Ano korzysta wiec następuje przerwanie w przerwaniu i robi się kaszana. Powołaj sobie lepiej timer programowy na podstawie sprzętowego i wysyłaj to co chcesz w pętli głównej korzystając już z timera programowego.


Ok dzięki. Rozumiem że jak napisałeś żeby wyświetlać w pętli głównej to sugerujesz zrobić wysyłanie na uarta bez przerywan czyli wrzucac po znaku i patrzec czy sie wyslalo i nie bawic sie w przerywania uarta? W domu przetestuje bibloteke wysyki bez przerywań - dodalem jednego #define żeby przełączyć biblotekę w tryb bezprzerywaniowy.
Powiem szczerze, że jestem zaskoczony że nie jest wskazane, żeby chodziło parę różnych przerywań. Zakładałem że jest stos i jeśli nawet taka sytuacja się wydarzy to nic złego się nie stanie, no chyba że mówimy o sytuacji gdzie zabraknie miejsca na zmienne na stosie? W końcu jest parę rodzajów przerywanie i chyba twórcy procka założyli że użytkownik wykorzysta parę na raz typu timer + UART?

Swoją drogą ten licznik robiłem po to aby głównie mierzyć czas od ostatniego odbioru pakietu przez biloteke NRF24 i jak czas był za duży restartowałem procek ale okazuje się,że niezbyt o pomaga bo problem jest raczej z układem NRF (a możliwe że z całym ukłądem) i reset procka nic nie daje.

Autor:  mczarny [ 18 kwi 2019, o 12:41 ]
Tytuł:  Re: Atmega 328P i initializacja licznika T1 (16bit) i CTC

W pętli główniej ale nie znak po znaku tylko za pomocą timera programowego coś np:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Masz BB więc sięgnij do rozdziału o systemach czasu rzeczywistego pod koniec książki i zobaczysz jak można to pięknie zrobić.

Autor:  szymanskim [ 18 kwi 2019, o 13:45 ]
Tytuł:  Re: Atmega 328P i initializacja licznika T1 (16bit) i CTC

Ok, w wolnym czasie zerknę. Mam te rozdział w planach ale nie było czasu. Na razie to przerobiłem biblotekę wysyłki po UART żeby mogła działać również bez przerywań - jest to akceptowalne w moim przypadku.

Michał

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/