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 25 maja 2025, o 05:26


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
    Autor Wiadomość
    PostNapisane: 19 paź 2022, o 17:45 
    Offline
    Nowy

    Dołączył(a): 19 paź 2022
    Posty: 13
    Pomógł: 0

    Witam wszystkich,
    jestem bardzo stary(żarcik) i początkujący(nie żarcik)... Bawię się z Atmegą 328p na płycie Arduino, podłączyłem 12 ledów po 6 na port D i B (katoda na GND).
    PortB:L1,L2,L3,L4,L5,L6 (PortD:)L7,L8,L9,L10,L11,L12
    Próbuję osiągnąć efekt przesuwającej się jednej diody z lewej do prawej strony w pętli. Niestety w momęcie zaświecenia L4(portB) równocześnie zapala się L7(portD) i iteracja na obu portach "idzie"dalej jednocześnie. Zastanawiałem się nad przesunięciem bitowym,tylko pytanie czy można to zrobić prościej ?

    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: 19 paź 2022, o 19:05 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 11 lip 2022
    Posty: 8
    Pomógł: 2

    1. Źle dobrałeś typ zmiennej do tablicy. Masz 12 diod więc powinieneś użyć zmiennej 16-bitowej
    2. Masz 12 diod a w pętli dałeś 8 kroków. Powinno być 12 kroków.
    3. Bez maskowania i przesunięć bitowych się nie obejdzie.

    Nie podałeś pod które piny portów B i D masz podpięte diody. PORTB i tak ma tylko 6 pinów więc to oczywiste. Natomiast z twojego opisu działania wnioskuję że pod PD2 do PD7.
    W kroku trzecim zapalana jest dioda L3 a po 150 ms zapalana jest L7. Pętla zaczyna kolejna iterację i w mgnieniu oka gaszone jest L3 i zapalane L4.
    Dlatego masz wrażenie że L4 i L7 palą się jednocześnie. A one tak naprawdę zapalają się w różnych iteracjach.

    Da się to zrobić prościej właśnie na przesunięciach bitowych.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 paź 2022, o 19:55 
    Offline
    Nowy

    Dołączył(a): 19 paź 2022
    Posty: 13
    Pomógł: 0

    Dzięki cdrom za odpowiedź, z tym maskowaniem to już jestem "poskładany" i na pewno nic nie wymyślę choć mnie to interesuje jak byś mógł mi bardziej, tak łopatologicznie wytłumaczyć to będę wdzięczny



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 paź 2022, o 18:39 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 11 lip 2022
    Posty: 8
    Pomógł: 2

    Masz 12 diod led to musisz mieć 12 pozycji w tablicy czyli brakuje ci jeszcze 4: 256, 512,1024,2048.

    masz tablice z elementami 16-bitowymi litery to twoje diody

    0000 yyyy yyxx xxxx

    Potrzebujesz żeby x znalazły się w porcie B a y w porcie D

    Robiąc PORTB = tab[i];
    wpisujesz na port B yyxx xxxx
    ponieważ w PORTB w 328p nie ma fizycznych PB6 i PB7 więc y są nieważne, można je zignorować jednak gdybyś używał procesora z pełnym portem musiałbyś to przepuścić przez maskę 0b0011 1111

    Teraz potrzebujesz mieć w PORTD wartości yyyy yy00 bo tak masz podłączone diody

    Czyli musisz do PORTD wpisać tab[i] przesunięte w prawo o 4 i przepuscić to przez maskę 0b1111 1100 żeby nie wystawiać na dwóch najstarszych x na piny gdzie mają być zera.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 paź 2022, o 20:13 
    Offline
    Nowy

    Dołączył(a): 19 paź 2022
    Posty: 13
    Pomógł: 0

    Dziękuję bardzo cedrom wyszło mi coś takiego i działa !!!

    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.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 paź 2022, o 06:37 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 11 lip 2022
    Posty: 8
    Pomógł: 2

    Myślę że do końca nie rozumiesz działania swojej pętli, choć już coś zaczyna ci świtać. Dałeś delaya pomiędzy wysyłanie na porty. Taki zapis działa oczywiście, ale nie potrzebnie zaciemnia działanie i wprowadza dodatkowe obliczenia. Jeśli byś wprowadził inny wzór to wyświetlanie się rozjedzie.

    spróbuj np. taką tablicę

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




    Nie prościej tak? i nie czytelniej.

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



    I mały tip. Jeśli zmiennej iteracyjnej nie używasz nigdzie poza pętlą, to możesz ją zdefiniować bezpośrednio w pętli. Nie musisz robić osobnej definicji.

    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: 21 paź 2022, o 08:47 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 11 lip 2022
    Posty: 8
    Pomógł: 2

    poprawka, powinno byc:
    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: 21 paź 2022, o 15:00 
    Offline
    Nowy

    Dołączył(a): 19 paź 2022
    Posty: 13
    Pomógł: 0

    Dzięki cdrom masz rację to bardziej czytelne. Twoja tablica na dwa światełka a poniżej jest na trzy światełka jakby ktoś potrzebował: :D

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



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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