Przeszukaj forum
Pokazywanie wyników dla tagów 'podstawy'.
Znaleziono 7 wyników
-
Cześć! Nazywam się Mateusz (Mati) i jestem pasjonatem elektroniki oraz programowania. Tworzę różnorodne projekty, a w tym worklogu pokażę Wam, jak stworzyć mikrokomputer od podstaw. Projekt ten ma na celu edukację, ale także możliwość stworzenia zestawu, który będzie inspiracją dla innych twórców. Dla kogo jest ten projekt: Projekt skierowany jest do osób, które chcą nauczyć się, jak od podstaw zbudować swój własny mikrokomputer o funkcjonalnościach zbliżonych do popularnych platform, ale oparty o własne rozwiązania. Zawiera zarówno szczegóły techniczne, jak i wskazówki praktyczne. Idealny dla osób zainteresowanych elektroniką, programowaniem i tworzeniem własnych urządzeń. Cel projektu: Celem projektu jest stworzenie mikrokomputera, który będzie edukacyjnym narzędziem do nauki elektroniki i programowania. Będę dokumentować cały proces: od wyboru komponentów po montaż, projektowanie PCB, instalację systemu operacyjnego oraz tworzenie prostych aplikacji. Projekt jest otwarty – możecie śledzić postępy, zadawać pytania i dzielić się swoimi pomysłami! Spis treści: Etap 1: Wybór komponentów Wybór procesora Pamięć RAM i Flash Wyświetlanie, zasilanie, interfejsy itd. Etap 2: Projektowanie schematu Procesor Pamięć operacyjna Zasilanie Pamięć Flash Wyświetlanie(HDMI) Wi-Fi Pozostałe Poprawki i weryfikacja Etap 3: Projektowanie PCB Rozmieszczenie elementów Tworzenie połączeń oraz ścieżek Weryfikacja płytki i generowanie plików produkcyjnych Zamówienie prototypu płytki oraz elementów(możliwa opcja "PCB Assembly") Etap 4: Montaż i testowanie Montowanie komponentów na płytce Testowanie stabilności Etap 5: Oprogramowanie Inicjacja Uboot(lub inne) Konfiguracja Linuxa Instalacja systemu Implementacja podstawowych aplikacji (np. edytor tekstu, terminal) Etap 6: Finalizacja projektu Ostateczne testy i poprawki Podsumowanie Koszty, czas realizacji, plany rozwoju Oszacowanie czasu: Początkujący -> 1-2 miesiące Średnio zaawansowany -> 3-6 tygodni Zaawansowany -> 2-4 tygodnie Czas całkowity: 8–12 tygodni (3–4 miesiące) Oszacowanie kosztów: Procesor -> 15-50zł Pamięć RAM -> 15-30zł Pamięć Flash -> 20-50zł Pozostałe -> 50-100zł Koszt całkowity: 150–300 zł (zależnie od wybranych komponentów) Komponenty które najpewniej użyje w moim projekcie(każdy może dostosować dla siebie): Procesor: Allwinner H3(link) Pamięć RAM: 1GB(potem zostanie dobrany odpowiedni model) Pamięć Flash: NAND Flash 8GB(potem zostanie dobrany odpowiedni model) Reszta elementów: zostaną dobrane w późniejszym etapie Podsumowanie: Ten projekt ma na celu pokazanie procesu budowy mikrokomputera od podstaw. Będę dzielił się swoimi postępami, problemami i rozwiązaniami. Jeśli chcesz się dowiedzieć, jak stworzyć coś takiego, śledź ten temat! Na bieżąco będę informować o nowościach, dodając kolejne etapy realizacji projektu.
- 2 odpowiedzi
-
- 3
-
-
- mikrokontroler
- podstawy
-
(i 2 więcej)
Tagi:
-
Matlab Co to Simulink? Podstawy, zastosowanie, pierwsze kroki
mcsw_02 opublikował temat w Artykuły użytkowników
W jaki sposób stworzyć symulację lotu drona, systemu ogrzewania pomieszczenia lub silnika prądu stałego? Jest na to jedno, bardzo uniwersalne i dobre narzędzie - Simulink. Jest to narzędzie, które wchodzi w skład środowiska programistycznego Matlab. Jeżeli jeszcze nie wiesz, czym jest ten program to odsyłam do mojego artykułu omawiającego czym jest Matlab. Simulink is a block diagram environment used to design systems with multidomain models, simulate before moving to hardware, and deploy without writing code. - definicja Simulinka według MathWorks. Możemy więc spodziewać się, że jest to środowisko, które służy do modelowania, symulacji i implementacji systemów dynamicznych bez potrzeby ręcznego kodowania. W tym artykule przedstawię Ci: Czym jest Simulink? Zastosowania Simulinka. Podstawy Simulinka. Praktyczne modele i projekty w Simulinku. Simulink to potężne narzędzie pozwalające na modelowanie różnorodnych systemów. Źródło zdjęcia. Czym jest Simulink? Zgodnie z opisem producenta, jest to środowisko służące do symulacji multi-domenowych modeli. Oznacza to, że będziemy w stanie modelować systemy charakteryzujące się posiadaniem komponentów należących do różnych dziedzin inżynierii - elektryki, mechaniki, pneumatyki itp. Te układy buduje się za pomocą schematów blokowych. To wszystko umożliwia symulację skomplikowanego systemu przed przeniesieniem rozwiązania na rzeczywisty sprzęt. Całe środowisko opiera się na modelach, czyli wyidealizowanej reprezentacji jakiegoś zjawiska/urządzenia/systemu. Modelami sterujemy za pomocą przepływu sygnałów przez połączone między sobą bloki. Sygnały możemy modyfikować i analizować. Zastosowania Simulinka Simulinka stosuje się głównie do symulacji procesów i algorytmów przed przeniesieniem ich na sprzęt. W samym środowisku jest możliwość jednocześnie zbudowania całego systemu oraz jego algorytmu sterowania za pomocą, np. maszyny stanów (Stateflow). Stosuje się go w różnorodnych branżach wykorzystujących skomplikowane systemy. Przykładami takich branż mogą być: Automotive - sterowanie autonomicznymi pojazdami. Lotnictwo i kosmonautyka - skomplikowane sterowanie nieliniowe. Automatyka przemysłowa - sterowanie procesami regulacji. Sektor medyczny - przetwarzanie sygnałów, np. EKG. Więcej o zastosowaniach możecie przeczytać na stronie producenta. Dodatkowe biblioteki do Simulinka rozszerzają jego możliwości. Źródło zdjęcia. Podstawy Simulinka. 1. Włączenie Simulinka Można to zrobić na dwa sposoby: wpisując komendę simulink w Command Window Matlaba lub klikając logo Simulinka w zakładce. Opcje uruchomienia Simulinka. Po uruchomieniu środowiska wyświetli się poniższe okno. Możemy w nim utworzyć nowy pusty projekt lub wybrać wcześniej stworzony wzór. Strona startowa. Wybierzmy Blank Model i rozpocznijmy modelowanie! Stworzenie pustego projektu będzie skutkowało pojawieniem się głównego okna z naszym projektem. Okno Simulinka. 2. Podstawy modelowania W Simulinku modeluje się za pomocą bloków. Do bloków można dostać się za pomocą zakładki Library Browser lub klikając dwukrotnie lewym przyciskiem myszy i wpisując pożądany blok. Załóżmy, że mamy za zadanie zamodelować poniższe równanie: y = ax + b, gdzie: a, b - dowolne stałe, x - czas rzeczywisty. Na pierwszy rzut oka widać, że potrzeba kilka bloków: Mnożenia - Product. Dodawania - Sum. Stałych - Constant. Aktualnego czasu - Clock. Dodajmy je poprzez Library Browser. Pierwsze 3 znajdziesz w zakładkach Simulink > Commonly Used Blocks. Blok Clock znajduje się w Simulink > Sources. Po znalezieniu ich wystarczy przeciągnąć je na okno robocze. Dodanie odpowiednich bloków na obszar roboczy. Bloki łączy się za pomocą linii przeciągając lewym przyciskiem myszy z wyjścia bloku do wejścia kolejnego. Połączenia między blokami. Czerwona strzałka oznacza niedokończone połączenie. Upewnij się, że wszystko jest połączone. Wyświetlmy wynik. Zrobimy to korzystając z bloku Scope, który pokaże nam przebieg monitorowanego sygnału w czasie. Tym razem dodajmy go klikając dwukrotnie na okno robocze i wpisując w wyszukiwarkę Scope. Dodanie bloku Scope. Gotowy schemat powinien wyglądać tak jak poniżej: Gotowy model. Istnieje możliwość dodania opisów, zaznaczając odpowiedni blok i zmieniając jego nazwę. Nazwę linii sygnałowej zmienia się poprzez dwukrotne naciśnięcie jej. Program wraz z etykietami. Zmieńmy wartość współczynnika b, tak aby wynosiła 0. Otrzymamy wtedy równanie: y = ax, W naszym przypadku a = 1, więc równanie będzie wynosiło: y = x, czyli otrzymamy wartości y równe aktualnemu czasowi. Dwukrotne kliknięcie bloku wywoła okno zmiany parametrów tego bloku. Niektóre bloki pokazują aktualne wartości parametrów bloku. Blok ‘b’ zmienił wyświetlaną wartość z 1 na 0 po zmianie jego parametru. Włączmy symulację za pomocą przycisku Run. Przy okazji zmieńmy czas symulacji na 20 sekund. Opcje włączenia symulacji. Czas wykonywania symulacji zmienia się w oknie Stop Time. Otwórzmy Scope. Klikając na niego dwukrotnie zobaczmy przebieg sygnału wyjściowego. Wynik symulacji. Zmieńmy wartości a i b, i sprawdźmy, jak zachowa się przebieg. Symulację można włączyć klikając zielony przycisk startu bezpośrednio w Scope. Zmienione współczynniki równania. Współczynnik kierunkowy zmieniłem na ujemny, przez co nie widać dobrze przebiegu symulacji. Spowodowane jest to zachowaniem przez Scope poprzednich ustawień z poprzedniej symulacji. Za pomocą zaznaczonego przycisku można automatycznie wyskalować osie. Wygenerowany przebieg z wyskalowanymi osiami. To równanie było tylko prostym przykładem. Pamiętajmy, że to środowisko oferuje znacznie więcej, o czym będzie napisane później. 3. Równania różniczkowe w Simulinku Przejdźmy do cięższego przykładu - równań różniczkowych. Nie bój się, nie musisz wiedzieć, jak je rozwiązywać. Simulink zrobi to za nas! Przeanalizujemy problem krok po kroku. Załóżmy, że chcemy zamodelować zachowanie masy na sprężynie w wodzie. Wychylamy ją na pewną odległość i obserwujemy, co się dzieje. Logicznym jest, że sprężyna na początku będzie oscylować. Jednocześnie będzie tłumiona przez wodę, aż do jej całkowitego zatrzymania. Wizualizacja problemu. Nazywa się to oscylator harmoniczny tłumiony. Istnieje równanie, które opisuje powyższy problem: Równanie oscylatora harmonicznego tłumionego. Źródło zdjęcia. Współczynniki w równaniu: m - masa obciążenia. b - współczynnik tłumienia. k - stała sprężyny. Równanie zawiera pochodne. Pochodna to zmiana pewnej wielkości w czasie. Pochodna położenia to prędkość, bo jest to zmiana położenia w czasie - jak szybko obiekt się porusza. Analogicznie przyspieszenie to pochodna prędkości - jak szybko zmienia się prędkość w czasie. W przypadku równania oscylatora zapisane są pochodne położenia. Oznaczone są zapisem: gdzie: n - rząd pochodnej. Tak więc, gdy: n = 1 - prędkość. n = 2 - przyspieszenie. Gdy n = 0, to mamy do czynienia ze zwykłą funkcją. W tym przypadku z położeniem. Podsumowując, będziemy badali: x(t) - położenie. dx(t)/dt lub v(t) - prędkość. d2x(t)/dt2 lub a(t) - przyspieszenie. Najprostszym sposobem na modelowanie takiego równania jest przeniesienie wszystkich pochodnych i stałych na prawą stronę oraz pozostawienie po lewej najwyższej pochodnej. Jeżeli tak zrobimy, to powyższe równanie zyska postać: Postać równania z przeniesieniem niższych pochodnych i stałych na prawą stronę. Przeanalizujmy powyższe równanie. Najwyższą pochodną, możemy obliczyć na podstawie niższych pochodnych. Aby je uzyskać, musimy scałkować wyższą pochodną. Wtedy otrzymamy pochodne niższego rzędu. Dodatkowo całe wyrażenie należy podzielić przez ‘m’. Odpowiednie pochodne musimy wzmocnić przez pewne współczynniki. Nawias po prawej stronie ma postać sumy ujemnych wartości. Na cały układ musimy zadziałać wymuszeniem, czyli sygnałem, który wprawi w ruch cały układ. Można je wyobrazić sobie, jako odchylenie sprężyny w jednym kierunku, a następnie puszczenie jej, tym samym wprawienie jej w ruch. Uwaga: w równaniu nie jest uwzględnione wymuszenie. Jeżeli chcielibyśmy je uwzględnić, musielibyśmy dopisać po prawej stronie +u(t). Zatem będziemy potrzebowali bloków: Step - generowanie sygnału o stałej wartości przez pewien czas. Wymuszenie/początkowe odchylenie sprężyny. Sum - odejmowanie tłumienia i stałej sprężyny. Gain - pomnożenie sygnału przez pewną wartość. Wzmocnienie odpowiednich pochodnych. Integrator - całka sygnału. Potrzebujemy dwóch integratorów, żeby z najwyższej pochodnej, równej 2, przejść do pochodnej 0-rzędu - położenia. Scope - analiza przebiegów w czasie. Wszystkie potrzebne bloki znajdziemy w Library Browser. Po dwukrotnym naciśnięciu na blok Sum można dostosować jego wejścia. Zmieńmy go na rectangular i zmodyfikujmy jego znaki poprzez wpisanie w poniższym polu żądanych symboli: plus (sygnał wymuszający) i dwa minusy (ujemne współczynniki). Parametry bloku Sum. Przygotowane bloki z błędami. Tym razem w blokach wpiszemy zmienne, które należy zadeklarować. Dodaje się je w workspace projektu i przypisuje się im odpowiednią wartość. W tym celu najeżdżamy na blok i klikamy symbol error oraz wybieramy dodanie zmiennej. Stworzenie nowej zmiennej. Okno, które wyskoczy po wciśnięciu Fix. Wartość zmiennej wpisujemy w <expression>. Ja wykorzystam wartości: m = 10. k = 3. b = 2. Jeżeli pomylisz się przy wpisywaniu wartości, to musisz przejść do workspace Simulinka. Przejście do Model Explorer i Workspace modelu. Do tego miejsca przechodzi się w następujący sposób: Zakładka Modelling > Model Explorer > Model Workspace. Po stworzeniu odpowiednich zmiennych czerwone podświetlenie powinno zniknąć. Teraz połączmy wszystkie bloki zgodnie ze wzorem. Połączony schemat. Zauważ, że możliwe są rozgałęzienia oznaczone kropką (tak jak w schematach elektronicznych). Wyjaśnienie połączeń: wzór opisuje, ile wynosi przyspieszenie. Więc musimy je obliczyć na podstawie odpowiednich wartości prędkości i położenia, które są wzmocnione o współczynniki przy nich stojących. Dzięki temu utworzy nam się równanie po prawej stronie. Dodatkowo całą sumę musimy pomnożyć przez 1/m, dlatego na wyjściu sumatora jest Gain. Wyjaśnienie graficzne równania. Poszczególne kolory odpowiadają kolejnym częściom równania. Zostało jeszcze zmodyfikowanie bloku Step. Chcemy, aby wymuszenie pojawiło się od startu symulacji i zniknęło po pewnym czasie. Klikamy dwukrotnie na blok i modyfikujemy parametry. Zmodyfikowane parametry bloku Step. Step time - czas po jakim blok zadziała. Chcemy, aby wymuszenie zniknęło po sekundzie, więc wpisujemy 1. Initial value - wartość początkowa. Ustawiamy na 1, bo zadziałamy jednostkową siłą rozciągając sprężynę. Final value - wartość, która pojawi się po Step time. Chcemy zatrzymać wymuszenie, więc wpisujemy 0. Reszty nie zmieniamy. Do bloku Scope przyłączmy sygnały wymuszenia, przyspieszenia i prędkości, aby zobaczyć jak zachowują się te wielkości. Aby połączyć pożądany sygnał do Scope należy przytrzymać prawym przyciskiem na linię tego sygnału i przeciągnąć kursor w inne miejsce. Pojawi się strzałka, którą należy najechać bezpośrednio na Scope. Połączenie kilku sygnałów do Scope. Przed uruchomieniem zmień czas na minimum 40 sekund. Sprawdźmy jak wygląda wyjście! Wyjście modelu. Wykres nie jest zbyt czytelny. Poprawmy to. Rozbijmy poszczególne wykresy na pojedyncze okna - Layout. Włączmy legendę - Legend. Dostosujmy skalę. Włączenie opcji Layoutu. Podział Scope na poszczególne sygnały. Włączenie legendy. Automatyczne skalowanie wszystkich przebiegów. Wygenerowany wykres. Nasz wykres jest kanciasty. To wina solvera, który oblicza stany modelu podczas symulacji. Nie wdając się w szczegóły naprawmy to klikając napis w prawym dolnym rogu informujący nas o aktualnym solverze. Po kliknięciu wybierzmy koło zębate i przejdźmy do ustawień. Włączenie opcji solvera. Zmiana typu i kroku solvera. Krok solvera ustaw, np. na 0.01. Sprawdźmy, jak teraz wygląda wykres. Finalnie wygenerowany wykres. Teraz możemy dokładnie przeanalizować wygenerowany przebiegi przez nasz model. Przez sekundę działa wymuszenie, które zanika. Następnie model (ciężarek na sprężynie) wykonuje ruch oscylacyjny wokół punktu 0. Tłumienie (woda) w końcu go zatrzymuje. Przy okazji widać, jak zachowuje się prędkość i przyspieszenie. Praktyczne modele i projekty w Simulinku Simulink nie służy tylko i wyłącznie do rozwiązywania skomplikowanych równań różniczkowych. Znajduje on zastosowanie w wielu branżach. Poniżej przedstawiam modele i przykłady rzeczywistych obiektów. 1. Winda (Elevator) Dzięki bibliotece Simscape możliwe jest symulowanie części mechanicznych. Za pomocą kilku bloków można zbudować windę, która porusza się z zadaną prędkością. Model można przerobić na sterowanie położeniem/przyspieszeniem. Przykład windy zbudowanej w Simulinku. Wygenerowane przebiegi przez windę. 2. Sterowanie silnikiem (Control DC Motor with PWM Voltage Source and H-Bridge Driver) Simscape oferuje również pakiet Simscape Electrical, za pomocą której można symulować układy elektroniczne. W połączeniu z częściami mechanicznymi możemy zasymulować jednocześnie część elektryczną i mechaniczną systemu - model multi-domenowy. Przykładem może być sterowanie silnikiem prądu stałego mostkiem typu H przy jednoczesnym monitorowaniu obrotów wału silnika. Sterowanie silnika mostkiem typu H. Pokazane przebiegi prądu i RPM. 3. Sterowanie Arduino za pomocą Simulinka (Get Started with Arduino Hardware) Za pomocą Simulinka możesz tworzyć aplikacje komunikujące się z Arduino. Simulink umożliwia tworzenie aplikacji, sterowania i wizualizacji programów tworzonych na Arduino. Jeżeli chcesz zobaczyć rzeczywiste użycie tego programu, to zajrzyj do tego artykułu. Robot mobilny wykorzystujący Arduino Due. Źródło zdjęcia. W internecie można znaleźć modele/implementacje innych typów robotów, które zostały zaprojektowane w Simulinku: linefollower, typu roomba lub manipulatory przemysłowe Podsumowanie Simulink to świetne narzędzie do modelowania, symulowania i tworzenia aplikacji dla rzeczywistych systemów i obiektów. Sprawdzi się zarówno do rozwiązywania skomplikowanych problemów matematycznych, jak i dla sterowania rzeczywistymi obiektami, takimi jak np. roboty mobilne. Jeżeli chcesz przetestować swoje rozwiązanie sterowania, nastawy PID lub układ elektroniczny, to Simulink będzie dobrym wyborem.- 1 odpowiedź
-
- 5
-
-
- automatyka
- Programownie
- (i 2 więcej)
-
Czego dowiesz się z tego artykułu? Każdy to robi, natomiast prawie nikt nie zwraca na to uwagi. Nawet czytając ten tekst, organizm czytelnika wykonuje ściśle określoną listę kroków, która pozwala mu na zrozumienie czytanego tekstu. Algorytm to uporządkowany zbiór zadań, które wykonuje się w celu rozwiązania problemu. Czytając poniższy tekst zrozumiesz, że algorytmy są związane z praktycznie wszystkim co robisz na co dzień. Wprowadzę Cię do zapisu algorytmów. W artykule przedstawiono również 2 proste algorytmy zapisane w formie programu dla Arduino. Algorytmy w codziennym życiu. Załóżmy, że chcielibyśmy upiec ciasto, tak jak robiła to nasza babcia, która kierowała się konkretnym przepisem. Zaglądamy do jej zeszytu i czytamy, że potrzebujemy jajka, mąkę, masło i inne składniki. Pierwszym krokiem jest pokrojenie masła. Drugi to dodanie mąki, proszku do pieczenia, cukru i masła do miski. Po kolejnych 10 krokach wyciągamy pyszne ciasto z piekarnika i po ostygnięciu delektujemy się nim. Postępujemy tutaj według jasno określonej listy zadań, którą wymyśliła nasza babcia i dzięki której możemy osiągnąć pożądany cel. Po zjedzeniu ciasta wychodzimy na spotkanie z naszym znajomym. Nasz kolega mieszka na 1 piętrze, a winda nie działa, więc kierujemy się na schody. Wchodzimy na pierwszy stopień i weryfikujemy, czy jesteśmy na 1. piętrze. Jeżeli nie, to wchodzimy o 1 stopień wyżej i powtarzamy to, dopóki nie znajdziemy się na docelowym piętrze. W tym przypadku nasze postępowanie jest wyrażone za pomocą powtarzających się czynności, które kończymy, gdy założony przez nas warunek się spełni. Oczywiście w takich sytuacjach postępujemy automatycznie, ale warto było o tym wspomnieć, bo są to życiowe przykłady algorytmów - przepisów, które prowadzą do rozwiązania problemu, np. upieczenia ciasta, lub wejścia na 1. piętro. Mówimy o algorytmie, gdy jest on: poprawny - działa, jednoznaczny - daje ten sam wynik przy takich samych danych, skończony - nie działa w nieskończoność, efektywny - wykonuje się w sensownym czasie. Trzeba pamiętać, że algorytm ≠ program. Jeżeli algorytm jest zapisany językiem programowania, to wtedy możemy mówić o programie. Zapis algorytmów i przykłady Pamiętaj, że bardzo złym pomysłem jest zapisywanie algorytmów jako jakąś opowieść, bo może to zaburzać interpretację ich działania. Dobrym zwyczajem jest zapisywanie ich technikami, które zostały przedstawione poniżej. Lista kroków Najprostszą i najbardziej naturalną techniką jest zapis algorytmu w postaci ponumerowanych punktów, w których wypisujemy po kolei, co robimy. Zależnie od sytuacji, kroki można pomijać lub do nich wracać. Uproszczony algorytm wykonania ciasta. Autor nie ponosi odpowiedzialności za korzystanie z tego przepisu! pokrój 100 g zimnego masła na małe kosteczki dodaj do miski: 200 g szklanki mąki, pokrojone masło, 13 g proszku do pieczenia, 26 g cukru i rozbite jajko bez skorupki zmieszaj porządnie zawartość miski ciasto włóż do lodówki po 15 minutach wyciągnij ciasto piekarnik nagrzej do 180 stopni Celsjusza wypełnij formę ciastem i dodaj owoce włóż do piekarnika blachę z ciastem na 50 minut sprawdź czy gotowe. Jeżeli tak to przejdź do kroku 12. W przeciwnym razie przejdź do kroku 10 poczekaj minutę przejdź do kroku 9 wyjmij ciasto i daj mu ostygnąć zakończ algorytm Powyższy algorytm jest uproszczeniem. Bezmyślne kierowanie się nim może skutkować tym. Jesteśmy ludźmi i raczej każdy rozumie zwrot dodaj cukier. Algorytm wchodzenia po schodach: sprawdź czy wszedłeś na docelowe piętro. Jeżeli tak, to przejdź do kroku 4. W przeciwnym razie przejdź do następnego kroku wejdź o jeden stopień do góry przejdź do kroku 1 zakończ algorytm W powyższych algorytmach pojawiają się instrukcje warunkowe (jeżeli) i pętle (jeżeli… przejdź do kroku poprzedniego) - jedne z najważniejszych zagadnień programowania. Instrukcją warunkową nazywamy fragment programu, który praktycznie odpowiada na pytanie w formie: tak/nie, prawda/fałsz, 1/0. Na podstawie odpowiedzi może wykonywać jakąś czynność. Pętla to fragment kodu, który powtarza się, jeżeli warunek przypisany do tej pętli jest spełniony. W kolejnych przykładach będę posługiwał się tylko algorytmem wchodzenia po schodach, bo jest on krótki i wystarczy do wyjaśnienia innych technik zapisywania algorytmów. Pseudokod Jak sama nazwa wskazuje, jest to symbolicznie zapisany kod, który w dużej mierze zachowuje zasady języków programowania. W tym artykule wykorzystamy zasady, które opisano w tym dokumencie. Należy pamiętać, że nie istnieje oficjalny standard dla pseudokodu i to jest tylko szkolny przykład. Operacje matematyczne dodawanie – + odejmowanie – - mnożenie – • dzielenie – / dzielenie całkowite – div reszta z dzielenia – mod Przypisanie wartości do zmiennej a ← 3 Instrukcja warunkowa jeżeli a = 3 wykonuj a ← 0 w przeciwnym razie a ← 1 Operatory porównania większe - > większe równe - ≥ mniejsze - < mniejsze równe - ≤ równe - = nierówne - ≠ Operatory logiczne AND - i OR - lub Pętle dopóki a < 10 wykonuj a ← a + 1 lub dla i = 1, 2, 3, … 10 wykonuj a ← a + 1 lub wykonuj a ← a + 1 dopóki a < 10 Przedstawmy teraz algorytm wchodzenia po schodach w postaci pseudokodu. Musimy założyć pewne uproszczenia i dodatki: z góry wiemy ile dane schody mają stopni wejście na stopień traktujemy jako dodanie 1 do zmiennej wskazującej aktualny stopień gdy będziemy na środkowym stopniu to powiemy “połowa za mną…” po wejściu na piętro jesteśmy bardzo szczęśliwi, że nasz algorytm działa, więc mówimy “jestem na piętrze!” wprowadź liczbaStopni aktualnyStopien ← 0 dopóki aktualnyStopien < liczbaStopni wykonuj aktualnyStopien ← aktualnyStopien + 1 jeżeli aktualnyStopien = liczbaStopni div 2 wypisz “Połowa za mną…” wypisz “Jestem na piętrze!” Zapisując algorytm w pseudokodzie, pamiętaj, żeby stosować wcięcia do operacji, które dotyczą użytej wcześniej instrukcji, takiej jak instrukcja warunkowa. Zapewni to czytelność i poprawne działanie kodu, ponieważ pseudokod bazuje na wcięciach. Pseudokod zapewnia szybki zapis algorytmu i możliwość łatwego przekonwertowania go na język programowania. Schemat blokowy W tej technice używamy bloków o konkretnym kształcie, aby wskazać różne instrukcje algorytmu. Podstawowe kształty: owal - miejsce rozpoczęcia/zakończenia algorytmu prostokąt - operacje na zmiennych romb - instrukcja warunkowa równoległobok - wprowadzenie/wypisanie danych I tak jak poprzednio, algorytm wchodzenia po schodach: Dla czytelności polecam wejść w pełny obraz. Schemat blokowy czyta się od punktu START i podąża się zgodnie ze strzałkami, wykonując wszystkie operacje zawarte w mijanych blokach. Spróbuj przeanalizować powyższy algorytm! Dzięki schematowi blokowemu będziesz mógł przedstawić swoje algorytmiczne pomysły w czytelny i klarowny sposób. Należy pamiętać, że schemat blokowy dobrze sprawdza się w algorytmach mniejszych rozmiarów. Spróbuj sobie wyobrazić, co by było, gdyby na schemacie znajdowało się 100 różnych bloków i byłoby między nimi dużo połączeń… Język programowania Wcześniejsze techniki zapisu algorytmów są stosowane do ich przedstawienia w sposób symboliczny. Komputer to maszyna i potrzebuje konkretnych instrukcji, dlatego stosuje się języki programowania, które są jednoznaczne i precyzyjne. Mówiąc chcę dodać dwie liczby trzeba jeszcze sprecyzować, jakie mają wartości, jakiego są typu, gdzie będzie przechowywany wynik itp. Każdy język charakteryzuje się składnią i semantyką, czyli sposobem, w jaki programy napisane w danym języku są konstruowane i interpretowane przez komputer. Składnia odnosi się do struktury i zapisu gramatycznego kodu, czyli do tego, jakie konstrukcje i polecenia są akceptowane w danym języku. Z kolei semantyka odnosi się do znaczenia tych konstrukcji oraz sposobu, w jaki są one rozumiane i wykonane przez interpreter lub kompilator. Poniżej znajduje się zapis algorytmu wchodzenia po schodach w języku C. #include <stdio.h> int main() { int iloscStopni = 10; int aktualnyStopien = 0; while (aktualnyStopien < iloscStopni) { aktualnyStopien = aktualnyStopien + 1; if (aktualnyStopien == iloscStopni / 2) { printf("Polowa za mna!\n"); } } printf("Jestem na pietrze!\n"); return 0; } Tutaj warto zaznaczyć jak korzysta się z funkcji. Nazwę możesz kojarzyć z matematyki, gdzie występuje funkcja f(x). Dokładnie w ten sam sposób działają funkcje w programowaniu. Wywołując ją podajesz jej nazwę i w nawiasach argumenty, które zostaną wykorzystane do pewnych operacji. Funkcja może zwracać pewną wartość lub nie. Np. funkcja printf() nic nie zwraca, ale wypisuje napis w konsoli. Jeżeli zwraca to musimy podać zmienną przechowującą wartość wyniku. Na początku programu musimy pobrać bibliotekę, w której znajdują się funkcje, których będziemy używali w programie. Za to odpowiada pierwsza linijka - #include <stdio.h>. W C operacje pisze się między nawiasami klamrowymi, które oznaczają początek i koniec danej instrukcji. W tym przypadku cały program jest zapisany w funkcji głównej main(), która zawsze się wykonuje przy uruchomieniu programu. Na końcu każdej operacji musi wystąpić średnik! Żeby nie komplikować kodu pobraniem wartości założyłem, że wiemy od samego początku, ile jest stopni na schodach, dlatego równocześnie z deklaracją, że będzie to zmienna stałoprzecinkowa int, przypisujemy jej wartość 10: int iloscStopni = 10;. while() to pętla odpowiadająca pętli dopóki w pseudokodzie. W nawiasach wpisujemy warunek wykonania się kolejnego kroku pętli. Funkcja printf() wyświetla napis zawarty w nawiasach, w cudzysłowie. Porównaj kod zapisany pseudokodem z tym w C. Jestem pewny, że dostrzeżesz podobieństwa. Algorytmika w Arduino Należy pamiętać, że programy, które piszemy na Arduino, działają w nieskończonej pętli. Procesory, mikrokontrolery i inne sterowniki są projektowane tak, aby mogły działać cały czas. Z tego powodu programy w Arduino wykonują się w dwóch funkcjach - setup() i loop(). Dodatkowo warto zaznaczyć, że język wykorzystywany w Arduino IDE jest praktycznie językiem programowania C++. setup() wykonuje się tylko i wyłącznie raz przy starcie całego programu. Używamy tej funkcji, żeby rozpocząć pewne procesy lub ustawić wejścia i wyjścia na odpowiednie tryby. Stąd jej nazwa, która przetłumaczona na j. polski brzmi konfiguracja. Konfigurujemy i przygotowujemy środowisko na późniejsze etapy wykonywania programu. loop() wykonuje się po zakończeniu funkcji setup i działa w pętli - wykonuje się cały czas. Tutaj umieszczamy operacje związane z np. sterowaniem i przechwytywaniem informacji. Przykładowe algorytmy na Arduino Blink Na początku zajmiemy się miganiem diodą LED. Nie musisz nic pisać, aby skorzystać z tego programu! Włącz Arduino IDE -> kliknij zakładkę File -> Examples -> 01.Basics -> Blink. Otworzy się nowe okienko z programem Blink. Zauważysz dużo komentarzy, które są poprzedzone dwoma myślnikami, lub znakami /* i zakończone */. Możesz je usunąć. Zostanie poniższy kod: void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, HIGH); delay(1000); digitalWrite(LED_BUILTIN, LOW); delay(1000); } pinMode() ustawia wybrany pin na wejście lub wyjście. Przyjmuje dwa argumenty - numer pinu i wybranie trybu. Arduino ma wbudowaną stałą, która wskazuje na pin wbudowanej w płytkę diody, więc to będzie nasz pierwszy argument. Drugim będzie OUTPUT, czyli ustawienie pinu na wyjście. Ta funkcja wykona się tylko raz, bo znajduje się w setup(). W funkcji loop() jako pierwszy krok ustawiamy pin LEDa na stan wysoki (zapali się) funkcją digitalWrite(), podając pin tej diody i argument HIGH oznaczający stan wysoki. Funkcja delay() powoduje czekanie programu. Wartość w nawiasach to długość czasu w milisekundach. Potem wyłączamy diodę, czekamy sekundę. Funkcja loop() wykonuje się od nowa. Czy jesteś w stanie zapisać algorytm migania diodą w postaci schematu blokowego? Czytanie przycisku Poniżej znajduje się program do zapalania lampki, gdy wciśnięty jest przycisk na pinie 7. Spróbuj go przeanalizować i pochwal się w komentarzu, jak działa! Dodatkowo w ramach ćwiczenia, polecam zapisać go w postaci pseudokodu. Kilka podpowiedzi: zmienne i stałe można deklarować poza głównymi funkcjami. Można wtedy się do nich odwołać w każdym miejscu w programie #define oznacza deklarację stałej, której nie zmienia się przez cały program. Symbolicznie stałe zapisuje się wielkimi literami digitalRead() czyta i zwraca stan, który aktualnie jest na pinie funkcja else() wykonuje się wtedy, gdy instrukcja warunkowa zwróciła fałsz #define PIN_LED 8 #define PIN_BUTTON 7 int buttonState = 0; void setup() { pinMode(PIN_LED, OUTPUT); pinMode(PIN_BUTTON, INPUT); } void loop() { buttonState = digitalRead(PIN_BUTTON); if (buttonState == HIGH) { digitalWrite(PIN_LED, HIGH); } else { digitalWrite(PIN_LED, LOW); } } Podsumowanie Znajomość pojęcia algorytm to kluczowa umiejętność w świecie programowania. Jeśli zaczynasz pisać kod na platformę Arduino, to warto zgłębić tę tematykę. Nie ograniczaj się tylko do zapisu algorytmów - zrozum, jak działają i jak możesz je wykorzystać w praktyce. Gorąco polecam skorzystać z kursu Arduino na Forbocie, abyś mógł szybko przekuć swoją wiedzę na konkretne projekty.
- 8 odpowiedzi
-
- 8
-
-
-
- programowanie
- nauka
-
(i 1 więcej)
Tagi:
-
Prototyp zegara opartego na licznikach 74HC393
Zimol opublikował temat w Projekty - DIY (początkujący)
Prototyp zegara opartego na licznikach '393 Witam. Jest to pierwszy projekt, bardzo niedoskonały, posiadający wiele błędów ale również taki który wiele nas nauczył Pomysł narodził się miesiąc temu, a motywacją była lepsza ocena z układów cyfrowych(z 4 na 5) na koniec drugiej klasy, przedmiot się już kończy a więc ocena leci na świadectwo ukończenia technikum. A więc zebrałem drużynę, rozdzieliliśmy zadania i ruszyliśmy z projektem Tak jak w tytule, projektem był zegar ale na licznikach 4-bitowych. Wiadomo że taki zegar można zrobić tysiąc razy lepiej, szybciej itd. używając np. układu MC1206 CEMI, tylko że to nam wiele by nie dało jeśli chodzi o naukę tego przedmiotu. Skoro poznaliśmy liczniki, dekodery, bramki to możemy coś wykombinować . Tutaj przy okazji chciałbym podziękować kolegom bez których na pewno nigdy by ten projekt nie powstał oraz nauczycielowi, który udostępnił nam odpowiednie urządzenia do jak najlepszego wytworzenia płytki PCB, a domowymi sposobami nie byłoby tak łatwo. Koniec wstępu, teraz projekt. Jest to prototyp, zresztą bardzo widocznie zaznaczony na płytce, wiedzieliśmy że coś może nie działać - miało to pokazać na czym stoimy, jakie błędy popełniliśmy itp. Trochę jest ich, opisze je tutaj. Początkowo projekt składał się z 4 segmentów. Segment 1-sekundy, segment 2-minuty, segment 3-godziny oraz 4-kontrolny. Na prototypie jest jeszcze segment 5- ratunkowy. Wszystkie segmenty miały być na osobnych płytkach ale zrezygnowaliśmy z tego. Będę stosował te nazwy aby lepiej przedstawić projekt. Co kryje wnętrze? Układ jest zbudowany z trzech podwójnych liczników 4-bitowych 74HC393, sześciu dekoderów BCD na wyświetlacz 7-segmentowy CD4511BE, trzy bramki AND-CD4081BE, podwójny przerzutnik JK-CD4027, Dzielnik częstotliwości CD4060, jedyny w wersji SMD oraz licznik 7-bitowy CD4024. Trzy podwójne 7 segmentowe wyświetlacze LED LTD5523 o wspólnej katodzie. Kilka rezystorów, kondensatorów i diod. Ogólna zasada działania Sercem układu jest segment czwarty, kontrolny. Na nim znajdują się układy odpowiedzialne za poprawne działanie reszty segmentów. Segment pierwszy, drugi oraz trzeci posiadają wyświetlacz, który ma za zadanie pokazać ilość impulsów podanych na wejścia zegarowe liczników 4-bitowych, wykonanego w technologii TTL-74HC393. Na wejście zegarowe segmentu pierwszego zostaje wprowadzony przebieg prostokątny o częstotliwości 1Hz- czyli 1 sekunda. Następuje zliczanie tych impulsów podanych z segmentu 4, z odpowiedniego układu. Jedności sekund to modulo 10 (od 0 do 9 i reset licznika), dziesiętne to już modulo 6(0-5 i reset), jedności minut mają takie same modulo jak sekund, natomiast godziny: jedności modulo 10, dziesiętne modulo 3. Myśleliśmy że zegar, w momencie gdy go uruchomimy, będzie wskazywał godzinę 00:00:00. Wskazuje natomiast różnie, 11:00:01, 15:14:24, 14:21:30. W wersji 2.0 po prostu w momencie podłączenia do zasilania wszystkie układy będą się resetować. Też dosyć często zdarzało się że nie wszystkie wyświetlacze się zaświecały w tym samym momencie. Może ktoś wie dlaczego? Zdarzało się że wyświetlacz wskazywał 12:x1:x2, (x oznacza tutaj, że wszystkie diody były zgaszone) “Segment 1, 2, 3” - czas Te trzy segmenty są do siebie bardzo podobne, różnica jest jedynie przy licznikach. Czyli jeden segment może nam wyjaśnić działanie pozostałych. Omówimy segment pierwszy, schematy zostaną podane dla wszystkich. Segmenty są odpowiedzialne za zliczanie impulsów zegarowych, czyli jeżeli podamy na jeden z liczników 74HC393 sygnał zegarowy, w tym przypadku sygnał prostokątny o częstotliwości 1Hz, o wypełnieniu 50%, to owy układ będzie zliczał sekundy. 1/60Hz- minuty, 1/3600Hz-godziny. Segment pierwszy jest zbudowany z jednego układu 74HC393, posiada on 2 liczniki 4-bitowe w obudowie dip14. A oznaczmy za jedności sekund, B za dziesiętne. Do wejścia zegarowego licznika A wprowadzamy sygnał 1Hz. Na wyjściach tego licznika (A)Qa, (A)Qb, (A)Qc i (A)Qd pojawiają się odpowiednie stany. Stany się zmieniają zawsze po sygnale zegarowym. A więc mamy takie stany na wyjściach: (A)Qa=1 (A)Qb=0 (A)Qc=0 (A)Qd=0 To po sygnale zegarowym na licznik A na wyjściach będą sygnały: (A)Qa=0 (A)Qb=1 (A)Qc=0 (A)Qd=0 Z kodu binarnego 0001 po sygnale przechodzimy w stan 0010. Czyli z 1 na 2. Bramka AND służy do wykonania do każdego licznika odpowiednie modulo. Do wejść bramki podłączmy (A)Qb i A(Qd), a wyjście do wejścia resetującego licznika A oraz do kolejnych segmentów. Tym sposobem dla jedności sekund mamy modulo 10, ponieważ licznik ma za zadanie liczyć od zera do dziewięciu, licznik odpowiedzialny za dziesiętne sekundy ma już modulo 6, ponieważ sekund mamy 60, nie 100. Teraz przechodzimy do dekodera z kodu BCD na kod dla wyświetlacza 7 segmentowego, jest za to odpowiedzialny układ CD4511. Wejścia D0, D1, D2, D3 są podłączone do wyjścia licznika A(Qa, Qb, Qc, Qd). Tak więc: (A)Qa -> D0 (A)Qb -> D1 (A)Qc -> D2 (A)Qd -> D3 Stany wysokie na wejściach D0-D1 definiują nam wyjścia a, b, c, d, e, f, g, one zaś są podłączone do wyświetlacza 7 segmentowego, jednakże pomiędzy połączeniem między dekoderem a wyświetlacze znajdują się rezystory o rezystancji 1k ohm, 5% tolerancji. Służą one do ograniczenia prądu diody, bez nich w ciągu kilku sekund wszystkie diody by się spaliły. Tak samo postąpiono dla dziesiętnych sekund. Niestety ręczne ustawianie w prototypie nie zawsze działa, zapewne działanie poprawiono by stosując kondensatory filtrujące oraz rezystory podciągające. Przyszła wersja będą posiadać taką ochronę przed drganiami styków. “Segment 4” - kontrolny Segment 4 jest sercem całego układu. Na nim znajduje się generator 1Hz (aktualnie nie sprawny), układ odpowiedzialny za pozbycie się problemu godziny 24 oraz zasilanie całego układu. Rezonator kwarcowy ma wartość 32,768 kHz, układ 4060 jest dzielnikiem częstotliwości. W momencie, gdy sygnał zostanie doprowadzony do wejścia zegarowego CLK układu CD4060, to na wyjściu Q14 pojawi się sygnał o częstotliwości 2Hz. Q14 oznacza, że sygnał CLK dzieli przez 2^14, czyli przez 16 384. 32 768/16 384 = 2 Układ 4027 to podwójny przerzutnik JK. Pełni on funkcje dwójki liczącej, czyli zarazem dzieli częstotliwość przez 2. 2/2 = 1 Czyli na wyjściu otrzymujemy bardzo stabilny 1Hz. Niestety u nas układ nie działał poprawnie. Dlatego też powstał specjalny segment, ratunkowy “Segment 5” - ratunkowy Ten segment w początkowej fazie produkcji nie był przewidziany, został wymyślony z powodu możliwego niedziałania układu odpowiedzialnego za generowanie sygnału 1Hz. Jest to prosty układ oparty na bardzo znanym i powszechnie dostępnym układzie NE555. Na wyjściu 3 ukazuje się pseudo przebieg o częstotliwości 1Hz, nie jest on tak dokładny jak ten, którego opisaliśmy powyżej. Gdyby zegar działał 24 godziny, to możliwe, że albo by się spóźniał albo by przyśpieszał o ponad 20 minut w ciągu jednej doby. Problem godziny 24:00 W trakcie projektowania jednym z problemów była godzina 24. Był pomysł, aby zastosować prosty układ, licznik 7-bitowy, który miał za zadanie zliczyć 24 impulsy zegarowe z segmentu 2, a dokładniej z wyjścia bramki podłączonej do licznika odpowiedzialnego za dziesiętne minuty. Po 24 impulsach miał na chwilę odłączyć zasilanie przez co cały układ zliczanie rozpocząłby od zera. 23:59:59 -> przełączenie przekaźnika -> 00:00:00 Niestety owy układ by nie działał, ponieważ nie uwzględniliśmy pojemności w układzie oraz stanów nieustalonych na licznikach binarnych. Płytka PCB Płytka ma rozmiary 14cm x 17cm, wszystko się zmieściło, chociaż były problemy. PCB została wykonana metodą termotransferu, przy pomocy laminatora. Ścieżki oraz imiona naprawdę ładnie się wytrawiły, jesteśmy z tego bardzo zadowoleni. Tutaj kilka zdjęć z realizacji. Projekt będzie rozwijany aż pozbędziemy się większości problemów jakie spotkaliśmy. Wersje 2.0 też będzie na forbocie:) Może we wrześniu, październiku:)- 6 odpowiedzi
-
- 7
-
-
Dzień Dobry, Chciałbym nauczyć się podstaw assemblera. Mam tutaj na myśli strukturę języka (dyrektywy, sekcje programu itp.) - inaczej mówiąc, zagadnienia niezależne od architektury docelowej. Wiedzę chciałbym najbardziej wykorzystać przy pracowaniu z układami AVR i ARM. Korzystając z zasobów internetu trafiłem na wiele "tutoriali", jednak wszystkie z nich były wg mnie niedopracowane - wiele terminów było omawianych powierzchownie albo wcale, jakby autorzy z góry zakładali, że każdy te terminy zna. Tak więc, jeśli ktoś może zasugerować przystępną, w miarę aktualną lekturę, byłbym wdzięczny za jej link/tytuł.
- 13 odpowiedzi
-
- programowanie
- nauka
-
(i 1 więcej)
Tagi:
-
Jestem kompletnym nowicjuszem i przerabiam na spokojnie podstawowy kurs - po pierwszych czterech rozdziałach uzbierało się już kilka wątpliwości, które chciałbym rozwiać, zanim przejdę dalej. 1) Wiem już, że pomiary na większym, niż potrzebny zakresie nie uszkodzą miernika, jedynie wpływają negatywnie na precyzję, a co z odwrotną sytuacją? Czy coś się stanie, jeśli omyłkowo ustawię zbyt mały zakres do zbyt dużego napięcia? 2) Dlaczego jeśli spróbuję zmierzyć prąd (natężenie) przykładając miernik do samej baterii uszkodzę go, a w obwodzie z rezystorem jest to już w porządku? 3) Skąd mogę wiedzieć, ile maksymalnie prądu może zostać pobrane z baterii, np. takie 9V dołączonej do zestawu z kursem i czy można to jednak jakoś sprawdzić miernikiem nie powodując szkód? 4) Czy schemat z odczytywaniem kodów paskowych z rezystorów dotyczy jakiegoś konkretnego producenta/kraju, czy jest to międzynarodowy i powszechnie znany schemat? 5) W pierwszym eksperymencie z prawa Ohma (str.33) budujemy pierwszy obieg - nie rozumiem kompletnie dlaczego akurat w taki sposób. Czerwony kabel (+) podłączamy od baterii do płytki, później mamy rezystor, a drugi kabel od baterii (-) zostaje nie podłączony do niczego. Dlaczego akurat tak to wygląda? Co by się stało, gdyby zamiast (+) podłączyć od układu (-)? Albo podłączyć (-) z drugiej strony opornika? Dlaczego pojawiła się informacja, żeby nie próbować podłączać losowych mniejszych rezystorów i nie dokonywać pomiarów? Miernik jest w stanie chyba zmierzyć znacznie większe natężenie prądu, niż z baterii 9V? Chętnie bym poeksperymentował więcej w tej kwestii, ale wystraszyły mnie przestrogi o uszkodzeniu miernika, stąd pytania. 6) Na str. 36 budujemy układ z dwoma rezystorami - wykonałem oczywiście ćwiczenia, pomiary i obliczenia się zgadzały, ale znowu nie bardzo rozumiem sposób przykładania kabli (+/-) w celach pomiarowych. Na rys 3.10a czarny kabel (-) od miernika przykładamy tak jakby bezpośrednio do (-) na baterii, a czerwony (+) do rezystora 10k po przeciwnej stronie niż kabel zasilający od baterii (+). Na rys 3.10b - analogicznie, to samo dla rezystora 1k. Tymczasem na rys 3.10c wszystko się zmienia. Nagle czerwony kabel (+) jest przyłożony do baterii, a czarny do jednego z rezystorów - zupełnie nie rozumiem dlaczego tak. 7) Czy budując takie układy istotna jest kolejność podpinania? Tzn. najpierw rezystory, a bateria na końcu? Czy jeśli potem przerabiam układ na inny muszę odłączać baterię przed wyjęciem rezystorów, czy nie jest to koniecznie i może ona zostać wpięta, a ja będę sobie dowolnie zmieniał konfigurację? 8 ) W Rozdziale 3.6.1 pojawia się stwierdzenie, że do zasilania układu wymagającego 5V nie powinno się używać baterii 9V + dzielników napięcia, ponieważ nie można pobrać zbyt dużego prądu z dzielników. Przecież 5V to mniejsze napięcie niż 9V, więc rozumiem problem z zasileniem układu wymagającego 9V baterią 5V, ale przejście z 9V na 5V powinno działać i mieć jeszcze spory zapas mocy? 9) Dlaczego przy sprawdzaniu napięcia na potencjometrze (str. 44) nie zostawiamy czarnego kabla od baterii (-) na zewnątrz (tak jak przy ćwiczeniach z rysunków 3.10)? 10) Dlaczego miernik miałby się zepsuć przy próbie pomiaru oporu bezpośrednio z baterii (informacja ze strony 45)? Wiem, to bardzo dużo pytań. Spodobała mi się pierwsza część kursu i chciałbym pójść dalej - ale boję się, że zbyt mało ogarnąłem, mimo przerobienia każdego ćwiczenia +5 razy i doczytywania wątpliwości w Internecie. Wygląda na to, że mam gdzieś w mózgu jakiś bardzo duży opornik do przyjmowania wiedzy
-
Jak najlepiej wydrukowac caly kurs np. Podstawy Arduino ?
plisiews opublikował temat w Dyskusje o FORBOT.pl
Witam, Czy jest jakis przyjazny link za pomoca ktorego mozna wydrukowac od razu caly kurs np. Podstaw Arduino (zoptymalizowany do wydruku czyli sam kurs ze zdjeciami/schematami pomijajacy linki do innych artykulow, podzial stron) itp ? P.S. Tak wiem ze moge otworzyc 11 oddzielnych stron w przegladarce z kazdym rozdzialem osobno i wydrukowac kazdy z nich ale to nie bedzie to samo (np. podzial stron) ;) Pozdrawiam.
