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



Teraz jest 10 sty 2025, o 22:44


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 17 cze 2016, o 09:56 
Offline
Użytkownik

Dołączył(a): 15 cze 2013
Posty: 29
Pomógł: 0

Dzień Dobry wszystkim ! :)

Przyznam szczerze, że z uruchamianiem timerów sprzętowych zawsze miałem problem. Timer 1 (16bitowy) w trybie CTC mam uruchomiony i działa od dla mnie poprawnie kod jego to :
Kod:
    TCCR1B|= (1<<WGM12);              // włączenie trybu CTC Timera1
    TCCR1B|= (1<<CS10) | (1<<CS12);     // włączenie preskaler 128
     TIMSK|= (1<<OCIE1A);               // zezwolenie na przerawnie Compare Match
    OCR1A=400;
    TCNT1=0;


Analogicznie chciałem uruchomić timer3 (16bitowy) kod do niego to:
Kod:
    TCCR3B|= (1<<WGM32);              // włączenie trybu CTC Timera3
    TCCR3B|= (1<<CS30) | (1<<CS32);     // włączenie preskaler 128
    ETIMSK|= (1<<OCIE3A);               // zezwolenie na przerawnie Compare Match

    OCR3A=900;
         TCNT3=0;


Kod:
ISR(TIMER3_COMPA_vect){

      uart_puts("DZIALA");                  

}


Już przy poleceniu ETIMSK|= (1<<OCIE3A); blokuje mi Timer1, przyznam że główkuje nad tym od paru godzin, i nie wiem co jest nie tak. Bardzo proszę o pomoc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 cze 2016, o 10:14 
Offline
Moderator
Avatar użytkownika

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

A kto to w ogóle puszcza stringi z przerwania ... zresztą kto wie jeszcze jak masz zrobione to wysyłanie stringów bo może też na przerwaniach. Powiedz mi czy nie przychodzi ci prostszy, ba, NAJPROSTSZY pomysł i nieblokujący do głowy ?

JEDNA DIODA LED - czy nie prościej jest ją w przerwaniu po prostu zaświecić żeby wiedzieć czy doszło do przerwania czy nie ?

Poza tym co to za rejestr? ETIMSK ?

no i po kolejne .... nie ma w tym procku ani rejestru TIMSK ani ETIMSK .... tylko TIMSKx czyli np TIMSK0, TIMSK1, TIMSK2 i TIMSK3

_________________
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: 17 cze 2016, o 11:03 
Offline
Użytkownik

Dołączył(a): 15 cze 2013
Posty: 29
Pomógł: 0

Szanowny Panie Mirosławie :)
Wysyłanie stringu to tak tylko, aby zobaczyć czy przerwanie działa :) może być i dioda.

Co do drugiej wątpliwości to przyznam szczerze, że nie wiem o co chodzi. Na stronie 139 datasheetu jest taki rejester. Nazywa się Extended Timer/Counter Interrupt Mask Register – ETIMSK. na potwierdzenie podam screena. Pewnie coś źle robie i sie pogubiłem.

I oczywiście bit kompatybilności z atmega 103 jest wyłączony.

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 cze 2016, o 11:23 
Offline
Moderator
Avatar użytkownika

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

eeeeeeeeeeeeeeh przepraszam bardzo mam słaby wzrok i dopiero teraz jak założyłem okulary to widzę, że mowa o ATmega128 a nie ATmega1284 - przepraszam

_________________
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: 17 cze 2016, o 11:46 
Offline
Użytkownik

Dołączył(a): 15 cze 2013
Posty: 29
Pomógł: 0

Nic się nie stało Panie Mirku, tylko proszę o pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 cze 2016, o 12:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

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

Nie ma tekiego preskalera o wartości 128, w obydwu przypadkach wynosi on 1024.

Timery od Timer1 do Timer3 w Atmega128 korzystają z tego samego preskalera.
Spróbuj użyć OCR3B zamiast OCR3A (Output Compare Registers), ustaw bit OCIE3B zamiast OCIE3A w ETIMSK.
Oczywiście zmień ISR(TIMER3_COMPA_vect) na ISR(TIMER3_COMPB_vect).
Powinno pomóc.

------------------------ [ Dodano po: 33 minutach ]

Nie źle ci podpowiadam, bo przecież Timer3 działa w CTC tylko z OCR3A.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 cze 2016, o 13:08 
Offline
Użytkownik

Dołączył(a): 15 cze 2013
Posty: 29
Pomógł: 0

To dlaczego linijka Timera3:
Kod:
    ETIMSK|= (1<<OCIE3A);               // zezwolenie na przerawnie Compare Match

Blokuje pracę poprzedniego Timera1???



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 cze 2016, o 13:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

W dt znalazłem taką informację:
Writing to the TCNTn Register blocks (removes) the compare match on the following timer clock
for all compare units.
Może o to tutaj chodzi?


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 cze 2016, o 14:28 
Offline
Użytkownik

Dołączył(a): 15 cze 2013
Posty: 29
Pomógł: 0

oooo przestało blokować poprzedni Timer :) ale timer 3 nadal nie działa. Będę próbował jak coś będę jeszcze pisać.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


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