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 4 kwi 2025, o 22:40


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 47 ]  Przejdź na stronę Poprzednia strona  1, 2
    Autor Wiadomość
    PostNapisane: 6 sty 2014, o 19:14 
    Offline
    Nowy

    Dołączył(a): 06 sty 2014
    Posty: 15
    Pomógł: 0

    zrzut ekranu - projekt zaimportowany z bloga

    Obrazek

    [ obrazki umieszczamy na forum - mirekk36 - w przeciwnym razie będą kasowane tak jak ten przykro mi :(

    tu masz instrukcję co i jak - wystarczy zajrzeć:
    topic44.html

    ]


    zapisuje, kompiluje i nic.
    jest dobrze tylko w jednym przypadku - gdy sam tworzę projekt oraz stworzeniu projektu w opcjach ustawiam odpowiedni mikrokontroler



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lut 2014, o 19:51 
    Offline
    Użytkownik

    Dołączył(a): 14 paź 2013
    Posty: 29
    Pomógł: 0

    Witam. Analizuję ten kod użytkownika jacekk232 na Atmega8 ale nie mogę zrozumieć jak to działa że sygnał jest generowany na 5 portach a następnie odczytany na pinie INT0. Czy mógł by mi to ktoś wytłumaczyć?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lut 2014, o 22:02 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    Skoro zostałem wywołany do tablicy :-) to postaram się wytłumaczyć jak to działa.

    Klawisze jednym końcem podłączone są do pinów PC1...PC5, natomiast drugie końce podłączone są do pinu PD2 czyli INT0.

    Na początku konfiguracja pinów. PC1 do PC5 jako wyjścia w stanie niskim a PD2 jako przerwanie zewnętrzne wywoływane zboczem opadającym. Jednocześnie PD2 ustawiony zostaje jako wejście z podciągnięciem do VCC.
    Wciśnięcie jakiegokolwiek klawisza powoduje, że na PD2 zostaje podany stan niski. Wywołane zostaje przerwanie INT0 i skok do funkcji obsługi tego przerwania.

    Na początku przerwania zostaje zmieniona konfiguracja pinów czyli PC1 do PC5 jako wejścia podciągnięte do VCC a PD2 jako wyjście w stanie niskim. Następnie mamy pięć warunków sprawdzających na którym wejściu od PC1 do PC5 panuje stan niski podany poprzez wciśnięty klawisz z pinu PD2.
    Na końcu funkcji zostaje przywrócona pierwotna konfiguracja pinów czyli PD2 jako wejście podciągnięte do VCC (przerwanie INT0 cały czas jest włączone) a PC1 do PC5 jako wyjścia w stanie niskim.

    Po wyjściu z przerwania i powtórnym wciśnięciu jakiegokolwiek klawisza cała procedura zaczyna się od nowa.

    Myślę, że ten opis przybliży nieco działanie tego mechanizmu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lut 2014, o 23:30 
    Offline
    Użytkownik

    Dołączył(a): 14 paź 2013
    Posty: 29
    Pomógł: 0

    A to w której linijce kodu jest to badanie na którym pinie następuje stan niski?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lut 2014, o 23:34 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    W tych liniach są sprawdzane stany na pinach PC1..PC5
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lut 2014, o 23:36 
    Offline
    Użytkownik

    Dołączył(a): 14 paź 2013
    Posty: 29
    Pomógł: 0

    O to teraz kod zaczyna robić się jasny dla mnie. Wielkie dzięki za pomoc.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lut 2014, o 16:40 
    Offline
    Użytkownik

    Dołączył(a): 14 paź 2013
    Posty: 29
    Pomógł: 0

    Ale teraz jeszcze dojrzałem, że w int main(void) klawisze ustawione są jako wyjścia i stan niski gdzie w ISR( INT0_vect ) klawisze są ustawione jako wejście i załączony wewnętrzny rezystor. Jak to może działać skoro według mnie całość się zaprzecza przez co całość nie powinna działać.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lut 2014, o 19:41 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    tukang napisał(a):
    Jak to może działać skoro według mnie całość się zaprzecza przez co całość nie powinna działać.

    Nic tu niczemu nie zaprzecza a całość doskonale działa. A jak to działa to opisałem w poprzednim poście. Ale może niejasno to opisałem.
    Dlatego może napisz z czym konkretnie masz problem, której części kodu nie rozumiesz. A ja wtedy postaram się to wyjaśnić.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lut 2014, o 14:53 
    Offline
    Użytkownik

    Dołączył(a): 14 paź 2013
    Posty: 29
    Pomógł: 0

    To prosiłbym część w której sprawdzany jest czy i który przycisk został wciśnięty.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lut 2014, o 23:08 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    Sprawdzanie wciśnięcia klawiszy odbywa się w przerwaniu INT0 w liniach od 11 do 15.
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    A działa to tak. Po wejściu do przerwania piny klawiszy ustawiane są jako wejścia podciągnięte do Vcc (linia 3 i 4).
    Następnie pin PD2 jest ustawiany jako wyjście w stanie niskim (linia 6 i 7). Na PD2 panuje stan niski więc możemy go potraktować jako GND. Czyli mamy typową sytuację, w której wciśnięcie klawisza zwiera wejście do GND.

    Jeśli wciśnięty został np. klawisz 3 podłączony do PC3 to stan niski z PD2 zostanie podany na wejście PD3. Warunki w liniach od 11 do 15 sprawdzają na którym pinie od PC1 do PC5 jest stan niski.
    Czyli po wciśnięciu PC3 PINC przyjmie wartość 0bxx11011x. Na tą wartość zostaje nałożona maska KL3 czyli 0b00001000. Po wykonaniu iloczynu logicznego & otrzymujemy
    Kod:
      0bxx11011x
      0b00001000
    & 0b00000000

    Wartość 0b00000000 to FALSE (fałsz) co po zastosowaniu negacji logicznej ! da nam TRUE (prawda). Czyli wykonany zostanie warunek
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Gdyby jednak przerwanie się wykonało a żaden klawisz nie byłby wciśnięty (drgania styków) to żaden warunek się nie wykona bo
    Kod:
    PINC  0bxx11111x
    KL3   0b00001000
    &     0b00001000  (TRUE)

    !0b00001000 (FALSE)


    Dla pozostałych klawiszy zadziała to tak samo.
    W PINC literą x oznaczyłem bity, które nas nie interesują.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 maja 2015, o 20:56 
    Offline
    Użytkownik

    Dołączył(a): 09 mar 2015
    Posty: 30
    Pomógł: 0

    Witam!
    Bardzo pięknie i logicznie to wszystko opisane. Wielkie dzięki.
    Pytanko mam o tą wstawkę
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Co ona robi, dlaczego trzeba i skąd wiadomo że trzeba ją wstawić?
    Czy to chodzi o eliminację drgań styków?
    W niebieskiej książce jest użyte _delay_ms(50) i powtórne zbadanie stanu styków.
    Tutaj tego nie ma. Czy magiczne "nop" to załatwia ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 maja 2015, o 21:03 
    Offline
    Moderator
    Avatar użytkownika

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

    jacekrv1 napisał(a):
    W niebieskiej książce jest użyte _delay_ms(50) i powtórne zbadanie stanu styków.

    To o czym mówisz w Bluebooku to panie jest absolutny wstęp - pierwsze zetknięcie początkującego z tym zagadnieniem, i jeśli chcesz się dowiedzieć jak używać przycisków szczególnie w sposób nieblokujący to po prostu czytaj dalej książkę i nie zatrzymuj się na tym rozdziale - rozumiesz ?

    Poza tym zaglądaj na mojego bloga - szczególnie zobacz sobie to:
    http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html

    poczytaj to dokładnie

    _________________
    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 maja 2015, o 21:28 
    Offline
    Użytkownik

    Dołączył(a): 09 mar 2015
    Posty: 30
    Pomógł: 0

    Dzięki Mirku za szybką odpowiedź. Masz rację: "Kto czyta nie błądzi"!
    Już mam wiedzę nt. eliminacji drgań styków. Ale moje pytanie dotyczy asm("nop"). Po cholerę toto jest? Widzę, że w niektórych listingach jest to używane nawet kilka/naście razy pod rząd. Domyślam się że chodzi o zwłokę czasową. Ale ile ona trwa? No i powtórzę: dlaczego trzeba i skąd wiadomo że trzeba ją wstawić? Jak wtedy zachowuje się procesor?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 maja 2015, o 21:30 
    Offline
    Użytkownik

    Dołączył(a): 22 sty 2014
    Posty: 1806
    Zbananowany użytkownik

    Pomógł: 168

    "nop" jest rozkazem assemblera. . Mówi on do ALU "nie rób nic" i trwa jeden cykl zegara.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 maja 2015, o 22:25 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    Jeśli na pin procesora zostanie podany jakiś stan, to ten stan zostanie wpisany do rejestru wejściowego po upływie jednego taktu zegara. Dopiero wtedy procesor odczyta faktyczny stan pinu. Jeśli odczyt nastąpiłby wcześniej, procesor odczytałby poprzedni stan pinu mimo, że na tym pinie panowałby już nowy stan.

    To samo działa dla rejestru wyjściowego. Pomiędzy wpisaniem jakiegoś stanu do rejestru wyjściowego a wystawieniem tego stanu na pinie mija też jeden takt.

    To wyjaśnia dlaczego w programie jest użyta instrukcja nop, która zatrzymuje ów program na jeden takt zegara.
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Piny na porcie C przestawione zostały z wyjść na wejścia i włączone zostały pull-upy.
    Następnie PD2 zostaje przestawiony z wyjścia ne wejście w stanie niskim.
    Następnie następuje odczyt stanów na pinach portu C.
    Jednak wcześniej program zostaje wstrzymany na czas jednego taktu po to aby mieć pewność, że stan niski z PD2, podany na jeden z pinów portu C poprzez przycisk, wpisany został do rejestru wejściowego PINC.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 maja 2015, o 22:12 
    Offline
    Użytkownik

    Dołączył(a): 09 mar 2015
    Posty: 30
    Pomógł: 0

    O widzisz! O taką informację mi chodziło. Teraz mam jasność.
    Szacun wielki jacekk232. Gdzie się klika "pomógł"?
    :-)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 maja 2015, o 10:17 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    W tym temacie nie klikniesz "pomógł" żadnej osobie bo wydaje mi się, że to tylko autor danego tematu może. Ale spoko. Najważniejsze, że moje wypociny na coś się zdały :-)



    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: 47 ]  Przejdź na stronę Poprzednia strona  1, 2

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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