Spisu treści:

Otwórz oczy! Analizator logiczny: 21 kroków
Otwórz oczy! Analizator logiczny: 21 kroków

Wideo: Otwórz oczy! Analizator logiczny: 21 kroków

Wideo: Otwórz oczy! Analizator logiczny: 21 kroków
Wideo: 143. Otwórz Oczy. Stworzenie Świata, Tajemnice, Zakazana Wiedza | Monika Cichocka, Roman Nacht 2024, Lipiec
Anonim
Image
Image
montaż
montaż

Analizator stanów logicznych ułatwia wizualizację ciągu impulsów, czyli bitów przemieszczających się w linii komunikacyjnej. W ten sposób otwiera oczy, aby zidentyfikować możliwy problem. Dlaczego to jest ważne? Jest to bardzo wydajne narzędzie do programowania i wykrywania błędów, które pozwala zaoszczędzić czas. W tym filmie dzisiaj ocenimy znaczenie analizatora logicznego, przyjrzymy się niektórym protokołom typowych praktyk podczas korzystania z tego urządzenia i zilustrujemy awarię wykrywania bez pomocy analizatora logicznego.

W tym filmie użyłem stosunkowo niedrogiego (około 35 USD) i wydajnego modelu, z interfejsem graficznym i bezpłatnym oprogramowaniem.

Krok 1: Montaż

Krok 2: Użyte funkcje - serwer

Użyte funkcje - serwer
Użyte funkcje - serwer

• Zworki do połączeń

• 2 Arduino (użyliśmy 2 Mega Arduino 2560)

• Analizator logiczny (używamy Saleae)

• Kable połączeniowe USB do Arduino i analizatora.

• Oscyloskop (opcjonalnie)

• Płyta prototypowa

Krok 3: Użyty obwód

Użyty obwód
Użyty obwód

Tutaj mamy schemat, który pokazuje monitorowanie trzech pinów: TX0, SDA i SCL. Mamy dwa Arduino: master i slave.

Krok 4: Kod źródłowy: Master

W Setup włączymy bibliotekę do komunikacji i2c. Weszliśmy do sieci jako Master i zainicjalizowaliśmy serial 0. W pętli poprosiliśmy o bajty danych slave do komunikacji z naszym Arduino numer 8, jak zdefiniowaliśmy w przykładzie. Drukujemy w serialu, który zostanie przeanalizowany przez analizator stanów logicznych, otrzymane bajty.

#include //dołącz bibliotekę do komunikacji I2C void setup() { Wire.begin(); // Entra na rede como Mestre (endereço é opcional para o mestre) Serial.begin(115200); // inicia a serial 0 } void loop() { Wire.requestFrom(8, 6);// wymaga 6 bytes de dados do escravo de endereço 8 while (Wire.available()) { // enquanto houver bytes para receber… char c = Drut.odczyt(); // odbierz cada byte e armazena como caracter Serial.print(c); // envia o caracter pela serial (na verdade vai para o buffer) } delay(500); //aguarda meio drugi }

Krok 5: Kod źródłowy: Slave

W tym kodzie slave ponownie włączam bibliotekę do komunikacji i2c. Wchodzę do sieci jako slave o adresie 8. Rejestrujemy zdarzenie żądania i kojarzymy je z funkcją „żądanie”. Nie musisz nic robić na pętli, po prostu daj opóźnienie 0,1 sekundy.

Wreszcie mamy funkcję żądania, która zostanie wykonana, gdy wystąpi zdarzenie żądania przez Master, które zostało zarejestrowane w Setup. W końcu odpowiadamy wiadomością o długości 6 bajtów.

#include //dołącz biblioteczkę komunikacji I2C void setup() { Wire.begin(8); // entra na rede como escravo com endereço 8 Wire.onRequest(requestEvent); // registra o evento de requisiçao // e associa à função requestEvent } void loop() { delay(100); //nie faz nada no loop, apenas aguarda 0, 1 segundo } //função que será executada quando ocorrer o evento de requisição pelo mestre //foi registrada como evento no setup void requestEvent() { Wire.write("teste "); // odpowiedź com uma mensagem de 6 bajtów }

Krok 6: Analizator: sprzęt

Analizator: sprzęt
Analizator: sprzęt

Częstotliwość próbkowania do: 24 MHz

Logika: 5 V do 5,25 V

Próg niskiego poziomu 0,8 V

Próg wysokiego poziomu 2,0 V

Impedancja wejściowa około 1 MΩ lub więcej

Krok 7: Instalacja oprogramowania Saleae

Instalacja oprogramowania Saleae
Instalacja oprogramowania Saleae

Program odbierający dane przechwycone przez analizator stanów logicznych i dekodujący bity można pobrać pod następującym linkiem:

Krok 8: Konfiguracja środowiska do naszych testów

Konfigurowanie środowiska do naszych testów
Konfigurowanie środowiska do naszych testów

Pokazuję tutaj interfejs, który szczególnie mi się spodobał, bo był czysty.

Krok 9: Konfiguracja środowiska do naszych testów

Konfigurowanie środowiska do naszych testów
Konfigurowanie środowiska do naszych testów

Oto kilka opcji konfiguracji:

• Klikając na nazwę kanału, możemy ją zmienić.

• Możemy określić, czy jeden z kanałów będzie służył jako wyzwalacz do przechwytywania i formę detekcji.

• Klikając i przytrzymując numer kanału, możesz zmienić swoją pozycję na liście.

• Klikając w koło zębate możemy skonfigurować wizualizację kanału, rozwijając…

• … lub ukrywanie kanału. Ukryjemy wszystkie kanały, z których nie będziemy korzystać.

Krok 10: Konfiguracja środowiska do naszych testów

Konfigurowanie środowiska do naszych testów
Konfigurowanie środowiska do naszych testów

Klikając na strzałki przycisku „Start”, dostępne są opcje częstotliwości próbkowania i czasu trwania nagrania.

Z jakiegoś powodu, jeśli oprogramowanie wykryje, że nie można utrzymać dawki, zostanie wyświetlony komunikat i dawka zostanie automatycznie zmniejszona, aż do osiągnięcia wartości funkcjonalnej.

Krok 11: Konfiguracja środowiska do naszych testów

Konfigurowanie środowiska do naszych testów
Konfigurowanie środowiska do naszych testów

Dołączymy również analizatory protokołów. Najpierw jest to I2C, podążający za definicjami biblioteki WIRE i poprawnie kojarzący kanały. Na koniec wprowadzimy analizator do asynchronicznego połączenia szeregowego. Musimy uważać, aby poprawnie skonfigurować parametry zgodnie z montażem.

Krok 12: Konfiguracja środowiska do naszych testów

Konfigurowanie środowiska do naszych testów
Konfigurowanie środowiska do naszych testów

W zakładce „Decoded Protocols” powinniśmy sprawdzić, które analizatory protokołów są włączone. Tam pojawią się dane. W zakładce „Adnotacje” możemy dodać niektóre wyniki dla lepszej wizualizacji. Wystarczy kliknąć ikonę „dodaj pomiar”.

Krok 13: Przechwytywanie: przegląd

Przechwytywanie: przegląd
Przechwytywanie: przegląd

Na ekranie przechwytywania program wyświetla ciąg impulsów danych SDA, SCL i TX0.

Krok 14: Przechwytywanie: wynik analizy protokołu

Przechwytywanie: wynik analizy protokołu
Przechwytywanie: wynik analizy protokołu

Tutaj widzimy wynik przechwycenia. W zakładce „Dekodowane protokoły” mamy:

• Żądanie serwera dla urządzenia podrzędnego o identyfikatorze 8.

• Odpowiedź slave, sześć znaków: "t", "e", "s", "t", "e" i spacja.

• Po każdym następuje bit ACK (Acknowledge) wskazujący na prawidłowy odbiór bajtów, z wyjątkiem znaku spacji NACK (Not Acknowledge).

• Następnie widzimy wynik dekodowania szeregowego TX0, wskazując znaki odebrane i wysłane do terminala szeregowego Arduino IDE.

Krok 15: Przechwytywanie: kanał 0 i dane (SDA)

Przechwytywanie: kanał 0 i dane (SDA)
Przechwytywanie: kanał 0 i dane (SDA)

Na tym obrazie mamy ciąg impulsów linii SDA. Zauważ, że każdy przesłany bajt może być przeglądany.

Krok 16: Przechwytywanie: kanał 1 i zegar (SCL)

Przechwytywanie: kanał 1 i zegar (SCL)
Przechwytywanie: kanał 1 i zegar (SCL)

Teraz mamy tu ciąg impulsów linii SCL. Możesz sprawdzić więcej szczegółów, po prostu umieszczając mysz nad sygnałem, jak widać na obrazku. Widzimy, że częstotliwość zegara wynosiła 100 kHz.

Krok 17: Przechwytywanie: kanał 2 i szeregowy (TX0)

Przechwytywanie: kanał 2 i szeregowy (TX0)
Przechwytywanie: kanał 2 i szeregowy (TX0)

Jeśli chodzi o ciąg impulsów linii TX0, możemy zobaczyć bit Start i punkty obramowania każdego bitu. Mamy bajt reprezentujący znak „e”.

Krok 18: Konfiguracja środowiska do naszych testów

Konfigurowanie środowiska do naszych testów
Konfigurowanie środowiska do naszych testów

Tutaj mamy kilka opcji odczytu danych.

Krok 19: Przechwytywanie: oscyloskop i analizator

Przechwytywanie: oscyloskop i analizator
Przechwytywanie: oscyloskop i analizator

Spójrz tutaj na ekran, który przechwyciłem z mojego oscyloskopu. Sygnał analizatora logicznego reprezentuje tylko detekcje wysokie i niskie, ale nie reprezentuje jakości sygnału. Najlepiej można to zaobserwować na oscyloskopie.

Krok 20: Przechwytywanie: Obserwacja awarii (przykład awarii seryjnej)

Przechwytywanie: Obserwacja awarii (przykład awarii seryjnej)
Przechwytywanie: Obserwacja awarii (przykład awarii seryjnej)

Teraz pokażę przykład seryjnej awarii, która mi się przydarzyła. Byłem z modemem GPRS, takim jak używany w telefonie komórkowym, kartą SIM, próbując połączyć się z ESP32. Ale to się po prostu nie łączyło. Następnie sprawdziłem zasilanie, okablowanie i wymieniłem płytkę. Zrobiłem wszystko, ale nic tego nie naprawiło. Postanowiłem włożyć analizę logiczną: odkryłem, że sygnał ESP na UART 115200 zaczął się nie zgadzać. Oznacza to, że ESP32 grał to, co powinno być 115, 200 z inną prędkością niż ta.

Ten błąd, który został zidentyfikowany przez parser, był wyświetlany z X na czerwono. W moim rozumieniu program mówi, że punkt, który ma taki bit jest przesunięty w czasie do połowy. Wraz ze wzrostem tej zmiany może nadejść czas, kiedy wszystko jest niedopasowane, tak że informacje nie docierają na drugą stronę. Zwykle przychodzi, ale SIM800 jest wrażliwy i jeśli nie jest dokładny, informacja nie dociera na drugi koniec.

Nie wiem, czy zdarza się to często, czy nie, ale mi się to przydarzyło, więc postanowiłem poruszyć ten temat tutaj. Więc co zrobiłem? Zwolniłem. Jeśli umieścisz 9, 600, 19, 200, do 38, 400, to działa, co nie występuje przy 115, 200.

Krok 21: Pobierz pliki

PDF

JA NIE

Zalecana: