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



Teraz jest 19 mar 2026, o 23:20


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 18 gru 2013, o 22:37 
Offline
Nowy

Dołączył(a): 18 gru 2013
Posty: 15
Pomógł: 0

Witam. Podczas testowania prostego układu zbudowanego na bazie mikrokontrolera Atmega8 napotkałem na pewne „zjawisko” a mianowicie:

Układ bazuje (jak już wspomniałem) na Atmega8
- zewnętrzny kwarc 8MHz
- wykorzystane piny:
PB0, PB1, PB2, PB3 - DIODY LED
PB4, PB5 – MICROSWITCH

Kod programu:


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


Program bardzo, bardzo prosty, ale zastanawia mnie zachowanie mrugającej diody w zależności od miejsca zadeklarowania zmiennej licznik, a mianowicie:
- deklarując zmienną licznik w miejscu „MIEJSCE_1” dioda mruga z pewną stałą częstotliwością;
- deklarując zmienną licznik w miejscu „MIEJSCE_2” częstotliwość mrugania diody zwiększa się.

Zastanawia mnie to, dlaczego dioda mruga albo szybciej( deklaracja w MIEJSCE_2) albo wolniej( deklaracja w MIEJSCE_1). I tu moje pytanie, czy nie powinna ona mrugać ze stałą częstotliwościową niezależnie od tego gdzie została zdeklarowana zmienna licznik?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2013, o 00:16 
Offline
Moderator
Avatar użytkownika

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

RedLine napisał(a):
I tu moje pytanie, czy nie powinna ona mrugać ze stałą częstotliwościową niezależnie od tego gdzie została zdeklarowana zmienna licznik?


Powinna ;) więc tak na prawdę robisz gdzieś jakiś czeski błąd niestety ... bo czy zmienna jest globalna (tak to się nazywa) gdy jest UWAGA! ZDEFINIOWANA - a nie zdeklarowana jak piszesz (a to duża różnica) poza funkcją main(), czy też jest zdefiniowana jako zmienna lokalna (automatyczna) wewnątrz funkcji main() - to nie ma i nie może mieć żadnego znaczenia jeśli chodzi o szybkość migania tej diody LED ;)

_________________
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: 19 gru 2013, o 15:41 
Offline
Nowy

Dołączył(a): 18 gru 2013
Posty: 15
Pomógł: 0

Zapewne gdzieś ten czeski błąd popełniłem, i mimo że jest to naprawdę prosty program bo główne działanie opiera się na zmianie stanu na określonym porcie, to zazwyczaj najwięcej czasu traci się właśnie na takich błahostkach, no ale człowiek uczy się na błędach, choćby na tej pomyłce związanej z określeniem ZDEFINIOWANA/ZDEKLAROWANA ( i tu dziękuje za zwrócenie uwagi ).

Tak jeszcze w ramach wyjaśnienia, owe mruganie diodą ;) wykonałem stosując taką metodę:

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


gdyż chciałem zrezygnować z korzystania z funkcji _delay_ms();

I takie moje pewnie ostatnie spostrzeżenie.

Zdefiniowanie zmiennej globalnej (MIEJSCE_1) skutkuje wyświetleniem w konsoli ( chodzi mi o to ile zajmuje program i dane):

Kod:
Program:     162 bytes (2.0% Full)
(.text + .data + .bootloader)

Data:          2 bytes (0.2% Full)
(.data + .bss + .noinit)


zaś zdefiniowanie zmiennej lokalnej (MIEJSCE_2)

Kod:
Program:     140 bytes (1.7% Full)
(.text + .data + .bootloader)

Data:          0 bytes (0.0% Full)
(.data + .bss + .noinit)



Czy nie ma to wpływu na zachowanie tej diody, (może związanej z szybkością dostępu do zmiennej lokalnej, globalnej, o ile coś takiego istnieje), możne ja to źle interpretuje jeśli tak to wybaczcie ale dopiero stawiam (może nie pierwsze) kroki w dziedzinie programowania mikrokontrolerów, ale jestem na etapie poznawania ich możliwości ;) Dlatego korzystając z rady pana Mirka stawiam na czeski błąd i mam nadzieje, że wyjdzie w praniu co jest nie tak.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2013, o 16:53 
Offline
Moderator
Avatar użytkownika

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

To co pokazałeś "po kompilacji" .... hmmm też przecież opisuję w Bluebooku ale może przeoczyłeś ;) ... chodzi tu oczywiście o to że gdy robisz zmienną globalną (twoje MIEJSCE_1) ... to kompilator pokazuje ci zajętość pamięci RAM na tę zmienną

Gdy jest ona definiowana jako lokalna no to? ... no to gdzie się ona urodzi ? .... też jest w książce - trzeba przekopać jeszcze raz rozdział o zmiennych , ich zasięgu, o funkcjach i zmiennych automatycznych czyli lokalnych. No ale przypominam zmienna taka zostanie utworzona programowo na stosie .... ale też przecież jakby nie patrzeć w pamięci RAM, tyle że nie w obszarze zmiennych globalnych i dlatego nie jest inicjalizowana zerem. Dlatego po kompilacji widzisz ZERO bajtów zajętości RAM

REASUMUJĄC - czy taka zmienna czy taka - to na jedno wychodzi obydwie są w RAM i błędne podejście z tym pomysłem że jakiś czas dostępu się wydłuża - tym bardziej że pomyśl - u mnie na zestawie ATB taki twój przykład w każdym przypadku działa tak samo i dioda mruga tak samo. U każdego innego również - więc odpuść trop tego że różnice w kompilacji coś mogą tu zmieniać

powiem więcej - nawet - NAWET gdybyś używał zmiennej w pamięci FLASH (tyle że ona nie jest do zapisu) ale gdyby była - to pomimo iż czas byłby wolniejszy to i tak nie zauważyłbyś okiem zmian w miganiu, byłby tak nieznaczne

--------------------

powiem inaczej - pokaż tu schemat tego co zmajstrowałeś
- pokaż ustawienia fusebitów
- pokaż jeden kod programu i drugi tak w całości - bo wiesz problem najczęściej tkwi w tym - w takich przypadkach - że potem okazuje się że nie tą linijkę odkomentowałeś, nie zapisałeś projektu a to to ... a to siamto ;)

aż tak banalny musi to być ten błąd ;)

_________________
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: 19 gru 2013, o 18:49 
Offline
Nowy

Dołączył(a): 18 gru 2013
Posty: 15
Pomógł: 0

No musi to być coś na prawdę banalnego.

KOD PROGRAMU WERSJA 1:

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



KOD PROGRAMU WERSJA 2:

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


SCHEMAT UKŁADU:

Obrazek

USTAWIENIA FUSEBITÓW:

Obrazek

Tak to się prezentuje. Zapewne gdzieś tu tak jak wspomniałeś problem może tkwić w drobnostce i pewnie po jakimś czasie, wpadnę na to co jest i stwierdzę, że jak mogłem to przeoczyć, albo jak mogłem tak zrobić ;) A tym czasem tylko zajmuje czas nad takim, zapewne błahym problemem. W każdym bądź razie dziękuje serdecznie za zainteresowanie odpowiedź i dobre rady.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2013, o 18:59 
Offline
Moderator
Avatar użytkownika

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

kurczę - powiem że to fajna zagadka na koniec roku - nawet z punktu widzenia tych, którzy mogą ci próbować tu pomagać ;) swego rodzaju wyzwanie - kto zobaczy pierwszy jakiś babol i naprowadzi cię na dobrą drogę ...

a piszę to, bo wczoraj wiesz ... po prostu odpaliłem to aż z ciekawości na zestawie swoim - pomyślałem - może hmm ty jakoś okiem obserwujesz inaczej, albo może coś w tym jest - byłem ciekaw zresztą jak szybko będzie migać ta dioda przy kwarcu u mnie 11,592MHz ... No jak mówiłem - każdy przypadek to IDENTYCZNE miganie u mnie było ....

dlatego teraz jeśli pokazujesz i fusy, i procka na którym działasz itp .. to aż mnie to ciekawi coś pan tutaj zakońbinował ? ;)

z ciekawości - hmmm jak masz ochotę do dryndnij do mnie na Skype - jestem teraz - podłączę się do twojego pulpitu TeamViewerem i aż sam zajrzę w ten kod, kompilację itp ... Bo też na razie ślepy jestem co tu możesz źle robić

ale może też wpadnie tu jakieś inne nasze forumowe "sokole oko" i coś wypatrzy w międzyczasie ;)

_________________
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: 19 gru 2013, o 19:43 
Offline
Nowy

Dołączył(a): 18 gru 2013
Posty: 15
Pomógł: 0

Co najlepsze całe to zamieszanie z diodą, wynikło z innego faktu :lol: Ponieważ używam diod jako swego rodzaju prostego debugera.
Chciałem zrobić tak po swojemu programowy PWM, tak w ramach ćwiczenia, testu, może zabawy. Tak nawiasem mówiąc jeśli coś z tego wyjdzie, to o ile będzie się to do czegokolwiek nadawać to przedstawię to na forum i proszę nie odbierać tego jako groźby ;) , po prostu przedstawię takie swoje rozwiązanie, swój pomysł na programowy PWM. Może ktoś z tego skorzysta, być może spotka się to z jakąś odezwą, mam nadzieje jakimiś radami, pewnie nawet słowami krytyki no ale w końcu, po to się coś tworzy, przedstawia, żeby jeśli idzie się zła drogą, wbrew regułom panującym w świecie mikrokontrolerów i dziedziny programowania, ktoś mógł nakierować, coś zasugerować, przedstawić swój pogląd. Ale co z tego wyjdzie to się okaże. To tyle bo się rozpisałem, a nie o to tu chodziło.

Podsumowując, wynikła z tego niezła zagadka, która być może zakończy się wielkim śmiechem w momencie znalezienia tego babola ;) A póki co niech sobie mruga ta dioda, w razie czego powiesi się ją na choince ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2013, o 19:52 
Offline
Moderator
Avatar użytkownika

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

Po to jest to forum, żeby prezentować także jakieś swoje ciekawe rozwiązania - a czemu by nie ? ;)

_________________
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: 19 gru 2013, o 21:09 
Offline
Nowy

Dołączył(a): 25 sie 2013
Posty: 12
Pomógł: 2

Ustaw na próbę taktowanie na wewnętrzny RC i porównaj zachowanie Twojego kodu.
Pokaż jeśli możesz fotkę jak masz podłączony kwarc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2013, o 23:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 lis 2013
Posty: 120
Lokalizacja: Koło
Pomógł: 6

Zrobiłem próbę z wewnętrznym taktowaniem 8MHz i u mnie też rzeczywiście w pierwszej wersji mryga wolniej a w drugiej szybciej... ;p

_________________
Kompleksowa realizacja ogrodów



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 gru 2013, o 00:08 
Offline
Moderator
Avatar użytkownika

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

hahaha no i mam rozwiązanie ;)

ja sprawdzałem na szybko jak pisałem wcześniej na zestawie przy kwarcu 11,0592 MHz i nie widziałem różnicy w miganiu

ale teraz zmieniłem taktowanie w zestawie na 8 MHz no i jest różnica ;) ... więc jak już mamy zagadkę to trzeba chwycić byka za rogi ... więc dawaj skok zrobić jak do stodoły z sianem :lol: czyli w asemblera po kompilacji i proszę bardzo:

kod w wersji gdzie mamy zmienną GLOBALNĄ:
Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


a teraz kod gdzie mamy zmienną automatyczną (lokalną):
Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


widzicie różnicę ? ... nie chodzi mi o to że w ogóle jest różnica ;) no bo jest ale chodzi o to że w przypadku ze zmienną globalną kompilacja poszła nieco mniej optymalnie i za każdym razem operacje odbywają się (jeśli chodzi o zmienną licznik) na pamięci RAM ;)

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 drugim przypadku zmienna trafiła od razu do rejestrów ;) na których operacje są wykonywane dużo dużo szybciej - a że owe "spowolnienie" o ile można tak je nazwać - mocno zależy od każdej wykonywanej operacji to rzeczywiście przy niższych częstotliwościach taktowania wyjdzie to właśnie w taki sposób ;)

KONIEC ZAGADKI.

wnioski ?

no mam nadzieję, że nikt nie wyciągnie z tego jakichś kosmicznych wniosków że lepiej dawać zmienne lokalne niż automatyczne albo odwrotnie ;) ..... bo to byłby wniosek na prawdę delikatnie mówiąc z kosmodromu BAJKONUR ;)


Autor postu otrzymał pochwałę

_________________
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: 20 gru 2013, o 06:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 lis 2013
Posty: 120
Lokalizacja: Koło
Pomógł: 6

Miała być zagadka na koniec roku ... ;) Nie minęły święta nie było sylwestra a Mirek wziął byka za rogi i zagadkę w "stodole rozpykał" :lol:

_________________
Kompleksowa realizacja ogrodów



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 gru 2013, o 09:45 
Offline
Nowy

Dołączył(a): 25 sie 2013
Posty: 12
Pomógł: 2

mirekk36 napisał(a):
no mam nadzieję, że nikt nie wyciągnie z tego jakichś kosmicznych wniosków ...

Wniosek, zaprzyjaźnić się z timerami ;) .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 gru 2013, o 10:27 
Offline
Moderator
Avatar użytkownika

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

2rs232 napisał(a):
Wniosek, zaprzyjaźnić się z timerami


Bardzo dobry wniosek ... ja dodam, że szczególnie z timerami programowymi na takie okazje ;)

_________________
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: 20 gru 2013, o 17:00 
Offline
Nowy

Dołączył(a): 18 gru 2013
Posty: 15
Pomógł: 0

Już się miałem zabierać, za ponowną analizę układu oraz kodu a tu proszę po problemie, zagadka rozwiązana po mistrzowsku ;) Jeszcze raz dziękuje, za zainteresowanie problemem oraz dobre rady.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 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