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



Teraz jest 12 sty 2026, o 08:30


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 26 mar 2017, o 19:52 
Offline
Nowy

Dołączył(a): 18 sie 2015
Posty: 9
Pomógł: 0

Witam znów mam problem z UART'em
dokładniej to nic nie widzę na konsoli :)
tak jak by nie występowały przerwania...
Prosze o pomoc


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


Cytuj:
#define F_CPU 8000000UL //8MHz <--- po pierwsze TEGO NIGDY nie definiujemy w kodzie - mirekk36



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: 27 mar 2017, o 20:40 
Offline
Użytkownik

Dołączył(a): 04 paź 2014
Posty: 46
Lokalizacja: okolice JOWISZA czasami PL
Pomógł: 7

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


Przy używaniu w programie przerwań oraz używanie paskudnych _delay() to droga do katastrofy
w trakcie _delay() mikroprocesor jest wstrzymywany i jak myślisz co będzie
gdy przyjdzie "czas na wykonanie przerwania od UART-a?
Proszę poczytaj o timerach programowych, albo zamień delay() na jakąś obsługę realizowaną prze przerwanie od timera....
jest to powód dla którego przerwania nie występują :)
Tu są szczegóły dlaczego nie wolno tak robić :
http://forum.atnel.pl/topic3908.html
albo
http://forum.atnel.pl/topic17569.html#p182129

z opsu paskudnego _delay_ms():

_delay_ms(argument) - The maximal possible delay is 262.14 ms / F_CPU in MHz

a u ciebie _delay_ms(1298) toż to cała wieczność kiedy proca "haltujesz".
jak poczytasz dokumentację http://www.atmel.com/webdoc/avrlibcreferencemanual/group__util__delay_1gad22e7a36b80e2f917324dc43a425e9d3.htmldalej to zobaczysz:
When the user request delay which exceed the maximum possible one, _delay_ms() provides a decreased resolution functionality. In this mode _delay_ms() will work with a resolution of 1/10 ms, providing delays up to 6.5535 seconds (independent from CPU frequency).

czyli :
W tym trybie _delay_ms() będzie działać z rozdzielczością 1/10 ms, umożliwiając opóźnienia do 6,5535 sekundy.
to jak chcesz w tym czasie obsługiwać przerwania ?

Chyba jasno napisałem ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 mar 2017, o 23:50 
Offline
Nowy

Dołączył(a): 18 sie 2015
Posty: 9
Pomógł: 0

oj Chyba nie ... zobacz ze funkcja Blinking();
jest wywoływana na końcu for(;;) czyli ma tyle do przerwań co pingwiny do pustyni ...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 mar 2017, o 00:41 
Offline
Moderator
Avatar użytkownika

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

Poza pierwszą uwagą NA CZERWONO w pierwszym poście - paskudnym babolem .... który może również ma tyle co pingwiny do pustyni ale pokazuje na mega niezrozumienie pisania kodu dla procków w AVR GCC

to cała reszta przedstawionego kodu jest napisana po prostu tragicznie ... i ja oczywiście rozumiem to że kolega załóżmy dopiero zaczyna swoją przygodę z programowaniem a od czegoś trzeba zacząć - nikt w końcu nie rodzi się ze zdolnością programowania ... to jednak zwrócę uwagę na pozostałe paskudne babole w kodzie bo aż nie idzie go w ogóle analizować i może jednak warto zacząć jednak np od książki ?

http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

śmiało mogę ją polecić. Ona na prawdę dużo koledze pomoże. Bo teraz to widać, że nawet jeśli kolega miał do czynienia z programowaniem to albo tylko na andruino albo na PC - widać to np po używanych typach zmiennych, np:

unsigned char
unsigned int

zamiast

char
uint16_t

już samo to będzie prowadziło przy używaniu AVR GCC do wielu nieporozumień i rwania włosów z głowy ... polecam jak najszybciej zapoznać się z typami używanymi w AVR GCC

Kolejna rzecz to kompletny brak zachowania nawet pozorów, minimum dobrego stylu programowania - pomijając już że wszystkie funkcje nad main to do tego absolutny MISZ-MASZ, no totalny koktail zmiennych gdzie widać, że kolega sam zaczyna mieć problemy z zakresem widoczności nazw zmiennych. Nigdy poza tym nie definiuje się zmiennych globalnych z nazwami jedno-literkowymi typu "i" ! to już wręcz masakra. Tego typu zmienne jak już to do iteracji w pętlach for/while i definiowane tuż przed pętlami ...

Dlatego też jeśli chodzi o całość to wychodzą takie mega kwiatki jak np:


Cytuj:
unsigned int calc(void)
{
if(OCR1A==0)
OCR1A=252;
else
int war = war - 64 ;
return war;

}


co to jest ? to na czerwono ? - pomijam już fakt właśnie, że również jest zdefiniowana jakaś zmienna globalna o nazwie war, to jak można wewnątrz funkcji definiować zmienną lokalną i wykonać tego typu działanie? Jakiego się kolega spodziewa wyniku po tym działaniu ? Chyba że jakiegoś RANDOM czyli liczby losowej. Ale problem jest o wiele gorszy - bo funkcja zawiera warunek IF który jeśli będzie spełniony to zwróci (być może) wartość globalnej zmiennej war! bo taka też jest a jeśli nie będzie spełniony to ? ... to randomową wartość war z tego fragmentu zaznaczonego na czerwono ....

Generalnie tak makabrycznie (proszę się nie obrażać tylko spróbować napisać ten kod poprawnie - w razie czego pomożemy) ... więc tak makabrycznie napisany kod zwykle nie ma prawa działać ale nawet ciężko go analizować i coś pomóc - tym bardziej, że problem jest w ogóle nie zdefiniowany.

Autor wrzuca "jakiś kod" i zadaje pytanie - "a co tu nie działa?" ... jakby to miała być dobra zagadka ...

Polecam poradnik:

https://www.youtube.com/watch?v=yVFf22JxuEs

od niego proszę w ogóle zacząć i na drugi raz spróbować chociaż - najpierw samemu dojść do jakiegoś etapu żeby jakoś określić precyzyjniej problem - a może nawet samemu uda się go znaleźć ... jeśli zaś nie - to przynajmniej po takim poradniku kolega będzie wiedział jak podejść do zawężenia zakresu problemu i umiejętnie go przedstawić ...

------------------------ [ Dodano po: 1 minucie ]

Mr. Strzelczyk napisał(a):
oj Chyba nie ... zobacz ze funkcja Blinking();
jest wywoływana na końcu for(;;) czyli ma tyle do przerwań co pingwiny do pustyni ...


Poza tym co napisałem - to tak się składa, że jednak ten delay będzie miał sporo do przerwań .... a szczególnie przy TAK napisanym kodzie

Jeszcze raz gorąco polecam zacząć od książki - od Bluebooka swoją przygodę z C dla procków

_________________
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 mar 2017, o 08:15 
Offline
Użytkownik

Dołączył(a): 04 paź 2014
Posty: 46
Lokalizacja: okolice JOWISZA czasami PL
Pomógł: 7

Przepraszam, ja tylko chciałem pomóc zrozumieć w czym jest problem,
ale autor wątku chyba wie lepiej,
Po za tym Mirek zwrócił uwagę na kolejne kwiatki ...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 mar 2017, o 09:38 
Offline
Użytkownik
Avatar użytkownika

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

Mr. Strzelczyk napisał(a):
oj Chyba nie ... zobacz ze funkcja Blinking();
jest wywoływana na końcu for(;;) czyli ma tyle do przerwań co pingwiny do pustyni ...
Ale wywołuje się przy każdym obiegu pętli. I zatrzymuje działanie programu na PONAD SEKUNDĘ. Przez ten czas nie wykonują się przerwania!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 mar 2017, o 11:17 
Offline
Użytkownik

Dołączył(a): 04 paź 2014
Posty: 46
Lokalizacja: okolice JOWISZA czasami PL
Pomógł: 7

brat_kamyka napisał(a):
Przy używaniu w programie przerwań oraz używanie paskudnych _delay() to droga do katastrofy
w trakcie _delay() mikroprocesor jest wstrzymywany i jak myślisz co będzie
gdy przyjdzie "czas na wykonanie przerwania od UART-a?

Przecież o tym autorowi wątku pisałem z wyjaśnieniami i odnośnikiem do dokumentacji ATMELA, ale co ja tam wiem .....



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

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

brat_kamyka napisał(a):
Przecież o tym autorowi wątku pisałem z wyjaśnieniami i odnośnikiem do dokumentacji ATMELA,

Dlatego ja już tych baboli nie opisywałem, bo kolega TAK pięknie i obszernie to wyjaśnił że aż miło ;)

widać jednak - że czasem trzeba to wciąż powtarzać i powtarzać ... i powtarzać ;) .... skąd ja to znam ;)

_________________
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 mar 2017, o 15:54 
Offline
Użytkownik

Dołączył(a): 04 paź 2014
Posty: 46
Lokalizacja: okolice JOWISZA czasami PL
Pomógł: 7

mirekk36 napisał(a):
brat_kamyka napisał(a):
Przecież o tym autorowi wątku pisałem z wyjaśnieniami i odnośnikiem do dokumentacji ATMELA,

Dlatego ja już tych baboli nie opisywałem, bo kolega TAK pięknie i obszernie to wyjaśnił że aż miło

Uznanie w oczach Mirka .....
bezcenne.



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ł: Brak zidentyfikowanych użytkowników i 4 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO