Skocz do zawartości

Tablica liderów


Popularna zawartość

Pokazuje zawartość z najwyższą reputacją od 19.08.2020 w Posty

  1. 9 punktów
    Kiedy zaczyna się zabawę z lampami, czy to do budowy radia, czy wzmacniacza audio, należy załatwić sobie dobre zasilanie. Zwykle to zasilanie jest wbudowane w urządzenie, więc co nowe urządzenie lampowe (czy to radio, czy wzmacniacz) musiałbym kupować nowy transformator. To czego potrzebowałem to zasilacz, jak najbardziej uniwersalny (układy lampowe buduję bardziej w celach edukacyjnych niż praktycznych), co pozwoli mi na wykorzystanie tylko jednego transformatora do wszystkich moich projektów lampowych. Chciałem, aby zasilacz był podobny do szkolnych zasilaczy laboratoryjnych, i był możliwie bezpieczny. Zacząłem sobie od rozrysowania schematu, a zarazem obliczeń: Jak widać, wiele do szczęścia nie potrzeba. Jest to jeden z najprostszych zasilaczy jaki można zrobić - i to wykorzystując elementy głównie z odzysku. Zaczynając od lewej: zasilanie do układu jest dostarczane przez popularne złącze IEC. Faza jest odcinana pierwszym wyłącznikiem, nie można było także zapomnieć o bezpieczniku. Transformator jaki wykorzystałem to TS50/5 polskiej firmy Zatra, który dostałem od znajomego nauczyciela. Posiada on 3 uzwojenia wtórne - 2x 270v, 6.3v i 4v (na schemacie dwa ostatnie powinny być rozłączone). Jeżeli ktoś nie ma takiego transformatora, może wyprostować bezpośrednio napięcie gniazdkowe, ale tylko przy zastosowaniu transformatora o przekładni 1:1. Będzie on stanowił izolację galwaniczną. Napięcie żarzenia wielu lamp to 6.3v. Niektóre lampy grzeje się wyższym napięciem, którego ten transformator niestety nie dostarcza, więc musiałem się zadowolić tymi ponad 6 woltami. Uzwojenie to od razu zasila małą żaróweczkę sygnalizującą pracę zasilacza. Dla jasności: lampy można żarzyć napięciem zarówno stałym, jak i przemiennym. Napięcie anodowe lamp (to wysokie, niebezpieczne) jest prostowane scalonym mostkiem greatza (z zasilacza komputerowego). Wyprostowane napięcie jest wygładzane przez filtr RC, a następnie ograniczane bardzo prostym układem z wykorzystaniem tranzystora MOSFET. Ten także jest z odzysku, posiada niską rezystancję w stanie przewodzenia, wytrzymuje dużą moc - i co najważniejsze - posiada zabezpieczenie w postaci diod zenera między bramką a źródłem. Działają one jako zabezpieczenie przeciwprzepięciowe - w teorii, potencjometr tutaj służy jako dzielnik napięcia, a rezystor obniża napięcie (gdyż mosfet to element sterowany napięciem). Jeżeli nastąpi tam przebicie, tranzystorowi na szczęście się nic nie stanie. Ale dlaczego w ogóle ten tranzystor dałem? Nie wszystkie lampy mają jedno napięcie anodowe, więc napięcie to można ograniczać - w czym pomaga panelowy woltomierz wskazówkowy, z posobnikiem w szeregu. Trudno znaleźć cyfrowe woltomierze na tak wysokie napięcie. Na samym końcu układu - jest przełącznik, który pozwala na zasilenie docelowego urządzenia, lub poprowadzenie napięcia przez rezystory mocy. Mają one 2 zastosowania: pozwalają dobrać napięcie, kiedy zasilacz nie jest zewnętrznie obciążony, oraz rozładowują kondensator, co jest bardzo ważną rzeczą. I najważniejsza rzecz - cała obudowa jest porządnie uziemiona. Aby wyrównać potencjały, masę napięcia anodowego także uziemiłem. Obliczenia skomplikowane nie są - na początku potrzebowałem znać moc urządzenia, aby wiedzieć jaki bezpiecznik dobrać. Z racji tego (a przynajmniej tak myślę, może błędnie myślę ), że poza transformatorem nie ma elementów LC (po stronie napięcia przemiennego), cos fi jest bliski 1, a więc moc bierna jest niewielka - dlatego jej nie brałem pod uwagę (równania 1.1-2). Nie brałem pod uwagę także strat na samym transformatorze. Następnie obliczyłem rezystor jaki jest potrzebny do filtru RC, oraz prąd i napięcie jakie będą po wyprostowaniu. Miałem na uwadze, że napięcie w gniazdku wynosi 240v, a transformator był na 220v, i że napięcie to może być wyższe (równania 3.1-3.4). Na samym końcu, korzystając z praw Ohma i Kirchoffa, obliczyłem posobnik dla woltomierza. Oryginalnie wyskalowany był na 0-40v, więc zmieniłem to na 0-500v. Woltomierz miał rezystancję 48kΩ. Starą skalę zeskanowałem, w gimpie przerobiłem, i wydrukowałem na papierze samoprzylepnym. Po zebraniu wszystkich potrzebnych elementów, wziąłem się za obudowę. Trochę mi to zajęło, ponieważ prawie wszystko robiłem ręcznie. Bazą obudowy jest aluminiowy radiator z starego zasilacza impulsowego - do którego z boku są przykręcone blachy aluminiowe, a u góry profil. Wszystko ze złomu. Rączka została wykonana z stali nierdzewnej. Najwięcej czasu zajął front obudowy, do którego wykonałem rysunek, a następnie wyfrezowałem blachę zgodnie z tym rysunkiem. (Niestety zdjęć z tego procesu nie mam). Następnie zasilacz zacząłem lutować - oczywiście wszystkie przewody są zakończone termokurczkami, wszystko jest porządnie przykręcone, a obudowa działa jak świetny radiator. No i podsumowanie. Zasilacz działa, bez obciążenia napięcie anodowe wynosi maks. 428v, oraz 375v z obciążeniem. Maksymalny prąd wynosi 48mA, co można zwiększyć, podłączając równolegle drugą połówkę uzwojenia. No i - zgodnie z przewidywaniami, napięcie faktycznie jest wyższe. Napięcie żarzenia wynosi obecnie 6.8v, ale jest to dość nieznaczna różnica. Rozładowanie kondensatora trwa ok. 5 sekund, z włączonym obciążeniem. Myślę że bez obciążenia, nawet w ciągu doby nie rozładowałby się do zera. Przy budowie jednak popełniłem kilka błędów: górny łącznik, łączący front z górą obudowy, ma źle umiejscowione utwory, przez co górna blacha trochę wystaje. Żarówka (jak i kondensator) trzyma się na kablach, co nie jest dobrą praktyką. Mogłem także dać więcej zabezpieczeń, np. ograniczenie prądu, zabezpieczenie przeciw odwrotnej polaryzacji, czy przeciw zwarciowe. Rezystor filtru także jest mocno przedobrzony - moc którą pobierze wynosi mniej niż 1 wat, i bardziej on służy za element montażowy. Mimo wszystko, zasilacz działa, poza obciążeniem nic się nie grzeje. Projekt tym samym uznaję za udany.
  2. 8 punktów
    Coś nieskomplikowanego na początek. Ponieważ moja dziewczyna jest maniakiem kwiatów, zaznaczyła sobie coś co by można wetknąć w grunt, zapomnieć o tym, że w tym gruncie jest przez parę miesięcy a w międzyczasie dowiadywać się z tego ile mniej więcej wody znajduje się w ziemi (aka "kiedy najlepiej podlewać"), najlepiej po WiFi. Z WiFi nic nie wyszło, bo w sumie wszystko co używa WiFi ma pobór prądu z kosmosu, a chcemy mieć tak około pół roku pracy na baterii 300-400mAh. Opcją był jeszcze BLE (nRF52), ale też odpadł z powodu w sumie małej wygody. Skończyło się na STM32F030 w parze z LT8920. STMa chyba nie trzeba przedstawiać, a LT8920 jest transciverem radiowym w pasmie 2,4GHz, którego główną zaleta jest mała liczba potrzebnych dodatkowych elementów, potrzebne są całe dwa kondensatory i 12MHz kryształ. Do tego pobór prądu w uśpieniu na poziomie 6uA i do tego koszt 25 centów za sztukę. Ale nie ma róży bez kolców, zasięg w praktyce jest ok, ale mogło by być lepiej: około 1-2 betonowe ściany, do tego tragiczna dokumentacja. Pomiar wilgotności odbywa się metoda pojemnościową: Na wejście układu pomiarowego podawany jest 2,4MHz sygnał PWM z 30% wypełnieniem. Ten po przejściu przez filtr złożony ze ścieżek na PCB, ewentualnej wody w otoczeniu i R2 ulega spłaszczeniu. Interesuje nas w tym momencie jaki jest mniej więcej maksymalny poziom po przefiltrowaniu, a zmierzenie tego umożliwia detektor maksimów złożony z D1 (to tak na prawdę dioda 4148, pod ręką nie było odpowiedniego symbolu w eagle), C1 i R3. Potem już wystarczy nawet niezbyt szybki ADC i określenie poziomów napięcia w suchym i mokrym otoczeniu celem kalibracji. Ładowanie przez gniazdo mini USB za pomocą TP4057, stabilizację do 3V zapewnia HT7530-7, oba w obudowach SOT23-5. Szczytowy pobór prądu w trakcie pomiaru/nadawania osiąga około 60mA, 22mA w odbiorze, a w trybie uśpienia nie przekracza 30uA. Pomiar/wysyłka odbywa się raz na 5 minut, trwa około 55ms. To teoretycznie powinno pozwolić na pracę z 400mAh akumulatorka lipo przez około 8 miesięcy, uwzględniając 3% samorozładowanie i bez uwzględnienia ręcznego trybu nasłuchu. Układ posiada jeden przycisk, którego działanie rożni się w zależności od czasu przytrzymania: * pojedyncze naciśniecie - natychmiastowy pomiar i wysłanie aktualnych danych w pakiecie (migniecie diodą) * przytrzymanie przez 3s - układ przechodzi w tryb nasłuchu, to umożliwia zdalne przejście do bootloadera i wgranie nowego firmware przez radio lub odczyt danych na żywo przez centralkę, ewentualnie także zmianę parametrów (miganie diodą co 1s) * przytrzymanie przez 10s - reset + wejście do bootloadera na 30s (miganie diodą 3x s) Obecnie nie ma innej opcji wyłączenia transmisji danych niż odłączenie baterii. Ale tak sobie myślę, że zmiana STM32F030 na F07x dała by opcję konfiguracji przez USB, przydatną w wypadku wprowadzenia przypadkiem jakichś bardzo złych ustawień. To jednak może w kolejnej wersji, obecna jak na nasze potrzeby się sprawdza całkiem dobrze. Przy okazji pomiaru wilgotności gleby układ mierzy tez napięcie na baterii, opcjonalnie temperaturę (NTC), napięcie na USB podczas ładowania. Jako, że czujniki jednak nie mają WiFi, zbierania danych z czujników wykorzystywany jest zegar: Zbudowany na STM32F107 (i 18 wyświetlaczach matrycowych 8x8 20/1.9mm), posiada port ethernet, kilka czujników podających parametry środowiska w który się znajduje i transciver na LTC8920 co umożliwia mu wymianę danych z czujnikami. Ale ten opisany będzie dokładniej jak w moje kochanie zrobi coś sensownego z jego WebUI Oraz dlaczego tu nie ma podglądu posta przed wysłaniem.
  3. 5 punktów
    Określanie położenia w przestrzeni to jeden z tych problemów, które intuicyjnie wydają się trywialnie proste, a w rzeczywistości są bardzo trudne. Istnieje kilka rozwiązań, ale żadne z nich nie jest idealne — najlepiej zastosować mieszankę kilku, a i tak wtedy nie będzie idealnie. Możesz zatem: Zamontować na kołach enkodery i, zakładając, że koła się nie ślizgają, obliczać dokładne ruchy pojazdu na ich podstawie. Znając położenie początkowe można dość dokładnie określić obecne położenie, jednak błąd będzie stopniowo coraz większy. Przy czterokołowym pojeździe jak twój w grę wejdą jeszcze nieuniknione poślizgi kół na zakrętach. To samo, ale zamiast (oprócz) enkoderów użyć akceloremtru+żyroskopu+kompasu. Są gotowe czipy zawierające w sobie już całą logikę do tego. To samo, ale używając czujnika z myszki optycznej, lub kamery z algorytmem przepływu optycznego — skierowanych w górę lub w dół. Podążać za narysowaną na ziemi linią lub zakopanym pod ziemią kablem używając odpowiednich do tego czujników. Śledzić za pomocą kamery rozmieszczone wzdłuż trasy znaczniki — fiduciale albo ledy mrugające w odpowiedni sposób. Obliczać odległości do kilku boi dźwiękowych/radiowych/świetlnych i na podstawie tego triangulować pozycję. Jeździć po powierzchni, która ma wydrukowaną na sobie informację o pozycjach w postaci podobnej do fiduciali lub kodów QR i zczytywać je za pomocą kamery skierowanej w dół. Robić to co robią muchy, czyli analizować jak zwiększają się obiekty w obrazie z kamery w miarę zbliżania się do nich i na podstawie tego określać odległość (looming).
  4. 4 punkty
    Cześć, ponieważ dorastałem w latach 80-siątych XX wieku (szkołę średnią rozpocząłem w 1981 roku) dużo czasu spędzałem grając w proste gry na "automatach" (w Bydgoszczy były wtedy trzy duże salony gier i sporo osobno stojących automatów). Jedną z moich ulubionych gier była wtedy gra "Breakout" (znana też jako Arkanoid) więc postanowiłem poszukać, czy jakiejś wersji tej gry nie da się uruchomić zestawie FPGA. Znalazłem dwie implementacje tej gry: jedna rozbudowana z wieloma poziomami i fajną grafiką - jednak jej implementacja była oparta o soft-procesor i zajmująca duzo zasobów układu FPGA, druga natomiast bardzo prosta zaimplementowana w "zwykłych blokach logicznych" układu FPGA i zajmująca mało zasobów. Tą drugą bardzo prostą implementację (jeden poziom gry) postanowiłem uruchomić na zestawie FPGA ElbertV.2. Bazowałem na tym projekcie ze strony instructables.com: https://www.instructables.com/id/Breakout-Game/ Aby przystosować grę do zestawu Elbert należało wprowadzić kilka modyfikacji: 1) Dodać nowy zegar, który na podstawie zegara 12MHz z Elberta generował zegar 50 MHz (takim zegarem był taktowany oryginalny projekt) 2) Poprawić błąd w module głównym "breakout.v" związany z buforem dla zegara 25MHz (do taktowania wyświetlacza VGA) 3) Zanegować sygnały resetu gry (de) oraz do ruchu paletki rota i rotb 4) Zmienić proces obsługi paletki (tak, aby można było używać dwóch przycisków z zestawu Elbert) 5) Dostosować plik "user constraints" do zestawu Elbert V.2 Ale po koleji: Został dodany IPCore (moduł zegarowy) PLL_1 - instancja Clock12Mhz, a kod modułu głównego projektu (breakout.v) został zmieniony w następujący sposób: Kod oryginalny: module breakout( input clk50, input rota, input rotb, input de, output red, output green, output blue, output hsync, output vsync ); reg clk25_int; always @(posedge clk50) begin clk25_int <= ~clk25_xx; end wire clk25; BUFG bufg_inst(clk25, clk25_xx); wire [9:0] xpos; wire [9:0] ypos; signal_generator signal_generator_inst(clk25, hsync, vsync, xpos, ypos); game game_inst(clk25, xpos, ypos, rota, rotb,de, red, green, blue); endmodule Zmodyfikowany: module breakout( input clk12, //clk50 was input rota, input rotb, input de, output red, output green, output blue, output hsync, output vsync ); wire clk50; wire clkInBuf, clkOut; reg clk25; // Instantiate the module PLL-Clock PLL_1 Clock12MHz ( .CLKIN_IN(clk12), .CLKFX_OUT(clk50), .CLKIN_IBUFG_OUT(clkInBuf), .CLK0_OUT(clkOut) ); always @(posedge clk50) begin clk25 <= ~clk25; end wire [9:0] xpos; wire [9:0] ypos; signal_generator signal_generator_inst(clk25, hsync, vsync, xpos, ypos); game game_inst(clk25, xpos, ypos, ~rota, ~rotb, ~de, red, green, blue); endmodule W module "game.v" została całkowicie zmodyfikowana obsługa paletki: Było: // paddle movement reg [8:0] paddlePosition; reg [2:0] quadAr, quadBr; always @(posedge clk25) quadAr <= {quadAr[1:0], rota}; always @(posedge clk25) quadBr <= {quadBr[1:0], rotb}; always @(posedge clk25) if(quadAr[2] ^ quadAr[1] ^ quadBr[2] ^ quadBr[1]) begin if(quadAr[2] ^ quadBr[1]) begin if(paddlePosition < 520) // movement range paddlePosition <= paddlePosition + 3 ;//velocity of the paddle end else begin if(paddlePosition >= 0) // movement range paddlePosition <= paddlePosition - 3; // velocity of the paddle end end Po modyfikacji: // paddle movement reg [8:0] paddlePosition; reg [27:0] counter; always @(posedge clk25) begin counter <= counter + 1; if (counter == 250_000) begin counter <= 0; if(rota || rotb) begin if(rota) begin if(paddlePosition < 520) // movement range paddlePosition <= paddlePosition + 3 ;//velocity of the paddle end else if(rotb) begin if(paddlePosition >= 0) // movement range paddlePosition <= paddlePosition - 3; // velocity of the paddle end end end end Obsługa paletki jest teraz obsługiwana przez dwa "switche" sw4 i sw6 z płytki Elbert z częstotliwością około 100Hz (stąd dodany licznik w procesie). No i pozostaje dostosowanie pliku "breakout.ucf" do zerstawu Elbert co wygląda następująco: # Clock 12 MHz NET "clk12" LOC = P129 | IOSTANDARD = LVCMOS33 | PERIOD = 12MHz; #VGA pins NET "hsync" LOC = "P93" | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST ; NET "vsync" LOC = "P92" | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST ; NET "red" LOC = "P105" | IOSTANDARD = LVCMOS33 |DRIVE = 12 | SLEW = FAST ; NET "green" LOC = "P102" | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST ; NET "blue" LOC = "P98" | IOSTANDARD = LVCMOS33 |DRIVE = 12 | SLEW = FAST ; #Padd pins NET "rota" LOC = "P77" | IOSTANDARD = LVCMOS33 | PULLUP ; #sw6 NET "rotb" LOC = "P75" | IOSTANDARD = LVCMOS33 | PULLUP ; #sw4 NET "de" LOC = "P80" | IOSTANDARD = LVCMOS33 | PULLUP ; #sw1 Gra prezentuje się następująco: Szkoda tylko, że jest tak prosta (zajmuje około 60 % uniwersalnych komórek logicznych zestawu Elbert). Jeśli ktoś chciałby się włączyć do rozbudowy gry (wielu z Was posiada zestaw Elbert) to proponuję mały mini-konkurs: kto pierwszy zdoła tak zmodyfikować projekt tej gry aby za pomocą DIP-switchy z tego zestawu można było wybrać dwie różne szybkości piłeczki i dwie różne długości paletki. Jak analizowałem kod gry nie jest to szczególnie trudne do osiągnięcia (ale wymaga trochę przemyślenia jak można to najłatwiej osiągnąć). Może ten pomysł rozrusza trochę ten dział Forbot'a Tutaj pełny kod projektu dla ISE 14.7: Arkanoidgame.zip BTW: niestety nagrodą dla tego, któremu uda się to osiągnąć pierwszemu jest tylko prestiż Jeśli komuś udałoby się dodać wyświetlane liczni8ki zbitych "cegiełek" i ilości zgubionych piłeczek to byłby mistrzem. Pozdrawiam
  5. 4 punkty
    To ja tylko dodam, że do tworzenia modeli 3D istnieją również inne programy oprócz CAD-ów. Sztandarowy przykład to Blender. Trzeba też wspomnieć o programach do obróbki modeli (np. Meshlab) czy programach specjalizowanych (choćby używany przeze mnie do projektowania lalek FaceGen). A gdzie programy do fotogrametrii?
  6. 4 punkty
    Myślę, że na początek Raspberry Pi z PiCam-em albo nawet dowolnym webcamem podłączonym po USB będzie dobre. Niestety przetwarzanie obrazu to już coś, z czym Arduino sobie nie poradzi. Możesz też popatrzeć na rozwiązania typu OpenMV — drogie, ale dużo mają gotowego. Kolega @deshipu udziela wyczerpujących odpowiedzi, ale pozwolę się wtrącić do wątku Oczywiście RaspberryPi z PiCam'em będzie bardzo dobrym rozwiązaniem, ale jeśli chciałbyś zrobić @Stark to tak "jak muchy", to będzie to dość skomplikowane, szczególnie jeśli pomieszczenie "nie jest czyste" i obraz z kamery będzie "pstrokaty". Ogólnie, polecam blog PyImageSearch, jest dużo darmowych tutoriali, które pozwolą nauczyć Ci się podstaw OpenCV, możesz też kupić tam kurs, ale to już w zawrotnej cenie Oczywiście jest więcej metod wykorzystania kamery, mogą to być znaczniki lub kody QR. Czy możesz napisać, co to za pomieszczenie, czy koniecznie musisz je wykorzystać i na jakie modyfikacje możesz sobie pozwolić (naklejenie znaczników, montaż "latarni") i z jaką dokładnością musisz śledzić trasę? Dość prostym (pod warunkiem, że mamy podłogę w jednolitym kolorze) byłoby umieszczenie kamery pod sufitem, wykrycie robota (to nie byłoby trudne, mógłby właśnie emitować światło IR) i przesyłanie np. przez BT koordynat z RPi do Arduino Coś takiego jak poniżej: PS Jeśli nie chcesz angażować OpenCV + RPi + PiCam, poczytaj o płytce PixyCam, jest to moduł (dość drogi) podłączany do Arduino, który w wersji drugiej może właśnie wykrywać różnego rodzaju kody kreskowe, ale tylko 16 różnych - stąd właśnie pytanie jaka to musi być dokładność, na jakie modyfikacje trasy/pomieszczenia możesz sobie pozwolić i czy całość systemu musi być w robocie czy może mieć jakiś "system naprowadzania"? To oczywiście tylko takie luźne pomysły, mając więcej szczegółów będziemy myśleć dalej
  7. 3 punkty
    Abstrahując od programu: 1. Co to znaczy "jak na zdjęciu"? Schemat nie jest kompletny. Jakie są wartości elementów w obwodzie bramki? Czym jest u Ciebie Vdr oraz gdzie i jak podłączasz swoje PWM?Jaka jest jego częstotliwość? 2. Zmierz rezystancję (zwykłym omomierzem) - oczywiście po wyjęciu z układu - dławika L. 3. Układ bootstrap z definicji nie działa dla wypełnień 100%, uwzględnij to w programie. 4. Zamiast testować układ dynamicznie, czyli z działającą pętlą sprzężenia zwrotnego (co wprowadza wiele czynników dodatkowych - jak to w pętlach regulacji - i może prowadzić do niestabilności układu), spróbuj statycznie: ustawiaj na sztywno jakiś znany PWM (np. 10, 20,...80, 90%) i sprawdź, czy układ zachowuje się tak jak sobie tego życzyłeś, tj. czy napięcie wyjściowe (bez obciążenia lub z bardzo małym, kilka mA) jest zgodne z teorią dla przetwornicy tej topologii, jak spada napięcie przy coraz większym prądzie (czyli znajdź impedancję wyjściową swojego układu) itd. W ten sposób sprawdzisz kluczową rzecz: poprawne działanie modulatora PWM, czyli tutaj dobre sterowanie bramki i poprawne przełączanie MOSFETa. Dla prądów jakimi dysponuje Twój zasilacz 12V ten tranzystor nie powinien się grzać w ogóle. Jeśli jest inaczej, oscyloskop do ręki.Dalej to już tylko filtr dolnoprzepustowy LC i tu nie ma co nie działać. Oczywiście wszystko przy założeniu, że układ jest zmontowany poprawnie za pomocą lutownicy i np. płytki uniwersalnej. Płytkę stykową możesz na czas prób z układami mocy schować głęboko do szuflady i nikomu się nie chwalić, że coś takiego w ogóle przyszło Ci do głowy. 5. Dopiero w następnych krokach zabierz się za program regulacji w pętli i i dynamikę sterowania. Uzupełnij schemat i podaj wyniki swoich pomiarów.
  8. 3 punkty
    Opcji komunikacji jest dużo, od prostych modułów radiowych takich jak w pilotach do garażu, poprzez radio pakietowe takie jak nrf24 czy rfm69 czy rfm95, aż do Bluetooth i WiFi. Jeśli będziesz używać rpi, to są takie z wifi albo nawet z bluetoothem. Jeśli samo Arduino, to zależy co chcesz mieć po drugiej stronie — smartfon, laptop, radio modelarskie, malinę czy drugie Arduino.
  9. 3 punkty
    Trochę czasu minęło, ale mogę zaprezentować Ziutka w akcji: Niestety - w czasie malowania ktoś unieruchomił cały mechanizm prawej dłoni, nie miałem czasu tego poprawiać przed nagraniem - obraz na ekranie to lustrzane odbicie (animowana jest lewa dłoń). Ze ścieżki dźwiękowej starałem się wyciąć rzężenie serw, ale nie wszędzie było to możliwe.
  10. 3 punkty
    Kurczę, @Mateusz218 aż zęby bolą od czytania Twoich postów. Doceniam Twoją ambicję tworzenia wspaniałych robotów, ale zacznij może od słownika poprawnej polszczyzny, poczytaj o znakach interpunkcyjnych, ortografii. Moim zdaniem, ta wiedza z podstawówki przyda Ci się nie tylko na studiach, ale i na maturze, którą najpierw musisz zdać. Wybacz dygresję, ale po pięciu stronach wątku brakło mi cierpliwości.
  11. 3 punkty
    1.Tranzystory BC547 nie są zabezpieczone.Pomiędzy kolektor a Vcc musisz wstawić diodę i to dość szybką.Istota polega na tym,ze ta dioda musi być podłączona jak najbliżej wyprowadzeń cewki przekaźnika. 2.Tranzystor BC547 jest za słaby.Prąd kolektora to 100mA.W momencie włączania się przekaźnika płyną prądy nieustalone,które są dużo wyższe niż te podane w katalogu dla przekaźnika.Jest zagrożenie,że zostanie zniszczony tranzystor.Wstaw jakiś o większym prądzie np. Ic=0,5A. 3.Styczniki to ty musisz mieć ale nie takie jak na zdjęciu.Te możesz co najwyżej oddać na złom. 4.Na schemacie nie ma narysowanych styczników i sposobu ich podłączenia oraz zabezpieczenia.Patrz uwaga powyżej Black jack 5.Zapamiętaj raz na zawsze,że przewód żółto-zielony jest najważniejszym przewodem bo on ratuje,życie w razie jakiegoś przebicia. 6.Brak zabezpieczeń dla obwodów DC. 7.Czy wziąłeś pod uwagę sytuację w której nie ma zasilania sieciowego a przyczyną jest awaria sieci energetycznej?Jak wtedy otworzysz lub zamkniesz.
  12. 3 punkty
    Dzień dobry, jak napisałem w powitaniu lubię coś budować, kiedyś lubiłem rozbierać Nazbierało się tych zdjęć, filmów, ebooków, itp. więc gdzieś trzeba to trzymać, Robienie kopii na dysku zewnętrznym to oczywista oczywistość, ale..... ile można mieć dysków, jak sensownie (automatycznie) panować nad tą zbieraniną? Przyszedł czas na NAS kupić? Eeee nuda, a może zrobić, np. z jakiegoś starego PC? No oki ale gdzie to trzymać? Przecież żona....... , no wiecie jak jest. A kupować mini ATX i takie tam, no i padło na Malinkę, kiedyś o tym czytałem, ale tak jakoś dopiero po latach się mi przypomniało. W między czasie ukazała się wersja z 8GB RAM, oohooo to już można wiele w jednym zrobić, się pomyślało. No i nadszedł czas lektur i planowania. Potem czas zakupów w dobie pandemii, istna jazda. O ile samą malinkę kupiłem z Botlandzie, to resztę niestety / stety zmuszony byłem kupić i Chińczyków. Od razu zaznaczę że sklep mega ogarnia i ma fajne adaptery. Czy mój projekt się opłaca ależ oczywiście, że nie. nie taki jest jego cel. Co planuję? Na dziś RPI 4b 8 GB RAM, SSD 120 GB, HDD 4 TB, odpowiednie adaptery, obudowa z chłodzeniem, kamera do monitoringu wejścia do mieszkania, kamera w "judaszu", obudowa własnego projektu. Ze sprzętu to na dziś wszystko. To jest część zakupów: Na dziś udało mi się uruchomić RPI z SSD na USB, to jest procedurka jaką zastosowałem. ___________________________________________________________________________________________________________ Procedurka przerabiania bootloadera na USB z MicroSD w pkt: 1. Uruchamiamy Raspberry Pi 4b z microSD 2. Uaktualniamy malinkę sudo apt update sudo apt full-upgrade 3. Po zakończeniu musisz edytować plik sudo nano /etc/default/rpi-eeprom-update w nim zmieniasz wersję firmware na beta zapisujesz plik i czas na kolejne polecenie sudo rpi-eeprom-update -d -f /lib/firmware/raspberrypi/bootloader/beta/pieeprom-2020-05-15.bin To może się nie udać ponieważ możesz nie mieć binarki z odpowiednią nazwą, więc musisz ją znaleźć. Szukasz tu, /lib/firmware/raspberrypi/bootloader/beta/........ .bin Ja wybrałem najnowszy. 4. Po wykonaniu tej czynności przebootuj malinkę i sprawdź wersję botloadera vcgencmd bootloader_version powinieneś mieć to co wybrałeś według daty w poprzednim kroku. 5. Teraz musisz skopiować kartę na swój SSD. Ja to zrobiłem wbudowanym narzędziem SD Card Copier. W nim wybieramy źródło (czyli kartę /dev/mmcblk0) i cel (u mnie IR-SSDPR-S25A 120 (/dev/sda). Ważne jest aby zaznaczyć opcję New Partition UUIDs, zwolni to nas z koniecznośc bardziej skomplikowanych czynności w postaci kopiowania plików *.dat i *.elf z https://github.com/raspberrypi/firmware/tree/a6c9b6b48ce86ef2527586a50760d52f1b33f642 na partycję rozruchową dysku USB (u mnie SSD pod niego podpiętego) 6. Po wpisaniu w konsoli komendy vcgencmd bootloader_config , wyświetli się parę informacji, ciebie interesuje czy masz w BOOT_ORDER=0xf41, wpis oznacza od prawej do lewej szukanie boota najpierw na karcie microSD to 1, potem USB to 4, no i pętla to 0xf. 7. Teraz w zasadzie wystarczy wyłączyć malinkę i wyjąć kartę, oraz odpalić malinkę. Możliwe problemy, które mnie nie dotknęły ale o nich czytałem to za słabe zasilanie USB, malinka jaka jest, każdy widzi i czasami prądu nie styka. W tej konfiguracji sprzętowej nie ma tego problemu. _______________________________________________________________________________________________________________ A zapomniał bym, to moja malinowa kanapka. jeszcze bez obudowy. Dziś odpaliłem NAS na Sambie, Działa pod Wind i Andkiem, ale wpadł mi w oko artykuł o OMV, ciekawe czy da się go postawić na Raspberry OS Desktop?
  13. 2 punkty
    Ja tylko podpowiem, że nawet jeśli sam kurs jest dla początkujących to micro:bit jako platforma może być używana przez o wiele bardziej zaawansowanych użytkowników. Na micro:bit można uruchomić pythona, pisać programy za pomocą bibliotek Arduino, albo wyrzucić to wszystko i pisać programy w samym C/C++ (a nawet asemblerze) odwołując się bezpośrednio do rejestrów. Mamy wtedy całkiem ciekawy mikrokontroler nRF51822 z obsługą BT w wersji low-energy, akcelerometr LSM303, matrycę 5x5 led, drugi mikrokontroler do obsługi USB oraz możliwość podłączania modułów tak samo jak opisano w kursie.
  14. 2 punkty
    Podobno jeden obraz jest wart tysiąca słów: A jak chodzi o to widzenie w ciemności, to NOIR cudów nie robi, oświetlenie nadal jest potrzebne, ale może być w podczerwieni.
  15. 2 punkty
    Ta kamerka dedykowana jest do pracy w nocy - przeczytaj, a to zdjęcie zrobiłeś w jakich warunkach oświetleniowych?
  16. 2 punkty
    Powiem tak: temat był wałkowany na forum mnóstwo razy, aż się nie chce wierzyć że nie można znaleźć prawidłowej odpowiedzi... Co powiesz na: if (Serial.available()) { sign=Serial.read(); if (sign != 10) { Serial.println(sign); // albo co... } } A najprościej byłoby wyłączyć przekazywanie znaku nowej linii w monitorze serial...
  17. 2 punkty
    @LN7 Kurs jest faktycznie kierowany dla dzieci, starszej nieco młodzieży ale zaczynającej dopiero temat programowania. Jeżeli jesteś już w temacie Arduino a tym bardziej RPi, to kurs MB byłby nieco uwsteczniający - nie ma tu pisania kodów programów tylko gotowa implementacja ukryta w bloczkach. Żeby iść nieco dalej myślę, że kurs budowy robotów byłby dobry, ale też coś trudniejszego np STM32 albo FPGA. Są to tyle dobre tematy, że kurs daje Ci zajawkę co to jest, jak programować, ale później temat się bardzo rozszerza. Na forum jest kilka osób specjalizujących się w tych tematach i naprawdę jeżeli masz czas to są to niezłe wyzwania
  18. 2 punkty
    @Emerid, bo nie ma takiej stałej Jest ADC_SAMPLETIME_1CYCLE_5 i wtedy powinno działać, zerknij w plik "stm32f1xx_hal_adc.h". U mnie od 293. linijki są te stałe.
  19. 2 punkty
    Kurs TC #100, zbudujmy sobie sterownik VGA z bramek i liczników.
  20. 2 punkty
    Nie ma żadnego standardu. Zasilacze produkowane są w obu wersjach a szkoły wyznawców są - jak się domyślasz - dwie Pierwsza to ta, w której korzysta się z podobieństwa wtyku DC do złącz koncentrycznych, gdzie z definicji "sygnał" (czyli tutaj plus zasilania) idzie środkową żyłą. Wtedy minus jest na ekranie otaczającym przewód (tutaj: wtyk) więc jest na zewnętrznej tulejce. To ma też zaletę taką, że skoro dzisiejsze urządzenia mają zwykle minus ma masie i gdy ta masa jest jakoś połączona z ew. obudową metalową, to nie możesz zrobić krzywdy zasilaczowi i kablom poprzez przypadkowe zwarcie do metalu, bo na łatwo dostępnej zewnętrznej części wtyku jest minus zasilania czyli masa. Druga szkoła - chyba bardziej tradycyjna - stara się być wierna pierwotnemu pomysłowi na gniazdo DC. Gdy się przyjrzysz, zawiera ono trzy wyprowadzenia, powiedzmy A, B i C. I tak o o ile A jest trywialne, bo to środkowy pin gniazda wchodzący do otworu we wtyczce, o tyle B i C są normalnie (gdy gniazdo jest puste) ze sobą zwarte. Po wetknięciu wtyczki B i C są rozwierane a do zewnętrznej tulei wtyku dotyka tylko jeden z nich. Dzięki temu można pokusić się o zrobienie zasilania w ten sposób, że urządzenie samodzielnie pracuje z baterii wewnętrznej a po podłączeniu wtyczki z kablem automatycznie przechodzi na zasilanie zewnętrzne. A ponieważ dużo bardziej elegancko przepinać plus niż masę, na zewnętrznej okładzinie wtyczki powinien być plus, a minus rzecz jasna w środku. Dzisiejsze urządzenia mają często akumulatory, wbudowaną ładowarkę a do przełączania/zarządzania zasilaniem stosuje się tranzystory lub wyspecjalizowane scalaki więc pomysł z przełącznikiem jest trochę archaiczny, no ale jest i wciąż może działać. Wydaje mi się, że dzisiaj więcej urządzeń ma plus w środku i nie korzysta z przełącznika w gnieździe, ale sam wybierz co do Ciebie bardziej przemawia.
  21. 2 punkty
    Przyjrzałem się ostatnio płytkom rozwojowym ESP32. Mam zamiar zaprojektować urządzenie i próbuje dojść do tego jaki jest najlepszy sposób połączenia ESP32-WROOM z konwerterem UART-USB CP2102. Nie spodziewałem się, że każdy napotkany pdf/ilustracja zawiera nieco inny schemat połączeń, a do tego płytki kupione nie wiadomo skąd nieco odbiegają od tego co jest w dokumentacji. Pomyślałem, że napiszę coś o tym, może komuś się przyda. Wyszedłem od tego schematu devkita V4 ze strony espressif i dokumentacji układu CP2102 i nieco starszej dla porównania. Schemat jest od producenta więc powinien być poprawny. Co mi się rzuciło w oczy to piny: VBUS - sygnał 5V podłączenia USB, rozpoznaje już od 1V, max 5,2V, REGIN - wejście wewnętrznego regulatora 3,3V. Jeżeli na te wejście poda się 3,3V to regulator jest dezaktywowany, VDD - wyjście ww. regulatora, ~RST - wyjście open drain z zalecanym rezystorem 4,7k podciągniętym do VDD (3,3V). Dopóki nie trafiłem na ostatnią stronę dokumentacji, to nie doszedłbym dlaczego wyjście regulatora 1117 połączone jest z wyjściem wbudowanego regulatora. Jeżeli do układu dostarczane jest zasilanie z zewnętrznego stabilizatora, to podając to napięcie (3,3V) na REGIN i VDD można wyłączyć wewnętrzny regulator. Pytanie tylko dlaczego na schematach pozostał tantal 4,7uF? Pod gwiazdką wspomniano tylko rekomendację w wypadku stosowania konfiguracji wewnętrznego regulatora. To wyjaśnia się w 8 rewizji dokumentacji (jeżeli ktoś tak jak ja trafił najpierw na starszego pdfa od sparkfuna to ma pecha), gdzie kondensator został zarekomendowany także w sytuacji, gdy dostarczane jest napięcie 3,3V z osobnego źródła. Czyli tak dla ścisłości należy podłączać zawsze. Idąc dalej można przyjrzeć się podłączeniu linii USB, tu rozrzut tego co można znaleźć w sieci jest dość spory, ale wychodzę od schematu devkita V4. Na liniach sygnałowych i zasilaniu są diody ESC (tego akurat na płytce, którą mam nie dali), ale sens jest zrozumiały. Dalej pojawia się pin VBUS i tu warto jednak pobrać 8 rewizję dokumentacji, gdzie wartości graniczne progu przełączenia są nieco inne: Stąd sensowne jest, że pojawia się tu dzielnik napięcia 1:3, gdzie na wyjściu będzie powiedzmy 1,7V. Jest to zalecane szczególnie, gdy zdarzy się sytuacja, gdzie VBUS i wejście napięcia dla regulatora będą różne - niebezpieczna może być sytuacja gdzie napięcie na wejściu regulatora pojawi się dużo później od VBUS. W przypadku ze schematu sytuacja jest bezpieczna, ale bezpieczeństwo nie zaszkodzi. Ciekawe jak sprawuje się projekt tego autora: Należy się mu jednak plusik, dał 2 rezystory na liniach RX i TX. Tylko pytanie po co? Często spotykana odpowiedź to dla ochrony. Ale przed czym? Rezystory te mogą służyć separacji układów UART w sytuacji, gdy na jednej linii jest więcej nic 2 urządzenia. Wtedy te po stronie rezystorów mają niższy priorytet. Zatem na powyższym schemacie priorytet będzie miało urządzenie podłączone do wyprowadzeń dev kitu. Taki układ spotkamy na wszystkich płytkach ESP (dlaczego na tej z wyjściowego schematu nie ma, nie wiem, na tych które mam akurat są). Spotkamy też w Arduino UNO: Pozostały jeszcze 2 linie służące też do automatycznego programowania: DTR i RTS: Aby wgrać kod do ESP32 przy aktywowaniu resetu, GPIO0 musi być w stanie niskim (domyślnie jest podciągnięte do 1). Wykorzystuje się do tego sygnał DTR, który przyjmuje stan niski podczas transmisji. Aby jednak odciąć go, na płytkach rozwojowych spotkamy taki oto układ logiczny, w którym po podaniu sygnału z RTS, który przy 1 na DTR zresetuje IO0, nastąpi też odcięcie resetu (czy też pinu EN). Sygnały te są przesunięte względem siebie, stąd sekwencja będzie prawidłowa. W ESP32 proces ten jest już dobrze zautomatyzowany, lecz w poprzedniku nie było to tak dobrze znane, zwłaszcza że czasem stosowano układy, które nie miały sygnału RTS albo nie był połączony. Można sprawdzić dostępne metody resetu np. wybierając Generic ESP8266 z Arduino IDE. Też tak odchodząc od tematu, podobny zabieg można spotkać na płytce Arduino UNO, gdzie wykorzystany jest impuls przy zboczu sygnału DTR: Także taka ciekawostka i mam nadzieję, że komuś się to przyda przy projektowaniu własnego układu, lub dociekaniu jak działają płytki rozwojowe ESP. Wpis początkowo był pytaniem dotyczącym podłączenia zasilania do układu konwertera, ostatecznie posłużył za sposób ułożenia informacji i sam wyjaśnił pytania.
  22. 2 punkty
    Skończyłem AiR na innej uczelni ale zakładam, że wszędzie jest podobnie - gdyby mój pierwszy rok był zdalny to za dużo bym nie stracił ponieważ jakieś bardziej praktyczne laborki zaczęły się dopiero na drugim roku. Na pierwszym był głównie matma, matlab, liczenie sygnałów, programowanie w C i C# czyli w główniej mierze taka forma zajęć by nie przeszkadzała.
  23. 2 punkty
    Co do CAD to również się wypowiem. Inventor, Solid Works, Solid Edge to zawodowe narzędzia i moją bardzo zbliżoną funkcjonalność, zaprojektujesz w nich w zasadzie wszystko, od długopisu, po dom i samochód. Tylko trochę czasu trzeba przed nimi spędzić żeby tworzenie było łatwe i przyjemne. Jak się nigdy w CAD nie robiło to dzień będzie za mało, ale tydzień na podstawy powinien spokojnie wystarczyć. Zalet jest dużo (oprócz tego, że się w nich wszystko zrobi) jak się nauczysz któregokolwiek to będziesz umiał bez problemu przejść na inny - również na te z niższej półki. Osobiście używam Solid Edge bo złożenia przypadły mi do gustu (i w pracy go używałem - stąd w nim mam największą wprawę) ale pozostałe są bardzo podobne. Fusion 360 Można powiedzieć że zawiera wszystkie najczęściej używane funkcje z tych powyższych. I ma dodatkowo moduł CAM. Jest dosyć przyjazny dla nowego użytkownika. U nas w kole mieliśmy 4 godzinne szkolenie (https://cademia.pl/) i ludzie bardzo szybko załapali ale jak tak samemu usiąść to na spokojnie myślę że 2-3 dni i można szaleć. Prawie wszystkie z wymienionych posiadają darmową wersję edukacyjną i jakieś darmowe okresy dla start-upów ale z tych w pełni darmowych to polecam: DesignSpark Mechanical - można w pełnie komercyjnie wykorzystywać i myślę że jest najprostszy dla nowego użytkownika - 2 godzinki i spokojnie można tworzyć. Jedynym utrudnieniem jest to że nie ma możliwości tworzenia ruchomych złożeń ale przy małych projektach można bez tego się obejść. To takie małe podsumowanie CAD'ów w których miałem przyjemność robić. Co do kombajnów to jeszcze są: CATIA oraz NX ale to już są dosłownie kombajny do projektowania samolotów, samochodów itp. Miłego tworzenia, jak coś będzie trzeba to pytaj
  24. 2 punkty
    Początkowo myślałem, że przejściówka oparta jest na konkretnym, wyspecjalizowanym układzie, który obsługuje LCD. Dlatego nie rozumiałem danych pojawiających się na magistrali. Jednak okazało się, że zastosowano tam uniwersalny PCF8574, posiadający osiem wyjść podłączonych pod LCD. Teraz gdy dokładnie sprawdziłem połączenia między układem a LCD, wiem już, że wszystko działa w bardzo prosty sposób, poprzez przesyłanie komend i danych w 4-bitowym trybie.
  25. 2 punkty
    Cześć, po przeczytaniu waszych opinii i obejrzeniu testu już się zdecydowałem na "Creality 3D® Ender-3 Pro" - z tego linku: https://www.banggood.com/Creality-3D-Ender-3-Pro-DIY-3D-Printer-Kit-220x220x250mm-Printing-Size-With-Magnetic-Removable-Platform-Sticker-or-Power-Resume-Function-or-Off-line-Print-or-Patent-MK10-Extruder-or-Simple-Leveling-p-1346320.html?rmmds=search&cur_warehouse=ES Bardzo dziękuję za opinie, zarówno dotyczące drukarek jak i oprogramowania do tworzenia modeli Pozdrawiam
  26. 2 punkty
    Co do Anet A8 - może robić bardzo ładne wydruki (mam taką), ale pod warunkiem dość mocnego zmodowania. A co do 3DA... zapchanie dyszy 1mm to chyba mistrzostwo świata Zresztą to nie tylko moja opinia - zajrzyj na reprapy.pl. Osobiście wolę z tańszych sprawdzonego Colorfila czy PLA Monsticka, albo jakiegoś DD czy Fiberlogy z tych droższych.
  27. 2 punkty
    Cześć, Jaki czas temu podjąłem się stworzenia układu do sterowania trzyfazowym silnikiem do bramy przesuwnej. Pomyślałem, że do samego sterowania silnikiem (włączanie/wyłączanie/prawo/lewo) wykorzystam dwa przekaźniki trzyfazowe sterowane prądem stałym np. 20V. Temat sterowania przekaźnikami poruszyłem w wątku, za odpowiedź dziękuję. Założenia są takie (na typ etapie): Sterowanie radiowe (drugi etap projektu). Sterowanie za pomocą przycisków na układzie do celu serwisowych. Możliwość podłączenia zewnętrznych przycisków do sterowania. Możliwość podłączenia modułu wykrywania przeszkody (trzeci etap projektu). Ogólnie układ powinien wystawiać wtyczki do, których podłączone zostaną przełącznik graniczne (otwarta brama, zamknięta brama). Układ powinien wystawiać wtyczki do, których możliwe będzie podłączenie dwóch styczników trzyfazowych do sterowania silnikiem. Układ ma działać 24h i się nie zawiesić, ewentualnie powinien móc sobie poradzić z taką sytuacją np. jakiś automatyczny reset. W projekcie mam dwa źródła napięcia, jedno ok. 5V, które służy do zasilania układu oraz drugie ok. 12V, które jest przekazywane do przetwornicy Step-up, która podnosi je do takie aby duży styczni się załączył. Zastosowałem taką konstrukcję, aby mieć możliwość tej regulacji. Nie wiem jakie styczniki docelowo zostaną zastosowane. Do sterowania dużymi stycznikami wykorzystuje trzy mniejsze. Jeden, który jest odpowiedzialny za włączenie/wyłączenie prądu przetwornicy. Dwa następne są włączane w zależności od kierunku obrotu silnika. Zbudowałem prototyp na płytce ten po lewej stronie. Na dole jest pilot do sterowania radiowa, ale to jest drugi etap.. Ogólnie wygląda, że działa. No ale na pewno jest wiele do poprawienie. No bo jestem bardziej rzemieślnikiem niż elektrykiem i jest to moje hobby. W drugim załączniku wrzuciłem schemat układu. Był bym wdzięczny gdyby ktoś fachowym okiem na to zerknął i zwrócił uwagę na elementy, które można poprawić. gate-controller.pdf
  28. 2 punkty
    Spróbuj na nowo zainstalować IDE bo wyświetla błąd AVRduda. Inna sprawa może być że to klon pewnie z CH340 i musisz mieć sterowniki. Co do kodu to bibliotekę FastLED polecam dużo fajnych efektów ma.
  29. 2 punkty
    @jackg Rozwiązanie, które podałeś wygląda poprawnie, chociaż zawsze warto byłoby sprawdzić na prawdziwej płytce (to praca domowa 6.1B). Jedyne co można się przyczepić to zaokrąglenia: Dla pierwszej wersji kursu mamy jak napisałeś Fcpu = 64MHz, dzielnik 6 i poprawnie policzone Tconv = 84. Obliczając fconv mamy więc: fconv = Fcpu / div / Tconv = 64MHz / 6 / 84 = 126.98 kHz Różnica nie jest duża, ale warto zwrócić uwagę, że wynik to nie "okrągłe" 128kHz, ale trochę poniżej 127 kHz. Czasem potrzebujemy faktycznie okrągłych wartości i wtedy trzeba dopasować Fcpu do możliwości przetwornika. W przykładach z kursu ta wartość akurat nie miała znaczenia. W nowej wersji mamy Fcpu = 8MHz, dzielnik 2 i Tconv = 26, czyli: fconv = Fcpu / div / Tconv = 153.85 kHz
  30. 2 punkty
    Gotową funkcją jest właśnie sprintf. Coś w stylu: sprintf(bufor, "%02x", zmienna); Najważniejszy jest tu drugi argument (format), który informuje funkcję w jaki sposób ma wypisać wartość (wartości) - w tym przypadku oznacza to "dwie cyfry szesnastkowe z wiodącym zerem". Więcej informacji w dokumentacji, ew. wpisz w przeglądarkę "man sprintf" (funkcja z avr-libc różni się co prawda w szczegółach od standartu, ale na początek powinno wystarczyć). Ogólnie - istnieje cała rodzina funkcji *printf, różnią się sposobem traktowania parametrów i umieszczaniem wyników, ale format traktują wszystkie tak samo; jeśli poznasz jedną z nich to tak jakbyś poznał wszystkie. Aha, musiałeś dostać ostrzeżenie od kompilatora o niezgodności typu drugiego parametru - czy przypadkiem nie masz w preferencjach wyłączonego wyświetlania wszystkich komunikatów?
  31. 2 punkty
    To zależy co masz w config.txt. Ja mam: enable_uart=1 i wtedy mam /dev/ttyS0 na pinach Rx/Tx
  32. 2 punkty
    Dzień dobry , Zupełnie przypadkiem trafiłem na forbot.pl i zaciekawiła mnie szeroko rozumiana elektronika. Wcześniej nie miałem z nią do czynienia, więc postanowiłem spróbować. Jestem zupełnie początkujący. Fajnie będzie zrealizować kilka drobnych, domowych projektów, które kiełkują w głowie - najpierw Arduino a potem może z Raspberry. Idealnie byłoby jeszcze zainteresować dzieciaki. Oby starczyło czasu i zapału, by nabyć trochę umiejętności zanim podrosną. Pozdrawiam
  33. 2 punkty
    Tym wymogiem konieczności działania poza dedykowanym pokojem dość mocno komplikujesz sobie zadanie, ale OK Pozostaje więc albo enkodery + IMU (jak w większosci Micromouse) lub znaczniki (fiduciale). Do rozpatrzenia pozostaje, która z tych metod będzie wygodniejsza, aha i jeszcze jedno pytanie - to będzie jakaś trasa, którą znasz z góry i możesz narysować linię czy też Ty np. będziesz sterował robotem jak samochodem RC i on musi wiedzieć, gdzie jest? Sam pomysł dodania jakiegoś pomostu komunikacyjnego jest bardzo dobry - polecam HC-06, dość stary układ https://botland.com.pl/pl/moduly-bluetooth/6818-modul-bluetooth-hc-06-zs-040.html lub nowszy HM-10 https://botland.com.pl/pl/moduly-bluetooth/8591-modul-bluetooth-40-ble-hm-10-33v5v.html - zwróć uwagę na zasięg, 10 metrów i przyjmij bezpieczny zapas, może 8m? Trochę mało jak na pomieszczenie 10x20m, chyba, że stolik miałbyś dokładnie w centrum. Są inne metody komunikacji radiowej, ale BT jest właśnie bardzo wygodne, bo traktujesz je po sparowaniu jak zwykły port UART. Nie wiem, jak budżet, a może malina? Zero z WiFi kosztuje kilkadziesiąt PLN, a WiFi właśnie powinno zdać egzamin, jeśli np. będziesz miał ze sobą router i w jednej sieci laptopa + RPi, to powinno dać radę w takim pomieszczeniu. Ewentualnie szukanie jakiegoś BT o większym zasięgu lub modułów radiowych do Arduino, ale już w innej technologii. Zaletą, jaką widzę dla maliny jest bardzo proste połączenie - otwierasz sobie Putty na laptopie i przez SSH możesz wydać komendy i oglądać logi. Zastrzegam, ze to luźne rozważania, nigdy nie robiłem testów zasięgu dla BT i WiFi
  34. 2 punkty
    @deshipu, @wn2001 - dziękuję bardzo za odpowiedzi @wn2001: Generalnie będzie to pusty budynek z betonowymi ścianami i sufitem po byłej przechowalni. Mogę sobie pozwolić na każde modyfikacje aczkolwiek chciałbym, jak wcześniej pisałem, aby pojazd był uniwersalny tj. gdziekolwiek bym go umieścił - wykona swoje zadanie polegające na przejechaniu z punktu A do B. Jeśli chodzi o dokładność to myślę, że przy próbach wewnątrz to interesowałoby mnie 20-30 cm, natomiast gdybym miał robić to na zewnątrz - 50-100 cm. Całość systemu niekoniecznie musi znajdować się w robocie, pod warunkiem, że będzie w zasięgu robota. Dodatkowe pytanie - jaki konkretnie moduł polecilibyście do komunikacji z komputerem czy smartfonem. Podejrzewam, że będzie to technologia Bluetooth, tylko co konkretnie? Potrzebowałbym to, aby mieć wgląd do parametrów pracy robota i poszczególnych modułów np. na komputerze, czy stworzonej na tę potrzebę aplikacji na smartfonie lub do wydawania zdalnych rozkazów. Dziękuję jeszcze raz za pomoc.
  35. 2 punkty
    istnieją męskie https://botland.com.pl/pl/gniazda-szpilkowe-goldpin/1249-listwa-precyzyjna-jednorzedowa-1x40-raster-254mm-meska-sis40.html Przyznam szczerze: teoretyzuje, bo używam tylko precyzyjnych. nie sadziłem, że te standard nie wejdą Generalnie to precyzyjna męska wejdzie w każdą listwę-gniazdo, odwrotnie już widzę jest problem, właśnie sprawdziłem. Standardowa wejdzie tylko w gniazdo standard. Kupowałem kiedyś moduły to raczej kupowałem bez kołków, lutowałem swoje. Bo precyzyjne żeńskie są idealne zamiast podstawek pod układy.
  36. 2 punkty
    Jak mnie ludzie pytają o kursy z robotyki, to zawsze z czystym sumieniem mogę polecić półroczny kurs odbywający się na MIT: http://underactuated.mit.edu/index.html Masz tam wszystkie materiały, nagrania wykładów i ćwiczenia. Tylko taki kurs niestety wymaga trochę znajomości matematyki i fizyki — co najmniej na poziomie liceum ze starą maturą, z nową maturą to chyba już studia.
  37. 2 punkty
    Zapomniałem napisać o najłatwiejszym rozwiązaniu z kamerą poza pojazdem obserwującą go, dzięki za przypomnienie @wn2001 Zapomniałem napisać o najłatwiejszym rozwiązaniu z kamerą poza pojazdem obserwującą go, dzięki za przypomnienie @wn2001 OpenMV to właśnie też coś w rodzaju PixyCam, tylko troszkę bardziej zaawansowane (obsługują April Tags, które tu by były idealne) i programowane w Pythonie. Tylko marketing mają dużo gorszy od PixyCam-a i nie celują wyłącznie w Arduino. Niestety to są już drogie zabawki, głównie dlatego, że dość specjalizowane i przez to nie sprzedają się w tysiącach, jak raspberry pi z kamerą.
  38. 2 punkty
    Dużo błędów! 1.Według przyjętych norm fazy AC oznacza się L1,L2,L3 kiedyś R,S,T -to na wejściu a na wyjściu wyłącznika nadprądowego zazwyczaj oznacza się L11,L21,L31 itp.Kostka podłączeniowa w silniku będzie najprawdopodobniej mieć oznaczenia U,V,W z jednej strony a z drugiej U1,V1,W1.Ponadto przyjęto, a na styczniku jest to zaznaczone, wejście stycznika to styki 1,3,5 a wyjście odpowiednio 2,4,6.Silnik zapewne połączony w gwiazdę co na schemacie musisz zaznaczyć. 2.Silnik ma swoje oznaczenie i w bibliotece znajdziesz symbol. 3.Stycznik ma też swoje symbole dla styków głównych jak i pobocznych i też jest w bibliotece. 4.Oznacz styczniki symbolami K1,K2 a nie L1,L2 5.Brak wyłącznika nadprądowego 3-polowego chyba,że planujesz że jeśli coś padnie to ma wywalić na słupie bezpieczniki. 6.Brak wyłącznika silnikowego popularnie zwanego termikiem (3-polowy) 7 Musisz wykorzystać styki pomocnicze styczników. Zrób połączenie takie jak na poniższym rysunku. To połączenie gwarantuje niewłączenie jednocześnie dwóch styczników.Różnie może być bo elektronika bywa zawodna.K1 stycznik open, K2 stycznik close.Styki pomocnicze znajdziesz na styczniku. NC normal conect czyli jeśli stycznik nie jest włączony to te styki są ze sobą zwarte.Na obudowie stycznika powinien być rysunek co jest co.Jeśli nie ma weź omomierz i znajdź styki NC. Nie wiem dlaczego ale ostatnio nikt nie chce rysować porządnie schematów.Narzędzia ,które są dostępne nieprawdopodobnie przyśpieszają pracę.A tu bylejakość,schematy są mało czytelne.Na Twoim schemacie to doskonale widać.Ten Twój schemat to nie jest rysowany pod PCB. Chyba nie po to tworzysz schemat by później po latach głowić się co jest z czym połączone!? Jest takie stare powiedzenie rób powoli i dokładnie a premia Ci nie przepadnie.Tę premię odbierzesz wtedy gdy coś się wyeksploatuje,po latach, i trzeba będzie dochodzić co, a dobry schemat bardzo Ci pomoże.Takie schematy tworzy się w ten sposób by je czytać od lewej strony do prawej (tak przynajmniej jest w cywilizowanej Europie). Nie zapomnij o szczelnej skrzynce o klasie szczelności co najmniej IP65. Istotne jest to w jaki sposób wprowadzasz i wyprowadzasz przewody do/ze skrzynki.Tylko od dołu poprzez przepusty elektryczne.
  39. 2 punkty
    @bujo2001 najlepiej napisz własną funkjcę, bo map od Arduino przyjmuje za argumenty longi: long map(long x, long in_min, long in_max, long out_min, long out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }
  40. 2 punkty
    W kwestii computer vision mogę polecić PyImageSearch - same kursy mają bardzo drogie, ale jest też bardzo dużo bezpłatnych artykułów, a jeśli chcesz, możesz się zapisać tam na 17-dniowy newsletter, w którym dostaniesz jeden artykuł z takim mini-projektem w każdy dzień roboczy (bezpłatnie) Jeśli chodzi o data science, zacząłem oglądać takie coś: Ogólnie zerknij na ten kanał, jest bardzo dużo kursów, które nawiązują do tego, o czym mówisz. Odnośnie książek, nie wiem, ponieważ w ręku ich nie miałem ale opinie w kontekście początkującego nie są najlepsze, może na początek jakaś inna pozycja? PS Z ciekawości, @KHX wiedza potrzebna zawodowo/na studia/hobbystycznie? Tak z ciekawości pytam
  41. 2 punkty
    Do zasilania arduino jak najbardziej powinieneś użyć stabilizatora/przetwornicy tak jak to napisał ethanak. Do wykrycia napięcia na stacyjce użyj dzielnika i podłącz go do wyjścia analogowego. Niżej schemat jak miałoby to wyglądać. Zwróć uwagę, że stabilizator jest na 9V i jest podpięty do VIN a nie 5V, czemu masz wytłumaczone w poście wyżej
  42. 2 punkty
    Wy lutowałem enkoder , podłączyłem tylko rezystory do + i działa, sory
  43. 2 punkty
    Patrząc na zdjęcie mam dla kolegi pierwszą złą wiadomość. Stycznik w tym stanie jak na zdjęciu, absolutnie nie nadaje się do użytku !! ponieważ stanowi zagrożenie dla ludzi i samego układu. Absolutnie niedopuszczalne jest, aby styki robocze, nie znajdowały się osłonięte w obudowie. Ten stycznik jest niekompletny. Druga sprawa. Tak się nie buduje układu nawrotowego dla silnika 3 fazowego. Składa się on z 2 styczników, sprzężonych ze sobą blokadą elektryczną, oraz w razie gdyby ta zawiodła mechaniczną, która nie pozwala jednocześnie włączyć kierunku lewo i prawo. Czasami są układy dodatkowe.
  44. 2 punkty
    @Gieneq Strona jest kodowana SSL tylko certyfikat nie jest rejestrowany, ale nie ma niebezpieczeństwa w przeglądaniu. Teraz nie chce mi się już dłubać w html, ale natępny projekt nie ma problemu ustawię TUTAJ.
  45. 2 punkty
    @Mateusz218, OK rozumiem. A mógłbyś napisać, jakie to konkretnie pasje i jakie projekty czy mini-projekty masz już za sobą? To pytanie bardzo ogólne, odpowiedź na nie to: i tak, i nie. Prawdopodobnie będziesz umiał zaprogramować jakiś uC, "pobawisz" się trochę PLC i tak dalej, choć to wszystko zależy od konkretnej uczelni. Definicję robota spełnia zarówno prosty światłolub, jak i robot 6DoF przemysłowy z systemem wizyjnym Odnośnie wyboru mechatronika vs AiR, naprawdę nie umiem powiedzieć, ale jeszcze raz podkreślę, że wspólnym mianownikiem jest to, że niejako "nakreślają" drogę, dużo teorii i podstaw matematycznych, ale najlepiej jeśli równocześnie "zaprzyjaźnisz" się z praktyką. Nie wiem, czy masz już za sobą jakiś kurs Forbota - linki na górze, wybór jest spory. Najpierw możesz zacząć od podstaw elektroniki, aby przejść do Arduino i/lub RaspberryPi czy nawet kurs budowy hobbystycznego robota. Potem mając takie solidne podstawy, możesz zainwestować (nie będzie to tanie, ale nie jest to też kwota nieosiągalna) jakieś PLC Siemensa i próbować bawić się z nim. Pamiętaj, że programowanie to szerokie pojęcie, obejmuje zarówno "normalne" programowanie, jak i embedded, ale też programowanie to programowanie gotowych robotów przemysłowych (każdy producent ma własny język) czy "matematyczne", typu MatLab. To oczywiście tylko moja propozycja Pamiętaj też, co podkreślił @Gieneq, że studia nie determinują całej Twojej przyszłości do emerytury, i nie chodzi tylko o możliwość ich zmiany, ale ogólnie o możliwość ewentualnego przebranżowienia się. Jest wielu świetnych programistów, którzy niekoniecznie poszli na studia, na forum mamy też Kolegów, którzy świetnie radzą sobie jako automatycy-samoucy - zabrzmi to jak wielokrotnie powtarzany banał, ale podstawa to otwarty umysł i gotowość na zmiany Podsumowując - ale to tylko moja sugestia, Ty będziesz wiedział najlepiej - studia mechatronika vs AiR musisz sam wybrać na podstawie opinii Kolegów, a jednocześnie rozwijać się bardziej "praktycznie" we własnym zakresie, chociażby przy pomocy kursów Forbota, a potem książek Heliona PS Wybacz, że zwracam uwagę, ale "kółko" i "rzeczy" - mam nadzieję, że się nie obrazisz Pozdrawiam
  46. 2 punkty
    @Mateusz218 Nie ma to aż tak wielkiego znaczenia. Pamiętam jak na dniach otwartych uczelni rozmawiałem ze studentami i pytałem co tam robią, czy na zajęciach robią jakieś konstrukcje - wtedy wybierałem się na PG i myślałem, że uda mi się tam ulepszyć projekty jakie robiłem w szkole średniej... no właśnie, myślałem AiR to przede wszystkim matematyka i teoria sterowania, w pewnym momencie pojawiają się zajęcia praktyczne i uwaga nawet budowa robota we własnym zakresie (choć to zależy od uczelni). Niestety studia nie do tego zmierzają i nie napalałbym się na robienie mnóstwa ciekawych rzeczy, choć przedmioty kierunkowe jak teoria sterowania są ciekawe i przydatne (gdzie nauczana teoria podobno ma z 60 lat i tak mniej od wieku np. kwaternionów), a i da się to stosować - patrz serwo, dron, sterowanie napędem, PID itp... Tak jak kolega @wn2001 pisał, istotą w późniejszym poszukiwaniu pracy nie będzie papier, bo rocznie na PG w Gdańsku pojawia się 100 papierów, którymi można tapetować ścianę... istota to własny wkład, czy masz pasję, robisz coś w domu/kole, konkursy, próbujesz zrozumieć to czego się uczysz i zastosować w praktyce. Jeżeli masz coś takiego, to składając podanie o praktyki do branżowych firm będziesz miał szanse się dostać, bo możesz się pochwalić czymś więcej niż zaliczoną "laborką z drutów" Na własnym przykładzie napisze Ci jak to może działać. Moja pierwsza praca po szkole średniej - magazyn w firmie przemysłowej. Rozmawiałem z moim przełożonym, że robię takie różne rzeczy pokazałem zdjęcia i ten wpadł na pomysł, że weźmiemy kierownika zakładu, właściciela i pokażemy na żywo. W ten sposób bez prośby dostałem pracę i z magazyniera awansowałem w jeden dzień na konstruktora
  47. 2 punkty
    Odpowiadając na pytanie z kursu z przekaźników - Czy słyszysz charakterystyczny dźwięk przełączania? Tak, aż podskoczyłem na krześle, bo myślałem, że coś się przepaliło i zaraz się sfajczy Ważne, że działa
  48. 2 punkty
    Możesz oszacować górną granicę z ilości pobieranego prądu. Policz ile watów i porównaj z żarówkami LED-owymi. Nie. To nie laser. No chyba, że dorobisz do tego skomplikowaną optykę skupiającą światło na kabinie pilota. Prawdopodobnie. Długotrwałe wpatrywanie się prosto w świecące diody raczej zdrowe nie będzie.
  49. 2 punkty
    Artykuł został przeniesiony na bloga, aby więcej osób mogło skorzystać z zawartej tu wiedzy
  50. 2 punkty
    W pierwszej części udało się uruchomić prosty przykład odtwarzający pojedynczy ton. Teraz wypadałoby nieco wyjaśnić, jak działał poprzedni program, a następnie trochę go udoskonalić. Układ CS43L22 Za generowanie dźwięku na płytce STM32F411-Discovery odpowiada wspominany wcześniej układ CS43L22. Wszystkie informacje o jego działaniu znajdziemy w dokumentacji - ma ona raptem 66 stron, co jest całkiem niewielką liczbą jak na układy dźwiękowe (większość płytek serii Discovery używa o wiele bardziej rozbudowanego układu WM8994, do niego dokumentacja ma już 360 stron). Zachęcam więc do przeczytania dokumentacji, postaram się tutaj przygotować maksymalnie skrócony opis funkcji używanych w programie z poprzedniej części artykułu. Interfejs I2C Jak wspominałem wcześniej do konfiguracji CS43L22 używany jest znany nam z kursu F4 interfejs I2C. Adres układu znajdziemy w dokumentacji płytki discovery i wynosi on 0x94. Sama komunikacja przebiega dość typowo - chcąc zapisać ustawienia, wysyłamy najpierw adres układu, następnie numer rejestru, a na koniec wartość. Adres rejestru ma postać pojedynczego bajtu, podobnie przechowywana w nim wartość. W dokumentacji znajdziemy elegancki diagram komunikacji z układem: Odczyt jest nieco bardziej skomplikowany, ale w bibliotece HAL mamy gotowe funkcje realizujące dokładnie takie sposób zapisu i odczytu danych: HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout) HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout) Parametry tych funkcji to: hi2c - adres struktury opisującej interfejs I2C utworzonej przez CubeIDE DevAddress - adres układu CS22L43, czyli 0x94 MemAddress - numer rejestru do którego zapisujemy, albo z którego odczytujemy MemAddSize - wielkość adresu, zawsze 1 (bajt) pData - dane do zapisania, albo adres bufora do odczytu Size - liczba zapisywanych lub odczytywanych bajtów (też 1 bajt) Timeout - to chyba wiadomo Jest jeszcze oczywiście zwracana wartość, którą powinniśmy testować i odpowiednio reagować jeśli pojawi się błąd. Dla poprawienia czytelności pomijam sprawdzanie błędów, ale zachęcam do ich uwzględniania we własnych programach. Ponieważ większość parametrów jest zawsze taka sama, napisałem funkcję cs43l22_write, która przyjmuje tylko zmieniające się wartości, czyli numer rejestru i zapisywaną wartość: static void cs43l22_write(uint8_t reg, uint8_t value) { HAL_I2C_Mem_Write(&hi2c1, AUDIO_I2C_ADDR, reg, 1, &value, sizeof(value), HAL_MAX_DELAY); } Moglibyśmy oczywiście zdefiniować podobną funkcję do odczytu: static uint8_t cs43l22_read(uint8_t reg) { uint8_t value = 0; HAL_I2C_Mem_Read(&hi2c1, AUDIO_I2C_ADDR, reg, 1, &value, sizeof(value), HAL_MAX_DELAY); return value; } Rejestry układu CS43L22 Skoro wiemy jak zapisywać i odczytywać dane z rejestrów CS43L22 to teraz trudniejsza część, czyli same rejestry. Ich listę znajdziemy w dokumentacji układu: W pierwszej chwili ich liczba może nieco odstraszać, ale jak wspomniałem wcześniej - to i tak dość prosty w obsłudze układ. I jak wcześniej widzieliśmy nie musimy wszystkich jego funkcji od razu używać. Na początek możemy spróbować odczytać wartość z rejestru o numerze 0x01, który ma nazwę ID i jak łatwo się domyślić zwraca identyfikator układu: Piszemy bardzo krótki program: uint8_t id = cs43l22_read(0x01); Możemy sprawdzić odczytaną wartość używając debuggera: U mnie identyfikator wynosi 0xe3, czyli jest to wersja B1 układu. Konfiguracja CS43L22 Opis wszystkich rejestrów znajdziemy w dokumentacji, ja postaram się teraz krótko opisać minimalną wersję, która była używana w poprzedniej części, czyli: cs43l22_write(0x04, 0xaf); cs43l22_write(0x06, 0x07); cs43l22_write(0x02, 0x9e); Rejestr 0x04 - Power Control 2 Zapis wartości 0xaf do tego rejestru włącza lewy oraz prawy kanał wyjścia słuchawkowego. Do bitów PDN_HPx[1:0] zapisywana jest wartość 10, czyli wybierana opcja "Headphone channel is always ON.", natomiast wyjście głośniczka (speaker) jest wyłączane: PDN_SPKx[1:0] ustawione na 11 odpowiada opcji "Speaker channel is always OFF". Rejestr 0x06 - Interface Control 1 Tutaj ustawiamy kilka rzeczy jednocześnie, najważniejsze to: Master/Slave - nasz układ będzie działał jako slave, to mikrokontroler generuje wszystkie sygnały sterujące. Zerujemy więc bit M/S. DAC Interface Format - okazuje się że CS43L22 obsługuje nie tylko interfejs I2S, ale też podobne do niego interfejsy. Każda opcja powinna działać, ale musimy wybrać to samo co w poprzedniej części konfigurując CubeMX. Do bitów DACIF[1:0] zapisujemy więc wartość 01. Audio Word Length - w trybie I2S ten parametr nie jest istotny, ale dla porządku wybierzemy 16-bitową wielkość danych, czyli do AWL[1:0] zapisujemy 11. Jak przeliczymy wybrane opcje na wartość heksadecymalną to otrzymamy używaną w programie, czyli 0x07. Rejestr 0x02 - Power Control 1 Ten rejestr jest bardzo prosty, chociaż nieco zaskakujący. Zapisanie do niego wartości 0x01 lub 0xaf usypia układ CS43L22, a 0xae budzi. Zaskakujące jest dlaczego nie użyto po prostu wartości 0 / 1, ale jak widać 0xae było z jakiegoś powodu wygodniejsze. Na koniec jeszcze dwa rejestry, których nie używaliśmy, ale warto o nich wspomnieć: Rejestry 0x20 i 0x21 - Master Volume Control Tutaj chyba wszystko jest oczywiste, zapisując do tych rejestrów możemy regulować głośność dźwięku. To może być dość przydatna funkcja w docelowym programie. Pisząc "prawdziwy" program powinniśmy oczywiście zdefiniować odpowiednie stałe i korzystać z nich zamiast z magicznych liczb. Ale skoro przykłady miały być krótkie, to są i mocno niedoskonałe - za co z góry przepraszam. Interfejs I2S Teraz wreszcie coś nowego, bo o I2S jeszcze nie pisaliśmy. Krótki opis znajdziemy na wikipedii: https://pl.wikipedia.org/wiki/I²S Jak widzimy sam I2S używa trzech linii sygnałowych, ale często dodawana jest jeszcze jedna - mamy więc razem cztery sygnały. Używam nazw ze schematu płytki: I2S3_MCK - zegar używany wewnętrznie do taktowania CS43L22 I2S3_SCK - zegar dla transmisji danych I2S3_SD - linia danych I2S3_WS - aktywny kanał (L/R) Przedrostek I2S3_ wskazuje na podłączenie CS43L22 do interfejsu I2S3 mikrokontrolera, pisząc ogólnie o I2S będę go pomijać, zostaną więc linie: MCK, SCK, SD, WS. Omówienie interfejsu I2S najłatwiej zacząć od końca, czyli linii WS. Stan niski oznacza transfer danych dla lewego kanału, a wysoki dla prawego. Prawda że proste. Przy okazji - jaka powinna być częstotliwość sygnału na tej linii? Łatwo odgadnąć, że powinna odpowiadać częstotliwości samplowania, czyli fs. To bardzo ważna wartość, bo wszystkie inne są obliczane na jej podstawie. W poprzedniej części wybraliśmy częstotliwość 22 kHz (pewnie oznacza ona 22050 Hz), teraz możemy podłączyć analizator logiczny i sprawdzić, czy faktycznie nasz układ działa jak tego oczekujemy: Kolejna jest linia SD, czyli linia danych. W odróżnieniu od SPI interfejs I2S działa raczej jednokierunkowo - do wyjścia słuchawkowego będziemy tylko wysyłać dane, a gdybyśmy mieli podłączony np. mikrofon, dane byłyby tylko odczytywane. Wysyłamy 16 bitów na każdą próbkę dźwięku, a wartość jest interpretowana jako liczba ze znakiem. Jak pamiętamy w programie używaliśmy dlatego typu int16_t. Żeby zobaczyć jak nasze dane wyglądają w działaniu, możemy analizatorem zmierzyć napięcie na wyjściu słuchawkowym. Jak widzimy poniżej, wysyłając 0 dostajemy na wyjściu około 0V, zapisanie -32000 daje 1V, a 32000 około -1V. Co więcej przebieg wygląda jak sinusoida, czyli tak jak chcieliśmy. Linia SCK jest używana jako zegar dla linii danych. Jak pamiętamy częstotliwość fs=22kHz, każda próbka ma 16 bitów, ale musimy przesłać dane dla lewego i prawego kanału - więc zegar danych będzie miał częstotliwość: fs * 32 = 704 kHz. Sprawdzamy, czy wszystko się zgadza: Na koniec linia MCK. Nie jest ona używana bezpośrednio do transmisji danych i nie jest częścią standardu I2S. Jednak układ CS43L22 wymaga sygnału taktującego - i taką właśnie funkcję pełni MCK. Częstotliwość powinna wynosić 256 * fs, czyli 5,632 MHz. Powrót do CubeMX To wszystko skonfigurowaliśmy w poprzedniej części artykułu używając CubeMX. Teraz możemy wrócić do końcowych ustawień i wyjaśnić co oznaczały: Tryb "Half-Duplex Master" pozwala tylko wysyłać dane, w końcu i tak nic ciekawego ze słuchawek nie odczytamy. Zaznaczenie "Master Clock Output" sprawia, że generowany jest sygnał MCK. "Selected Audio Frequency" to częstotliwość samplowania fs, a wybraliśmy połowę jakości CD, czyli 22050 Hz. Standard komunikacji to "I2S Philips", wybrana wartość musi pasować do tego co wpisaliśmy do rejestru 0x06 układu CS43L22. Jeszcze dwa słowa o błędzie i taktowaniu mikrokontrolera: Żródło taktowania modułu I2S wybieramy multiplekserem "I2S source Mux" (widoczny po prawej stronie na dole). Wybraliśmy zegar PLLI2SCLK, który pracuje z częstotliwością 112,8 MHz. Jeśli podzielimy tą wartość przez oczekiwaną dla MCK, czyli 5,66 dostajemy wynik bliski 20. To "bliski" oznacza właśnie błąd naszej częstotliwości - gdyby wyszło dokładnie 20 mielibyśmy idealnie fs=22050, a tak mamy 22031 Hz, czyli chyba całkiem nieźle. Podsumowanie W tej części planowałem napisać nieco więcej o rozbudowie programu z poprzedniej części, niestety nawet ogólne omówienie szczegółów technicznych wyszło nieco dłuższe niż planowałem. Powstanie więc kolejna część, a w niej będą jak mam nadzieję ciekawsze rzeczy i dużo mniej rejestrów.
Tablica liderów jest ustawiona na Warszawa/GMT+02:00
×
×
  • Utwórz nowe...