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



Teraz jest 23 lis 2024, o 09:21


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 1 cze 2024, o 06:53 
Offline
Użytkownik

Dołączył(a): 09 lip 2019
Posty: 109
Pomógł: 11

Hej,
wziąłem Twój kod tak jak stoi i odpaliłem (co prawda na innym procku Atmega 328PB, bo taki miałem pod ręką) i u mnie on działa, nawet jak zamiast wywołania "ledBlink();" daję "ptr();" w pętli main. Sprawdzone z ostatatnim polecanym Eclipse.

Mały drobiazg - linijka "DDRE |= (1<<DDB2);"
powinna chyba brzmieć "DDRE |= (1<<PE2);"

PS. Jeśli chodzi o moje osobiste preferencje, to wskażniki do funkcji raczej definiuję w ten sposób (przynajmniej dla mnie jest odrobinę czytelniej):

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


Pozdrowienia,
-krzysiek-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 cze 2024, o 07:57 
Offline
Moderator
Avatar użytkownika

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

MarekSz napisał(a):
Wykłada się oprogramowanie w tej linii, dioda nie miga. Co robię źle?

W kodzie nic nie robisz źle żeby miał "nie działać" ... gdzieś indziej robisz błąd. Zastanów się przede wszystkim co robisz:

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



później w kodzie przypisujesz do wskaźnika wartość:

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


co miałby by być w tym złego co mogłoby psuć program????
Jedyne co na przyszłość to gdy przypisujesz wskaźnik funkcji to pamiętaj że nie MUISZ stosować operatora & dla funkcji. Sama nazwa funkcji jest już wskaźnikiem w C. czyli tak:

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


Oczywiście to nie jest i nie może być powodem błędu, bo to samo co byś przypisał jakąś wartość do zmiennej np:

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: 1 cze 2024, o 16:35 
Offline
Moderator
Avatar użytkownika

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

MarekSz napisał(a):
Wzięło się to z dokumentacji Atmega128 strona 69 - Reading pin value. Na końcu jest przykład kodu C. Przyznałem im rację, że z punktu logiki kodu powinienem używać "dedykowany" DDBn. W końcu DDR nie ma pinów


Pisząc to niestety nie za bardzo widzę, że wiesz co w ogóle oznaczają te twoje STAŁE typu:

DDB1
PB1

itp - to jedno i to samo - stałe te są po prostu numerami bitów i nie ma ŻADNEGO znaczenia której używasz

_________________
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: 1 cze 2024, o 20:02 
Offline
Moderator
Avatar użytkownika

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

MarekSz napisał(a):
Jeśli zatem na potrzeby rejestru DDRx ktoś stworzył stałe o nazwie DDBn, a na potrzeby PORTxn stałe PINxn, to warto trzymać się tejże konwencji. Popatrz, jeśli tworzysz jakiś timer, który ma się uruchamiać co 3 sekundy i definiujesz to w stałej:

#define MOJ_TIMER 3

...to zadziała on tak samo, gdy zamiast stałej "MOJ_TIMER" podstawisz PINA3, bo wartość jest ta sama. Jednakże z punktu widzenia czytelności kodu, nie należy tego czynić. Dlatego właśnie przyznałem rację autorom dokumentacji Atmegi i dla rejestru DDR stosować zacznę stałe DDBn zamiast PINxn. Natomiast stałe PINxn dla PORTx.


Nie obraź się ale teraz to popłynąłeś nieźle - przede wszystkim z tym porównaniem

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


:lol:

no aż parsknąłem śmiechem - nie obraź się ale to tak jakby tłumaczyć komuś:

Cytuj:
"jak kupisz sobie loda to nie wrzucaj go do wrzątku przed zjedzeniem"
:lol:

Poza tym nawet autorom twojej dokumentacji atmegi nawet się nie śniły takie wyjaśnienia - a tym bardziej, że nie oni wyznaczają standardy ;)

Po trzecie zaś i ostatnie - to panie, chłopie najkrótsza forma zapisu to:

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


PA0, .... PB3, PB5 ... PC1.... PD0 jest najkrótsza i IDEALNIE pasuje do każdego kawałka kodu jak wyżej

Na koniec - weź zajrzyj czasem do plików nagłówkowych AVR GCC - a szczególnie do pliku portpins.h - masz tam jak BYK:

Obrazek

I najważniejsze - nie wymyślaj wyjaśnień na podstawie jak napisałeś:

MarekSz napisał(a):
Wzięło się to z dokumentacji Atmega128 strona 69 - Reading pin value. Na końcu jest przykład kodu C. Przyznałem im rację, że z punktu logiki kodu powinienem używać "dedykowany" DDBn. W końcu DDR nie ma pinów


bo nawet nie rozumiesz, że w tych notach najczęściej posługują się implementacją kompilatora IAR AVR nie zaś AVR GCC

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

Krótko mówiąc i podsumowując twoje niestety mega niesłuszne domysły dobra praktyka programowania AVR to korzystanie właśnie ze skrótów typu

Cytuj:
PB3 - Port B3

PA0 - Port A0


co pasuje jak pokazałem wyżej do programowania każdego z rejestrów:

Cytuj:
DDRx
PORTX
PINx

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

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