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 21 maja 2025, o 20:14


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
    Autor Wiadomość
     Tytuł: Początki ;)
    PostNapisane: 21 lis 2011, o 17:34 
    Offline
    Użytkownik

    Dołączył(a): 05 lis 2011
    Posty: 81
    Pomógł: 0

    Witam
    Na wstępie muszę powiedzieć, że książka ładnie opisuje składnię języka C dla AVR ( tylko jakos wskaznikow nie zrozumialem, ale muszę doczytać) jak i również taktowanie procesora oraz fuse :D
    Lecz nie o to mi chodziło mianowicie już na początku mam problem (może nie do końca problem, ale wątpliwość).
    Mam taki kod: dioda podłączona jest + do PD0
    I wersja i tu nie działa tak ja powinno - nie gaśnie tylko świeci non-stop
    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.


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

    dlaczego I wersja nie działa ? - oto moje pytanie ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2011, o 18:01 
    Offline
    Moderator
    Avatar użytkownika

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

    Zobacz w pierwszym przykładzie masz tak:

    ON; ----> czyli zapalasz diodę LED - świeci sobie
    _delay_ms(1000); ---> teraz trwa przerwa 1s, procek nic nie robi a dioda świeci
    OFF; ---> teraz gasisz diodę LED

    .....> teraz pętla przechodzi od razu do pierwszej linijki bez żadnego oczekiwania - czyli znowu zapala diodę.

    Zatem czas pomiędzy wyłączeniem a zapaleniem diody (czas gdy NIE ŚWIECI) trwa zaledwie kilka taktów zegara !!! - hmmm musiałbyś wejść do MATRIXA żeby gołym okiem zobaczyć, że ta dioda LED przygaśnie w ogóle ;)

    a jeśli zrobisz tak:

    ON; ---> zapalam LED
    _delay_ms(1000); ---> czekam 1s z zapaloną diodą LED
    OFF; ---> gaszę diodę LED
    _delay_ms(1000); ----> a teraz ładnie czekam sekundę ze zgaszoną diodą

    ....> i sytuacja się powtarza

    teraz jaśniej ????

    A co drugiego przykładu to spróbuj już sam go rozszyfrować - tylko przyjrzyj się i doczytaj czym różnią się operatory

    ^=

    od

    |= oraz &= ~

    bo chyba te rozdziały z operacjami logicznymi też troszkę hmmm pominąłeś? zgadłem ? ;)

    _________________
    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: 21 lis 2011, o 18:04 
    Offline
    Użytkownik

    Dołączył(a): 05 lis 2011
    Posty: 81
    Pomógł: 0

    aaa no wlasnie juz wiem czemu nie swieci ;P a co do tej II wersji to wiem jak działa czyli zmienia stan na przciwny watpliwosci mialem tylko co do I wersji :P, ale teraz zastanawiam sie nad zapalaniem diody po kolei i gaszenie z powrotem <mysli> ;)
    operatory logiczne dobrze przyswoilem - tak mi sie zdaje



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2011, o 20:18 
    Offline
    Moderator
    Avatar użytkownika

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

    No to życzę miłego zastanawiania się i prób a w razie czego można tu śmiało dopytać ;) powodzenia

    _________________
    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: 22 lis 2011, o 18:02 
    Offline
    Użytkownik

    Dołączył(a): 05 lis 2011
    Posty: 81
    Pomógł: 0

    To co planowalem zrobione ;) tylko teraz sie zastanawiam czy dalo by rade to zrobic jakos w jednej petli for ?
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Mam jeszcze pytanie mianowicie jak podlaczyc takie micro-switch (ten pierwszy) http://matsuyamaco.com/ts.htm zeby dzialalo bo juz rozne kombinacje probowalem i nie daje rady :?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2011, o 18:54 
    Offline
    Moderator
    Avatar użytkownika

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

    jeśli chodzi o te dwie pętle, to ta druga jest zła ;) sam zastanów się dlaczego ? (tzn przypadkowo ci działa niby tak jak byś chciał ale nie wiesz tak naprawdę dlaczego - tak mi się zdaje. Podpowiedź: sprawdź co by się działo z tą drugą pętlą gdybyś zmienną i zdefiniował np tak: int8_t i zamiast uint8_t i. Zrób sobie próbę to się przekonasz)

    Poza tym oczywiście, że można w jednej pętli i to na kilka różnych sposobów. Jeden i najprostszy to zrobić tablicę a drugi to dwa if'y wewn. takiej pętli.

    Natomiast jeśli chodzi o ten micro-switch - to w ogóle ale to w ogóle już nie rozumiem twojego pytania więc nie jestem w stanie pomóc.

    _________________
    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: 22 lis 2011, o 19:03 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    zależy o jakie podłączenie ci chodzi :)

    typowe użycie to zwieranie pinu do masy czyli wymuszenie na pinie z przyciskiem np PB1 stanu niskiego (1 lub 2 do procka a 3 lub 4 do masy) mozna tez do plusa :)

    w takt switchach masz to proste zwierane jest 1 i 3 bo miedzy 1 i 2 oraz 3 i 4 masz zworki ładnie to widać na nocie , a na fotce zaznaczyłem ci miedzy którymi jest włacznik

    Obrazek

    a programowo to na wypranym pinie musisz sprawdzić czy jest stan niski (przycisk wciśniety) odczekac chwilke dla eliminacji drgań i sprawdzic ponownie .

    np:

    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 tu masz schemat podłaczenia przycisku do powyższego programu
    Obrazek

    Mam nadzieję ze jasne jest wszystko
    tu jak widzisz właczamu przycisk miedzy pin a mase z użyciem wbudowanego w atmege
    rezystora podciagającego pin do VCC. To najłatwiejsza i najczesciej stosowana metoda na przycisk. Ale można też tak :

    Obrazek

    w tym wypadku nietrzeba juz stosowac właczenia pull-upa w atmedze .

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Ostatnio edytowano 22 lis 2011, o 19:24 przez SunRiver, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2011, o 19:10 
    Offline
    Użytkownik

    Dołączył(a): 05 lis 2011
    Posty: 81
    Pomógł: 0

    mirekk36: no wlasnie widze ze juz nie dziala poprawnie tzn zapala zasi i na tym koniec - musze do tego dojsc czemu :P
    SunRiver: thx ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2011, o 19:51 
    Offline
    Użytkownik

    Dołączył(a): 05 lis 2011
    Posty: 81
    Pomógł: 0

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

    mysle, ze tamta wersja nie bylo poprawna dla int8_t, poniewaz zalozeniem bylo, ze i<=7 (co bylo spelnione samo w sobie, bo i=7), a przedzial dla int8_t jest od-128 do 255 wiec jeszcze "lecialo" od 0 do tego -128. czy dobrze mowie ? :D



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2011, o 20:21 
    Offline
    Użytkownik

    Dołączył(a): 05 lis 2011
    Posty: 81
    Pomógł: 0

    a czy taka wersja z tablica jest dobra ? :)
    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: 22 lis 2011, o 20:29 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    Coś sie tak michał uparł na to int8??
    zacznij od uint8_t :)

    pętla for jest obliczalna i zawsze liczy warunek w kroku od 0 do wartości czyli np w twoim przypadku gdzie i=7 masz wiec moze isc od 0 do 7 albo od 7 do 0 :) niesłysząłem o przypadku zliczania w zakresie wartości zadanej. w zmiennej typu int8 masz 1 bajt czyli 8 bitów wiec mozesz tam przechować wartość FF czyli 255 maxymalnie.

    ale nie znaczy to ze petla bedzie biegła do -127

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2011, o 20:40 
    Offline
    Użytkownik

    Dołączył(a): 05 lis 2011
    Posty: 81
    Pomógł: 0

    nie uparlem sie tylko kolega mirekk36 chcial mi pokazac ze ta petla nie do konca jest poprawna przy typie int8_t tak jak bylo w przypadku uint8_t :P
    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: 22 lis 2011, o 20:41 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    na oko wygląda poprawnie , ale nie wiem co na to kompilator
    zdefiniowałes zmienną i i tablice 16 elementową z przypisaniem wartości

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2011, o 21:13 
    Offline
    Moderator
    Avatar użytkownika

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

    Michal_PB1 --> oczywiście, że chodziło mi o to abyś świadomie użył takiej konstrukcji:

    Kod:
    for(i=7;i>=0; i--)



    ;) więc teraz już wiesz o co chodzi w tym przypadku.

    A z tablicą też dobry sposób wymyśliłeś ;) ... więc szybko idziesz do przodu i o to chodziło ... powodzenia

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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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