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



Teraz jest 16 lis 2024, o 01:23


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
 Tytuł: Delay problem
PostNapisane: 26 lut 2017, o 21:00 
Offline
Nowy

Dołączył(a): 24 lut 2017
Posty: 2
Pomógł: 0

Witam,
Mam problem z funkcją delay na moim avr atmega16a. wszystko było wporzadku do zmiany taktowania na 16MHz z rezonatora zewnętrznego. Problem polega na tym że ustawienie czasu np _delay_ms( 1000) nie powoduje odmierzenie sekundy, tylko znacznie krótszego czasu. Generalnie problem jest z czasami powyżej 1 s ( przynajmniej tak zauważyłem).
W kodzie programu nie ustawiam taktowania procesora. Taktowanie ustawione jest za pomocą avrkalkulatora na 16 MHz zewn, w eclipse ustawione jest też taka częstotliwość.

Proszę o pomoc, jakieś pomysły jak to rozwiązać?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2017, o 21:08 
Offline
Użytkownik

Dołączył(a): 08 lut 2016
Posty: 96
Pomógł: 2

Cześć

Daj zrzut z mkAVRCalculatora po kliknięciu ikonki "Sprawdź podłączony AVR" przestaw się na zakładkę "Fusy uproszczone" i wrzuć screena. Dla pewności zrób clean projektu skompiluj i wgraj jeszcze raz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2017, o 21:10 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 11 lis 2016
Posty: 7
Lokalizacja: Wrocław
Pomógł: 0

Zrób Clean projektu w Eclipcie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2017, o 21:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
rambert1 napisał(a):
nie powoduje odmierzenie sekundy, tylko znacznie krótszego czasu.

A to "znacznie krótszy" ma się jakoś do wpisywanego - jest to jakiś podzielnik?

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2017, o 21:47 
Offline
Użytkownik

Dołączył(a): 26 lut 2014
Posty: 288
Lokalizacja: Gdańsk
Pomógł: 13

a zmieniłeś taktowanie procka w opcjach projektu (project => properties=>AVR=>Target Hardware) ?
Ważne jest żeby to zrobić, bo na podstawie tego obliczane są wartości do biblioteki delay.
Po zmianie w opcjach należy zrobić clean projektu (Project => clean).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2017, o 22:47 
Offline
Użytkownik
Avatar użytkownika

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

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


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

_________________
Pomóżcie mi stanąć na nogi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2017, o 07:56 
Offline
Użytkownik

Dołączył(a): 14 lut 2017
Posty: 69
Pomógł: 2

Jeśli kwarc przylutowałeś odpowiednio daleko od nóg procka, to może wzbudzać się na (wyższej) częstotliwości owertonowej. Zastosowałeś 2 kondensatory na przykład 22pF ??
Napisz gdzie i jak ustawiasz częstotliwość w opcjach projektu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2017, o 16:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1029
Lokalizacja: Trójmiasto
Pomógł: 189

W mkavrCalc nie da się przecież ustawić prędkości procka na 16MHz! Zauważ że tam tak naprawdę wskazujesz że używasz zewnętrznego kwarcu. A prędkość taktowania jest determinowana samą wartością kwarcu.
Natomiast co do funkcji _delay_ms to jest to specyficzna funkcja wbudowana, a jej działanie jest nieco odmienne od zwykłej funkcji. Jak wpisujesz w kodzie programu np _delay_ms(1000) kompilator na sztywno wygeneruje odpowiednią ilość "pustych" instrukcji uP tak by ich sumaryczny czas wykonywania był równy żądanemu opóźnieniu. A do tego celu kompilator musi znać prędkość pracy procesora która musu być podana we właściwościach projektu i której nie powinno się już zmieniać.
Jeśli jednak musimy ją zmienić to po zmianie trzeba koniecznie wykonać na projekcie opcję "Clean Project" która usunie wszystkie pliki wynikowe, a następnie należy ponownie zrobić "Build" co dopiero wymusi na kompilatorze ponowne przeliczenie czasów dla util/delay dla nowego taktowania CPU
Reasumując najprawdopodobniej zmieniłeś częstotliwość taktowania a kompilator cały czas pamięta tą poprzednią i czasy masz rozjechane. Zrób Clean Project (nie pomyl z Close Project) a następnie ponownie build i wgraj...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 mar 2017, o 15:41 
Offline
Nowy

Dołączył(a): 24 lut 2017
Posty: 2
Pomógł: 0

Witam,
dziekuje za tak liczne opowiedzi i porady.

Zrobilem ustawienia jak nalezy w MkAVRkalkularor, w eclipsie. Po kilku dniach odpoczynku od kodu i ponownym wgraniu programu do uk, program po prostu zadzialal. Teraz funkcja delay generuje zadane opoznienie. To jest chyba taki przypadek rodu z Archiwum X :)


Jeszcze raz dziekuje za zainteresowanie moim problemem, obiecuje ze jeszcze nie raz zaabsobuje Wasza uwage :)



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ł: Bing [Bot] 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO