Skocz do zawartości

Elvis

Użytkownicy
  • Zawartość

    3 212
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    256

Elvis zajął 1. miejsce w rankingu.
Data osiągnięcia: 19 grudnia 2025.

Treści użytkownika Elvis zdobyły tego dnia najwięcej polubień!

4 obserwujących

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Warszawa
  • Zawód
    programista
  • Moje zainteresowania:
    Linux, STM32, FPGA

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

Osiągnięcia użytkownika Elvis

Lokalny Mentor

Lokalny Mentor (16/19)

  • To już 15 lat!
  • Za udzielenie wzorowej odpowiedzi
  • Za udzielenie wzorowej odpowiedzi
  • Za udzielenie wzorowej odpowiedzi
  • Stały wizytator

Odznaki

1,9 tys.

Reputacja

  1. Chyba chodziło o detektor kryształkowy https://pl.wikipedia.org/wiki/Detektor_kryształkowy Nie wiem czy istnieje urządzenie do detekcji kryształów... dalej nie byłem w stanie czytać
  2. Na pewno nie jestem specjalistą od poprawnej polszczyzny, ale moim zdaniem nie ma nic złego w używaniu terminu dioda LED. Po prostu LED przyjęło się jako nazwa własna i nie należy tej biednej literki D się czepiać... Bo jeśli przyjmiemy, że dioda LED jest językowym błędem, powinniśmy być konsekwentni i przestać mówić o pamięci RAM, czy ROM, dyskach SSD, płytkach PCB, wiadomościach SMS i pewnie jeszcze wielu, wielu innych.
  3. @rafal2808 Bardzo fajny artykuł, trudno nie zgodzić się z chociażby jednym stwierdzeniem odnośnie Arduino Uno Q. Dzięki uprzejmości firmy Botland ja również otrzymałem płytkę do przetestowania możliwości nowej platformy. Na szczęście kolega @rafal2808 bardzo trafnie i wystarczająco krytycznie opisał wrażenia z używania Uno Q, więc nie muszę powtarzać wszystkich wad nowego Arduino. Przyznam, że z racji pisania kursu dla Intel Edison-a miałem duże obawy zbytniego pesymizmu oraz porównywania Arduino Uno Q do nieszczęsnego Edisona. Ale skoro nie tylko ja dostrzegam wspólne cechy, więc może to nie tylko przykre doświadczenia z przeszłości. Bo trzeba to głośno powiedzieć: Qualcomm chce być jak Intel i to nie tylko w kwestii produkcji mikroprocesorów. Skoro wady zostały już bardzo trafnie opisane, spróbuję wspomnieć o pewnych, nawet jeśli nielicznych zaletach Arduino Uno Q. Zacznijmy od samego pomysłu. Każdy z nas gdy słyszy Arduino Uno, myśli od razu Atmega328 i to jedyne, prawdziwe Arduino oraz jego klony. Jednak po rozpakowaniu przesyłki zrozumiałem, że z perspektywy inżynierów pracujących dla Arduino mogło to wyglądać nieco inaczej. Od wielu lat kolejne płytki wykorzystują przeróżne mikrokontrolery, a ten nieszczęsny AVR i tak nie chce odejść w zapomnienie... Poprzednia wersja Uno nie bazowała na atmedze, ale na mikrokontrolerze Renesasa i już pierwsze spojrzenie na Arduino Uno Q oraz R4 zwraca uwagę na ich podobieństwo: Na obu widzimy moduły Wifi, matryce LED-ów, złącza Qwiik oraz oczywiście złącza Arduino. Elementy są bardzo podobnie rozmieszczone, właściwie różnica to zasilanie oraz USB typu C. Jeśli przyjmiemy, że bazą dla Uno Q jest Uno R4, nowa płytka wydaje się nieco mniej dziwna. Również jej cena (205zł) wcale tak nie szokuje w porównaniu z R4 (125zł). Wydajemy nieco wiecej, ale dostajemy też bardziej zaawansowany produkt, który ma (prawie) pełną funkcjonalność Uno R4 oraz dodatkowe bajery: Na początek możemy używać UnoQ za pomocą znanego nam Arduino IDE. Nie zauważyłem problemu z portem szeregowym (słuszna uwaga), natomiast jak dla mnie wadą są inne napięcia (3.3V zamiast 5V). Jednak poza tym nowa płytka jest właściwie pełnym zamiennikiem poprzedniej: Mamy więc trochę droższe i nieco niekompatybilne R4. Wydaje się bez sensu, ale tutaj widać pierwszą zaletę UnoQ - moim zdaniem to bardzo tania płytka. Albo raczej tania w relacji otrzymanego sprzętu do ceny. Znalazłem w sieci wyliczenia i według nich Qualcomm dopłaca do każdego egzemplarza Uno Q bo cena końcowa nie pokrywa nawet ceny komponentów. O montażu, opakowaniu, transporcie, czy marży sprzedawcy nie wspominając. Chodzi mi o to, że w Arduino Uno Q dostajemy w gratisie STM32U585, który jest dość drogim mikrokontrolerem. Właściwie goła płytka Nucleo z U575 kosztuje ~110 zł. A pamiętajmy że Arduino ma sporo więcej do zaoferowania, chociażby moduł WiFi i Bluetootha. Porównywalną funkcjonalność oferuje dopiero B-U585I-IOT, ale jej koszt to prawie 400zł, więc niemal dwa razy więcej niż Arduino! Oczywiście można narzekać, że Arduino Uno Q nie ma JTAG-a, ale nie jest to do końca prawda... W komunikatach widocznych podczas programowania znajdziemy informację o użyciu openocd, więc JTAG prawdopodobnie jest, tylko nie mamy do niego dostępu z poziomu tego delikatnie mówiąc niedoskonałego oprogramowania: Jak już jesteśmy przy cenach to jeszcze jedno porównanie na które warto zwrócić uwagę. Arduino z STM32 na pokładzie nie jest nowością - od dawna płytki "profesjonalne" z linii Portenta używają STM32, również Arduino Giga jest na tych układach oparte. Ale popatrzmy na ceny: Portenta H7 Connected - 407zł (https://botland.com.pl/arduino-seria-portenta-oryginalne-plytki/20395-arduino-portenta-h7-lite-connected-abx00046-7630049202511.html), Arduino Giga R1 Wifi - 333 zł (https://botland.com.pl/arduino-seria-podstawowa-oryginalne-plytki/22660-arduino-giga-r1-wifi-abx00063-7630049203266.html). Więc gdyby udało się nieco otworzyć architekturę Arduino Uno Q mogłoby ono być ciekawą ofertą dla samego STM32U585. A mamy jeszcze cały mikroprocesor w gratisie... No właśnie, o co chodzi z tym mikroprocesorem. Kolega @rafal2808 dobrze opisał wrażenia i wady tego co dostarcza Arduino, ja tylko krótko zaprezentuję jak wygląda nowy Blink. Arduino App Lab zawiera sporo przykładów, które mają jedną wspólną cechę - są strasznie przekombinowane. Dla początkującego to raczej koszmar, więc płytka jest chyba bardziej adresowana do użytkowników, którzy na Arduino Uno R4 zrobili już wszystko i szukają nowych wyzwań. Blink LED jest jednym z przykładów dostępnych w aplikacji: Po wybraniu przykładu, zobaczymy nowy projekt. Warto otworzyć plik README.md może nie żeby go czytać, ale docenić ilość pracy włożonej w nową platformę - nawet prosty blink ma piękny obrazek pokazujący współpracę mikroprocesora i mikrokontrolera. Aplikacje składają się z 2 części. Pierwsza działa na mikroprocesorze, pisana jest głównie w Pythonie, ale większość przykładów używa również JavaScriptu i oczywiście HTML-a. Więc cokolwiek bardziej skomplikowane niż miganie diodą to nauka kilku języków programowania. Od razu czuć tutaj korporacyjną nutkę oraz zapaszek Edison-a. Obie platformy używały tak samo przekombinowanych rozwiązań. Ale zobaczmy jak wygląda kod Blink napisany w Pythonie: Tym na co warto zwrócić uwagę jest klasa Bridge. Pozwala ona na wywoływanie funkcji napisanych w C++ i działających na mikrokontrolerze. Więc kod Bridge.call("set_led_state", led_state) w rzeczywistości odwołuje się do STM32U585: Schemat działania jest więc następujący: w C++ piszemy funkcje, które działają na STM32, a wywołujemy je z kodu napisanego w Pythonie, który działa na mikroprocesorze. To całkiem fajna sprawa i działa poprawnie. Jedyna wada to te nieszczęsne kontenery, które spowalniają cały proces. Bo gdyby je jakoś usunąć mielibyśmy skrypt w Pythonie, który wywołuje funkcje w C++ na mikrokontrolerze. Więc wysokopoziomowy kod moglibyśmy szybko i miło pisać w Pythonie, a niskopoziomowe sterowanie peryferiami mieć w bibliotekach. Pomysł jest bardzo fajny, niestety jak na razie oprogramowanie dostarczane przez Arduino sprawia że trzeba mieć mnóstwo cierpliwości i samozaparcia żeby nawet przykłady uruchomić. Więc moim zdaniem Arduino Uno Q jest ciekawym rozszerzeniem możliwości Arduino Uno R4. Dla osób które zrobiły już wszystko co się da na R4 i szukają nowych wyzwać Uno Q może być interesującym wyborem. Płytka nie jest ani raczej nie będzie konkurencją dla Raspberry Pi. To raczej Uno R4+ niż malinka, chociaż jeśli Qualcomm przestanie naśladować Intel-a i otworzy nieco nową platformę, ma ona szanse na sukces. Sprzętowo to bardzo ciekawa opcja i w porównaniu do innych płytek - wbrew pozorom niedroga. Niestety aktualny stan oprogramowania sprawia że trudno jest ją komukolwiek polecać.
  4. @pirx1988 Gratuluję spostrzegawczości! Faktycznie wygląda to na pomyłkę i VDD powinno być 5V zamiast 3.3V. Nie mam teraz jak przetestować układu, ale bardzo możliwe że przy 3.3V całość będzie i tak działać. Napięcie Vf=3.5V jest mierzone dla prądu 25mA, który jest dość duży jak na współczesne diody. Przy 3.3V popłynie mniejszy prąd i możliwe że to wystarczy do poprawnego działania. Jednak dobrane rezystory (1k, 330R) wskazują wyraźnie na napięcie 5V (i prądy na poziomie kilku mA), więc pewnie takie połączenie było używane podczas testowania układu, a w treści pojawił się błąd. Bardzo dziękuję za uwagi i jeszcze raz gratuluję spostrzegawczości
  5. @Treker Arduino Uno Q ma parametry na poziomie Raspberry Pi 3, więc pewnie aktywne chłodzenie nie jest niezbędne. Mały radiator nie zaszkodzi, chociaż pewnie uznali że i bez niego układ sobie poradzi
  6. Jeszcze jedna rzecz przyszła mi do głowy - CAS czyli Cyber Resilience Act wejdzie w życie już niedługo i może sporo namieszać w projektach tworzonych za pomocą Arduino. Użycie mikrokonerolera STM32U5 wskazuje że Qualcomm zdaje sobie z tego sprawę i może to będzie argumentem za używaniem oryginalnych płytek zamiast klonów czy też ESP32.
  7. A ja jestem bardzo ciekaw działania tej nowej płytki, chociaż w sumie jeszcze bardziej planów na przyszłość Arduino/Qualcomm. Moim zdaniem za dotychczasowy sukces Arduino odpowiadała nie tyle sama firma oraz oryginalne płytki, ale bardziej klony. Z tego co wiem, większość hobbystów używa klonów, a jeśli ma oryginał to raczej do nauki oraz "żeby był" i leżał na półce bo szkoda jeśli się uszkodzi. Do tego dochodzą wszelkie płytki oparte of ESP, które nawet nie są klonami, ale niezależnym bytem i Arduino IDE oraz biblioteki nieźle na nich działają... Chociaż Arduino jako firma ma chyba z nimi niewiele wspólnego i jeszcze mniej na tym zarabia. Plany odnośnie nowej płytki wyglądają ambitnie - nowe IDE, python, AI, programowanie na wiele platform jednocześnie (mikrokontroler, mikroprocesor, web). Niestety ostatnio Arduino miało dużo pomysłów, ale ciągle kojarzyło się głównie z Atmegą 328 i programowaniem niskopoziomowym. Może tym razem uda się wyjść z tej szufladki i przejąć inne rynki. Tym bardziej że AI chyba sporo namiesza w programowaniu, więc wiele "tradycyjnych" umiejętności straci na znaczeniu. Pozostaje trzymać kciuki i czekać niecierpliwie kiedy nowe płytki się pojawią
  8. @ethanak Przed zmianą kopii, czyli zapisem do Adr[P] proponowałbym jeszcze odczytanie zawartości Tx[P]. Może się tak zdarzyć, że podczas zapisu nastąpił błąd i wtedy algorytm nie będzie działał poprawnie.
  9. @atlantis86, dostępne są wyświetlacze 7-10" z wejściem VGA, przykładowo: https://pl.aliexpress.com/item/1005008558996530.html
  10. @seba881 Przeczytaj końcówkę tej części kursu: https://forbot.pl/blog/kurs-stm32l4-diody-rgb-ws2812b-liczniki-quiz-id49890 Możliwe że jest to dokładnie ten sam problem. Edit: W najnowsze wersji HAL-a może być konieczne wywołanie HAL_TIM_DMABurst_WriteStop przed HAL_TIM_DMABurst_MultiWriteStart, było o tym w komentarzach pod kursem ( ).
  11. @slawekvslawek Gratuluję wytrwałości, wersja z HAL_TIM_DMABurst_MultiWriteStart była wspomniana jako ciekawostka, prawdę mówiąc nie sądziłem że kogokolwiek zainteresuje. Okazuje się, że w nowszych wersjach HAL wprowadzono dodatkowe testy, a jednym z rezultatów jest to że HAL_TIM_DMABurst_MultiWriteStart może być wywołana tylko raz do czasu aż użyjemy HAL_TIM_DMABurst_WriteStop. W naszym przypadku HAL_TIM_DMABurst_WriteStop jest nieco stratą czasu, ale jeśli jej nie wywołamy to HAL_TIM_DMABurst_MultiWriteStart zwróci błąd. W najnowszej wersji HAL należałoby zmienić funkcję ws2812b_update na następującą: void ws2812b_update(void) { HAL_TIM_DMABurst_WriteStop(&htim3, TIM_DMA_UPDATE); HAL_TIM_DMABurst_MultiWriteStart(&htim3, TIM_DMABASE_CCR1, TIM_DMA_UPDATE, led_buffer, TIM_DMABURSTLENGTH_1TRANSFER, sizeof(led_buffer)); } Przy okazji warto przypomnieć, że funkcje HAL mogą zwracać błędy. W kodzie "produkcyjnym" należy zawsze sprawdzać, czy funkcja nie zakończyła się błędem. W kursie tego nie robimy aby uprościć kod, ale jak widać bywa to bardzo ważne i nawet wielokrotnie sprawdzony program może sprawić niespodzianki.
  12. Nie wiem czy to pisał ChatGPT, czy automatyczne tłumaczenie, ale czegoś takiego to by chyba człowiek nie wymyślił: #dodaj <standardowewewy.n> liczbacałkowita główna()
  13. Fakt, pisałem to w pośpiechu. Czyli powinno być: else if(night_h_start > night_h_stop){ //jeśli godzina startu jest przed północą if(clock1.getHour() >= night_h_start) return true; else if(clock1.getHour() < night_h_stop) return true; else return false; } A to już można ładnie skrócić do: else if(night_h_start > night_h_stop){ //jeśli godzina startu jest przed północą if(clock1.getHour() >= night_h_start || clock1.getHour() < night_h_stop) return true; else return false; } Taki właśnie warunek jest użyty później
  14. Cześć @SOYER , skoro temat nie tylko dla osób z BB to pozwól że dołączę do dyskusji. Mogę trochę źle rozumieć kod, ale wydaje mi się, że chodziło o sprawdzanie, czy aktualnie trwa noc - w Twoim kodzie to mnie więcej te linijki: if(night_h_start < night_h_stop){//jeśli godzina staru jest po północy if((clock1.getHour() >= night_h_start) && (clock1.getHour() < night_h_stop)){ Skoro musiałeś dodać komentarz, to znaczy że kod jest nieczytelny - najepiej więc przenieść go do nowej funkcji: static bool is_night_now(void) { if(night_h_start < night_h_stop){//jeśli godzina staru jest po północy if((clock1.getHour() >= night_h_start) && (clock1.getHour() < night_h_stop)) return true; else{ return false; } } else if(night_h_start > night_h_stop){ //jeśli godzina startu jest przed północą if(clock1.getHour() >= night_h_start) return true; else if(clock1.getHour() < night_h_stop) return false; } } Teraz funkcja isNight będzie o wiele krótsza: void isNight(){ if((millis()-prev_minute_millis)> 30000){//sprawdzamy czas co 30s if (is_night_now()) { if(!night){ tempCounterNight = counter; night = true; } } else { night = false; } prev_minute_millis=millis(); } } Nazwa "is_night_now" nie jest piękna, na pewno wymyślisz coś lepszego - pisałem na szybko, więc z góry przepraszam. Jest pierwsza wersja uproszczonego programu, można iść dalej. Nieeleganckie jest przekazywanie zmiennych globalnych, czyli clock1, night_h_start, night_h_stop. Nie wiem jakiego typu są te zmienne, więc użyję int, ale zmień typ na poprawny. Nowa funckja is_night_now, która nie używa zmiennych globalnych wygląda następująco: static bool is_night_now(int now, int night_start, int night_stop) { if (night_start < night_stop) return now >= night_start && now < night_stop; else return now >= night_start || now < night_stop; } A główna funkcja: void isNight(){ if((millis()-prev_minute_millis)> 30000){//sprawdzamy czas co 30s if (is_night_now(clock1.getHour(), night_h_start, night_h_stop)) { if(!night){ tempCounterNight = counter; night = true; } } else { night = false; } prev_minute_millis=millis(); } Teraz można zabrać się za poprawianie isNight. O ile rozumiem chciałeś ustawiać tempCounterNight tylko raz. Proponowałbym to zrealizować następującą wersją: void isNight(){ if((millis()-prev_minute_millis)> 30000){//sprawdzamy czas co 30s bool nn = is_night_now(clock1.getHour(), night_h_start, night_h_stop); if (!night && nn) tempCounterNight = counter; night = nn; prev_minute_millis=millis(); } Można jeszcze byłoby zamienić millis() oraz 30000 na funkcję, ale to oraz wymyślenie łądniejszych nazw zostawiam Ci jako dodatkowe zadanie
×
×
  • Utwórz nowe...