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



Teraz jest 26 lut 2025, o 00:01


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 27 sty 2017, o 21:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2014
Posty: 855
Lokalizacja: pod Warszawą
Pomógł: 58

witam Kolegów

Przerabiam sobie jeden z poradników odnośnie UART-a. Programik działa bez problemu więc postanowiłem iść dalej i chcę powołać do życia timer który będzie mi potrzebny w dalszym kodzeniu przy timerach programowych. Mam zonka bo chciałem włączać timer pseudo-funkcją Timer2_ON();
a dostaję komunikat że mam niezdefiniowane odniesienie
Cały kod
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i zrzut ekranu

Obrazek

coś robię nie tak ale nie wiem co......

_________________
Pomóżcie mi stanąć na nogi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 sty 2017, o 21:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2014
Posty: 447
Lokalizacja: DKL
Pomógł: 53

Masz lekki bałagan w kodzie, chodzi o wcięcia :)
Widzę że definicje funkcji Timer2_ON masz wewnątrz definicji funkcji dane_rs232 - stąd problemy. Popraw to i będzie ok.

_________________
Migracja z punktu B do punktu C
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 sty 2017, o 21:42 
Offline
Moderator
Avatar użytkownika

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

to co powiedział kolega powyżej to PODSTAWA - boś pan namieszał że aż strach ;)

a po drugie .... nie wiesz jak się włącza/wyłącza timer sprzętowy ?

czy potrzeba zaraz robić TAKI KAWAŁ kodu ?

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


Panie kochany .... samo to:

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

robisz w sekcji INIT jeszcze prze pętlą główną w funkcji MAIN, a timer nie wystartuje - za to przygotowałeś go do pracy, żeby go wystartować to później wystarczy w kodzie włączyć mu już sam presklaler

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

_________________
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: 27 sty 2017, o 21:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2014
Posty: 855
Lokalizacja: pod Warszawą
Pomógł: 58

mirekk36 napisał(a):
robisz w sekcji INIT jeszcze przed pętlą główną w funkcji MAIN, a timer nie wystartuje
[/syntax]


No faktycznie z tą klamrą to namieszałem ehh.....
Rozumiem, że timer nie wystartuje przed pętlą "while(1)?

_________________
Pomóżcie mi stanąć na nogi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 sty 2017, o 23:01 
Offline
Moderator
Avatar użytkownika

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

mczarny napisał(a):
Rozumiem, że timer nie wystartuje przed pętlą "while(1)?


No ale przecież pisałem wyżej ... Staraj się zrozumieć jak działają moduły sprzętowe w procku. Jak myślisz PO CO JEST PRESCALER? który ma przy wartościach bitów CSXn równych 0 - wartość podziału ? jaką ? ... żadnego podziału a więc precaler jest ODŁĄCZONY czyli nie podaje timerowi taktowania - rozumiesz? W związku z tym on nie może tykać ... działać

żeby było zgodnie ze sztuką to wszystkie inne bity konfigurujesz RAZ przed pętlą główną w main a później jak pisałem
albo go odpalasz

nawet byle makrami

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


toż to PODSTAWA podstaw a nie tam zastanawiania się czy aby mi timer sam nie ruszy ;)

... sam nie ruszy - TY go musisz ruszyć albo zatrzymać - teraz jaśniej ?

_________________
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: 28 sty 2017, o 10:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2014
Posty: 855
Lokalizacja: pod Warszawą
Pomógł: 58

Panie Mirku

Z ustawieniami timera wzorowałem się na BB str.200
dalej mamy funkcję
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 głównej funkcji programu tylko jej wywołanie
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i do tej pory tak to robiłem bez dodatkowych makr.
Gdy z jakichś względów chciałem zatrzymać timer to po prostu zerowałem mu bity w rejestrze TCCRx odpowiedzialne za preskaler.
No i mam dylemat czy sposób z książki czy z postów powyżej? Jak to powinno wyglądać zgodnie ze sztuką?
Proszę o wyrozumiałość

_________________
Pomóżcie mi stanąć na nogi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sty 2017, o 11:04 
Offline
Moderator
Avatar użytkownika

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

Ale co jest niezgodnego w BB ? ;)

Przecież w BB masz pokazaną inicjalizację timera razem z jego wystartowaniem natychmiast.

Ja natomiast odniosłem wrażenie, że ty chcesz go po prostu startować dużo później niż w czasie inicjalizacji, czyli dopiero gdy przyleci coś tam na UART.

Wtedy po prostu wyciągam włączenie preskalera na zewnątrz żeby go włączyć - gdyby tak miało być - poprzez ustawianie bitów CSXn ... (co w tym jest niezrozumiałego?)

Poszedłem nawet dalej sądząc, że być może skoro gdzieś tam chcesz go startować to być może chcesz go również zatrzymywać - no to pokazałem ci opowiedziałem DOKŁADNIE tak to się robi ...

TYLKO POPRZEZ ustawianie bądź zerowanie bitów CSXn

i dlatego pokazałem, że można tak robić za pomocą MAKR - no żesz zobacz Pan sobie chociażby do GreenBooka do kodu WAV Playera ;) toż TAM DOKŁADNIE takie cosik robię

Oczywiście ty możesz robić jak ci się żywnie podoba ale ty pytasz mnie teraz?

mczarny napisał(a):
i do tej pory tak to robiłem bez dodatkowych makr.


czy dla ciebie inicjalizacja timera to KONIECZNIE te wszystkie linijki ?
Cytuj:
// ustawienie TIMER0
TCCR0 |= (1<<WGM01); // tryb CTC
TCCR0 |= (1<<CS02)|(1<<CS00); // preskaler = 1024
OCR0 = 38; // dodatkowy podział przez 39 (rej. przepełnienia)
TIMSK |= (1<<OCIE0); // zezwolenie na przerwanie CompareMatch


Czy nie widzisz - że ta linijka na czerwono to po prostu START timera ? A reszta to tak na prawdę konfiguracja modułu sprzętowego timera? (która RAZ się wykona i obowiązuje w całym programie - po jaką choinkę wykonywać ją w tym miejscu gdzie ty pokazałeś to na początku?) Po prostu jeśli wiemy że ma od razu wystartować to startujemy go w INICJALIZACJI, ale jeśli zależy nam, żeby startował w innym miejscu programu a nie przy STARCIE MAIN, to wtedy tę linijkę przenosimy gdzie indziej ...

i jeszcze raz powtórzę - skoro już go startujemy w innym miejscu to czasem bywa potrzeba też aby go np zatrzymać - to wtedy właśnie wystarczy wyzerować te bity w tej linijce - i na tę OKOLICZNOŚĆ pokazałem ci te dwa MAKRA
a nie po to żeby ich używać w inicjalizacji ...

A ty już sam zdecyduj KIEDY potrzebujesz startować ten timer.

_________________
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: 28 sty 2017, o 11:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2014
Posty: 855
Lokalizacja: pod Warszawą
Pomógł: 58

Dzięki za wyrozumiałość i szczegółowe wyjaśnienie.

pozdrawiam :D

_________________
Pomóżcie mi stanąć na nogi



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

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