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



Teraz jest 22 lut 2025, o 00:15


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
 Tytuł: timer atmega 32
PostNapisane: 28 lis 2016, o 20:15 
Offline
Użytkownik

Dołączył(a): 05 lis 2015
Posty: 92
Pomógł: 0

Witam wszystkich, chciałem podziękować z góry wszystkim tym, którzy się zainteresują moim problemem i sory dla zaawansowanych, ponieważ wiem, że dla nich ten problem to pikus no ale.. Chciałem sobie w działaniu mojego programu wstawić na początek takie opoźnienie (15s) z napisem napisem na displayu np. stabilizacja, a później wykonywanie normalnie mojego programu. W tym celu chciałem wykorzystać timer i licznik zliczający sekundy ( później wykorzystał bym to jeszcze do innych celów) no więc napisałem coś takiego ale to nie działa :) pomożecie ? Wewnętrzny oscylator : 8Mhz.

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


Pozdrawiam :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2016, o 20:24 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,

Nie sprawdzałem poprawności konfiguracji timera, ale pomyśl, co będzie, jeśli ten Twój licznik jest mniejszy lub równy 15. Program się zakończy - w mikrokontrolerach to jest po prostu wejście do nieskończonej pętli, niejawnie umieszczanej w kodzie .asm przez kompilator, program tam ugrzęźnie i nigdy z niej nie wyjdzie. Musisz zrobić coś takiego:

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: 28 lis 2016, o 21:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Nie bardzo rozumiem po co używać w takim przypadku timer (tym bardziej timer 16 bitowy). Skoro opóźnienie ma się wykonywać przed pętlą główną to spokojnie można użyć _delayms().

Jeśli później, już w pętli głównej, mają być opóźnienia nieblokujące to oczywiście trzeba stosować timer. Ale do tego wystarczy timer 8 bitowy np. Timer0.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2016, o 21:05 
Offline
Użytkownik

Dołączył(a): 05 lis 2015
Posty: 92
Pomógł: 0

A czy mimo wszystko dla testu czy wgl licznik zlicza mogę zmienną licznik wrzucić pod odczyt na wyswietlacz? wydaje mi sie że mogę ale niestety ciągle 0.

No właśnie, wiem ze mozna na delayms(). Ale opcje na timerze chciałbym jeszcze w kilku miejscach wykorzystac.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2016, o 21:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

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: 28 lis 2016, o 21:32 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Jak chcesz poczekać przed wejściem do pętli głównej na osiągnięcie przez zmienną 'licznik_sekund' wartości 15, to:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Zakładam, że nie pokazałeś całego kodu i tak naprawdę gdzieś zwiększasz wartość tej zmiennej.

Dodatkowo pamiętaj, że zmienne współdzielone pomiędzy przerwaniami a głównym programem (czyli w Twoim przypadku 'licznik_sek' i 'licznik_minut' muszą być volatile.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2016, o 21:50 
Offline
Użytkownik

Dołączył(a): 05 lis 2015
Posty: 92
Pomógł: 0

Dziękuję bardzo, dostosowałem się do uwag. Ale już nawet nie patrze na hierarchie programu, tylko samą zmienną licznik_sek wyrzucam sobie na lcd. No i jest ciągle 0.

------------------------ [ Dodano po: 5 minutach ]

Prześledzę sobie jeszcze na spokojnie to później i dam znać co i jak. Chciałem podkreślić, że wasza aktywność i pomoc daję naprawdę chęci do pracy. Bardzo dziękuję.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2016, o 21:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

a masz :
lcd_init(); ?

------------------------ [ Dodano po: 4 minutach ]

no pewnie masz - skoro wyświetla 0. :?

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

no i czy wyświetlanie masz wewnątrz while(1)...?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2016, o 22:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Zmienna używana jednocześnie w programie głównym jak i w przerwaniu, musi mieć specyfikator volatile
np.

volatile uint32_t licznik;



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2016, o 23:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

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

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

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

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


u mnie działa. :)

------------------------ [ Dodano po: 16 minutach ]

a... proszę całość,
bo to co pisali koledzy też trzeba uwzględnić.
Więc żeby nie był że coś jeszcze pominięte:
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: 29 lis 2016, o 16:40 
Offline
Użytkownik

Dołączył(a): 05 lis 2015
Posty: 92
Pomógł: 0

dzięki bardzo :)

------------------------ [ Dodano po: 3 minutach ]

Działa tylko :) w tym oczekiwaniu 15 s przed uruchomieniem programu , program fajnie czeka, tylko wpisałem sobie napis WITAJ i strasznie brzydaśnie miga na lcd ten napis. :/

------------------------ [ Dodano po: 5 minutach ]

Czym takie coś jest spowodowane :)
??

------------------------ [ Dodano po: 10 minutach ]

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


------------------------ [ Dodano po: 14 minutach ]

Okej zapomniał o opóxnieniu - _delay_ms() :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lis 2016, o 17:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1167
Lokalizacja: Kraków
Pomógł: 93

Polecenie lcd_init(); nie powinno być chyba za każdym razem wywołane.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lis 2016, o 18:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

kolega Marhef dobrze podpowiada. :)
Przecież możesz wynieść przed tę pierwszą pętlę całą zawartość,
która wykona się wtedy tylko raz:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Tak przy okazji:
Skoro bawisz się timerem - to dobrze ! :)
Wystawiaj flagę w przerwaniu co sekundę i sprawdzając ją w pętli wysyłaj na wyświetlacz dane.
w przerwaniu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

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

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

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


jakoś tak. ;)



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO