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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 8 maja 2025, o 18:05


    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: 116
    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: 27381
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27381
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27381
    Lokalizacja: Szczecin
    Pomógł: 1043

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