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



Teraz jest 23 mar 2026, o 03:05


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 27 paź 2015, o 15:14 
Offline
Nowy

Dołączył(a): 13 lut 2014
Posty: 19
Pomógł: 0

Witam, mam problem z ustawieniem przerwania i Timera w Atmega2560. W innych prockach od Mega8 do 128 udawało mi się bezproblemowo. Natomiast siedzę od dwóch wieczorów nad PDF atmega2560 i coś robię nie tak. Jest tam tak dużo tych timerów i możliwości że się gubię.

Ustawienie TIMER1B / tu jest coś źle.

TCCR1B |= (1<<CS10) | (1<<CS12); // tryb CTC (PDF strona 156 - TCCR1B – Timer/Counter 1 Control Register B potem tabela niżej)
TCCR1B |= (1<<CS02) | (1<<CS00); // preskaler = 1024
OCR1B = 26; // podział przez 26 (rej. przepełnienia)
TIMSK1 |= (1<<OCIE1B); // zezwolenie na przerwanie CompareMatch

Wektor przerwania: ISR(TIMER1_COMPB_vect)

To jest do multipleksowania 4 wyświetlaczy LED - teraz przerwanie działa tak że wyświetlacze się przełączają tak mniej więcej 3hz a powinny 30-50Hz

Dodatkowo: Procek działa bo inne proste programy śmigają / Kwarc zewnętrzy 12Mhz / sei() jest w int main

Dziękuję za pomoc i pozdrawiam serdecznie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2015, o 17:00 
Offline
Użytkownik

Dołączył(a): 04 cze 2013
Posty: 517
Pomógł: 26

Kolego który ty chcesz timer ustawić timer0,timer1 Bo preskaler ustawiasz dla timera0 W tabelce masz napisane że CSn2 CSn0 gdzie n to numer timera

_________________
Przewodnik|Sterownik akwariowy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2015, o 17:19 
Offline
Nowy

Dołączył(a): 13 lut 2014
Posty: 19
Pomógł: 0

Witam,

Jeżeli ustawie:
CSn0 - gdzie n to numer Timera to preskaler ma takie samo ustawienie co CTC

tak to wygląda:

TCCR1B |= (1<<CS10) | (1<<CS12); // tryb CTC (PDF strona 156 - TCCR1B – Timer/Counter 1 Control Register B potem tabela niżej)
TCCR1B |= (1<<CS12) | (1<<CS10); // preskaler = 1024

Czyli coś nie tak. Nie mogę tego rozgryźć jak poustawiać. Bo tych timerów ustawie kilka ale na razie jednego nie umiem ogarnąć.

Dziękuję za odpowiedź i pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2015, o 17:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 mar 2014
Posty: 334
Lokalizacja: Rybnik
Pomógł: 55

Pewne dlatego, że tryb ustawia się za pomocą bitów WGMnX:
Obrazek


Autor postu otrzymał pochwałę

_________________
Amatorska stacje meteorologiczna



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2015, o 17:35 
Offline
Użytkownik

Dołączył(a): 04 cze 2013
Posty: 517
Pomógł: 26

dokładnie tryb ustawia się z tabelki i jest to bit WGM12 ustawiany w TCCR1B

_________________
Przewodnik|Sterownik akwariowy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2015, o 17:47 
Offline
Nowy

Dołączył(a): 13 lut 2014
Posty: 19
Pomógł: 0

Witam,

jak dałem tak:
TCCR1B |= (1<<WGM12) // tryb CTC
TCCR1B |= (1<<CS12) | (1<<CS10); // preskaler = 1024
OCR1B = 39; // dodatkowy podział przez 39
TIMSK1 |= (1<<OCIE1B); // zezwolenie na przerwanie CompareMatch

to mam errora:

make all
'Building file: ../main.c'
'Invoking: AVR Compiler'
avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega2560 -DF_CPU=1000000UL -MMD -MP -MF"main.d" -MT"main.d" -c -o "main.o" "../main.c"
../main.c: In function 'main':
../main.c:88:3: error: called object '8' is not a function
make: *** [main.o] Błąd 1



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2015, o 17:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 mar 2014
Posty: 334
Lokalizacja: Rybnik
Pomógł: 55

W pierwszej linii brakuje Ci średnika.
Poza tym wstawiaj kod w syntax.


Autor postu otrzymał pochwałę

_________________
Amatorska stacje meteorologiczna



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2015, o 18:00 
Offline
Nowy

Dołączył(a): 13 lut 2014
Posty: 19
Pomógł: 0

Tak przepraszam, już się wszystko miesza. Błędu nie ma co prawda ale i też nie ma przerwania. Jeden wyświetlacz pali się stale.
Wcześniej było ze przełączały się co 3 -4 sekundy. Teraz stoi.
po ustawieniu TCCR1B |= (1<<WGM12)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2015, o 19:53 
Offline
Użytkownik

Dołączył(a): 04 cze 2013
Posty: 517
Pomógł: 26

A dla czego ładujesz do OCR1B a nie do OCR1A?


Autor postu otrzymał pochwałę

_________________
Przewodnik|Sterownik akwariowy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 paź 2015, o 10:31 
Offline
Nowy

Dołączył(a): 13 lut 2014
Posty: 19
Pomógł: 0

Witam,
po wprowadzeniu OCR1A zaczęło działać. Bardzo dziekuję.

A dałem na OCR1B ponieważ wydawało mi sie że właśnie ten rejestr powinno się ustawić. Zgodnie z nazwą. "TCCR1B – Timer/Counter 1 Control Register B"
Staram się to zrozumieć, o co chodzi w tych Timerach w tym potworze jakim jest Atmega2560

Musze uruchomić aż 3 takie przerwania/Timery i dwa przerwania zewnętrzne. Dlatego jeszcze na chwile zostawię temat otwarty.

Z pomocą kolegów udało sie ustawić pierwsze przerwanie. BARDZO dziękuję.

Kod:
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  
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 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