Skocz do zawartości

Tablica liderów


Popularna zawartość

Pokazuje zawartość z najwyższą reputacją od 10.04.2019 we wszystkich miejscach

  1. 11 punktów
    Większość osób myśląc o cyfrowej telekomunikacji, myśli o współczesne mikroelektronice: smartfonach, komputerach i Internecie. Nie każdy zdaje sobie sprawę z tego, że idea przesylania informacji zakodowanej w ciągach zer i jedynek jest dużo, dużo starsza. Pierwszym urządzeniem tego rodzaju był telegraf skonstruowany przez Emille'a Baudot w latach siedemdziesiątych XIX wieku. Urządzenie po stronie nadajnika posiadało klawiaturę złożoną z pięciu przycisków, które operator musiał wciskać w różnych kombinacjach. Urządzenie wysyłało na linię ciąg impulsów, odpowiadających wciśniętej kombinacji. Odbiornik interpretował ten sygnał drukując na papierowej taśmie odpowiednią literę lub cyfrę, w jej naturalnej formie. Na początku XX wieku idea to została udoskonalona. Nadajnik został wyposażony w klawiaturę podobną do tych stosowanych w maszynach do pisania. Tak narodził się dalekopis. Transmisja danych pomiędzy tymi urządzeniami przypominała standardowy interfejs szeregowy. Z tą różnicą, że z przeciwieństwie do TTL UART-a czy RS323 poszczególne stany logiczne nie były kodowane przez wartości napięć, ale przez fakt przepływu (bądź nie) prądu w obwodzie. Normalnie przez linię płynął prąd o ustalonej wartości (zazwyczaj 60, 40 lub 20 mA). To był stan domyślny. Rozpoczęcie nadawania kolejnego znaku wymagało nadania bitu startu, czyli chwilowego przerwania obwodu. Potem nadajnik oczekiwał na pięć bitów z kodem znaku w alfabecie Baudot (zwanym także międzynarodowym alfabetem telegraficznym). Na końcu pojawiały się bity stopu w trakcie których odebrany znak był drukowany na papierze. Ktoś zapewne zauważył już, że używając pięciu bitów można było zakodować maksymalnie 32 znaki - zdecydowanie za mało, aby pomieścić wszystkie litery alfabetu, cyfry i znaki interpunkcyjne. To prawda. Stosowano pewną sztuczkę - dwie kombinacje bitów były zarezerwowane do przełączana pomiędzy dwoma rejestrami zawierającymi litery oraz cyfry i inne znaki. Ne stosowano także rozróżnienia na male i duże litery. Dalekopis chociaż w pełni cyfrowy, był urządzeniem elektromechanicznym, radzącym sobie bez pojedynczego tranzystora (chociaż oczywiście w latach osiemdziesiątych i dziewięćdziesiątych produkowano nowoczesne, elektroniczne wersje). Dalekopisy były powszechnie używane do przesyłania wiadomości przez wojsko i państwowe służby. Poczta wykorzystywała je do transmisji telegramów. Stosowano je także w roli terminali komputerowych, przed pojawieniem się monitorów CRT. Ślad tej zaszłości historycznej zachował się w nomenklaturze stosowanej w systemach uniksowych, gdzie terminal jest oznaczany skrótem TTY - od angielskiego słowa "teletype", czyli właśnie dalekopis. Przepraszam za ten przydługi wstęp, nie byłem jednak pewien, czy wszyscy będą jeszcze kojarzyć o jakie urządzenie chodzi... Przechodząc do sedna sprawy. Na co dzień pracuję w krakowskim Muzeum Inżynierii Miejskiej. Jakiś czas temu został nam przekazany dalekopis T100, wyprodukowany w latach siedemdziesiątych w Czechoslowacji, na licencji Siemensa. Ponieważ posiadaliśmy już taki eksponat, zostałem poproszony o sprawdzenie możliwości uruchomienia go i wykorzystywania w roli interaktywnej instalacji, zamiast "martwego" eksponatu ukrytego w muzealnej gablocie. Tak rozpoczęły się moje eksperymenty. Najpierw skonstruowałem prosty interfejs USB, oparty na starym mikrokontrolerze AT89C2051 i układzie FTDI. Do generowania pętli prądowej 40 mA używałem zestawu kilku baterii 9V oraz rezystorów o dużej mocy. Komunikacja z dalekopisem ruszyła bez problemu - pojawiła się jednak inna trudność. Okazało się, że uszkodzony jest moduł wzywaka - urządzenia odpowiedzialnego m.in. za zdalne włączanie silnika dalekopisu przy połączeniu przychodzącym, sygnalizowanym odwróceniem kierunku przepływu prądu w linii. Naprawa tego modułu okazała się bardziej skomplikowana niż początkowo sądziłem, ostatecznie postanowiłem więc wymontować wadliwą część i sterować silnikiem za pomocą przekaźnika, zamontowanego w moim interfejsie. Finalna wersja interfejsu zawiera mikrokontroler PIC32MX270F256B oraz moduł GSM SIM800L. Wykorzystałem także 2MB pamięć SPI flash, do wykonywania elektronicznej kopii przychodzących wiadomości. W osobnej obudowie znajduje się generator pętli prądowej, złożony z zasilacza transformatorowego oraz zestawu kondensatorów dużej mocy. Całość można obecnie oglądać na wystawie "Uwaga! Nieprzyjaciel podsłuchuje." w Muzeum Inżynierii Miejskiej w Krakowie. Po wysłaniu SMS-a na podany numer można oglądać dalekopis podczas pracy.
  2. 9 punktów
    Już na samym początku prosiłem o to, aby darować sobie zgryźliwości. Jeszcze raz ponawiam moją prośbę i obiecuję od teraz usuwać wszelkie posty, które będą miały nawet jedno złośliwe zdanie. Niezależnie od tego czy autorem będzie nowa osoba, czy użytkownik, który ma na koncie 100 tysięcy postów - każdego obowiązują takie same zasady. To, że opisywany projekt jest częściowo reklamą tego projektu jest chyba oczywiste - wystarczy poświęcić kilka sekund i obejrzeć filmy, które są w pierwszym poście. Nie przypominam sobie, aby gdzieś był zakaz publikacji tego typu opisów. Nie jest to produkcja masowa, nie widzę więc powodu, aby od razu "rzucać" się na autora i krytykować za wszystko co możliwe. Czym taki projekt różni się od innych DIY, w których autorzy nie podają dokładnej instrukcji budowy i nie dzielą się projektami? Moim zdaniem niczym. Ten projekt wypada nawet lepiej, bo jak ktoś będzie bardzo chciał to sobie chociaż może kupić takie urządzenie. Prawie nikt nie zadał konkretnych pytań technicznych, pojawiały się tylko różne uwagi "byle udowodnić, że projekt jest zły". Autor próbował Wam wszystko wyjaśnić, wstawiał zdjęcia i filmy, a dla Was nadal jest źle. Rozumiem, że komuś projekt może się nie podobać, wystarczy raz wyrazić swoje zdanie lub zignorować temat. Jak widać po głosach czytelników, raportach oraz otrzymanych przeze mnie wiadomościach jest sporo osób, którym ten projekt się zwyczajnie podoba. Proszę więc wszystkich krytyków, aby wzięli pod uwagę, że nie każdy musi się z Wami zgadzać, niektórym taki projekt się podoba i tyle. Nie musicie na siłę wszystkich przekonywać, że jest źle i atakować ciągle autora. Projekt ten zaakceptowałem świadomie i widziałem, że jest to częściowo reklama. Uznałem jednak, że projekt jest ciekawy, nie było u nas opisu takiej maszynki. Liczyłem więc, że takie DIY może być dla wielu osób ciekawą inspiracją. Autor nie jest pierwszą osobą na świecie, która zrobiła takie urządzenie. W Internecie jest sporo maszynek do ręcznej produkcji filamentu. Jak ktoś będzie chciał to wykona urządzenie samodzielnie. To czy jest sens sprzedawać taka maszynkę to już zweryfikuje rynek - jak będą klienci to będzie sens, a jak nie będzie zainteresowanych to trudno, przynajmniej ktoś próbował. Dziwie się osobom, które poświęcają tyle czasu na pisanie krytyki i szukanie zaczepek. Ciężko mi uwierzyć, że liczą one na merytoryczną dyskusje. Nie macie ciekawszych zajęć od krytykowania projektów? Jeśli macie gorszy dzień lub nadmiar energii to proponuje skupić się na chwaleniu DIY, które według Was są ciekawe. Sprawdźcie listę opisanych projektów, znajdźcie coś ciekawego i napiszcie autorowi, że robi dobrą robotę. Nie widzę wielu postów, które chwaliłyby ciekawe DIY - tak ciężko napisać komuś dobre słowo? Jeszcze raz apeluję o ograniczenia zgryźliwość, a wszystkim będzie przyjemniej czytać posty i więcej osób będzie chętnie brało udział w dyskusjach. Zachęcam również osoby, które nie zgadzają się z takimi złośliwościami, aby wyrażały to jakoś publicznie (np. przez posty lub reakcje). Oczywiście doceniam raporty i PW kierowane do mnie, ale może jednak byłoby dobrze, aby autorzy takich wiadomości widzieli, że to "nie są tylko moje wymysły", a jest wiele osób, którym taki ton dyskusji zwyczajnie nie odpowiada.
  3. 4 punkty
    Artykuł przeznaczony do wszystkich zapaleńców druku 3D. Można nie kupować dość drogi filament do swojej drukarki 3D, a produkować w domu własny filament z zużytych butelek PET od napojów. Przy tym nieważne, jeżeli butelka jest pognieciona, ona również się nadaje do domowej produkcji filamentu. Filament z butelek ma sporo zalet w porównaniu z firmowym filamentem kupowanym – ABS albo PLA. Przede wszystkim, że produkowany filament nic nie kosztuje, jest po prostu darmowy Produkowany pręt filamentu Jest bardzo sztywny i absolutnie nie łamliwy, wytrzymuje sporo ostrych przegięć. Filament własnej produkcji jest sporo mocniejszy i twardszy, jak na rozciąganie tak i o wiele bardziej odporny na uderzenie. Absolutnie nie pochłania wody, czyli nie trzeba go ani suszyć, ani chronić w zamkniętym zabezpieczonym od nawilżania się opakowaniu. Praktycznie nie skurcze się przy ochłodzeniu w trakcie druku. Nie wymaga chłodzenia drukowanej warstwy. Nie wymaga stołu podgrzewanego. Dla przyczepności wystarczy miejsce na stole posmarować cienką warstwą kleju w sztyfcie na przykład typu „Glue Stick” Wydrukowane detal można obklejać od razu po skończeniu wydruku. Taki filament jest bardzo odporny na działanie rozpuszczalników i środków chemicznych. Jak widać filament produkcji własnej ma sporo zalet w porównaniu z filamentami kupowanymi, a najważniejsze – że jest darmowy. Niżej przedstawiono zdjęcia maszynki do produkcji filamentu: Do domowej produkcji filamentu wykorzystywane zużyte butelki od napojów. Ale butelki muszą być czyste, resztki kleju do nalepki powinni być usuwane. Technologia produkcji jest bardzo prosta i składa się z trzech następujących operacji: Poprawa zgniecionych butelek i butelek z ryflowaną powierzchnią tak, żeby ścianka boczna butelki była gładka. Nacinanie butelek na paski o określonej szerokości, od 5mm do 12mm w zależności od grubości ścianki butelki. Produkcja pręta filamentu z nacinanych pasków na specjalnej maszynce z nawijaniem na bębenek odbiorczy. Na tych wideo można obejrzeć prace maszynki i przyrządu do nacinania pasków z butelek: Zębatka drukowanie:
  4. 4 punkty
    Może coś takiego: http://wiki.seeedstudio.com/ReSpeaker_4_Mic_Array_for_Raspberry_Pi/
  5. 3 punkty
    To mój pierwszy post na tym forum ale od razu chciałbym przedstawić zbudowanego przeze mnie robota. Mimo że to pierwszy post to odwiedzałem to i inne fora wielokrotnie w poszukiwaniu przydatnych informacji i wykorzystując jedynie „magiczny” guzik szukaj udało mi się rozwiązać większość problemów z budową. To dla tych którzy nie chcą i nie lubią szukać… Wracając jednak do robota to został on nazwany X-walker i jest czteronożnym robotem kroczącym o symetrycznej konstrukcji. Został zaprojektowany jako robot którego zadaniem będzie przejście po nieznanym terenie przy jednoczesnym zachowaniu równowagi i odpowiednim położeniu korpusu. Prace nad robotem aktualnie się zakończyły, aczkolwiek temat jest obszerny i wiele można jeszcze ulepszyć albo dodać, więc w przyszłości robot zostanie poddany kolejnym modyfikacją. 1.Budowa mechaniczna Konstrukcja mechaniczna robota została zaprojektowana przy użyciu programu Autodesk Inventor 2010. Program ten umożliwił stworzenie wirtualnego modelu robota oraz przetestowanie zależności mechanicznych występujących pomiędzy jego elementami. Dzięki temu wybrano optymalne wymiary poszczególnych części. Poniżej na rysunku 1 zaprezentowano projekt robota z programu Inventor (bez elektroniki oraz okablowania): Na materiał konstrukcyjny wybrano aluminium jako, iż posiada odpowiednią wytrzymałość, jest przy tym lekkie i nadaje się do obróbki za pomocą prostych narzędzi. Zaprojektowane elementy wycięto przy pomocy lasera z 1.5mm i 2mm arkuszy aluminium. Poniżej przedstawiono wycięte elementy: Dalszy etap prac polegał na odpowiednim ukształtowaniu niektórych części. Proces ten odbywał się ręcznie przy udziale odpowiednich kopyt wykonanych z drewna bukowego i stali. Następnie dokonano montażu elementów przy pomocy różnego rodzaju łączników śrubowych o średnicach od 2 do 4mm. Dodano także inne elementy, takie jak tulejki dystansowe czy części składowe stóp ze zintegrowanymi czujnikami stykowymi. Na kolejnym rysunku przedstawiono złożonego robota: Poniżej przedstawiono szczegóły budowy stopy: Napęd robota stanowi 12 serwomechanizmów Power HD 1201 o parametrach przedstawionych poniżej (dane producenta): - moment 12.2/13.2 kg/cm - prędkość 0.16/0.14 sec/60° - napięcia 4.8/6.0 V - waga 60 g - wymiary 40.7 x 20.5 x 39.5 mm Niestety niektóre dane obiegają od wartości rzeczywistych, szczególnie wartość momentu, ale co ciekawe nawet wymiary nie są zgodne z rzeczywistymi. Podsumowując, konstrukcja mechaniczna robota posiada kilka charakterystycznych cech: - zwarta i solidna konstrukcja - podwójne łożyskowanie wszystkich stawów - zintegrowane czujniki stykowe w stopach - całkowita rozbieralność konstrukcji – tylko połączenia śrubowe - możliwie najmniejsze wymiary przy zastosowaniu danych elementów wyposażenia robota - liczne otwory odciążające konstrukcję 2. Elektronika Część elektroniczna robota posiada budowę modułową. Każdy moduł zawiera mikrokontroler AVR i pełni odpowiednie dla siebie funkcje. Każdy posiada także odpowiednio multipleksowane wyprowadzenie ISP, co pozwala programować moduły podczas ich działania. Moduły stanowią odrębne jednostki elektroniczne i można ich używać oddzielnie nie koniecznie w robocie X-walker. Do komunikacji między sobą wykorzystują SPI. Takie rozwiązanie nie ogranicza w dalszej rozbudowie robota i pozwala stale dodawać nowe elementy i funkcje. Poniżej scharakteryzowano poszczególne moduły. 2.1. Moduł sterujący „BRAIN” Jest głównym modułem w robocie, zawiaduje działaniem pozostałych. Został oparty na mikrokontrolerze ATmega 16A z kwarcem 16MHz. Posiada wyprowadzone piny z magistralą I2C i SPI, wyświetlacz LCD oraz 2 dodatkowe przyciski na potrzeby przyszłych funkcji. Poniżej krótka charakterystyka: - arbiter magistrali SPI - komunikacja z akcelerometrem i żyroskopem poprzez I2C - Realizacja filtru Kalmana w celu wyznaczenia aktualnego pochylenia robota - obsługa wyświetlacza LCD - nadzorowanie pracy innych modułów - formowanie odpowiednich ramek danych do komunikacji z PC 2.2. Moduły sterowników serw Robot posiada dwa takie same moduły sterowników serw, każdy obsługuje 6 serwomechanizmów, czyli 2 nogi robota. Moduły także oparte są o mikrokontroler ATmega 16A na kwarcu 16MHz. Najważniejszymi funkcjami tych modułów jest oczywiście generowanie odpowiedniego sygnału PWM dla serwomechanizmów, ale także obsługa czujników stykowych i pomiar napięć na potencjometrach serw (dodatkowy przewód wychodzący z każdego serwa). Ta ostatnia cecha służy sprawdzeniu czy serwomechanizm jest rzeczywiście wychylony od taką wartość jaką wyznacza sterowanie, co jest przydatne w pracy przy dużym obciążeniu. Należy dodać, że sygnały analogowe z potencjometrów przed dotarciem do tych modułów przechodzą przez filtr analogowy. 2.3 Moduł nadawczo odbiorczy „BT_RX_TX” Moduł ten jest odpowiedzialny za obsługę dwóch modułów bluetooth, jednego wysyłającego a drugiego obierającego dane z komputera. Dane przychodzące są odpowiednio filtrowane. W module zastosowano mikrokontroler ATmega 8A oraz kwarc 14.745MHz odpowiedni do transmisji szeregowej. Standardowo w module instaluje się dwa moduły bluetooth BTM-222. Poniżej zdjęcie przedstawiające moduł zamontowany w robocie: 2.4. Moduł zasilający "POWER" Robot jest zasilany dwoma zestawami akumulatorów. Pierwszy większy zestaw (2x LiPo 1850 mAh 7.4V) zasila serwomechanizmy, drugi mniejszy (LiPo 850 mAh 7.4V) zasila układy elektroniczne. Moduł zasilający monitoruje wartości napięć poszczególnych akumulatorów a także mierzy prąd jaki zużywają napędy robota. Zajmuje się także stabilizacją napięć – 5V dla elektroniki i poprzez stabilizator impulsowy (niewidoczny na zdjęciach) 5.3V lub 6V dla serwomechanizmów. Moduł zasilający posiada budowany układ dźwiękowy sygnalizujący niski stan napięcia w akumulatorach. Zajmuje się także monitorowaniem temperatury w istotnych miejscach robota za pomocą magistrali 1-wire oraz czujników DS18b20. Te miejsca to: stabilizator impulsowy dla serw, stabilizator liniowy dla elektroniki, temperatura w serwomechanizmie „udowym”, temperatura otoczenia. Zdjęcie użytego zasilacza impulsowego oraz zdjęcie robota po zamontowaniu modułu "POWER". Widoczny radiator stabilizatora liniowego elektroniki: 2.5 Pozostałe moduły Moduł żyroskopu Zawiera żyroskop cyfrowy L3G4200D oraz kilka elementów elektronicznych niezbędnych do jego działania . Na zdjęciu widać poprawiony błąd na PCB. Praktyczniej było to zrobić w ten sposób niż zmieniać całą płytkę bo wiązałoby się to z ponownym lutowaniem obudowy LGA żyroskopu. Moduł akcelerometru Zawiera akcelerometr (i magnetometr) cyfrowy LSM303DLH oraz tak jak moduł żyroskopu kilka elementów elektronicznych niezbędnych do jego działania. IMU - interial measurmet unit Moduł IMU czyli tzw. interial measurmet unit złożony i zamontowany w całości wraz z konwerterami napięć dla sygnałów magistrali I2C Moduł filtrów analogowych RC (2 sztuki) Filtruje napięcia na potencjometrach serw aby można było je prawidłowo zmierzyć poprzez wbudowane w mikrokontrolerach przetworniki ADC 3. Sterowanie X-walker jest sterowany za pomocą komputera PC i odpowiedniej aplikacji. Zastosowanie dwóch modułów Bluetooth pozwoliło na szybkie przekazywanie danych w obu kierunkach i uzyskanie kroku sterowania na poziomie 40ms. Czas ten nie jest niestety gwarantowany z racji zastosowania protokołu Bluetooth, aczkolwiek robot porusza się płynnie i reaguje błyskawicznie na zmiany sterowania. W jednym cyklu sterowania od robota odbierane są odpowiednie dane, wyliczane jest sterowanie i dane ponownie wysyłane są do robota. Na ekranie komputera możemy obserwować dane generowane przez wszystkie moduły robota jak również aktualne położenie środka ciężkości robota względem jego stóp z naniesionym wielokątem podparcia (obraz poniżej) Po wybraniu odpowiednich ustawień chodu robota oraz prędkości poruszania się następuję połączenie z robotem. O tej pory możemy nim sterować: chód przód, tył, na boki oraz obroty w lewo prawo. Wszystkie inne „akcje” związane z chodzeniem po trudnym terenie robot podejmuje sam. Na filmach poniżej można więc zaobserwować jak przekłada nogę w celu znalezienia odpowiedniego miejsca do położenia jej bądź też ratuje się przed wywrotką po obsunięciu się którejś z nóg. Innych elementów prawdopodobnie nie widać na filmach a mianowicie robot dba cały czas o odpowiednie usytuowanie środka ciężkości tym samym zapewniając sobie stabilność. Każdorazowo dobiera odpowiednie przemieszczenia nóg wzdłuż wszystkich osi oraz przemieszczenie korpusu. Korpus robota jest pozycjonowany automatycznie za sprawa sterowników PID które wyliczają sterowanie na podstawie danych z żyroskopu i akcelerometru przetworzonych przez filtr Kalmana. Wysokość korpusu nad ziemią także jest ustalana przez odpowiedni algorytm. Dodatkowo robot pilnuje aby każda noga która w danej fazie chodu ma spoczywać, w przypadku utraty podłoża „znalazła” nowe poprzez systematyczne obniżanie jej. Opis powyżej przedstawia pokrótce sposób w jaki sterowany jest robot, aczkolwiek nie zawiera wszystkich szczegółów. Zostały wymienione tylko główne funkcje algorytmów sterujących. Zdaje sobie sprawę że opis ten może być ciężki do zrozumienia, ale nigdy nie miałem talentu do opisywania tego co robie, więc śmiało można pytać i będę się starał rozwiewać wątpliwości oraz uzupełnić opis w miarę możliwości. Na koniec jeszcze kilka zdjęć i filmy: Kinematyka odwrotna: Kontrola przechyłu korpusu: Chodzenie po nierównym terenie: Chodzenie po ruchomej równoważni: I jeszcze coś w HD, łażenie po kamyczkach:
  6. 3 punkty
    Cześć, moje ostatnie próby z implementacją RISC-V (konkretnie projekt: BrieySoC) na płytce Mimas V.2 ze Spartanem 6 i pamięcią LPDDR na pokładzie skłoniły mnie ,aby lepiej poznać jak działa interfejs pamięci DDR dla FPGA Spartan 6. Tutaj linki do tej płytki : https://botland.com.pl/pl/moduly-i-zestawy-fpga/8603-mimas-v2-spartan-6-plytka-rozwojowa-fpga.html https://numato.com/product/mimas-v2-spartan-6-fpga-development-board-with-ddr-sdram Płytka ta ma "na pokładzie" układ FPGA Spartan XC6SLX9 ( CSG324 package), który to układ ma dwa sprzętowe kontrolery pamięci DDR oraz kostkę pamięci LPDDR o symbolu MT46H32M16LF. Jest to pamięć LPDDR (skrót od: Low Power DDR Memory) taktowana max. 166MHz, orgaznizacja 512Mb. W poście: https://forbot.pl/forum/topic/12529-licheetang-anlogic-eg4s20-fpga-board-risc-v/?page=4&tab=comments#comment-129692 opisuję moje zmagania z próbą uruchomienia architektury "RISC-V" - projekt "BrieySoC" na płytce Mimas V.2. Utknąłem z tym projektem właśnie z powodu nie-kompatybilnego z płytką MIMAS V.2 sterownika pamięci DDR. Postanowiłem więc poszukać w sieci tutoriala opisującego obsługę zewnętrznej pamięci DDR z poziomu układu FPGA Spartan6 i znalzłem ten link: https://hackaday.io/project/160637-learning-fpga-and-verilog-beginners-guide-part-6/details Przećwiczyłem ten tutorial i on rzeczywiście działa - składa się z dwóch części: 1) Generacja IP core do obsługi pamięci DDR z poziomu ISE 14.7 (dokładnie pakietu "Core generator") 2) Obsługa pamięci DDR z wykorzystaniem soft-procesora Microblaze i "Xilinx EDK" (Xilinx EDK jest płatnym narzędziem komercyjnym, ale można pobrać trial działający przez 30 dni) Stworzyłem ten post trochę dla siebie (aby był pod ręką w razie potrzeby), oraz dla innych użytkowników, którzy także będą mieli portrzebę obsługi pamięci DDR dla FPGA Spartan6. Przedtem ćwiczyłem dwa inne tutoriale dotyczące obsługi pamięci DDR z poziomu FPGA, ale tamte próby nie zakończyły się powodzeniem. Tutaj link do ogólnego opisu budowy pamięci SDRAM: https://www.electronics-notes.com/articles/electronic_components/semiconductor-ic-memory/sdram-synchronous-dram-what-is.php W załączniku spakowany projekt dla ISE 14.7 (Core Generator) z wygenerowanym sterownikiem pamięci DDR dla płytki Mimas V.2. Plik binarny projektu do konfiguracji FPGA znajduje się w katalogu; ..\DDRMemory01\ipcore_dir\s6_lpddr\example_design\par\example_top.bin , a cały projekt jest zbudowany według pierwszej wersji zamieszczonego tutoriala. DDRMemory01.zip Pozdrawiam
  7. 3 punkty
    Pochwalę się :). Przyszedł z Botlandu parę dni temu, dzisiaj podłączyłem zasilanie, na tyle starczyło czasu;). Obsługi muszę się jeszcze nauczyć. Diodę podłączyłem na próbę. Działa. Ciężki, w miarę cichy (jak gra radio to i tak nie słychać), wygląda na solidnie zbudowany.
  8. 3 punkty
    I tutaj dochodzimy do tego czym różnią się biblioteki od zwykłych progamów. Każdy sposób będzie poprawny - jeśli jako kryterium przyjmiemy po prostu działanie programu, to ten z 144x kopiuj-wklej też. Ale niektóre sposoby są lepsze, niż inne. W przypadku małego, krótkiego programu wybór sposobu implementacji często nie ma znaczenia. Natomiast w przypadku biblioteki podjęte decyzje mogą mieć długofalowe konsekwencje - jak chodziażby interfejs funkcji printf, który od początku był zły, ale teraz jego zmiana jest właściwie niemożliwa.
  9. 3 punkty
    Tak, to jest ciężkie. Szczególnie gdy nie wie się co dokładnie ma się z tym obrazem robić, poza "przetwarzaniem" go, ani w jakiej postaci pojawia się on na wejściu i jaką postać ma mieć na wyjściu. Wtedy jest bardzo ciężko.
  10. 3 punkty
    Zapraszamy do zapoznania się z kursami podlinkowanymi na górze strony — z nich dowiesz się między innymi, że bateria 9V zupełnie nie nadaje się do zasilania serwomechanizmów lub silników.
  11. 3 punkty
    Żeby odczuć zmiany temperatury wody musi być odpowiednia moc. Załóżmy, że masz zamknięty obieg, w którym jest 1 litr wody (1kg), Q= Cw*m*dt, woda ma CW=4.2 kJ/(kg K), czyli dla 1kg by uzyskać zmianę temperatury o 1oC (1K) w ciągu 1s trzeba dostarczyć (lub zabrać) moc 4.2kW. Jeśli będziesz miał te 50W i straty wyniosą 50% to moc 25W pozwoli schłodzić 1litr o 1oC w ciągu 168s. Bez strat to byłoby 84s, ale zawsze jakieś są. A jak już schłodzisz o 4oC to pamiętaj o izolacji, bo teraz każdą powierzchnią ten zbiorniczek będzie z powrotem zacznie zasysać ciepło próbując wrócić do równowagi z otoczeniem, tym mocniej im większa będzie różnica temperatury. By to w ogóle działało musi być zapewniony dobry przepływ ciepła, np. od strony chłodzenia radiator mający maksymalną możliwą powierzchnię wymiany ciepła z wodą, a po stronie gorącej dużo większy radiator+wentylator. Bo po pierwsze współczynnik wnikania ciepła jest dużo lepszy dla wody (ciepło łatwiej przepływa między wodą a metalem) a po drugie moc po stronie ciepłej jest sumą odebranego ciepła (powiedzmy 50W) + moc dostarczona z prądem - drugie 50W. No, teraz zajrzyj do PC i popatrz na radiator swojego Athlona czy tam I7 i porównaj do radiatora na swoim ogniwie, jest mam nadzieję OK? Jeśli obieg nie jest zamknięty to i tak w tym wzorze m powinno być z kropeczką, czyli oznacza przepływ wody w kg/s, wystarczy go określić, np. 0.001kg/s , nie można już mówić o czasie schłodzenia, a o ile ten strumień masy się schłodzi, co dla mocy 50W (czyli w założeniu doskonały odbiór ciepła) wyniesie 11.9oC. W sumie to to samo, czas potrzebny by przepłynął litr wody to 1000s, w każdych 84s całość schładza się średnio o 1oC. A jak chcesz by przez ogniwo płynęło więcej prądu to po prostu zwiększ napięcie.
  12. 3 punkty
    Tak właśnie pierwsza idea była, żeby od razu na jednej maszynie rozcinać butelki i jednocześnie wyciągać pręt. To był pomysł rosyjskiego kolegi. Natomiast ja pomyślałem, że lepiej będzie podzielić te operację z tym, żeby po rozcięciu pasków ukształtować ich końce tak, żeby na maszynce można było wyciągać bezkońcowy pręt łącząc poszczególne tasiemki w ekstruderze. Natomiast również myślałem o tej drugiej sprawie, żeby produkować filament z kruszywa z butelek. Takich projektów jest już sporo i produkują już takie maszyny dla domowej produkcji filamentu. Ale takie maszyny bardzo drogie, ponieważ o wiele bardziej skomplikowane. Na razie po prostu nie czuje siebie gotowym, żeby podjąć takie temat. To samo, jeżeli produkować coś innego zamiast filamentu, na przykład linki, albo sznurki plecione, czyli gdzie nie trzeba utrzymywać ściśle parametrów pręta. Pomysł bardzo dobry to już by miał być recykling tych butelek. Tylko myślę, że na małą skalę to by nie było sensu, a na dużą skalę nie pociągnie tego. Nawet mam dobrego kolegę, który prowadzi interes sprzedając kruszywo z butelek już umytych na dziesiątki ton firmą, które właśnie zajmują się przetwórstwem tego materiału. Tak że miałbym łatwy materiał, ale nie w stanie podjąć dużej produkcji.
  13. 3 punkty
    Dla mnie ważny jest test ciągłości z brzęczykiem, test diody wyskalowany w mV i pomiar napięcia. W dalszej kolejności pomiar prądu, przy czym trzeba pamiętać o "burden voltage", które w specyficznych sytuacjach może wpływać na wynik pomiaru. Niestety droższe mierniki mają tak samo. Co do zakresu pomiaru częstotliwości w robotyce nie wypowiem się. Warto sprawdzić, czy miernik będzie mierzył częstotliwość i wypełnienie przebiegu PWM (czyli sygnału impulsowego), co może się przydać w robotyce. W tych miernikach bezpieczniki trochę kosztują, trzeba uważać,żeby ich nie przepalić przez złe podłączenie, albo przekroczenie czasu pomiaru dla dużych prądów. Pomiar pojemności to osobna sprawa, przynajmniej przy naprawach. Niektóre zużyte/uszkodzone kondensatory elektrolityczne zachowują się dziwnie. Na zakresach dobranych do pojemności albo w automacie mierniki pokazują wartość nominalną pojemności, mimo że kondensator jest do wymiany. Dlatego do pomiarów pojemności używam starego Elmiera na zakresie 1000uF i z wyświetlaczem 1000.0. Jeżeli pojemność jest mniejsza przynajmniej o 20-30% (zawsze można porównać z nowym kondensatorem) to kondensator jest do wymiany. Jest to prawdopodobnie związane ze zmianami elektro chemicznymi po dłuższym czasie i wzrostem ESR. Metoda działa przy kondensatorach do 100-220uF. To samo zaobserwowałem przy pomiarach UT61E, tylko muszę zgromadzić więcej materiału do prób. Piszę o tym dlatego, że mierniki UT139C i te dwa Brymeny mają pomiar pojemności tylko w automacie, nie można przełączać zakresów pomiarowych. Dla mnie, ze względu na powyższe, to dość istotna cecha.
  14. 3 punkty
    Przecież w filmikach są widoczne dane autora projektu, strona www itd. Ciekawe podejście Nic takiego nie trzeba udowadniać klientom w naszym kraju. Żeby producent "musiał" udowadniać klientowi pierwsze słyszę Brak znaczka CE na urządzeniu nie oznacza, że jest ono nielegalne i wbrew pozorom prawo nie zabrania sprzedaży urządzeń bez znaczka CE. Przerabiałem ten temat u byłego pracodawcy, nie jest to niezbędne. Sam masz pewnie w domu urządzenia bez znaczka CE, choćby w zaprzyjaźnionym botlandzie można takie kupić. Chyba że zawsze przed zakupem czegokolwiek prosisz o potwierdzenie legalności projektowania i wykonania oraz deklaracji CE
  15. 3 punkty
    @Bartt to raczej trochę za mało. Musisz najpierw "uruchomić czujnik", aby zaczął wykonywać pomiary. Odebrane dane musisz jeszcze obrobić, ponieważ ciśnienie jest zapisywane w 3 rejestrach, a temperatura w dwóch. Po odebraniu danych musisz sobie te dane "skleić", aby otrzymać użyteczne wartości. Zerknij na poniższy kod: import smbus # importujemy biblioteki import time bus = smbus.SMBus(1) # odpalamy smbus i=0 for i in range(30): # pętla 30 powtórzeń bus.write_byte_data(0x5d, 0x20, 0b10000000) # odpalamy czujnik bus.write_byte_data(0x5d, 0x21, 0b1) # aktualizujemy zawartość rejestrów print'who am I ',bus.read_byte_data(0x5d,0x0F) # wydruk zawartości rejestru "who I am" Temp_LSB = bus.read_byte_data(0x5d, 0x2b) # odczyt temperatury w dwóch kolejnych rejestrach Temp_MSB = bus.read_byte_data(0x5d, 0x2c) count = (Temp_MSB << 8) + Temp_LSB # zapisanie 16 bitowej wartości do jednej zmiennej if (count >= 0x8000): # najstarszy bit oznacza czy wartość jest + czy - count1 = -((65535-count) + 1) else: count1 = count Temp = 42.5 + (count1/480.0) # przeliczenie wartości zgodnie z dokumentacją #print"Temperatura = ",Temp ph=bus.read_byte_data(0x5d, 0x2a) # odczyt ciśnienia w trzech kolejnych rejestrach pl = bus.read_byte_data(0x5d, 0x29) pxl=bus.read_byte_data(0x5d, 0x28) print'PressOut_XL = ',pxl cis=float((((ph<<8)+pl)<<8)+pxl)/4096 # przeliczenie wartości ciśnienia zgodnie z dokumentacją print "cisnienie = ",cis time.sleep(0.5) Powyższy program pochodzi ze strony: http://raspberrypi.edu.pl/lps331ap.html Wklejam go powyżej, bo strona ta chyba ma jakieś problemy i aktualnie nie działa.
  16. 2 punkty
    Twój sposób do resetu jest lepszy, ja w ogóle nie używałem żadnego, po prostu wiem by unikać takich miejsc bo WDT mi wywala program. Trzeba dodawać w takich pętlach delay lub yield() by temu zapobiec. Gdy mi się restartował/zawieszał to po prostu znalazłem sposób by nie tracić pamięci - stała tablica globalna char i na jej bazie budowanie komunikatów. Do resetu jeszcze ESP.restart(). Masz dużo dynamicznych stringów, poczytaj jak sprawdzić heap, może filmik pomoże: Bo co Ci da stały restart, jeśli przyjdą goście, będziesz chciał kilka razy podnieść/opuścić zasłony i nazbiera w pamięci śmieci jak przez tydzień, po czym zacznie sobie żyć swoim życiem. Sposobów na serwer jest kilka, niestety takie podawanie wybranych stringów do HTML też powodowało u mnie zawieszenia i to czasami po kilku godzinach, czasami minutach, próbowałem zrobić stronę z odczytem 4 czujników i 4 przyciskami (w sumie to dużo bardziej rozbudowaną, do tego to obciąłem) i wywalała się losowo. Stanęło na websocket, ale są też inne, np. zainstaluj bibliotekę jak na filmie https://github.com/me-no-dev/ESPAsyncWebServer, serwera na bazie tej biblioteki też nie udało mi się zajeździć. Pliki html wgrywa się na spiffs ESP, w przykładzie pokazane jest właściwie wszystko co potrzebne - konfigurator, OTA, wykresy.
  17. 2 punkty
    @Mati200 wczoraj miałem jeszcze dopisać linki do dodatkowych materiałów, ale widocznie mi umknęło... Zerknij jeszcze na 2 poniższe filmy, może będą dla Ciebie pomocne w tym kontekście: https://www.youtube.com/watch?v=pjjfWenhOHU https://www.youtube.com/watch?v=n0UKzVS9WKo
  18. 2 punkty
  19. 2 punkty
    Skoro ten wątek dotyczy różnych płytek związanych z RISC-V, to może podam link do interesującego projektu lowRISC: https://www.lowrisc.org/ Autorzy postanowili być nieco ambitniejsi, niż projektanci K210 i lowRISC ma za cel przygotowanie SoC-a zdolnego do uruchomienia Linux-a. Prototypową wersję lowRISC możemy uruchomić sami, jeśli mamy pod ręką płytkę NEXYS 4 DDR https://reference.digilentinc.com/reference/programmable-logic/nexys-4-ddr/start Pełny opis instalacji jest tutaj: https://www.lowrisc.org/docs/getting-started/ Przetestowałem i wygląda na to, że faktycznie na RISC-V może działać linux Prędkość działania nie powala, ale użycie RISC-V może być interesującą alternatywą dla Microblaze.
  20. 2 punkty
    Super projekt i sam pomysł nauki programowania przez pisanie gier też jest bardzo ciekawy. Nie tak dawno temu miałem chęć napisania takiej namiastki gry działającej w konsoli. W efekcie powstało coś takiego.
  21. 2 punkty
    Cześć, nie zauważyłem, że masz te rozkazy z nimi to jest pełnoprawny procesor Jest jeszcze tylko jedno pytanie - przeważnie operacje arytmetyczne ustawiają dwie flagi procesora: ZERO (ostatnia operacja arytmetyczna spowodowała wyzerowanie akumulatora) i CURRY (w operacji arytmetycznej wystąpiło przepełnienie arytmetyczne). Ułatwia to pisanie operacji arytmetycznych na długich liczbach. Przeważnie z tymi flagami są skojarzone dwie instrukcje skoków warunkowych: JumpIfZero i JumpIfCurry co ułatwia pisanie programów z użyciem operacji arytmetycznych na długich liczbach. Być może masz to już obsłużone, jeśli nie to nie jest to krytyka tylko temat do przemyślenia, czy może warto to brać pod uwagę przy rozbudowie projektu. Pozdrawiam
  22. 2 punkty
    Wysyłasz tylko 4 bajty, bo tyle ma typ float - sizeof(float). Powinieneś wysłać bajtów sizeof(measurement). Można też zmienić cały komunikat do wysłania na jeden napis np: "msg:25.6,1013.25,45.4" ( a jeszcze lepiej używaj int czy uint32_t i miej to w pamięci przy obliczeniach: "msg:256,101325,454". Taki komunikat wyślesz raz, odbierzesz raz, podzielisz sobie na poszczególne stringi z powrotem, pozamieniasz na liczby i będzie OK. Tu wrzuciłem przykład dla serial, jak w odbiorniku masz odebranego stringa to robisz analogicznie: Jak sobie szyfrujesz dane lub wyliczasz CRC to pewnie lepiej tablice.
  23. 2 punkty
    Może trochę inżynierii odwrotnej pomoże w tym zadaniu: Tu masz bibliotekę do Arduino, plik cpp i plik nagłówkowy h. W pliku nagłówkowym masz ładnie ponazywane rejestry, zaś w pliku cpp możesz sobie odtworzyć kolejność operacji na rejestrach i jakie wartości powinny przyjmować. Rejest 0x20 to rejestr kontrolny (CTRL_REG1), bit który jest na pozycji 7 to PD (Power down), gdy jest 1 to urządzenie się włącza (dokumentacja strona 20). void LPS331::enableDefault(void) { // active mode, 12.5 Hz output data rate writeReg(LPS331_CTRL_REG1, 0b11100000); } W kodzie Arduino który wkleiłem ustawiono jeszcze bit 6 i 5. Dlatego że jest to przykład gdzie z częstotliwością 12,5Hz wyzwalane są pomiary. Domyslnie jest tam 0 i 0 i w takim przypadku pomiar wyzwalany jest na żądanie (dokumentacja storna 21). 0x21 to też rejestr kontrolny numer 2 (CTRL_REG2), którego bit 0 oznaczono ONE_SHOT czyli pojedyncze wyzwolenie pomiaru - po zakończeniu ustawia się na 0 i czeka na kolejne. Dokumentacja strona 22. Czyli ustawiając tę wartość wyzwalasz pomiar, a że w pętli to po prostu 30 razy. Adres 0x5d nie wiem skąd się wziął bo jak przyjrzysz się wyszukiwaniu adresu w kodzie Arduino to nie ma tam czegoś takiego. Pierwsze to adres urządzenia, drugie to komenda/rejestr docelowy (masz je wypisane w mapie rejestrów), trzecie to wartość w tym przypadku 8 bitowa. Myślę że najlepiej jak przekujesz bibliotekę Arduino na własne potrzeby.
  24. 2 punkty
    Ciekawy projekt, fajny DIY. Podoba mi się to, że używasz różnych materiałów, bo wydrukować wszystko to też nie sztuka Efekt końcowy według mnie dobry, nadal możliwy do dopracowania - ale skoro to nie pierwsza wersja, to pewnie nie ostatnia? Do innych forumowiczów - krytykujecie ten projekt za sens istnienia lub jego brak, a spuszczacie się nad robotami które podążają za linią i podobnymi. Może zamiast filozoficznych aspektów warto skupić się na tych technicznych? Może to nie projekt dla was, ale ktoś inny może tego potrzebować, albo po prostu chcieć go zbudować, aby się czegoś nauczyć - i tylko tyle. Aż mi się szkoda autora zrobiło jak to czytam. Krytyka za pisownię i inne pierdy, a to wykształcony człowiek zza granicy, który wnosi do tego grona rozwiązania że swojej dziedziny - chemii.
  25. 2 punkty
    Przyszła pora na zbudowanie czegoś jeżdżącego a, że jakiś czas temu trochę spodobały mi się linefollowery to stwierdziłem, że i ja takiego zbuduję. Prezentowany robot to w sumie jego druga wersja, pierwsza była trochę niedoskonała i nie wyszła z fazy alfa, za to od niej wzięła się nazwa tego robota czyli „Grzmot” (po prostu tamten był jeszcze większy i cięższy a przede wszystkim brzydszy). Mechanika Całość oparta jest na dużej płytce uniwersalnej o wymiarach 150x90 na której znajdują się wszystkie elementy mechaniczne oraz elektroniczne. Napęd stanowią dwa silniki Pololu z przekładnią 30:1, koła to również firma Pololu, 32x7, do tego plastikowe mocowania silników. Przednie ślizgacze są zrobione z tego co akurat było pod ręką, kilka warstw kartonu przyklejonych na kropelkę. Działa zadziwiająco dobrze i jeszcze się nie urwało. Elektronika Mózgiem robota jest arduino pro mini, sterownik silników to L293D (wiem, dinozaur ale to nie jest konstrukcja na zawody tylko do nauki, wystarcza w zupełności). Czujniki linii to 5x pojedynczy moduł z czujnikiem ktir0711s, które są przylutowane za duży, metalizowany otwór do podłużnych padów na krawędzi płytki uniwersalnej (odczytywane analogowo). Do tego z przodu znajduje się cyfrowy czujnik odległości sharp, planowo miał służyć do wykrywania przeszkód jednak stanęło na tym, że używam go do startowania i stopowania robota (czasem nawet jak wpadnie na przeszkodę to też się zatrzyma :P). Sekcja zasilania zaczyna się od gniazda na akumulator, tutaj t-deans, dalej włącznik zasilania, dioda zabezpieczająca i stabilizator 7805 do elektroniki oraz przetwornica lm2596 (trochę nie spełniła oczekiwań) do zasilania silników. Do tego na płytce znajdują się trzy diody led (czerwona wskazuje zasilanie, dwie są podłączone do mikrokontrolera) oraz microswitch, akurat nie wykorzystywany. Jedno co na mi przeszkadza w tej części to gniazdo zasilania, którego ni jak nie dało się wlutować bezpośrednio w płytkę i musiałem to robić przez krótkie odcinki przewodów i odrobinę kleju na gorąco. Na szczęście nie psuje się, nie łamie a działa bardzo dobrze. Ogólnie to jak ktoś chce coś takiego zbudować ale nie chcę za bardzo w to inwestować to polecam taki sposób budowy, tzn na płytce uniwersalnej. Dzięki temu jest dużo szybciej niż z projektowaniem i wykonaniem pcb a ewentualne poprawki i przeróbki też są łatwe do wykonania. Wiadomo, że jak chcesz budować bolid na zawody no to czegoś takiego nie użyjesz ale do prototypowania jest super. Całość zasilana z dwu celowego akumulatora litowo polimerowego o pojemności 500mAh. Schemat jako taki nigdy nie powstał, całość była robiona na bieżąco, pinologię można wyczytać ze źródeł programu (w załączniku). Oprogramowanie Algorytm sterowania to PD oparte w dużej części na artykule batona z forum z tym, że dostosowany do arduino. W obecnej wersji samą część regulatora oparłem o bibliotekę pid, uruchomienie jest proste i efekty są widoczne dosyć szybko. Oczywiście polecam najpierw przyjąć trochę teorii o tym regulatorze a dopiero potem siadać do programowania. Osobiście nie jestem wielkim fanem matematyki więc po prostu wolę uruchomić bibliotekę i poświęcić więcej czasu na inne elementy programu. Poza tym mamy fragmenty do liczenia błędu, odczytywania ADC, sterowania silnikami i włączania/wyłączania robota (taki bezpiecznik, odczytuje napięcie akumulatora i stan czujnika sharp). Z rzeczy, które mi brakuje to na pewno kalibracja, jakiś interfejs z użytkownikiem, np. moduł bluetooth i odczyt telemetrii w czasie rzeczywistym. Przemyślenia W pierwszej rewizji tego robota silniki były zasilane bezpośrednio z akumulatora przez co strojenie regulatora było dosyć kłopotliwe bo parametry jezdne się dosyć dynamicznie zmieniały. W ramach późniejszej modyfikacji dodałem moduł przetwornicy (dlatego tak średnio pasuje i przechodzą pod nią przewody) i myślałem, że wyeliminuje to do pewnego poziomu problem zmiennej dynamiki. Niestety rzeczywistość mnie trochę zaskoczyła, napięcie na wyjściu to około 6V gdy akumulator ma jeszcze 7.5-8V to robot już wyraźnie traci werwę (napięcie się nie zmienia). Na szczęście mam dwa akumulatorki więc jak jeden jeździ to drugi się ładuje i tak się zmieniają co kilkanaście minut testów (nie ciągłej jazdy). Drugi problem to złe rozłożenie masy. Zdarza się, że koła tracą przyczepność i zaczynają buksować i robot się zatrzymuje. Położenie rolki taśmy izolacyjnej na wysokości silników rozwiązuje ten problem. Do tego jeszcze ciekawostka, wydaje mi się, że robot lepiej radzi sobie na samym regulatorze P (przynajmniej na mojej, domowej trasie). Owszem, oscyluje ale i tak wydaje się, że jedzie średnio szybciej niż po dłuższej chwili strojenia metodą z artykułu. Postaram się to pokazać na filmach, liczę, że bardziej doświadczeni coś podpowiedzą (chciałbym tutaj jeszcze poeksperymentować). Jeżeli macie jakieś pytania albo czegoś nie napisałem/napisałem niezrozumiale to proszę o zwrócenie uwagi, odpowiem i uzupełnię opis. Grzmot2.0.zip
Tablica liderów jest ustawiona na Warszawa/GMT+02:00
×