Kazalo:

Odpri oči! Logični analizator: 21 korakov
Odpri oči! Logični analizator: 21 korakov

Video: Odpri oči! Logični analizator: 21 korakov

Video: Odpri oči! Logični analizator: 21 korakov
Video: CS50 2013 - Week 8, continued 2024, November
Anonim
Image
Image
Montaža
Montaža

Logični analizator olajša vizualizacijo impulznega niza, ki so deli, ki potujejo v komunikacijski liniji. Tako se vam odprejo oči, da prepoznate možno težavo. Zakaj je to pomembno? To je zelo učinkovito orodje za razvoj in odkrivanje napak, ki vam lahko prihrani čas. Danes bomo v tem videoposnetku ocenili pomen logičnega analizatorja, opazovali nekaj protokolov običajnih praks pri uporabi te naprave in ponazorili napako odkrivanja brez pomoči logičnega analizatorja.

V tem videu sem uporabil relativno poceni (okoli 35 USD) in učinkovit model z grafičnim vmesnikom in brezplačno programsko opremo.

1. korak: Montaža

2. korak: Uporabljene funkcije - strežnik

Uporabljene funkcije - strežnik
Uporabljene funkcije - strežnik

• Mostički za priključke

• 2 Arduinosa (uporabili smo 2 Mega Arduino 2560)

• Logični analizator (uporabljamo Saleae)

• Priključni kabli USB za Arduino in analizator.

• Osciloskop (neobvezno)

• Protoboard

3. korak: Uporabljeno vezje

Rabljeno vezje
Rabljeno vezje

Tukaj imamo shemo, ki prikazuje spremljanje treh zatičev: TX0, SDA in SCL. Imamo dva Arduina: gospodarja in sužnja.

4. korak: Izvorna koda: Mojster

V nastavitvah bomo vključili knjižnico za komunikacijo i2c. V omrežje smo vstopili kot glavni in inicializirali serijski 0. V zanki smo za komunikacijo z našo številko 8 Arduino zahtevali bajte podrejenih podatkov, kot smo opredelili v primeru. V serijo, ki bo ocenjena z logičnim analizatorjem, natisnemo prejete bajte.

#include // vključuje biblioteco para comunicação 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); // zahteva 6 bajtov, da se jih naredi za endereço 8 while (Wire.available ()) {// enquanto houver bytes para Receber… char c = Wire.read (); // recebe cada byte e armazena como caracter Serial.print (c); // envia o caracter pela serial (na verdade vai para o buffer)} zakasnitev (500); // aguarda meio segundo}

5. korak: Izvorna koda: Slave

V to podrejeno kodo spet vključujem knjižnico za komunikacijo i2c. V omrežje vstopim kot podrejen z naslovom 8. Registriramo dogodek zahteve in ga povežemo s funkcijo "request". V zanki vam ni treba storiti ničesar, samo zamudite 0,1 sekunde.

Nazadnje imamo funkcijo zahteve, ki se bo izvedla, ko se zgodi glavni dogodek zahteve, ki je bila registrirana v nastavitvah. Na koncu odgovorimo s sporočilom v 6 bajtih.

#include // vključuje biblioteco para comunicação I2C void setup () {Wire.begin (8); // entra na rede como escravo com endereço 8 Wire.onRequest (requestEvent); // registracija o evento de requisiçao // e associa à função requestEvent} void loop () {delay (100); // não faz nada no loop, apenas aguarda 0, 1 segundo} // função que será executada quando ocorrer o evento de requisição pelo mestre // foi registda como evento no setup void requestEvent () {Wire.write ("teste"); // odgovorite na 6 -bajtno sporočilo}

6. korak: Analizator: Strojna oprema

Analizator: Strojna oprema
Analizator: Strojna oprema

Hitrost vzorčenja do: 24 MHz

Logika: 5 V do 5,25 V

Prag nizkega nivoja 0,8 V

Visoki prag 2,0 V

Vhodna impedanca približno 1 Mohm ali več

7. korak: Namestitev programske opreme Saleae

Namestitev programske opreme Saleae
Namestitev programske opreme Saleae

Program, ki sprejema podatke, ki jih zajame logični analizator, in dekodira bite, lahko prenesete na naslednjo povezavo:

8. korak: Konfiguriranje okolja za naše teste

Konfiguriranje okolja za naše teste
Konfiguriranje okolja za naše teste

Tukaj prikazujem vmesnik, ki mi je bil še posebej všeč, ker je bil čist.

9. korak: Konfiguriranje okolja za naše teste

Konfiguriranje okolja za naše teste
Konfiguriranje okolja za naše teste

Tu je nekaj konfiguracijskih možnosti:

• S klikom na ime kanala ga lahko spremenimo.

• Ugotovimo lahko, ali bo kateri od kanalov služil kot sprožilec zajema in oblike odkrivanja.

• S klikom in držanjem številke kanala lahko spremenite svoj položaj na seznamu.

• S klikom na orodje lahko konfiguriramo vizualizacijo kanala, razširimo …

• … ali skrivanje kanala. Skrili bomo vse kanale, ki jih ne bomo uporabljali.

10. korak: Konfiguriranje okolja za naše teste

Konfiguriranje okolja za naše teste
Konfiguriranje okolja za naše teste

S klikom na puščice gumba "Start" so na voljo možnosti Sampling Rate in trajanje snemanja.

Iz nekega razloga, če programska oprema zazna, da hitrosti ni mogoče vzdrževati, se prikaže sporočilo in samodejno se bo hitrost znižala, dokler ne bo dosežena funkcionalna vrednost.

11. korak: Konfiguriranje okolja za naše teste

Konfiguriranje okolja za naše teste
Konfiguriranje okolja za naše teste

Vključili bomo tudi analizatorje protokolov. Najprej je to I2C, ki sledi definicijam knjižnice WIRE in pravilno poveže kanale. Na koncu bomo analizator predstavili asinhroni serijski enoti. Paziti moramo, da parametre pravilno sestavimo glede na sklop.

12. korak: Konfiguriranje okolja za naše teste

Konfiguriranje okolja za naše teste
Konfiguriranje okolja za naše teste

Na zavihku "Dekodirani protokoli" bi morali preveriti, kateri analizatorji protokolov so omogočeni. Tam se bodo prikazali podatki. Na zavihku »Pripisi« lahko za boljšo vizualizacijo dodamo nekatere rezultate. Samo kliknite ikono "dodaj meritev".

13. korak: Zajem: Pregled

Zajem: Pregled
Zajem: Pregled

Na zaslonu za zajem program prikaže niz podatkovnih impulzov SDA, SCL in TX0.

Korak 14: Zajem: rezultat analize protokola

Zajem: rezultat analize protokola
Zajem: rezultat analize protokola

Tu vidimo rezultat ujetja. Na zavihku "Dekodirani protokoli" imamo:

• Zahteva strežnika za podrejenega z ID 8.

• Odziv pomožnika, šest znakov: "t", "e", "s", "t", "e" in presledek.

• Vsakemu sledi bit ACK (Acknowledge), ki označuje pravilen sprejem bajtov, razen presledka NACK (Not Acknowledge).

• Nato vidimo rezultat dekodiranja serije TX0, ki označuje sprejete znake in poslane na serijski terminal Arduino IDE.

Korak 15: Zajem: kanal 0 in podatki (SDA)

Zajem: kanal 0 in podatki (SDA)
Zajem: kanal 0 in podatki (SDA)

Na tej sliki imamo impulzni niz linije SDA. Upoštevajte, da si je mogoče ogledati vsak poslani bajt.

Korak 16: Zajem: 1. kanal in ura (SCL)

Zajem: 1. kanal in ura (SCL)
Zajem: 1. kanal in ura (SCL)

Zdaj imamo tukaj impulzni vlak linije SCL. Več podrobnosti lahko preverite tako, da z miško postavite signal, kot vidite na sliki. Vidimo lahko, da je bila taktna frekvenca 100 kHz.

Korak 17: Zajem: kanal 2 in zaporedni (TX0)

Zajem: kanal 2 in zaporedni (TX0)
Zajem: kanal 2 in zaporedni (TX0)

Kar zadeva impulzni niz linije TX0, lahko vidimo začetni bit in točke uokvirjanja vsakega bita. Imamo bajt, ki predstavlja znak "e".

18. korak: Konfiguriranje okolja za naše teste

Konfiguriranje okolja za naše teste
Konfiguriranje okolja za naše teste

Tukaj imamo več možnosti za branje podatkov.

Korak 19: Zajem: osciloskop in analizator

Zajem: osciloskop in analizator
Zajem: osciloskop in analizator

Poglejte tukaj na zaslon, ki sem ga posnel z osciloskopom. Signal logičnega analizatorja predstavlja le visoko in nizko zaznavanje, vendar ne predstavlja kakovosti signala. To je najbolje opaziti na osciloskopu.

20. korak: Zajem: Opazovanje napake (primer serijske napake)

Zajem: opazovanje napake (primer serijske napake)
Zajem: opazovanje napake (primer serijske napake)

Zdaj bom pokazal primer serijske napake, ki se mi je pravzaprav zgodila. Imel sem modem GPRS, ki se uporablja za mobilni telefon, kartico SIM, in se poskušal povezati z ESP32. Ampak preprosto se ni povezalo. Nato sem preveril napajanje, ožičenje in zamenjal ploščo. Naredil sem vse, a nič se ni popravilo. Odločil sem se za logično analizo: odkril sem, da se je signal ESP na UART 115200 začel neusklajevati. To pomeni, da je ESP32 igral tisto, kar bi moralo biti 115, 200 z drugačno hitrostjo kot ta.

Ta napaka, ki jo je identificiral razčlenjevalnik, je bila prikazana z X v rdeči barvi. Po mojem razumevanju program pravi, da je točka, ki ima tako malo, časovno za polovico premaknjena. Ko se ta premik povečuje, lahko pride čas, ko se vse ne ujema, tako da informacije ne pridejo na drugo stran. Običajno prispe, vendar je kartica SIM800 občutljiva in če ni natančna, podatki ne dosežejo drugega konca.

Ne vem, ali se to pogosto dogaja ali ne, vendar se je to zgodilo meni, zato sem se odločil, da bom to temo obravnaval tukaj. Kaj sem torej naredil? Upočasnila sem. Če postavite 9, 600, 19, 200, do 38, 400, deluje, kar se ne zgodi pri 115, 200.

21. korak: Prenesite datoteke

PDF

JAZ NE

Priporočena: