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



Teraz jest 28 mar 2024, o 12:54


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 27 lut 2018, o 02:36 
Offline
Użytkownik

Dołączył(a): 19 gru 2015
Posty: 29
Pomógł: 0

Cześć,

mam problem z wywołaniem przerwania od przepełnienia w atmedze128.

atmega jest taktowana 16MHz.

Chciałbym osiągnąć częstotliwość pętli, która wynosi 100Hz i użyć preskalera równego 256.

Napisałem taki oto kod, i nie jestem pewny czy faktycznie wszystko jest ok. Chciałbym poprosić o zerknięcie i zweryfikowanie ;)

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: 27 lut 2018, o 06:38 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 230
Pomógł: 26

W kodzie chcesz użyć takiego przerwania
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Wydaje mi się że to jest przerwanie dla ATtiny26

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

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2018, o 07:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2016
Posty: 248
Lokalizacja: Norwegia
Pomógł: 16

Spójrz do noty katalogowej Atmegi128 od strony 132 masz opisane rejestry dla 16bit timer counter. Pobaw się z tym a zobaczysz jak fajnie się utrwali.

_________________
SP2LUB - LA1BUA



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2018, o 09:58 
Offline
Użytkownik

Dołączył(a): 19 gru 2015
Posty: 29
Pomógł: 0

JarekB napisał(a):
W kodzie chcesz użyć takiego przerwania
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Wydaje mi się że to jest przerwanie dla ATtiny26

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


nawet nie zauważyłem, ze "O" ucięło, bo mam zapisane "..COMPA..."

------------------------ [ Dodano po: 29 minutach ]

SP2LUB napisał(a):
Spójrz do noty katalogowej Atmegi128 od strony 132 masz opisane rejestry dla 16bit timer counter. Pobaw się z tym a zobaczysz jak fajnie się utrwali.



Właśnie patrzyłem, ale nie jestem pewny w 100% czy zrobiłem to poprawnie i dlatego proszę o pomoc ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2018, o 20:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1020
Lokalizacja: Trójmiasto
Pomógł: 188

Kolego musisz się zdecydować na jedno rozwiązanie bo jak na razie pomieszałeś 2 tryby ze sobą.
Z jednej strony piszesz:
Marcin_5656 napisał(a):
mam problem z wywołaniem przerwania od przepełnienia w atmedze128.
oraz w przerwaniu próbujesz ładować rejestr stałą wartością i tu może by się zgadzało gdyby nie to że rejestr jaki powinieneś ładować tą stałą wartością to TCNT1, a tryb pracy od przepełnienia to tryb NORMAL, czyli wszystkie bity WGMn1 na "0"!
Jednakże pozostała część kodu sugeruje jednak, iż próbujesz używać Timera1 w trybie CTC (od porównania OCR1A) - tak masz zainicjalizowany timer, również wektor przerwania masz od trybu porównania, jedyne co to w przerwaniu NIE powinno się znaleźć ładowanie rejestru OCR1A - to powinno być tylko przy inicjalizacji timera - i nawet jest...
Tak więc wywal z przerwania to ładowanie rejestru OCR1A i powinno działać.

------------------------ [ Dodano po: 6 minutach ]

a i jeszcze jedno: globalne zezwolenie na przerwania przenieś na dół, po inicjalizacji timera tuż przed główną pętlę while.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 mar 2018, o 19:10 
Offline
Użytkownik

Dołączył(a): 19 gru 2015
Posty: 29
Pomógł: 0

xentis napisał(a):
Kolego musisz się zdecydować na jedno rozwiązanie bo jak na razie pomieszałeś 2 tryby ze sobą.
Z jednej strony piszesz:
Marcin_5656 napisał(a):
mam problem z wywołaniem przerwania od przepełnienia w atmedze128.
oraz w przerwaniu próbujesz ładować rejestr stałą wartością i tu może by się zgadzało gdyby nie to że rejestr jaki powinieneś ładować tą stałą wartością to TCNT1, a tryb pracy od przepełnienia to tryb NORMAL, czyli wszystkie bity WGMn1 na "0"!
Jednakże pozostała część kodu sugeruje jednak, iż próbujesz używać Timera1 w trybie CTC (od porównania OCR1A) - tak masz zainicjalizowany timer, również wektor przerwania masz od trybu porównania, jedyne co to w przerwaniu NIE powinno się znaleźć ładowanie rejestru OCR1A - to powinno być tylko przy inicjalizacji timera - i nawet jest...
Tak więc wywal z przerwania to ładowanie rejestru OCR1A i powinno działać.

------------------------ [ Dodano po: 6 minutach ]

a i jeszcze jedno: globalne zezwolenie na przerwania przenieś na dół, po inicjalizacji timera tuż przed główną pętlę while.


A jeśli chciałbym zrobić to drugie rozwiązanie jak by to mogło wyglądać ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 mar 2018, o 19:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1020
Lokalizacja: Trójmiasto
Pomógł: 188

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: 2 mar 2018, o 20:53 
Offline
Użytkownik

Dołączył(a): 19 gru 2015
Posty: 29
Pomógł: 0

To teraz rozumiem ten sposób.

Postanowiłem pierwszy sposób wykorzystać, ale z timerem 3, i napisałem coś takiego, ale nie chce mi działać, w czym może być problem ?


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: 3 mar 2018, o 00:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1020
Lokalizacja: Trójmiasto
Pomógł: 188

Dla timera3 rejestr masek przerwań nazywa się ETIMSK a nie jak wpisałeś TIMSK. Stąd nie masz włączonego zezwolenia na przerwanie od porównania dla timera3, a co za tym idzie przerwanie nie działa... ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 mar 2018, o 00:14 
Offline
Użytkownik

Dołączył(a): 19 gru 2015
Posty: 29
Pomógł: 0

xentis napisał(a):
Dla timera3 rejestr masek przerwań nazywa się ETIMSK a nie jak wpisałeś TIMSK. Stąd nie masz włączonego zezwolenia na przerwanie od porównania dla timera3, a co za tym idzie przerwanie nie działa... ;)


Zapomniałem wstawić tutaj, ze już rozwiałem problem, bo jakoś na początku nie mogłem zlokalizować w dokumentacji tego "ETIMSK", bo cały czas szukałem czegoś w stylu "TIMSK3", ale w końcu znalazłem i zadziałało ;)



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: 10 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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