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? 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 12 cze 2025, o 14:06


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
    Autor Wiadomość
    PostNapisane: 11 lis 2013, o 19:39 
    Offline
    Nowy

    Dołączył(a): 11 lis 2013
    Posty: 9
    Pomógł: 0

    Witam.
    Ostatnio oglądałem poradnik od Pana Mirosława na temat rejestrów przesuwnych 74HC595. Tutaj zrodziło się moje pytanie, a mianowicie na początku jest pokazane, że piny od rejestru są podłączone do pinów PC0, PC1, PC2 natomiast później w kodzie C jest mowa o podłączeniu ich do portów MOSI (albo MISO nie pamiętam teraz), SCK oraz chyba PB5. Czy można sobie podłączyć te 3 nóżki rejestru do innych portów mikrokontrolera i jak to wygląda w C?

    Z góry dziękuję :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 lis 2013, o 19:58 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 18 lip 2012
    Posty: 208
    Lokalizacja: Kraków
    Pomógł: 16

    Można to zrobić na 2 sposoby:
    1: Podłączamy 74HC595 do nóżek MISO, MOSI, SCK, SS w procesorze. Do sterowania rejestrem wykorzystamy sprzętowy interfejs procesora SPI, ustawiając odpowiednie rejestry konfiguracyjne w procesorze.

    2: Podłaczamy 74HC595 do dowolnych pinów I/O procesora. Aby sterować rejestrem musimy napisać kod, który tak będzie sterował tymi nóżkami, jak robi to wbudowany interfejs SPI. Nazywa się to programowym SPI.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 lis 2013, o 20:12 
    Offline
    Moderator
    Avatar użytkownika

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

    Juffre napisał(a):
    2: Podłaczamy 74HC595 do dowolnych pinów I/O procesora. Aby sterować rejestrem musimy napisać kod, który tak będzie sterował tymi nóżkami, jak robi to wbudowany interfejs SPI. Nazywa się to programowym SPI.


    Ja tylko uzupełnię że w Bluebooku jest właśnie opisane programowe SPI, i właśnie to można wykorzystać do podłączenia np 74595 do dowolnych pinów procka


    Autor postu otrzymał pochwałę

    _________________
    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: 12 lis 2013, o 13:36 
    Offline
    Nowy

    Dołączył(a): 11 lis 2013
    Posty: 9
    Pomógł: 0

    Dziękuje za odpowiedź. Była bardzooooo pomocna :)



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

    Dołączył(a): 17 sty 2013
    Posty: 106
    Pomógł: 0

    Znalazłem ten temat więc nie będę zakładał nowego. Ja też po obejrzeniu filmiku o rejestrach przesuwnych postanowiłem zapoznać się z tematem i spróbować wysterować 3 rejestry.
    Schemacik testowego układu tak jak poniżej:
    Obrazek

    A wykonaną płytkę PCB widać tutaj:
    Obrazek

    Jest to jedna z pierwszych płytek mojego autorstwa, więc chciałem się podpytać o kondensatory C1, C6 i C7 przy zasilaniu rejestrów. Czy powinny być one jak najbliżej nóżek zasilania, czy też ich pozycja nie jest aż tak ważna ?

    Po wgraniu kodu o ISP z niebieskiej książki diody wysterowane są tak jak na tym filmiku:


    Interesuje mnie sposób rozszerzenia funkcji SendISP z uint8 tak aby z łatwością móc wysterować każdą z 24 diod dołączonych do 3 rejestrów. Czy możecie mi podać rozdział w niebieskiej książce bądź w innym poradniku Mirka gdzie omawiany jest sposób wysłania większego ciągi bitów przed ich zatrzaśnięciem.

    Rozumiem, że teraz przed każdym zatrzaskiem wysyłam 8 bitów, ale co gdybym chciał móc uzyskać efekt wędrowania jednej diody w górę i w dół dla 24 diod :oops: ?



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

    Dołączył(a): 10 mar 2013
    Posty: 739
    Lokalizacja: Poznań
    Pomógł: 84

    Wyślij po kolei wszystkie bity
    do połączonych w łańcuch rejestrów i na końcu "zatrzaśnij"



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

    Dołączył(a): 17 sty 2013
    Posty: 106
    Pomógł: 0

    na szybko przeleciałem przez dwa poradniki dotyczące SPI i rejestrów przesuwnych (wstawie odnosniki do poradników poniżej, to kolejni początkujący nie będą musieli ich szukać ) :
    i


    Ostatnim razem część dotycząca wysyłania 2 bajtów umknęła mej uwadze. Dzięki temu przykładowi udało mi się wysterować 3 rejestry. Po raz kolejny fachowe wyjaśnienie no i końcowy efekt widać poniżej :


    kod który użyłem to:
    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.


    Na pierwszym filmiku zauważalne jest zjawisko dodatkowych mignięć innych diod. Tutaj jest to bardziej widoczne:


    Czy może mi ktoś wytłumaczyć w jaki sposób one powstają i jak się ich pozbyć ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 lut 2014, o 16:32 
    Offline
    Moderator
    Avatar użytkownika

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

    barszczz napisał(a):
    Czy może mi ktoś wytłumaczyć w jaki sposób one powstają i jak się ich pozbyć ?


    przez to ci się to dzieje

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


    pomijam już że to _delay_us(1) w książce było jako przykład i nie należy go stosować i że chyba niedobrze obejrzałeś te moje poradniki do których sam podałeś linki

    ale nie dziwne że masz takie zjawisko jeśli LATCH'ujesz po wysłaniu każdego bajtu ZAMIAST po wysłaniu WSZYSTKICH bajtów do swojego rejestru czy rejestrów

    Pomyśl sobie jaki jest sens LATCH'ować za każdym bajtem gdy naraz wsuwasz np 4 bajty

    eeeh jak mówię ;) jeszcze raz obejrzyj ale teraz dokładnie mój poradnik i wtedy zobaczysz w czym rzecz - bo mówię o tym i to wyraźnie

    _________________
    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: 23 lut 2014, o 17:04 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 17 sty 2013
    Posty: 106
    Pomógł: 0

    o kurcze...faktycznie zupełnie zapomniałem o LATCH'owaniu w funkcji sendBajt...w tym wypadku wyzwalałem po każdym bajcie a nie tylko raz po wsunięciu wszystkich trzech. No to teraz wszystko śmiga i miga tak jak zaplanowano :P



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

    Dołączył(a): 17 sty 2013
    Posty: 106
    Pomógł: 0

    Zastanawiałem się jak uzyskać efekt zapalania wybranych diod z poziomu użytkownika a nie przesuwając stan logiczny tak jak w poprzednim przykładzie. Za pomocą tego kodu mogę sterować wybraną diodą spośród 1 a 24:

    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.


    Jeśli interesuje mnie zapalenie kilku wybranych diod naraz mogę posłużyć się:

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


    W tym przypadku muszę znać wielkość tablicy, ale czy istnieje jakaś wbudowana funkcja w języku C, która podałaby mi rozmiar tablicy ? coś jak length (tablica) ? Gdzie mogę wyszukać tego typu funkcji zaimplementowanych w języku C dla mikrokontrolerów ?

    wówczas nie musiałbym definiować wielkości tablicy no i w pętli for nie wstawiałbym na stałe wartości inkrementacji.
    Dzięki za pomoc !



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

    Dołączył(a): 07 lut 2013
    Posty: 600
    Pomógł: 47

    barszczz napisał(a):
    W tym przypadku muszę znać wielkość tablicy, ale czy istnieje jakaś wbudowana funkcja w języku C, która podałaby mi rozmiar tablicy ? coś jak length (tablica) ? Gdzie mogę wyszukać tego typu funkcji zaimplementowanych w języku C dla mikrokontrolerów ?


    Może sizeof(zmienna);

    _________________
    https://www.instagram.com/myfirstquadcopter/



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 24 lut 2014, o 09:51 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 17 sty 2013
    Posty: 106
    Pomógł: 0

    Świetnie ! Wielkie dzięki Panowie !

    Teraz kolejna rzecz, która mnie zastanawia. W przypadku omawianego sterowania możemy kaskadowo połączyć maksymalnie 8 rejestrów, ponieważ najwyższy typ jaki mamy to uint64_t (64 bity / 8 bajty).
    Zapewne niejeden z was kontrolował już znacznie większe ilości rejestrów aniżeli 8 :twisted:

    Czy w tym przypadku najbardziej optymalnym rozwiązaniem dla np. 20 rejestrów byłoby utworzenie bufora zawierającego 20 bajtów i wysłanie go do funkcji sendBajt, w której za pomocy pętli for wysłane zostałyby wszystkie 20 bajty a po ostatnim oczywiście Latch'owane ?

    Czy dobrze kombinuje :oops: ?



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

    Dołączył(a): 17 sty 2013
    Posty: 106
    Pomógł: 0

    wypróbowałem metody z buforem i tak jakby działa. Dodatkowe części kodu poniżej:

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



    Mam dodatkowe pytanie co do kolejnej funkcji języka C, jak widzicie do buffera wpisuje buffer[] = {1,2,4};
    czy istnieje jakaś szybka komenda taka jak np. 'flip right to left' (buffer) tak abym odwrócił go w lustrze i otrzymał buffer2= {4,2,1} ?

    Dodatkowo chciałem programowo zmienić stany z 1 na 0 i odwrotnie tak aby uzyskać poprawny efekt, gdyż diody połączone mam katodą do VCC. Próbowałem zanegować buffer za pomocą tyldy ~ ale oczywiście wyskakuje błąd. Poradziłem sobie z negacją wysyłanego Bajta w SendBajt, ale czy jest jakiś inny prosty sposób ?



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

    Dołączył(a): 10 mar 2013
    Posty: 739
    Lokalizacja: Poznań
    Pomógł: 84

    negację bufora można by spróbować zanegować przed wysłaniem
    w pętli np. for lub while
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    powinno odbyć się to dość szybko

    mam taką nadzieję że to się uda :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 lut 2014, o 12:05 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 17 sty 2013
    Posty: 106
    Pomógł: 0

    tak, udało się z negacją bufera, dzięki !

    Powracając do SPI, mam pytanie odnośnie możliwości sygnału SCK na pinie PB7. Po inicjalizacji sprzętowego SPI, na pinie tym pojawia się sygnał prostokątny o ustawionym okresie.

    W przypadku noty katalogowej scalaka WS2803, temat -> http://forum.atnel.pl/post71958.html#p71958
    opisane jest LACH'owanie układu za pomocą ustawienia stanu niskiego, o czasie >600us, na tymże pinie.

    Czy jest jakiś łatwy sposób, aby przez określony czas wymusić stan niski na SCK a następnie powrócić do standardowego trybu pracy ?



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


    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