Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'informatyka'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - DIY
    • Projekty - DIY roboty
    • Projekty - DIY (mini)
    • Projekty - DIY (początkujący)
    • Projekty - DIY w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Imię


Strona

Znaleziono 4 wyniki

  1. Sztuczna inteligencja jest jednym z najbardziej dynamicznie rozwijających się obszarów współczesnej technologii. Od momentu jej powstania, AI (ang. Artificial intelligence) nieustannie ewoluuje, przekształcając sposób, w jaki żyjemy i pracujemy. W dzisiejszym świecie AI jest obecna niemal wszędzie - od inteligentnych asystentów w naszych telefonach, przez systemy rekomendujące treści w mediach społecznościowych, aż po zaawansowane algorytmy wykorzystywane w analizie danych. W dobie rozwijających się algorytmów sztucznej inteligencji warto wiedzieć, czym ona tak właściwie jest i jak działa. W tym artykule przedstawię Ci: Czym jest sztuczna inteligencja. Problemy sztucznej inteligencji. Zastosowania sztucznej inteligencji. Wstęp do algorytmów uczenia maszynowego: Podział algorytmów. Regresja liniowa. Algorytm genetyczny. Sztuczne sieci neuronowe. Algorytmy i modele sztucznej inteligencji mogą być fascynujące i bardzo efektywne. Źródło zdjęcia. Czym jest sztuczna inteligencja Frazę sztuczna inteligencja należy rozdzielić na sztuczna oraz inteligencja. Przyjrzyjmy się drugiemu rzeczownikowi. Inteligencja - zdolność rozumienia, uczenia się oraz wykorzystywania posiadanej wiedzy i umiejętności w sytuacjach nowych ~ sjp.pwn.pl. Jest to abstrakcyjne pojęcie, któremu filozofowie, psycholodzy i inni uczeni przypisywali różne definicje, takie jak: Ogólna zdolność jednostki do świadomego dostosowywania swojego myślenia do nowych wymagań. ~ William Stern. Źródło definicji. [...] Wszystkie asymilacyjne i akomodacyjne interakcje między organizmem a środowiskiem. ~ Jean Piaget. Źródło definicji. Zdolność osoby do przenoszenia swojej wiedzy i zgromadzonego doświadczenia z jednej sytuacji do drugiej. ~ George Ferguson. Źródło definicji. Max Tegmark, profesor fizyki w MIT w swojej książce Życie 3.0 przyjmuje bardzo szeroką definicję, tj. Inteligencja = zdolność do osiągania złożonych celów. Wszystkie te definicje obejmują słowa kluczowe, jakimi są dostosowywanie, akomodacja i przenoszenie. Zatem za inteligencję możemy przyjąć zdolność do nauki, zrozumienia i adaptacji do nowych warunków. Sztuczna inteligencja - dział informatyki badający reguły rządzące zachowaniami umysłowymi człowieka i tworzący programy lub systemy komputerowe symulujące ludzkie myślenie. ~ sjp.pwn.pl. Zatem sztuczną inteligencją są modele, które starają się naśladować ludzkie myślenie. Mając na uwadze szeroko pojętą definicję inteligencji, możemy też powiedzieć, że sztuczną inteligencją jest rozwiązanie technologiczne/program komputerowy, który potrafi uczyć się i dostosowywać do nowych sytuacji, znajdując rozwiązania na zadany problem. Istnieje wiele rodzajów ludzkiej inteligencji: emocjonalna, społeczna i twórcza. Źródło zdjęcia. Problemy sztucznej inteligencji Algorytmy AI (szczególnie uczenia maszynowego) opierają się na danych, co oznacza, że jakość ich działania w dużej mierze zależy od jakości i kompletności danych, którymi są trenowane i weryfikowane. Jeśli dane uczące są niepełne lub zawierają błędy, sztuczna inteligencja może powielać te same niedoskonałości. Może to prowadzić do niepoprawnych rozwiązań. Przykładem może być ChatGPT i generowanie obrazu kieliszka wypełnionego w pełni winem. Istnieje względnie mało zdjęć, obrazów i innych źródeł, które przedstawiają kieliszek wypełniony po brzegi winem, dlatego prawdopodobnie brakuje takich źródeł w danych, którymi był trenowany ChatGPT. Skutkuje to tym, że model językowy nie potrafi generować takich obrazów. Oczywiście pojawia się tutaj problem z interpretacją samego polecenia. Chociaż pojawiają się głosy, że sztuczna inteligencja już potrafi to robić… Zapytanie o wygenerowanie obrazu. Wniosek jest jeden. Sztuczna inteligencja może się mylić. Nie bez powodu algorytmy te ocenia się i poddaje się testom i innym zabiegom, żeby były jak najdoskonalsze. O błędach informują twórcy modeli językowych w krótkich komunikatach, zazwyczaj w obrębie pola do wpisywania poleceń. Komunikat na stronie ChatGPT. Komunikat na stronie MS Copilot. Błędy, które popełniają modele językowe, nie zmieniają faktu, że sztuczna inteligencja to bardzo obiecująca i efektywna dziedzina, która znajduje zastosowanie w wielu branżach. Zastosowania sztucznej inteligencji 1. LLM i tłumaczenie tekstów Tematem na topie od ostatnich kilku lat są duże modele językowe (ang. Large Language Models), które zrewolucjonizowały sposób, w jaki korzystamy z internetu. Potrafią analizować, rozumieć i generować tekst w sposób zbliżony do ludzkiego. Oczywistymi przykładami, których chyba nie muszę wyjaśniać są ChatGPT oraz DeepSeek. Warto przedstawić polski model językowy: Bielik. W 2017 roku powstało narzędzie DeepL – start-up, który założył Polak dr Jarosław Kutyłowski. Według strony DeepL tłumacz korzysta po części z Transformer Model. DeepL wykorzystuje algorytmy sztucznej inteligencji do tłumaczenia tekstów. Źródło zdjęcia. 2. Rozpoznawanie obrazów i elementów na obrazach Dzięki zastosowaniu sieci neuronowych algorytmy wykorzystujące sztuczną inteligencję potrafią identyfikować twarze, przedmioty, znaki drogowe, a nawet emocje na ludzkich twarzach. Rozpoznawanie elementów na obrazie to nie tylko identyfikowanie, co znajduje się na zdjęciu, ale też gdzie dokładnie dany obiekt się znajduje oraz jakie relacje zachodzą między różnymi elementami sceny. Sztuczna inteligencja jest w stanie rozpoznać twarz, oko, a nawet źrenicę oka. Źródło zdjęcia. 3. Pomoc przy diagnozowaniu chorób Sztuczna inteligencja może znajdować zastosowanie w medycynie, szczególnie w obszarze diagnozowania chorób. Jednym z najbardziej obiecujących obszarów jest onkologia. Algorytmy sztucznej inteligencji coraz skuteczniej analizują obrazy i wykrywają zmiany nowotworowe. Naukowcy z Harvard Medical School opracowali innowacyjne narzędzie o nazwie CHIEF, które wykorzystuje sztuczną inteligencję do diagnozowania nowotworów. Model ten analizuje cyfrowe obrazy tkanek nowotworowych, identyfikując komórki rakowe i przewidując profil molekularny guza na podstawie cech widocznych na obrazach. CHIEF został przetestowany na 19 różnych typach nowotworów, osiągając dokładność wykrywania raka na poziomie niemal 94%. Miejmy nadzieję, że w przyszłości sztuczna inteligencja będzie służyła do ratowania życia. Źródło zdjęcia. 4. Sztuczna inteligencja w elektronice Implementację algorytmów sztucznej inteligencji umożliwiają coraz bardziej wydajne platformy sprzętowe, takie jak rozwiązania NVIDIA Jetson, które umożliwiają uruchamianie aplikacji korzystających z uczenia maszynowego. Warto zwrócić uwagę na projekty, takie jak reComputer lub reCamera, które stanowią wygodną bazę do pracy z AI w praktyce. Takie urządzenia umożliwiają tworzenie autonomicznych systemów wizyjnych, robotów czy inteligentnych czujników. Rozwój technologiczny przyczynił się do konstrukcji takiego sprzętu jak Nvidia Jetson. Na zdjęciu widać Nvidia Jetson Nano developer kit. Źródło zdjęcia. Wstęp do algorytmów uczenia maszynowego Sercem każdego z tych zastosowań są konkretne algorytmy, które przetwarzają dane, uczą się na ich podstawie i podejmują decyzje. Przybliżę Ci zasadę działania kilku algorytmów uczenia maszynowego. Skoncentrujemy się na aspektach formalnych, tworząc bazę pod dalszą analizę tych metod. Podział algorytmów Pojęcie sztuczna inteligencja dzieli się na różne kategorie: Klasyfikacja sztucznej inteligencji. Źródło zdjęcia. Powyżej wyróżniono uczenie maszynowe (ang. Machine Learning), czyli dziedzinę sztucznej inteligencji zajmującą się algorytmami, które samodzielnie doskonalą swoje działanie na podstawie zebranych doświadczeń. Najpopularniejszym podziałem tych algorytmów jest podział na: Uczenie nienadzorowane - algorytmy samodzielnie odkrywają wzorce w zbiorze danych. Uczenie nadzorowane - człowiek przedstawia algorytmowi, jakie wyjście powinno pojawić się przy odpowiednim wejściu. Uczenie przez wzmacnianie - algorytm uczy się na podstawie własnych doświadczeń w pewnym środowisku. Podział algorytmów uczenia maszynowego. Źródło zdjęcia. Przykłady algorytmów uczenia maszynowego 1. Regresja liniowa Jeden z podstawowych algorytmów uczenia maszynowego i statystyki, używany do modelowania zależności między zmiennymi. Jego głównym celem jest przewidywanie wartości zmiennej na podstawie jednej lub wielu zmiennych wejściowych. Celem regresji jest dopasowanie takiej prostej, która najlepiej opisuje dane, czyli minimalizuje różnice (błędy) między przewidywanymi a rzeczywistymi wartościami. Przykład rozwiązania zadania regresji liniowej. Niebieskie punkty to zbiór danych, dla którego należy znaleźć prostą najlepiej opisującą te dane. W tym przypadku jest to czerwona prosta. Źródło zdjęcia. Szczegóły matematyczne zostawiam dla ciekawskich. W tym przypadku przedstawiamy algorytmowi, jakie jest wejście (oś x) i wyjście (oś y). Algorytm na tej podstawie uczy się co może być pomiędzy jedną, a drugą wartością. Jest to zatem uczenie nadzorowane. 2. Algorytm genetyczny Algorytmy genetyczne (ang. Genetic Algorithms, GA) to techniki optymalizacyjne oparte na zasadach ewolucji biologicznej, takich jak selekcja naturalna, krzyżowanie i mutacja. Algorytm minimalizuje zdefiniowaną funkcję celu, krzyżując i modyfikując osobniki z populacji. Natura jest inspiracją do różnych rozwiązań technicznych. W tym wypadku inspiracją do stworzenia algorytmu genetycznego była ewolucja. Źródło zdjęcia. Algorytm genetyczny działa następująco: Definicja funkcji celu: należy matematycznie określić, co algorytm będzie minimalizował w celu ulepszenia populacji osobników. Generacja populacji początkowej: jako populację rozumiemy zbiór osobników posiadających cechy, które w każdej iteracji będziemy poddawali ocenie funkcją celu. Obliczenie wartości funkcji celu dla każdego osobnika: każdemu osobnikowi przypisujemy ocenę, która wskazuje na to, jak silny jest osobnik. Ocena, czy algorytm powinien zostać zakończony: jest to uzależnione od czynników, które zdefiniujemy. Algorytm może zakończyć się po konkretnej liczbie iteracji lub, gdy stworzymy osobnika o satysfakcjonującej wartości funkcji celu. Generacja populacji potomnej: w tym kroku może (nie musi) dziać się wiele rzeczy. Głównym celem tego kroku jest stworzenie kolejnej populacji osobników, które będą lepsze od poprzednich. Stosuje się tu kilka metod: Selekcja: spośród osobników wybieramy tylko te, które są dla nas satysfakcjonujące. Istnieje kilka metod, które pozwalają na selekcję, w tym metoda progowa bądź ruletki. Krzyżowanie: łączenie ze sobą najsilniejszych osobników, które przeszły selekcję. Jeżeli cechy osobników definiujemy liczbowo, to możemy analizować ich wartość binarną. Krzyżowanie polega na mieszaniu cech osobników. Np. binarną wartość osobnika dzieli się na pół. Powstają dwie połówki. Te połówki łączy się z połówkami drugiego osobnika. Tak powstają kolejne dwa osobniki. Mutacja: polega na odwróceniu pojedynczego bitu osobnika. Inwersja: odwrócenie ciągu bitów osobnika. Schemat blokowy algorytmu genetycznego. Algorytm genetyczny wykonuje zadanie optymalizacji. 3. Sztuczne sieci neuronowe Sztuczne sieci neuronowe to modele matematyczne inspirowane strukturą i działaniem ludzkiego mózgu. Budowa neuronu. Źródło zdjęcia. W 1943 Warren McCulloch oraz Walter Pitts zaproponowali model matematyczny neuronu, zwany Neuronem McCullocha-Pittsa. Model ma wejścia i wyjście binarne. Model McCulloch Pittsa. Źródło zdjęcia. W powyższym modelu wejścia ‘x’ są mnożone przez wagę, a następnie sumowane ze sobą. Ta wartość przechodzi przez funkcję aktywacji, której wyjście daje odpowiedź w postaci 0 lub 1. Ewolucją powyższego modelu jest perceptron sformułowany przez Rosenblatta. Jego główną innowacją było wprowadzenie możliwości uczenia się na podstawie danych - perceptron potrafi dostosowywać swoje wagi w taki sposób, by lepiej dopasowywać się do zadania klasyfikacyjnego. W perceptronie dane wejściowe mogą być wartościami rzeczywistymi, a każdemu wejściu przypisana jest waga, czyli liczba, która określa znaczenie danego sygnału. Perceptron oblicza ważoną sumę wejść i dodaje do niej tzw. bias (wartość przesuwająca próg aktywacji). Następnie ta suma przechodzi przez funkcję aktywacji. Podstawą działania perceptronu jest reguła uczenia. Wagi są aktualizowane na podstawie różnicy między oczekiwanym wynikiem a wynikiem uzyskanym. Jeśli perceptron popełnia błąd, modyfikuje swoje wagi, by w przyszłości lepiej klasyfikować dane. Perceptron. Źródło zdjęcia. Pojedynczy perceptron ma ograniczone możliwości. Jest w stanie rozwiązywać jedynie problemy liniowo separowalne, czyli takie, w których dane można oddzielić prostą linią (lub hiperpowierzchnią w przestrzeni wielowymiarowej). Aby poradzić sobie z bardziej złożonymi zależnościami, wiele takich neuronów łączy się w sieć. Sztuczna sieć neuronowa składa się z warstw: Warstwa wejściowa – przyjmuje dane wejściowe. Warstwa (lub warstwy) ukryta – zawiera wiele perceptronów, które przetwarzają dane na coraz wyższym poziomie abstrakcji. Warstwa wyjściowa – generuje końcową decyzję, np. klasyfikację lub wartość liczbową. Przykład sieci neuronowej. Źródło zdjęcia. Przykładem uczenia sieci neuronowej jest algorytm propagacji wstecznej. Oprócz klasycznej sieci feedforward przedstawionej powyżej istnieje jeszcze wiele innych np. sieć rekurencyjna lub rozszerzenie sztucznej sieci neuronowej - splotowa sieć neuronowa. Gorąco zachęcam do rozszerzenia tematu. Podsumowanie Sztuczna inteligencja przestała być futurystycznym pojęciem rodem z filmów science fiction, a stała się realnym narzędziem zmieniającym sposób, w jaki postrzegamy technologię, biznes i codzienne życie. To fascynująca dziedzina, która nie tylko stawia przed nami nowe możliwości, ale również wyzwania, ucząc nas pokory wobec potęgi danych i algorytmów. AI nieustannie się rozwija – zarówno w zakresie prostych rozwiązań wspomagających naszą codzienność, jak i w obszarach wymagających głębokiej analizy i precyzji, jak medycyna czy analiza obrazu. Dodajmy też kontekst: dlaczego właśnie teraz sztuczna inteligencja zyskała taką popularność i realną wartość użytkową? Kluczowy przełom nastąpił dzięki połączeniu kilku czynników: potężnych modeli językowych trenowanych na ogromnych zbiorach danych, rosnącej mocy obliczeniowej (szczególnie dzięki GPU), oraz rozwoju technik uczenia głębokiego (deep learning). To one sprawiły, że AI zaczęła nie tylko rozumieć i generować język na poziomie zbliżonym do ludzkiego, ale również przetwarzać obrazy, kod, dźwięk czy nawet rozumowanie w zupełnie nowej jakości. Warto jednak podchodzić do tematu z rozsądkiem. Na fali popularności łatwo wpaść w pułapkę marketingowego nadużywania pojęcia „sztuczna inteligencja”, które często wykorzystywane jest tylko jako chwytliwe hasło – nawet wtedy, gdy rzeczywistość technologiczna danego rozwiązania nie ma z AI zbyt wiele wspólnego. I na koniec ważne zastrzeżenie: wyłącznie to podsumowanie zostało napisane przeze mnie - ChatGPT. Pozdrawiam czytelników Forbota!
  2. Wstęp Czy wiesz, że FORBOTJESTCOOL(36) = 2676043599332257617141(10)? Ja też nie wiedziałem. Dowiedziałem się, gdy włączyłem kalkulator systemów liczbowych i odkryłem system trzydziesto szóstkowy. Do zapisu liczb wykorzystuje on cyfry od 0 do 9 i litery od A do Z. Rzeczywiście, istnieją systemy liczbowe, w których jest tak dużo dostępnych znaków, że można z nich zapisywać słowa, a nawet całe zdania. W tym przykładzie pokazałem Ci, że istnieją większe systemy liczbowe, niż te powszechnie znane, np. dwójkowy, czwórkowy, ósemkowy, czy dziesiętny. Przedstawię Ci system szesnastkowy, za pomocą którego można reprezentować kolory lub adresy urządzeń podłączonych do twojego Arduino System szesnastkowy stosuje się do adresowania urządzeń, które komunikują się za pomocą standardu I2C. Źródło zdjęcia. Jeżeli nie znasz podstaw systemów liczbowych lub nie wiesz jak zamienić liczbę dziesiętną na binarną i na odwrót, to zapraszam Cię do mojego poprzedniego artykułu artykułu o systemie binarnym. To kluczowy temat, a wiedza z niego będzie przydatna w dalszych częściach tego artykułu! Konwersja liczb szesnastkowych i dziesiętnych System szesnastkowy, nazywany również heksadecymalnym (w skrócie hex), jak sama nazwa wskazuje, zawiera w sobie 16 znaków, którym przypisane są odpowiednie wartości systemu dziesiętnego. W systemie szesnastkowym korzystamy z cyfr 0..9 i liter A...F: A(16) = 10(10) B(16) = 11(10) C(16) = 12(10) D(16) = 13(10) E(16) = 14(10) F(16) = 15(10) a) Zamiana przy użyciu operacji modulo (dec → hex) Jest to standardowa, algorytmiczna operacja, którą można wykonać z każdym innym systemem liczbowym. W naszym przypadku liczbę dzieli się całkowicie przez 16(10) i zapisuje się resztę z dzielenia. Powtarza się to do momentu, aż w wyniku dzielenia znajdzie się 0. Wynik odczytywany jest od końca z reszt z dzielenia. Spróbujmy zamienić liczbę 234(10) na liczbę hex: Wynik dzielenia całkowitego kolejnych liczb zapisujemy w lewej kolumnie a resztę z dzielenia po prawej. Wynik, czyli liczbę szesnastkową, odczytuje się z reszt z dzielenia - od dołu do góry. Poniżej jeszcze dwa przykłady. b) Konwersja za pomocą wag (hex → dec) W tej metodzie korzystamy z definicji systemu liczbowego - każda cyfra na konkretnej pozycji definiuje wagę tej pozycji. Przeliczmy liczbę 1CA9(16): Podstawą liczby heksadecymalnej jest 16(10). Cyfra na ostatniej pozycji ma wagę 160(10), przedostatnia 161(10), kolejna 162(10) itp. Mnożymy wagi przez cyfry na ich pozycjach. Suma wszystkich iloczynów to wynik. c) Konwersja za pomocą systemu binarnego (hex → bin → dec) Jest to sztuczka, która może Ci pomóc zamienić w szybki sposób względnie małą liczbę hex na liczbę dziesiętną. Rozsuń liczbę hex na pojedyncze cyfry. Każdą cyfrę zamień na liczbę binarną. Złóż powstałe liczby binarne. Zamień liczbę binarną na decymalną. Metodę rozsuwania stosuje się głównie do zamiany hex → bin. Weźmy na tapetę liczbę D8(16): Rozdzielamy D8(16) na poszczególne cyfry - D(16) i 8(16). D(16) w hex to 13(10) w dec. 8(16) w hex to 8(10) w dec. Wiedząc to jesteśmy w stanie zapisać te liczby w systemie binarnym. Składamy obliczone części. Złożoną część przeliczamy na system dziesiętny. d) Konwersja za pomocą systemu binarnego (dec→ bin → hex) Tego typu zamiana liczb odbywa się analogicznie do poprzedniego przykładu, ale w odwrotnej kolejności: Zamień liczbę dec na bin. Rozsuń liczbę bin co 4 bity (4 cyfry). Zamień otrzymane liczby bin na hex. Złóż otrzymane liczby hex. Jak widzisz konwersja między systemem hex a dziesiętnym nie jest trudna. Użyliśmy tylko i wyłącznie wiedzy z poprzedniego artykułu. Polecam przećwiczyć te umiejętności wymyślając jakąś małą liczbę heksadecymalną (np. składającą się z dwóch cyfr) i zamienić ją na liczbę binarną/dziesiętną. Możesz też wymyślić liczbę dziesiętną i dokonać konwersji na heksadecymalną. Zastosowania liczb hex Do czego mogą się przydać liczby szesnastkowe? Ich najważniejszą właściwością jest zwięzły zapis dużych liczb: FFFF(16) = 65535(10) = 1111111111111111(2) Jak widać powyżej, liczbę 16 bitową można zapisać za pomocą 4 cyfr (liter) w systemie heksadecymalnym. a) Reprezentacja kolorów Jednym ze sztandarowych przykładów zastosowania systemu szesnastkowego jest zapis koloru. Kod składa się ze znaku # i trzech dwucyfrowych liczb szesnastkowych, które odpowiednio oznaczają poziomy kolorów: czerwonego, zielonego i niebieskiego (RGB). Im wyższa liczba, tym intensywniejszy jest poszczególny składnik koloru. Na przykład: ● #FF0000 - czerwony, rgb(255, 0, 0), ● #00FF00 - zielony, rgb(0, 255, 0), ● #0000FF - niebieski, rgb(0, 0, 255), ● #000000 - czarny, brak jakiegokolwiek składnika, rgb(0, 0, 0), ● #FFFFFF - biały, połączenie wszystkich składników, rgb(255, 255, 255), ● #A020F0 - fioletowy, rgb(160, 32, 240). b) Adresy pamięci W jaki sposób zapisać adres pod którym ma być przechowywana zmienna? Dzisiejsze komputery charakteryzują się ogromną pamięcią. Jest wiele możliwych adresów w pamięci pod które można zapisać jakąś informację. Wiąże się to z dużymi wartościami tych adresów. Liczby, które definiują dany adres są po prostu długie. W takim wypadku możemy skorzystać z liczby szesnastkowej, która skróci nam ten zapis. Tę technikę stosuje się często. Przykładem jest np. odczyt adresu zmiennej w języku C : Deklarujemy 3 zmienne po sobie. Odczytujemy po kolei ich adresy. Każdy odczytany adres będzie zapisany w systemie szesnastkowym… …a każdy adres będzie się różnił od poprzedniego o rozmiar zadeklarowanej zmiennej. Deklaracja zmiennej char (1 bajt): char a = 'X'; char b = 'Y'; char c = 'Z'; printf("Rozmiar pojedynczego znaku: %d\n", sizeof(char)); printf("Adres zmiennej a: %p\n", &a); printf("Adres zmiennej b: %p\n", &b); printf("Adres zmiennej c: %p\n", &c); Wyjście: Rozmiar pojedynczego znaku: 1 Adres zmiennej a: 0061FF1F Adres zmiennej b: 0061FF1E Adres zmiennej c : 0061FF1D Deklaracja zmiennej short (2 bajty) : short x = 1; short y = 2; short z = 3; printf("Rozmiar pojedynczego shorta: %d\n", sizeof(short)); printf("Adres zmiennej x: %p\n", &x); printf("Adres zmiennej y: %p\n", &y); printf("Adres zmiennej z: %p\n", &z); Wyjście: Rozmiar pojedynczego shorta: 2 Adres zmiennej x: 0061FF1A Adres zmiennej y: 0061FF18 Adres zmiennej z: 0061FF16 c) Adresy urządzeń w transmisji I2C Jednym z najpopularniejszych zastosowań systemu szesnastkowego jest zapis adresów urządzeń w komunikacji I2C (TWI). Skorzystajmy z karty katalogowej czujnika temperatury Adafruit 4089 z cyfrowym termometrem ADT7410, który może komunikować się właśnie przez ten protokół. Wycinek karty katalogowej Adafruit 4089. Źródło zdjęcia. Karta katalogowa urządzenia komunikującego się przez I2C powinna dostarczać klientowi informację o adresie danego urządzenia. Niektóre urządzenia dają możliwość konfiguracji adresu za pomocą pinów tego urządzenia. W przykładzie powyżej, jeżeli korzystamy z kilku tych samych czujników lub adres tego czujnika powtarza się z adresem innego, to za pomocą pinów A0 i A1 możemy zmienić jego adres. d) Adres MAC Jest to unikatowy i niepowtarzalny adres karty sieciowej nadany przez producenta. Stanowi on 48 bitową liczbę z czego pierwsze 24 bity oznaczają producenta karty sieciowej (ID producenta). Pozostałe 24 to ID urządzenia. Ze względu na rozmiary liczb, które są używane w adresach MAC, pisze się je w systemie szesnastkowym, co znacznie ułatwia odczyt takiego adresu. Przykładowe sposoby zapisu adresu MAC: 00:0c:29:cc:55:5e - MAC w Linux. Separatorem między parami znaków jest dwukropek. 00-0c-29-cc-55-5e - MAC w Windows. Separatorem między parami znaków jest myślnik. 000c.29cc.555e - MAC w urządzeniu sieciowym Cisco. Kropki między hextetami Adres MAC w Linux. Źródło zdjęcia. e) Komendy w postaci liczb hex Wysyłanie komend do mikrokontrolera może odbywać się właśnie w tym systemie. Dlaczego? Powód jest ten sam co wcześniej - możemy zawrzeć wiele komend w zwartym zapisie. Np. 0x00 - uśpij urządzenie, 0x01 - wybudź urządzenie, 0x02 - sparuj urządzenie, 0x03 - skonfiguruj urządzenie, 0x1F - włącz LED, itp. Jest to moim zdaniem dobry pomysł do organizacji i implementacji komunikacji z uC. Podsumowanie System szesnastkowy to bardzo przydatny i elastyczny system, który pozwala na zapisanie dużych liczb w krótkim zapisie. Jest on wykorzystywany praktycznie wszędzie, gdzie korzysta się z wielobitowych liczb. Nasuwa się jednak pytanie: Dlaczego nie korzystamy z większych systemów liczbowych? Jest kilka powodów: Złożoność zapisu - w systemie hex stosuje się 16 cyfr. Wyższe systemy liczbowe wprowadzają kolejne znaki oznaczające kolejne cyfry. W pewnym momencie może być po prostu za dużo tych znaków do interpretacji, co może komplikować program. Zgodność z potęgą liczby dwa - 16(10) = 24(10). System będący potęgą dwójki ułatwia obliczenia matematyczne i jest zgodny z logiką komputerową i cyfrową.
  3. Kiedy dam Ci zadanie: dodaj do siebie 3 i 6 i podaj wynik, to na 90% podasz automatyczną odpowiedź 9. Względnie proste operacje matematyczne są dla nas naturalne do rozwiązania, bo niemal codziennie takie rozwiązujemy. Natomiast ciężej jest z operacją 11+1, bo odpowiedzią nie musi być 12. Co gorsza odpowiedź do pierwszego przykładu nie musi wynosić 9! W języku mówionym każda wypowiedź jest zależna od kontekstu. Mówiąc zamek możemy mieć na myśli budynek lub zapięcie od kurtki. Tak samo jest z liczbami. Wynik zależy od kontekstu, w jakim dokonujemy obliczeń, a taki kontekst nazywamy systemem - ogólnie systemem liczbowym. Jednym z najpopularniejszych systemów liczbowych jest system binarny. Źródło zdjęcia. Innymi słowy, system liczbowy jest zbiorem reguł, według którego zapisywane są liczby. Jego nazwa definiuje, ile znaków służy do zapisu liczb. Przykładowo system czwórkowy korzysta z liczb od 0 do 3, czyli korzysta z 4 cyfr. Ludzie korzystają z systemu dziesiętnego, który jest systemem pozycyjnym. Oznacza to, że cyfry w liczbie określają ilość jedności, dziesiątek, setek itp. Te jedności, dziesiątki nazwiemy wagami. Przykładowo: liczba 375, to tak naprawdę: 3 setki, 7 dziesiątek i 5 jedności, 3 * 100 + 7 * 10 + 5 * 1, 3 * 102 + 7 * 101 + 5 * 100. Zauważmy, że wagi określa się jako potęgi liczby definiującej system liczbowy do pozycji liczby od prawej strony zaczynając od zera. Istnieją różne systemy liczbowe. Najpopularniejsze z nich to: Dwójkowy (binarny): np. 1011 (dziesiętnie: 11), do zapisu liczb używa się 0 i/lub 1. Czwórkowy: np. 3102 (dziesiętnie: 210), używa się cyfr 0-3. Ósemkowy (oktalny): np. 75 (dziesiętnie 61), używa się cyfr 0-7. Dziesiętny (decymalny): np. 599, używa się cyfr 0-9. Szesnastkowy (heksadecymalny): np. 6F (dziesiętnie 95), używa się cyfr 0 - F. Występują tutaj dodatkowe symbole dla liczb większych od 9: A = 10, B = 11, C = 12, itd. do F = 15. W tym artykule skupimy się na systemie dwójkowym, czyli jednym z najważniejszych systemów w informatyce, elektronice i ogólnie technice Dlaczego systemu binarnego używa się w informatyce i elektronice? Tak naprawdę jest to spowodowane wygodą przesyłania informacji. Pojawienie się napięcia może oznaczać 1, a jego brak 0. Wprowadzenie większej ilości wartości, takich jak różne poziomy napięcia, wprowadza dodatkową złożoność takiego systemu, ponieważ wymaga interpretacji różnych wartości, co może stanowić wyzwanie. We wczesnym etapie rodzenia się komputerów binarność nie była oczywista, co potwierdza skonstruowanie komputera ENIAC, który był komputerem wykorzystującym system dziesiątkowy. Komputery jakie znamy obecnie to cud techniki, którym początki dał m.in. ENIAC. Źródło zdjęcia. Konwersja liczb binarnych i dziesiętnych Jak już wcześniej zostało wspomniane, liczba binarna składa się z samych zer i jedynek. Abyśmy mogli ją zrozumieć po naszemu, czyli jako liczbę dziesiętną, należy dokonać kilku obliczeń - konwersji. Poniżej przedstawiam kilka sposobów na przekształcanie liczb. Tabela powyżej przedstawia liczby dziesiętne i odpowiadające im liczby binarne. Źródło zdjęcia. a) Zamiana przy użyciu operacji modulo (dec → bin) Ta metoda jest wolna i bardzo algorytmiczna. Liczbę dzieli się całkowicie przez 2 i zapisuje się resztę z dzielenia. Powtarza się to do momentu, aż w wyniku dzielenia znajdzie się 0. Wynik odczytywany jest od końca. Zgodnie z powyższą grafiką za każdym razem dzielimy wyższą liczbę. Wynik dzielenia całkowitego zapisujemy w lewej kolumnie a resztę z dzielenia po prawej. Wynik, czyli liczbę binarną, odczytuje się od dołu do góry. Tę metodę można zastosować do jakiegokolwiek systemu liczbowego. Gdyby 22 zacząć dzielić całkowicie przez np. 8, to reszty z dzielenia wskazałyby nam liczbę ósemkową. b) Zapełnianie potęgami (dec → bin) Jest to zdecydowanie szybsza i prostsza metoda. Zamienianą liczbę dziesiętną nazwijmy x. Rozpisz potęgi dwójki (20, 21, 22…) od prawej do lewej, do ostatniej liczby, która jest mniejsza lub równa x. Zapełnianie zacznij od lewej strony, czyli od najwyższej potęgi. Pierwsza potęga mieści się w x, dlatego zapisz pod nią 1. Przejdź od lewej do prawej strony zapisując jedynkę pod tymi potęgami, które w sumie z poprzednimi pod którymi znajduje się 1 nie przekracza x. Wpisz 0 pod tymi potęgami, które już nie mieszczą się w x. Wynik przeczytaj od lewej do prawej. c) Konwersja za pomocą wag (bin → dec) W tej metodzie korzystamy z definicji systemu liczbowego, która została przedstawiona wcześniej. Każda cyfra na konkretnej pozycji definiuje wagę tej pozycji. Uwaga: aby podkreślić w zapisie liczby w jakim systemie jest ona zapisana, pisze się w indeksie dolnym w nawiasach podstawę systemu danej liczby. Przeliczmy liczbę 10110(2): Podstawą systemu w liczbie binarnej jest 2. Cyfra na ostatniej pozycji ma wagę 20, przedostatnia 21, kolejna 22 itp. Mnożymy wagi przez cyfry na ich pozycjach. Każdy iloczyn dodajemy. Zauważ, że wstępie w przykładzie z liczbą 375(10) dokonaliśmy tak naprawdę zamiany liczby dziesiętnej na dziesiętną korzystając z powyżej metody d) Ręczne dodawanie już obliczonych wag (binarna → dziesiętna) Wiemy już, że wagi są przedstawiane jako potęgi, więc gdy nadchodzi potrzeba przeliczenia liczby binarnej na kartce, to możemy dodawać tylko te wagi przy których stoi jedynka. Jest to uproszczenie poprzedniej metody. Animacja przedstawiająca zamianę liczby decymalnej na postać binarną. Źródło animacji. Zastosowania logiki binarnej i liczb binarnych 1) Tranzystor jako element binarny Jeżeli wykorzystamy tranzystor jako włącznik (klucz), to możemy powiedzieć, że działa on w logice binarnej. Gdy wymusimy odpowiednio duży przepływ prądu bazy tranzystora NPN, to doprowadzimy tranzystor do stanu nasycenia, czyli popłynie prąd przez kolektor. Ten prąd możemy traktować jako wyjście i jego przepływ jako logiczne 1. Brak tego prądu to 0. Działanie tranzystora NPN jako klucz. 2) Bramka logiczna NAND Wykorzystując wiedzę z poprzedniego punktu, możemy zacząć konstruować tak zwane bramki logiczne, czyli układy, których kombinacja wejść da nam jakieś wyjście. NAND jest bardzo ważną bramką logiczną, bo dzięki niej można zbudować układ realizujący dowolną funkcję logiczną. Wykonajmy ją używając tranzystorów bipolarnych NPN! Schemat bramki NAND. Jako wejścia interpretujemy bazy tranzystorów, a wyjściem jest prąd kolektora pierwszego tranzystora. Potocznie mówi się, że prąd płynie najkrótszą i najprostszą drogą, więc załączenie dwóch tranzystorów powinno skutkować praktycznie zwarciem kolektora wyższego tranzystora z masą źródła. Co za tym idzie prąd wybierze tę drogę zamiast diody (wyjście y) i dioda przestanie świecić - na wyjściu pojawi się 0. Tablica prawdy dla układu NAND. Działanie bramki NAND skonstruowanej z tranzystorów. Dzięki tranzystorom i traktowaniu ich jako elementów binarnych możemy manipulować sygnałem i budować elementy cyfrowe, które działają w logice binarnej. To wszystko dzięki działaniom na liczbach binarnych i wykorzystaniu algebry Boole’a. 3) Tranzystory w procesorze W procesorze raczej nie stosuje się tranzystorów bipolarnych. Współczesne procesory są zbudowane w technologii CMOS (Complementary Metal-Oxide-Semiconductor). Są one używane do budowy bramek logicznych, które z kolei formują układy logiczne odpowiedzialne za operacje arytmetyczne, logiczne i sterujące w procesorze. Procesory są praktycznie stworzone z tranzystorów i bazują na ich działaniu. W jednym procesorze może być ich aż 17 miliardów! To nie są oczywiście tranzystory w obudowie typu TO-92. Ich konstrukcja jest dużo bardziej złożona i szerokość takiego elementu może wynosić 100 nanometrów. Współczesne procesory mają ogromną liczbę tranzystorów na pojedynczym układzie scalonym, co pozwala na wykonywanie bardzo skomplikowanych obliczeń w bardzo krótkim czasie. Miniaturyzacja postępuje zgodnie z prawem Moore’a, co pozwala na zwiększenie gęstości integracji i poprawę wydajności procesora. Cała ta złożoność mikroarchitektury procesora jest ukierunkowana na efektywne wykonywanie instrukcji programu zgodnie z zasadami logiki binarnej. Najmniejsze elementy współczesnych procesorów nie da się zobaczyć ludzkim okiem. Potrzeba do tego bardzo dobrego mikroskopu. Źródło zdjęcia. 4) Programowanie mikrokontrolerów Mikrokontroler to układ scalony, który zachowuje się jak mały komputer. Możemy dołączyć do niego wejścia i wyjścia takie jak: przyciski, czujniki i diody. Dzięki wgranemu programowi może on interpretować wejścia i sterować wyjściami. Z mikrokontrolerami wiążą się rejestry - pamięci wewnętrzne, które służą do przechowywania danych tymczasowych. Dzięki takiemu rejestrowi możemy zdefiniować, że jedna nóżka mikrokontrolera będzie wejściem, a druga wyjściem. Co więcej, dzięki tej pamięci możemy sprawić, że LED dołączony do wyjścia układu scalonego zapali się. Na razie zapamiętaj, że: Rejestr DDRx odpowiada za ustawienie kierunku przepływu danych. Innymi słowy dajemy informację mikrokontrolerowi, że dany pin jest wejściem lub wyjściem. W miejscu x wpisuje się port, który chcemy skonfigurować, np. A, B, C. W danym bicie wpisuje się 0 jeżeli pin ma być wejściem i 1 jeżeli ma być wyjściem. Rejestr PORTx służy do ustawiania stanów na konkretnych pinach. Jeżeli chcemy ustawić stan wysoki na jakimś pinie to należy ustawić na odpowiednim bicie 1. 0 ustawi stan niski. Rejestry portu B mikrokontrolera Atmega16. Jak w taki rejestr wpisać informację? Tutaj możemy skorzystać z liczb binarnych! Przykład a) Ustawić w rejestrze DDRB jedynkę na bitach 0 i 3. b) Ustawić w rejestrze PORTB jedynkę na bitach 0, 4, 5 i 7. Jest kilka sposobów na wykonanie tego zadania. Zapis za pomocą liczby binarnej Aby w języku C zapisać liczbę binarną należy dodać prefiks 0b. Możemy wykorzystać liczby binarne, aby wpisać dane w rejestr, ponieważ rejestry interpretuje się za pomocą bitów. Zapis za pomocą liczby dziesiętnej Aby to zrobić musimy przeliczyć liczbę binarną na dziesiętną. Bardziej doświadczeni programiści pewnie będą to w stanie zrobić szybko w głowie a) 0b00001001(2) = 00001001(2) = 1001(2) = 9(10) DDRB = 9; b) 0b10110001(2) = 10110001(2) = 177(10) PORTB = 177; Ten zapis może być nieczytelny, ale jest jeden wyjątek, gdzie warto go stosować. Jeżeli chcemy zapełnić jedynkami cały rejestr, to można wpisać do niego wartość 255, ponieważ 255(10) = 11111111(2). Oczywiście można skorzystać z innych systemów liczbowych, np. hex (0xFF(16) = 255(10)) Jeżeli chcesz dowiedzieć się o zastosowaniu rejestrów, to zapraszam do kursu STM32L4. 5) Sterowniki PLC Używa się je w maszynach przemysłowych i do sterowania liniami produkcyjnymi - ogólnie w przemyśle. Gwarantują one stabilność i ciągłość procesu a ponadto spełniają szereg przepisów. Dzięki nim można projektować układy sterowania dyskretnego, czyli procesy przemysłowe, które działają w logice dwuwartościowej. Przykłady maszyn, którymi sterują sterowniki PLC: windy, prasy hydrauliczne, schody ruchome, układ świateł na skrzyżowaniu. Te układy mogą charakteryzować się binarnością, tzn. do ich działania nie muszą być wykorzystywane elementy, które na swoim wejściu/wyjściu otrzymują/zwracają coś innego niż logiczne 0/1. W algorytmach sterowania takimi obiektami stosuje się operatory logiczne typu: AND, OR, XOR… co potwierdza zastosowanie liczb binarnych i logiki binarnej w tych sterownikach. Podsumowanie System binarny stanowi fundament technologii, elektroniki i informatyki. Jest nie tylko teoretycznym konceptem, ale także praktycznym elementem współczesności. Jego znaczenie sięga od konstrukcji tranzystorów przez układy cyfrowe, aż po programowanie mikrokontrolerów i sterowanie maszynami przemysłowymi. System binarny stanowi nieodłączną część świata, stanowiąc podstawę dla licznych innowacji i osiągnięć technologicznych. Każdy informatyk, elektronik, inżynier powinien się z nim zapoznać i zrobić przynajmniej jedno ćwiczenie z konwersji liczby dziesiętnej na binarną
  4. Witam Jestem członkiem forum od zaledwie kilku dni, jednak jestem przekonany co do wiarygodności jego użytkowników. Jestem w klasie maturalnej mat-fiz, w podstawówce i gimnazjum rozwijałem się w ramach zajęć koła informatycznego (FPC, Scratch, Arduino) i mierzę się z wyborem kierunku studiów a także uczelni. Zdaję maturę z mat, fiz i ang, interesują mnie kierunki związane z tymi przedmiotami a także informatyką (o moich zainteresowaniach może mówić sama obecność na Forbocie), np. elektrotechnika, automatyka i robotyka, awionika oraz podobne. Rozważałem Politechnikę Poznańską, Wrocławską, AGH, WAT oraz LAW. Będę wdzięczny za wszelkie rady , przeżycia i opinie studentów, jak i absolwentów wspomnianych uczelni na wymienionych lub podobnych kierunkach. Gdybym potrzebował bardziej szczegółowej informacji, odezwę się pod tym tematem, wystarczy że dasz znać o swojej egzystencji. Liczę na Was!
×
×
  • Utwórz nowe...