Atmega2560 timer'y
- Jacek
- Posty: 384
- Rejestracja: 25 kwie 2016, 19:14
Atmega2560 timer'y
Witam - nie mogę znaleźć który Timer w a2560 jest ile bitowy - wiem że a2560 ma 2 8 bitowe timery oraz 4 16 bitowe, ale który jest który - czy może Ktoś z forumowiczów naprowadzić mnie w którym miejscu datasheet pisze który timer ile ma bitów
pozdrawiam Jacek.
pozdrawiam Jacek.
- niveasoft
- Posty: 1219
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Atmega2560 timer'y
Zerknij na obrazek
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
- Jacek
- Posty: 384
- Rejestracja: 25 kwie 2016, 19:14
Re: Atmega2560 timer'y
Witam - no tak ślepy jestem - miałem wyłączone to okno z lewej strony Bartek bardzo dziękuje za oświecenie.
pozdrawiam Jacek.
pozdrawiam Jacek.
- Jacek
- Posty: 384
- Rejestracja: 25 kwie 2016, 19:14
Re: Atmega2560 timer'y
Bartku czy ja dobrze odliczam czas w A2560 mam taki program:
czy to jest poprawnie oby dioda led podłączona do portu k.0 mrugała co 1 sekunde
pozdrawiam Jacek.
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- '----------------------------------------------------------------
- ' odliczanie 1 sekundy na A2560 przy kwarcu 16MHz
- $regfile = "m2560def.dat"
- $crystal = 16000000
- $baud = 19200
- $hwstack = 255
- $swstack = 128
- $framesize = 128
- Config Timer0 = Timer , Prescale = 256 'konfiguracja Timer0 jako Timer
- Enable Timer0 : On Timer0 Przertimer0
- Enable Interrupts
- Dim Dziel(4) As Byte
- Dim Flaga100ms As Bit
- Dim Flaga500ms As Bit
- Dim Flaga1s As Bit
- Dim Flaga5s As Bit
- Config Portk = Output 'konfiguracja portu k jako wyjścia
- Set Portk.0 'ustawienie portu k.0 w satn wysoki
- Do
- If Flaga100ms = 1 Then
- Flaga100ms = 0
- 'Toggle Portk.0 ' tu na oko mruga co 1s
- End If
- If Flaga1s = 1 Then
- Flaga1s = 0
- Toggle Portk.0 'tu na oko mruga co 5s
- End If
- Loop
- End
- '--------------------------------------------------------------------
- ' podprogram przerwań Timer0
- Przertimer0:
- Timer0 = 6 'wstawienie do Timer0 wartości 6
- Incr Dziel(1) 'zwiększ dzielnik 1
- If Dziel(1) = 25 Then 'jeśli dzielnik 1 zwiększy się 25 razy
- Dziel(1) = 0 'wyzeruj dzielnik 1
- Set Flaga100ms 'ustaw flaga100ms
- Incr Dziel(2) 'zwiększ dzielnik 2
- If Dziel(2) = 5 Then 'jestli dzielnik 2 zwiększy się 5 razy
- Dziel(2) = 0 'wyzeruj dzielnik 2
- Set Flaga500ms 'ustaw flaga500ms
- Incr Dziel(3) 'zwiększ dzielnik 3
- If Dziel(3) = 2 Then 'jeśli dzielnik3 zwiększy się 2 razy
- Dziel(3) = 0 'wyzeruj dzielnik 3
- Set Flaga1s 'ustaw flaga1s
- Incr Dziel(4) 'zwiększ dzielnik 4
- If Dziel(4) = 5 Then 'jeśli dzielnik 4 zwiekszy się 5 razy
- Dziel(4) = 0 'wyzeruj dzielnik 4
- Set Flaga5s 'ustaw flaga5s
- End If 'koniec warunku
- End If 'koniec warunku
- End If 'koniec warunku
- End If 'koniec warunku
- Return 'powrót
pozdrawiam Jacek.
- niveasoft
- Posty: 1219
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Atmega2560 timer'y
Jaki najmniejszy przedział jest Ci potrzebny?
Osobiście najczęściej ustawiam 10ms bo się przydaje do klawiatury/przycisków.
Do tego lepiej jest użyć trybu CTC i można nawet nie korzystać z przerwania.
Kawałek mojego programu na Mega2560 poniżej, ale jak byś potrzebował tylko 1s albo 500ms to można użyć innego Timera 16bit i on Ci odmierzy od razu gotowy czas bez tego składania z małych odcinków.
Osobiście najczęściej ustawiam 10ms bo się przydaje do klawiatury/przycisków.
Do tego lepiej jest użyć trybu CTC i można nawet nie korzystać z przerwania.
Kawałek mojego programu na Mega2560 poniżej, ale jak byś potrzebował tylko 1s albo 500ms to można użyć innego Timera 16bit i on Ci odmierzy od razu gotowy czas bez tego składania z małych odcinków.
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m2560def.dat"
- $crystal = 16000000
- $hwstack = 128
- $swstack = 128
- $framesize = 255
- '*****************************************************************
- '* TIMER2 FOR TIME BASE *
- '*****************************************************************
- Config Timer2 = Timer , Prescale = 1024 , Compare_a = Disconnect , Compare_b = Disconnect , Clear_timer = 1
- Compare2a = 155 '10ms @16MHz/1024
- Do
- '--[ TIMER2 10ms ]----------------------------
- If Tifr2.ocf2a = 1 Then 'jeśli Timer ustawił flagę sprzetową
- Tifr2.ocf2a = 1 'skasuj flagę przez wpisanie 1 (a nie 0)
- 'tu w środku IF`a program jest co 10ms bez użycia przerwań
- End If
- Loop
- niveasoft
- Posty: 1219
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Atmega2560 timer'y
Jak się gdzieś nie machnąłem (bo nie testowałem) i masz, na przykład, Arduino Mega2560 to możesz sobie pomigać tą wbudowaną diodą LED co pół sekundy lub co sekundę
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m2560def.dat"
- $crystal = 16000000
- $hwstack = 128
- $swstack = 128
- $framesize = 255
- Config Portb.7 = Output : Arduino_mega_led Alias Portb.7
- '*****************************************************************
- '* TIMER3 FOR TIME BASE *
- '*****************************************************************
- Config Timer3 = Timer , Prescale = 256 , Clear_timer = 1
- Compare3a = 31249 '500ms @16MHz/256
- 'Compare3a = 62499 '1s @16MHz/256
- Do
- If Tifr3.ocf3a = 1 Then
- Tifr3.ocf3a = 1
- Toggle Arduino_mega_led
- End If
- Loop
- Jacek
- Posty: 384
- Rejestracja: 25 kwie 2016, 19:14
Re: Atmega2560 timer'y
coś nie gra z moim arduino M2560 bo jak załadowałem Twój program ten ostatni to mruga mi co około ( na oko) 4 sekundy.
czy spotkałeś się że płytki arduino M2560 były z innymi kwarcami?
czy spotkałeś się że płytki arduino M2560 były z innymi kwarcami?
- niveasoft
- Posty: 1219
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Atmega2560 timer'y
Wgrywasz soft przez Arduinowe USB czy programatorem przez 6-cio pinowe złącze?
Jak przez USB to coś z programem bo Bootloader dla Mega na pewno śmiga na 16MHz.
Jak programatorem to może przestawiłeś FuseBity na wewnętrzny 8MHz.
Jak przez USB to coś z programem bo Bootloader dla Mega na pewno śmiga na 16MHz.
Jak programatorem to może przestawiłeś FuseBity na wewnętrzny 8MHz.
- Jacek
- Posty: 384
- Rejestracja: 25 kwie 2016, 19:14
Re: Atmega2560 timer'y
Wgrywam przez złącze 6 pin programatorem, programem wbudowanym w Bascom AVR - nigdy nie ustawiałem Fusebits możesz podpowiedzieć gdzie to ustawić.
P.S.
już znalazłem i ustawiłem aby nie było podziału przez 8 - działa
dzięki Bartek.
P.S.
już znalazłem i ustawiłem aby nie było podziału przez 8 - działa
dzięki Bartek.