Komentator Napisano Maj 27, 2021 Udostępnij Napisano Maj 27, 2021 SPI to szeregowy interfejs komunikacyjny, dzięki któremu do mikrokontrolerów podłącza się wiele przydatnych modułów (np. wyświetlacze TFT). W tej części kursu STM32L4 omówimy podstawy komunikacji przez SPI na przykładzie ekspandera portów. Stworzymy też swoją pierwszą bibliotekę. UWAGA, to tylko wstęp! Dalsza część artykułu dostępna jest na blogu.Przeczytaj całość »Poniżej znajdują się komentarze powiązane z tym wpisem. Link do komentarza Share on other sites More sharing options...
Komentator Maj 27, 2021 Autor tematu Udostępnij Maj 27, 2021 Przypominamy: w komentarzach do kursów rozmawiamy wyłącznie na tematy związane z konkretnym kursem. Mile widziane są również informacje od osób, które korzystały wcześniej z naszych poradników. Wszystko po to, aby kursanci, którzy mają zamiar korzystać z tego kursu nie musieli "przedzierać" się przez dziesiątki postów na inne tematy. Tematy na pytanie, które nie są związane z kursem można zadawać na naszym forum o mikrokontrolerach. Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Maj 27, 2021 Udostępnij Maj 27, 2021 Zachęcam do lektury najnowszej części kursu - tym razem o SPI. Jest to rozgrzewka przed kolejną częścią, w której wykorzystamy tę wiedze do obsługi wyświetlacza graficznego (a to wcale nie jest taki prosty temat). Mamy nadzieję, że ekspander wprowadzi wszystkich łagodnie w ten temat, dzięki czemu w kolejnej części pojawi się trochę trudniejszych tematów (ale spokojnie, każdy na pewno sobie poradzi) 😉 Link do komentarza Share on other sites More sharing options...
Toomas Maj 28, 2021 Udostępnij Maj 28, 2021 Quiz zrobiony, ekspander fajna sprawa, ale nie mogę się doczekać wyświetlacza. Będzie dużo trudniejszy? 1 Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Treker (Damian Szymański) Maj 28, 2021 Udostępnij Maj 28, 2021 @Toomas od strony SPI nie będzie to dużo trudniejsze, ale jeśli nigdy nie próbowałeś komunikować się z wyświetlaczem graficznym to możesz zdziwić się ile trzeba zrobić - szczególnie, że nie ograniczaliśmy się do gotowca. W kolejnej części kursu znajdziesz opis wyświetlacza wraz z kolejnymi krokami, które trzeba przejść, aby stworzyć własną bibliotekę niskopoziomową (do samej komunikacji ze sterownikiem). Później znajdziesz tam kilka etapów optymalizacji kodu, aby uzyskać większą wydajność, a na koniec połączymy całość z biblioteką graficzną, która pozwala na rysowanie figur geometrycznych, wyświetlanie tekstów itd. Jest tego sporo - kolejna część to na 99% najobszerniejsza część jaka pojawi się w ramach tego kursu 🙂 Link do komentarza Share on other sites More sharing options...
Bhoy67 Czerwiec 2, 2021 Udostępnij Czerwiec 2, 2021 (edytowany) Mam pytanie co do jednego pytania w quizie. Pytanie o przerwania, więc zawahałem się czy nie napisać tego pod tamtym odcinkiem kursu, ale w końcu quiz jest tu, więc chyba też pasuje. Nie wiem czy mogę wprost rzucić pytaniem i odpowiedzią, czy nie będzie to spojler dla tych co nie rozwiązywali 😄 [...] Edytowano Czerwiec 3, 2021 przez Treker Usunięcie spoilera. 1 Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Czerwiec 3, 2021 Udostępnij Czerwiec 3, 2021 @Bhoy67 oczywiście masz rację - ukryłem to co napisałeś, aby nie psuć innym zabawy. Faktycznie były tam podane błędne numery pinów (nawet sam podałeś poprawne w swojej wiadomości). Już naniosłem poprawkę do pytania, usunąłem też Twój wynik, więc możesz przez przez quiz raz jeszcze 🙂 1 Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Czerwiec 7, 2021 Udostępnij Czerwiec 7, 2021 Kolejna część kursu jest już dostępna - zachęcam do lektury: Kurs STM32L4 – #11 – kolorowy wyświetlacz TFT (SPI) Link do komentarza Share on other sites More sharing options...
padus Lipiec 8, 2021 Udostępnij Lipiec 8, 2021 Doszedłem do 10 części i zaczynam doceniać jakie możliwości dają nam procesory STM32. Faktycznie peryferia rozbudowane praktycznie pod każde rozwiązanie. Zrobiłem też quiz ale zabrakło mi czasu na dwa ostatnie pytania. Nie wiem jak inni użytkownicy ale przy normalnym czytaniu ze zrozumieniem bez potwornego pędu przydało by się jeszcze dodatkowe 30 sek. Link do komentarza Share on other sites More sharing options...
Gieneq Lipiec 8, 2021 Udostępnij Lipiec 8, 2021 @padus możliwości jest naprawdę sporo, a kurs nie pokazuje ich wszystkich. Dokumentacja licząca kilka tysięcy stron na pewno pokrywa wszystkie pozostałe niuanse 😉 2 godziny temu, padus napisał: przy normalnym czytaniu ze zrozumieniem bez potwornego pędu przydało by się jeszcze dodatkowe 30 sek. Dziękujemy za informacje, weźmiemy to pod uwagę. Link do komentarza Share on other sites More sharing options...
Frantick Lipiec 8, 2021 Udostępnij Lipiec 8, 2021 Kolejna czesc kursu za mna i mam mala uwage, nie wiem czy kazdy fabrycznie nowy uklad MCP jest tak ustawiony ale moj mial wszystkie bity w rejestrze IPOL "wlaczone" przez co logika dla przykladu z przyciskiem byla u mnie odwrotna. Link do komentarza Share on other sites More sharing options...
Gieneq Lipiec 21, 2021 Udostępnij Lipiec 21, 2021 @Frantick sprawdziłem to o czym piszesz i nie wiem dlaczego masz tam jedynki, u mnie działa 🙂 W dokumentacji jest wyraźnie napisane co powinno być ustawione po włączeniu zasilania POR i resecie RST: Cały rejestr powinien być wyzerowany i nie ma tu żadnej fabryczności, bo te układy nie mają pamięci trwałej. Nikt do tej pory nie zgłaszał takich uwag więc może jest to błąd w układzie, lub błąd przy komunikacji albo zasilaniu. Ciężko coś doradzić. Link do komentarza Share on other sites More sharing options...
Leroy Wrzesień 5, 2021 Udostępnij Wrzesień 5, 2021 Cześć 🖐️, kolejna część kursu jak zwykle super 🚀. Wszystko przedstawione bardzo jasno i w ciekawy sposób 🙂. Podczas robienia zadań z pracy domowej napotkałem pewien problem. Zaimplementowałem funkcje do odczytu oraz zapisu dla GPIO oraz dodatkową funkcję pomocniczą. Niestety program nie działa jak należy. Kilkukrotnie podglądałem w debuggerze wartości zmiennych pobranych z rejestrów i poddanych np. przesunięciu bitowemu i wyniki były odmienne od oczekiwanych. Poniżej zamieszam kod: // Sprawdzam wartość bitu na danej pozycji uint8_t check_bit(uint8_t bit_array, uint8_t position){ if( ((bit_array >> position) & 0x01) == 0x01){ return 1; } else{ return 0; } } uint8_t MCP_GPIO_ReadPin(uint8_t output_num){ // Pobieram konfigurację I/O do sprawdzenia uint8_t config = mcp_reg_read(MCP_IODIR); if (check_bit(config, output_num) == 0){ uint8_t reg_val = mcp_reg_read(MCP_GPIO); return check_bit(reg_val, output_num); } else{ return -1; } } void MCP_GPIO_WritePin(uint8_t output_num, uint8_t state){ // Pobieram dotychczasową wartość rejestru, aby zmodyfikować tylko jeden bit uint8_t bit_state = mcp_reg_read(MCP_GPIO); uint8_t current_output_val = check_bit(bit_state, output_num); if (state == 0){ // Jeżeli chcę ustawić tą samą wartość to nic się nie zmienia // Jeżeli chcę zmienić wartość to wykonuję toggle bit na danym bicie if(current_output_val == 0){ } else{ bit_state ^= 1 << output_num; } } else if (state == 1){ if(current_output_val == 1 ){ } else{ bit_state ^= 1 << output_num; } } mcp_reg_write(MCP_OLAT,bit_state); } Próbowałem różnych modyfikacji, lecz nie mogłem natrafić na błąd. Mam przeczucie, że może to być kwestia niewłaściwego typu zmiennej, niewłaściwego użycia operatora ">>" lub operacji toggle bit(czy jest to w ogóle właściwy sposób na zmianę bitu, czy może jest inna droga 🤔?) Czy moje podejście do tego zadania jest poprawne? Będę wdzięczny za wszelką pomoc/uwagi 👌 Link do komentarza Share on other sites More sharing options...
Elvis Wrzesień 6, 2021 Udostępnij Wrzesień 6, 2021 (edytowany) @Leroy Ciężko jest pomóc jeśli nie napiszesz, co nie działa jak powinno. Opis "Niestety program nie działa jak należy" jest nieco zbyt ogólny. Ale przyglądając się Twojemu programowi, wydaje mi się, że jeden z błędów może być tutaj: // Pobieram konfigurację I/O do sprawdzenia uint8_t config = mcp_reg_read(MCP_IODIR); if (check_bit(config, output_num) == 0){ uint8_t reg_val = mcp_reg_read(MCP_GPIO); return check_bit(reg_val, output_num); } else{ return -1; } O ile rozumiem, chciałeś odczytywać rejestr MCP_GPIO tylko wówczas, gdy pin działa jako wejście. W przypadku MCP_IODIR, bit ustawiony na "1" odpowiada wejściu, natomiast "0" wyjściu. W programie sprawdzasz, czy wartość jest 0: if (check_bit(config, output_num) == 0){ Może dlatego nie działa? Edytowano Wrzesień 6, 2021 przez Elvis dodany fragment datasheet-a 1 1 Link do komentarza Share on other sites More sharing options...
Leroy Wrzesień 12, 2021 Udostępnij Wrzesień 12, 2021 @Elvis bardzo dziękuję za pomoc 👍 To, co napisałeś, było jednym z dwóch błędów, które znalazłem w moim programie. Wszystko już poprawione i biblioteka do ekspandera działa jak należy🙂 Cytat Opis "Niestety program nie działa jak należy" jest nieco zbyt ogólny. Jak przeglądam różne grupy na Facebook'u i widzę właśnie posty typu "Program nie działa. (kropka)" to chciałbym pomóc, ale nie za bardzo wiem jak. Zastanawiam się, dlaczego ludzie dają taki skąpy opis, który nie daje jakiegokolwiek obrazu sytuacji. A teraz śmieszna sprawa, bo sam zrobiłem dokładnie to samo😂 Tak bardzo skupiłem się na prośbie o pomoc w rozwiązaniu problemu, że aż zapomniałem ten problem opisać😂 Jeszcze raz dzięki wielkie za znalezienie błędu🖐️ Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »