Siglent serial decode can always decode full
current memory length. Some examples how to use serial decode functions.
(Alla olevissa kuvissa sisällä olevat tekstit ovat finglanniksi koska ne syntyivät eräässä neuvontatilanteessa)
Toistuvasti julkisuudessa esiintyy kysymyksiä siitä dekoodaako
oskilloskooppi vain sen mikä on näytöllä vai koko näytemuistin pituudelta?
Siglentin osalta tähän on yksinkertainen
vastaus.
Dekoodaus käyttää aina kulloinkin käytössä olevaa koko vallitsevan näytemuistin pituutta.
Kysymys on toki luonnollinen koska useat
oskilloskoopit mahdollistavat dekoodauksen (ja esim mittaukset) van ns
"näyttömuistista" tai muistista täydellä datalla mutta rajattuna näytöllä
näytettävään muistin pituuteen. Siglent on valinnut toimintaperiaatteen jossa
näytön leveys on (Run tilassa) aina koko muistin pituus, olkoot se kulloinkin
100M tai vain 7 näytettä. Siglent myös työntää kaikki näytteet kuvaruudun
muistiin, mitään ei jätetä pois (yksi kuvaruudun pixeli siis saattaa kätkeä
alleen melkoisen datajoukon). Vallitseva muistin pituus näkyy kuvaruudun
oikeassa yläkulmassa. Käyttäjän tekemä muistin pituuden valinta sensijaan
tarkoittaa maksimi pituutta johon käyttäjä haluaa sen rajoittaa.
Katso tarkemmin
muistin ja näytön periaatteesta Siglent X oskilloskoopeissa.
Myös sekvenssitallennuksessa dekoodaus käyttää koko segmentin (framen) muistin
pituutta.
(alempana tällä sivulla pari esimerkkiä,
Esimerkki 1 UART ,
Esimerkki 2. I2C)
Kaikissa esimerkeissä on käytetty oskilloskooppina SDS1104X-E
oskilloskooppia. Dekoodaus X-E sarjan oskilloskoopeissa poikkeaa
jossain määrin X sarjan oskilloskoopeista joissa prosessointiin käytettävä teho
on alhaisempi josta aiheutuu joitain rajoitteita.
Pari esimerkkiä joissa selkeästi tulee esiin koko muistin käyttö eri tavoin. Kaikissa esimerkeissä alla
on käytetty tavallista UART sarjaliikennettä. Signaalit on tuotettu käyttäen
Arduino Mega 2560 korttia ja sen neljää sarjaliikenneporttia. Koska
oskilloskoopissa on kaksi erillistä dekooderia , S1 ja S2, se kykenee
käsittelemään 4 sarjaliikennesignaalia. Kumpikin dekooderi käsittelee dekoodaa
kahta signaalia (Rx ja Tx) simultaanisti.
Kummallakin dekooderilla on omat itsenäiset parametrien asetukset. Kumpikin voi
olla eri nopeudella, eri bittimäärällä ja muilla parametreilla jotka ovat
yhteyset dekooderin molemmille kanaville.
Dekoodaus ei ole riippuvainen siitä mikä triggaustapa on käytössä.
Dekooderi analysoi muistissa olevaa signaalia ja dekoodaa sen mukaan.
Dekoodaus
voidaan tehdä oskilloskoopin käydessä (Run) tai jälkeenpäin muistiin
tallennetusta signaalista pysäytetyssä (Stop) tilassa sekä suoraan näkyville
jääneestä signaalista tai signaaleista jotka ovat historiapuskurissa joko
tavallisen pysäytyksen jälkeen tai jotka on tallennettu Sekvenssitallennus
toiminnolla.
Dekooderi käyttää aina koko käytössä olevan muistin pituutta. Tässä on toki myöskin rajoite.
Esimerkiksi tavallinen UART/RS232 yhden kanavan dekoodatun merkkijonon (tavujen)
määrä voi olla maksimissaan 3000. Kullakin kanavalla on oma itsenäinen 3000
merkin raja. Mikäli muistin pituudella olisi merkkejä (tavuja) enemmän,
dekoodaus sen kanavan osalta päättyy kun 3000 merkki tulee vastaan ja siitä
eteenpäin signaali yksinkertaisesti jätetään dekoodaamatta. (koskee siis yhtä
yksittäistä vaakapyyhkäisyä ja seuraava vaakapyyhkäisy taas samat max. 3000.)
Eri protokollilla on erilaiset datamäärän rajoitukset. Esimerkiksi normaalia max
32 merkin IIC (I2C, TWI) liikennettä ei rajoiteta kokonais tavumäärän
perusteella vaan sanomien määrän perusteella, ja sanomien kappalemäärä on max
1000 sanomaa dekooderia kohden. (siis max joppa 32000 tavua. Yksi dekooderi voi
luonnollisesti käsitellä vain yhden IIC väylän (SCL, SDA signaalit)
Tässä aluksi kuvaus signaaleista dekoodattuina.
Kuva 1.
Signaalit kuvassa 1. on tuotettu Arduino Mega 2560 kortilla jossa on 4
UART porttia. Probet kytketty suoraan UART porttien Tx lähtöihin. (kaikki siis
ovat UART portin Tx signaaleita olkootkin että niitä nimetään skoopin ruudulla
Tx ja Rx. Tässä tapauksessa kuvassa näkyvät viestit toistuvat 200ms välein.
Kunkin viestin lähetystä on tarkoituksella viivästetty kanavaan 1 nähden jotta
ilmentyy paremmin dekoodereiden toisistaan riippumattomuus.
7M muistin pituus on täsmälleen kuvaruudun signaali alueen leveys.
(tämä on tosi aina kun oskilloskooppi on Run
tilassa. Tästä voi poiketa Stop tilassa mikäli käyttäjä muuttaa t/div asetusta
siitä mikä on ollut tallennettaessa)
Kaikissa seuraavissa esimerkkikuvissa on käytössä täsmälleen nämä samat
signaalit. Osassa esimerkkejä viestien toistoperiodi on ollut 200ms ja osassa
20ms.
Kuva 2.
Tallennettu hyvin hitaalla pyyhkäisyajalla (5s/div) kuvan 1. signaalia.
Dekoodaus toiminnassa. Koska missään neljästä sinisestä dekoodauspalkista ei
esiinny punaisia pystyviivoja ei dekoodauksessa ole havaittua virhettä. Koko
vaakapyyhkäisyn ajallinen pituus on 70 sekuntia. Siihen mahtuu kuvan 1. mukaisia
sanomia noin 350 kpl jokaisella kanavalla. (200ms intervalliaika ei ole
aivan tarkka).
Huomaa samplenopeus 100kSa/s joka edelleen riittää 19200 baudin nopeuteen. Ollen
kuitenkin ns rajalla. On siis dekoodattu mutta mitään yksityiskohtia ei näy,
näkyy vain siniset palkit. Joten katsotaanpa mitä siellä on.
Kuva 3.
Kuvassa 3. on tilanne kuten kuvassa 2. mutta avattu dekoodaus lista.
Kummallekin dekooderille on dekoodauslista. Yksi lista voi olla kerrallaan
näkyvillä. Listassa voidaan Scroll toiminnolla siirtyä ero kohtiin ajallisesti.
Listassa oleva aika näyttää aikaa suhteessa Triggauslinjaan (sininen kolmio
kuvan yläreunassa).
Lista on tallennettavissa kokonaan CSV muodossa USB tikulle
painamalla "Save". Toiminto tallentaa koko listan, ei vain näkyvää osaa.
Näkyvän osan mitta voi olla valinnan mukaan 1 - 7 riviä. Kun himmentää
signaalien näyttöä se ei himmennä listan kirkautta jolloin voi saada
joissain tilanteissa näkyvyyttä paremmaksi (kuten kuvassa tehty). Mikäli haluaa
voi myös kanavan signaalin näytön sammuttaa kokonaan, se ei vaikuta
dekoodaukseen (eikä mihinkään mittauksiin tai muuhunkaan, paitsi että signaalin
kuvaa ei näytetä)
Usein kuitenkin halutaan nähdä myös signaalin ja dekoodauksen yksityiskohtia
joten sitten vaan zoomataan ja Run tilassa se on tehtävä käyttäen ikkunoitua
zoomausta painamalla t/div nuppia ja valitsemalla alaikunnalle oma nopeampi
t/div ja siirtymällä koko signaalin muistissa haluttuun kohtaan.
Kuva 4.
Kuvassa 4. on kuvan 3. tilanne mutta nyt otettu käyttöön ikkunoitu zoomaus.
Zoomauskerroin on kuvassa 5000. Yläikkunassa 5s/div ja alaikkunassa siitä pieni
viipale aivan muistin lopusta (merkattu punaisin viivoin) ja nyt 1ms/div.
Sivuhuomautus:
Tässä on esissä myös hiukan epämukava seikka. Huomaa että triggauskohta (ylä-
eli pääikkunassa) on 4 ruutua vasemmalle ruudun keskiviivalta. Kuvan
yläreunassa lukee "delay: 34.8s" . Se on meidän alaikkunan sijainti (viive)
keskilinjaan nähden (jossa normaalisti
oletusarvoisesti on triggauskohta). Olen kuitenkin asettanut triggauksen ns
fixed position esetukselle ja määrännyt sen paikan. Tämä tarkoittaa sitä että
jos muuttelisin pääikkunassa t/div asetusta ei triggauspiste kuvaruudulla
siirry. Normaali tapa on fixed time jolloin pääikkunan aikaa muuttaessa
triggauspisteen viiveaika pysyy vakiona ja sijainti kuvapinnalla muuttuu.
Nyt kuitenkin kun katsoo sitten dekoodaus listan aika saraketta. Siellä oleva
aika on suhteessa triggauspisteen sijaintiin ja se on mielestäni oikea
lähestymistapa asiassa. Minun ajatusmaailmassa aika nolla = triggauskohta.
Riippumatyta siitä missä päin kuvaruutua käyttäjä haluaa sen kulloinkin olevan.
Mutta, Siglent on valinnut toisin. Se tulee ilmi kaikissa kayttötavoissa kun
käytetään ikkunoitua zoomausta. Sen oppii mutta mielestäni se ei ole käytön
kannalta looginen vaikka siinä logikka onkin. Joka tapauksessa uusi parannus on
se että sekä vertikaali että horisontaali referenssi voidaan asettaa joko aika
(viiveaika) tai jännite (offset) arvoon kiinnitetyksi tai kuvaruudulla
sijaintiin kiinnitetyksi.
Kuva 5.
Tallennettu hyvin hitaalla pyyhkäisyajalla (5s/div) kuvan 1. signaalia.
Dekoodaus ei ole käytössä ja triggaus signaalin laskevasta reunasta.
Oskilloskooppi pysäytetty kun aikaa oli kulunut riittävästi jotta myös
historiapuskuriin on tallentunut edllinen 70s vaakapyyhkäisy. Tällä asetuksella
historiapuskuriin mahtuu kaksi vaakapyyhkäisyä. (2kpl 4 kanavaa kukin 7M)
Näytenopeus 100kSa/s. Näkyvillä kuvassa viimeinen vaakapyyhkäisy. (2/2) Kumman
tahansa voisi nyt valita näyttöön ja dekoodata.
Kuva 6.
Kuten kuvassa 5. Dekoodaus otettu käyttöön (ja luonnollisesti asetettu
dekoodaukselle oikeat parametrit, signaali siis sama kuin kuvassa 1.)
S1 ja S2 dekoodereiden sininen palkki osoittaa nyt että dekoodauksessa ei ole
havaittu virheitä. (Ei näy punaisia pystyviivoja palkissa)
Kuva 7.
Tilanne kuten kuvassa 6. Nyt on kuitenkin zoomattu pääikkunassa käyttämällä
t/div asetusta. Asetus on nyt 1ms/div. Näytöllä on nyt pitkästä jonosta yksi
viesti. Suurin osa viesteistä on nyt kuvaruudun ulkopuolella mutta silti
dekoodattuna. Dekoodaus listaa voi nyt myös vapaasti selata Scroll toiminnolla
siitä riippumatta mikä kohta koko signaalista on nyt zoomattuna näytössä.
Listan
voi kokonaisuudessaan tallettaa Save toiminnolla USB tikulle CSV muodossa. Koko
signaalissa voi siis horisontaalisti siirtyä käyttäen position nuppia ja t/div
nuppia tarvittaessa haluttuun kohtaan ja siitä riippumatta lukea jotain toista
kohtaa dekoodauksen listaa scrollaten. Dekoodaus listan sarake "Time" tarkoittaa
aikaa alkuperäiseen trigger sijaintiin nähden.
Sekvenssitallennuksen käyttö peräkkäisten "sanomien" tallennukseen ja dekoodaamiseen Pari esimerkkiä.
Esimerkki 1. UART
("Sequence acquisition", sekvenssi tallennus tallentaa muistiin segmenttejä. Siglent käyttää nimitystä Frame. En pidä nimivalintaa frame kovinhyvänä koska se saatetaan tulkita TFT kuva frameksi. Siglentin tallennus ei ole peräkkäisten TFT kuvaruutujen tallennus vaan se tallentaa aivan raakaa ADC dataa segmentin mittaisina, allaolevissa esimerkkikuvissa on 4 kanavaa rinnakkain ja jokaisen datajonon pituus on 7k tavua. Joissain oskilloskoopeissa nimittän tallennetaan vain näyttömuistin kuva ja se on todella eri asia.)
Signaali(t) kuten kuvassa 1. Sillä erotuksella että lähetyksen intervalli on
20ms. Ihan vain siksi että tulee tuo sekvenssi valmiiksi nopeammin koska
valittuna on lähes 4000 segmenttiä.
Oskilloskoopppin triggaus on nyt UART ja asetettu kanavan 1 parametreilla (9600
baud, 8 data, even parity, 1 stop bit.) Triggaus on asetettu tapahtumaan kun
datassa esiintyy data (hex) 0x53 eli ASCII iso S kirjain.
Oskilloskoopin dekoodaus on off tilassa. (merkityksetön)
Olen valinnut segmentin (frame) pituudeksi 7k ja pyyhkäisyajaksi 1ms/div. Tällä
nopeudella koko sanomaryhmän lähetys kaikilta kanavilta mahtuu sopivasti yhteen
segmenttiin. Olen valinnut segmenttien määräksi maksimin joka tällä asetuksella
on mahdollinen eli yhteensä 3912. Sen oilisi voinut valita vapaasti välillä 2 -
3912.
Oskilloskooppi on käynnistetty Trigger toimintojen painikkeella "Single" jolloin
oskilloskooppi tallentaa asetetun määrän segmentteja ja pysähtyy kun valittu
määrä on täysi. Sekvenssitallennuksen aikana ei päivitetä
kuvaruutua (koska on eliminoitu kaikki hidastavat seikat jolloin triggaus
on mahdollisimman nopeasti valmis uuteen triggaukseen edellisen segmentin
jälkeen. Tämä mahdollistaa sekvenssitallennuksen mahdollisimman suuren nopeuden,
parhaimmillaan jopa yli 400000 segmenttiä sekunnissa.)
Kun segmentit on tallennettu alkaa oskilloskooppi prosessoida niistä kaikista
kerroskuvaa näytölle. Näyttö ja interpolointiasetuksista sekä segmenttien
määrästä riippuen sen aika vaihtelee.
Kuva 8.
Oskilloskoopin näyttö sen jälkeen kun kaikki segmentit on tallennettu sekä
prosessoitu niistä kaikista kerroskuva näytölle. Tällöin kaikki "framet" eli
segmentit näytetään päällekkäin kerrostettuna (näin on helppo havaita esim
jatkuvasta signaalista poikkeamat) kunnes muutetaan jotain asetusta jolloin
näytetään viimeinen tallennettu segmentti yksin. Olen tässä vielä painanut sen jälkeen
"History" näppäintä. Nyt voi valita mikä segmentti numero (frame) halutaan
katsoa. Voi myös katsella "List" joka siis on tässä kuvassa sekvenssin aikaleima
lista (ei kuvassa).
Kuva 9.
Kuten kuva 8 mutta nyt otettu Dekoodaus toiminto käyttöön, aseteltu myös sille
signaalien oikeat parametrit (kuten kivassa 1.)
Tässä on dekoodaus tulos viimeisestä segmentistä (framesta) jonka numero oli
3912. Tässä voisi myös käyttää zoomausta jos haluaa signaalin yksityiskohtia
katsella. Silti koko segmentti dekoodataan vaikka se ei pääikkunassa zoomatessa
mahtuisi kuvaan kokonaan. Siinä voi siirtyä vaaka suunnan siirrolla myös
haluamaansa kohtaan. Varsinkin jos segmentti olisi pidempi se olisi hyvinkin
tapeellista. Kaikissa tapauksiissa dekoodaus lista sisältää koko segmentin ja
tässäkin koko listan voi tallentaa CSV muodossa USB tikulle. Erikseen kumpikin
dekooderi (S1 tai S2) sen mukaan kumpi lista on valittuna. Tässäkin pätee
se että signaalin kuvan voi piilottaa halutessaan Trace Visible valinnalla. Se
ei vaikuta dekoodaukseen tai mittauksiin. Painamalla tässä kohden History
painiketta voi siirtyä haluamaansa segmenttiin.
Huom: Mikäli tuon kuusikulmion sisällä jossa on yhden tavun
data joko heksana, kokonaislukuna tai binäärinä esiintyisi punainen piste se ei
tarkoita virhettä vaan sitä että oskilloskoopin mielestä kaikki ei mahdu siihen
kuusikulmioon (vaikka joskus silmä sanoisikin että mahtuu mutta jostain syystä
se turhan herkästi jo ilmoittaa liian ahtaasta tilasta.)
Mikäli dekoodauksessa olisi skoopin mielestä virhe, silloin kyseinen
kuusikulmion kehys piirretään punaisella. Tai jos data on niin tiuhaa että muuta
ei erotu kuin sininen palkki sinne piirretään punaiset pystyviivat virheiden
kohdille.
Kuva 10.
Kuten kuva 9. mutta tässä siirrytty katsomaan segmenttiä numero 1.
Edelleenkin muistutan että dekoodauksen kannalta (UART) ei ole merkitystä sillä
millä tavalla signaali on trigattu.
Dekoodaus ei pohjaudu triggaukseen vaan signaalin datapisteiden analysointiin
annatuilla parametreillä.
Huomaa että joskus voi olla tarpeen hienosäätää baudinopeutta "custom"
asetuksella. Erityisesti jos ollaan rajoilla sen suhteen riittääko datan tiheys
kyseisen signaalin analysointiin ja toisekseen jotkut sarjaliikenteet eivät
todellakaan ole nopeudeltaan kovin tarkkoja vaan hiukan sinne samalle
"hehtaarille" roiskittuja. Tätä säätöä kannattaa kokeilla jos tulos
standardinopeuksilla ei tahdo onnistua ja/tai sisältää virhjeitä vaikka muut
asetukset on kohdallaan ja signaalin kunto hyvä sekä level tasot asetettu
kohdilleen. Huomaa että etäisyyttä signaalin pohjaan ja huippuun pitää olla
riittävästi eli enemmän kuin ihmisen silmä-aivo vaatisi.
Kuva 11.
Kuten aiemmin mainittu pääikkunaa voi luonnollisestikin zoomata ja siirtää sen
jälkeen haluamaansa yksityiskohtaan segmentissä ja tehdä esimerkiksi mittauksia
tai katsella muuten signaalin yksityiskohtia, tai jos segmentin data olisi kovin
tiheää ja dekoodaus palkki ei näyttäisi yksityskohtia sanomasta.
Esimerkki 2. I2C (IIC, TWI) Työn alla, Under work!
Seuraavat kuvat ovat tapahtumajärjestyksessä. Ne voi lukea ikäänkuin sarjakuva
kertomuksen.
Kuvissa oleva numerointi liittyy muihin asioihin. Liitän ne tähän siten että
laitan kuvassa näkyvän numeron alamumeroksi.
Kuva 12.1
Kuva 12.2
Kuva 12.3
Kuva 12.4
Kuva 12.5
Kuva 12.6
Kuva 12.7
Kuva 12.8
Kuva 12.9
Kuva 12.10
Kuva 12.11
Kuva 12.12
Kuva 12.13
Kuva 12.14
Kuva 12.15
Kuva 12.16
Kuva 12.17
Kuva 12.18
--» Etusivu - Home
--» Oskilloskoopit
--» ylös - up