 Sarjaliikenne dekoodaus - koko muistin pituus.
      Sarjaliikenne dekoodaus - koko muistin pituus.
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