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=yVFf22JxuEsod 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 ]