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 20 maja 2025, o 07:47


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
    Autor Wiadomość
    PostNapisane: 30 gru 2014, o 11:13 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 04 paź 2013
    Posty: 497
    Lokalizacja: Siedlce
    Pomógł: 9

    Witam od razu do rzeczy. Na stronie 212 pisze Pan M.K. : "Tymczasem w kodzie obsługi przerwania mamy zapis ANODY_PORT = ~licznik; Z tego powodu mamy cztery starsze bity PA7 -PA4 są cały czas ustawione na jeden "
    Moje pytanie brzmi skąd się tam wzięły te cztery starsze bity skoro pod słowem: "ANODY_PORT" kryje się na stronie 202:
    "ANODY_PORT |= CA1 | CA2 | CA3 | CA4;" i dalej co za tym idzie na stronie 203 mamy zapis:
    #define ANODY_PORT PORTA"
    i poniżej
    #define CA1 (1<<PA0)
    #define CA2 (1<<PA1)
    #define CA3 (1<<PA2)
    #define CA4(1<< PA3)
    a pinów od PA7 do PA4 jak nie widziałem tak nigdzie nie widzę... :(

    I moje drugie pytanie może sam coś podejrzewam ale nie jestem pewien a muszę być pewny. 8-)
    Na stronie 209 mamy zapisy segmentów ;np:
    #define SEG_A(1<<0) itd itd.
    itd
    itd
    moje pytanie brzmi skąd kompilator wie że chodzi o ten konkretny PORTC czyli czemu niema zapisu typu:
    #define SEG_A(1<<PC0) wiem że obie opcje działają
    ja podejrzewam że wystarczyło że daliśmy ten cały PORTC na stronie 203 jako wyjście na katody....ale może się mylę...
    a jeśli mam rację to co jeśli zechcę sobie podłączyć zupełnie oddzielny nowy wyświetlacz z segmentami na zupełnie inny niezależny PORT skąd wtedy kompilator będzie wiedział o który mi chodzi ?

    _________________
    Ucz się ucz ,bo po to tutaj jesteś...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 gru 2014, o 11:40 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 13 maja 2013
    Posty: 288
    Ostrzeżenia: -2
    Pomógł: 23

    ANODY_PORT masz zdefiniowane jako PORTA czyli jesli w powyzszym zapisie np.
    Licznik bedzie miał wartosc równa 2 to binarnie 0b00000010 czyli przypisujac to do PORTA =~(0b00000010);
    ~ operator negacji da nam zapis:
    PORTA = 0b11111101;
    Czyli wystawimy logiczne 1 na wszystkich pinach portu oprocz 2 gdzie mamy 0.

    Drugie pytanie:
    Takie podejscie umozliwia swobodna konfiguracje pinow.

    Definiujemy sobie np.
    #define SEG_A (1<<0) oznacza ze wszedzie gdzoe kompilator napotka zapis SEG_A podstawi (1<<0) i jesli mielusmy wczesniej zapis definiujac port wyj jako PORTC to w zapisie np:
    PORTC | = SEG_A;
    Spowoduje wystawienie 1 na pierwszym pinie portu C. Bo mamy 0 w naszym przesunieciu bitowym.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 gru 2014, o 12:08 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 04 paź 2013
    Posty: 497
    Lokalizacja: Siedlce
    Pomógł: 9

    Aha czyli z pierwszej odpowiedzi wynika że każde użycie #define jest tak jakby zupełnie ODDZIELNE i NIEZALEŻNE,a ja je ze sobą wszystkie tak jakby skleiłem :shock: i zrozumiałem to że ANODY PORT to to samo co 4 piny i wynika z tego że tak jakby jednej nazwie przyporządkowałem kilka innych nazw itd co było błędem w moim rozumowaniu i wszystko pogmatfałem :lol:

    Ale jeśli chodzi o drugą odpowiedź to niema tam zapisu typu PORTC | = SEG_A
    więc dalej nie bardzo wiem skąd on to wie no chyba że jakoś z tablicy ze strony 209

    _________________
    Ucz się ucz ,bo po to tutaj jesteś...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 gru 2014, o 13:11 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 13 maja 2013
    Posty: 288
    Ostrzeżenia: -2
    Pomógł: 23

    RadekB86 napisał(a):
    Aha czyli z pierwszej odpowiedzi wynika że każde użycie #define jest tak jakby zupełnie ODDZIELNE i NIEZALEŻNE,a ja je ze sobą wszystkie tak jakby skleiłem :shock: i zrozumiałem to że ANODY PORT to to samo co 4 piny i wynika z tego że tak jakby jednej nazwie przyporządkowałem kilka innych nazw itd co było błędem w moim rozumowaniu i wszystko pogmatfałem :lol:

    Ale jeśli chodzi o drugą odpowiedź to niema tam zapisu typu PORTC | = SEG_A
    więc dalej nie bardzo wiem skąd on to wie no chyba że jakoś z tablicy ze strony 209

    Ja tylko dalem taki przyklad zaraz zajrze do ksiazki:)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 gru 2014, o 14:59 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 13 maja 2013
    Posty: 288
    Ostrzeżenia: -2
    Pomógł: 23

    RadekB86 napisał(a):
    #define SEG_A(1<<0) itd itd.

    moje pytanie brzmi skąd kompilator wie że chodzi o ten konkretny PORTC czyli czemu niema zapisu typu:
    #define SEG_A(1<<PC0 ) wiem że obie opcje działają


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

    Czyli wszystkie InputOutput / wejścia Wyjscia procesora etc.

    Np dla:
    /* avr/iom32.h - definitions for ATmega32 */
    gdzie są tam wszystkie definicje miedzy innymi:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    gdzie to szukać ano tu (ja ma zainstalowany atmel tolchain w program files na dysku C, o ile korzystarz z AtmelTolchain ):
    Obrazek

    Zatem kompilator wszedzie gdzie napotka np PC0 wstawi podczas kompilacji 0.
    Jeśli uzywasz Eclipse to najdz myszką na PC0 podświetli Ci się makro i wcisnij F2 to ukaże Ci się owa cyfra 0 :)

    RadekB86 napisał(a):
    ja podejrzewam że wystarczyło że daliśmy ten cały PORTC na stronie 203 jako wyjście na katody....ale może się mylę...
    a jeśli mam rację to co jeśli zechcę sobie podłączyć zupełnie oddzielny nowy wyświetlacz z segmentami na zupełnie inny niezależny PORT skąd wtedy kompilator będzie wiedział o który mi chodzi ?


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


    gdzie: LED_DATA to nasz PORTC zdefiniowany na stronie 203.
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    odczyt bajtu z pamięci Flash zdefiniowanego na stronie 209 (dokładniej na płytcie DVD w kodzie źródłowym).

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


    i tu kompilator zamiast SEG_A wstawi (1<<0); i odpowiednio dla pozostałych segmentów.

    Jeśli chcesz zmienić PORT z C np na D to zmieniasz go w jednym miejscu:

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


    wówczas kompilator będzie wiedział, że chodzi Ci port D



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 gru 2014, o 15:19 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 04 paź 2013
    Posty: 497
    Lokalizacja: Siedlce
    Pomógł: 9

    Oczywiście że używam eclipsa 8-)
    a do tego pliku "iom32.h" zdaje się że zaglądałem przy okazji omawiania przerwania ze strony 204
    chyba że to inny plik ?

    _________________
    Ucz się ucz ,bo po to tutaj jesteś...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 gru 2014, o 15:28 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 13 maja 2013
    Posty: 288
    Ostrzeżenia: -2
    Pomógł: 23

    RadekB86 napisał(a):
    Oczywiście że używam eclipsa 8-)
    a do tego pliku "iom32.h" zdaje się że zaglądałem przy okazji omawiania przerwania ze strony 204
    chyba że to inny plik ?


    tak to ten sam plik z tym, że ten co ja podałem (Atmel tolchain )ma już aktualizacje nowe nazwy wektorów przerwań etc.



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

    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