Titta på seriell data
Denna gång blir det back to basics med en grundläggande förklaring av vad bitar och bytes är och hur dessa bitar ser ut på ett oscilloskop. Vi ska nämligen titta på seriell data med ett oscilloskop och även se hur vi kan “spela in” datan så att vi kan läsa av dataströmmen i efterhand.
Uppkoppling av laborationen
För att demonstrera detta och kunna visa dataströmmen har jag valt att använda en Raspberry Pi och en USB TTY-enhet till min dator. USB TTY-enheten kopplas samman med Raspberry Pi:ens RX/TX pinnar så att vi kan använda datorns skärm och tangentbord till Pi:en. På vårt breadboard kopplar vi in vårt oscilloskop så att vi kan se data som överförs. Vi kommer inte att avkoda datan vi ser, detta är helt eget kapitel för sig. Däremot kommer vi att se riktig seriell data, alltså bitarna, var för sig. Vi kommer också att kunna se hastigheten på den seriella datan, liksom hur hög spänning Raspberry Pi:en kommunicerar med. Således kommer vi att se alla de viktigaste detaljerna för att bättre kunna förså datorn och vad en bit är för något. Detta är grunderna för all datorvetenskap. Detta är den lägsta nivån vi kan komma till, nämligen nollor och ettor.
Vi börjar med att ta en titt på hur jag har kopplat upp min laboration. Det är en väldigt enkel setup som ni kan se på ritningen här nedanför. Kabeln du ska koppla från USB-TTY till Raspberry Pi:ens TX är oftast vit och den till RX är oftast grön.
En först titt på datan
Nu när vi har kopplat upp vår laboration är det dags att att börja titta på oscilloskopet. Det första vi kommer att märka när vi kopplar in vårt oscilloskop är att det ritar en rak linje som är +3.3 volt. Detta är helt riktigt. Detta kallas att det är inverterat mot vad man normalt skulle tro. Ingen data, alltså 0, = +3.3v och data (1) = 0v. Detta går egentligen mot allting vi lärt oss eftersom man annars alltid säger att på = 1 och av = 0. Och så är det också, generellt sett. Men just med vår seriella data är detta inverterat. För att vi verkligen ska se någon data måste vi skriva något på tangentbordet. Nackdelen med detta är att vi knappast hinner se något innan datan är färdigsänd. För att råda bot på detta så att vi får en stabil utsignal på oscilloskopet gjorde jag ett litet Bash-script som hela tiden skriver ut en rad ettor på skärmen. Eftersom det är TX, alltså transmitt vi mäter så är det det på skärmen vi kommer att få se på oscilloskopet. Om vi då tar vårt Bash-skript som skriver ut ettor på skärmen så är det just den data (ettorna) som vi kommer att se på oscilloskopet. Skriptet ser ut som nedan.
#!/bin/bash
while true
do
echo 1
sleep 0.03
done
Nu kör vi detta skriptet för att få ut våra ettor på skärmen och startar upp vår oscilloskop. Jag kommer att börja med standardinställningarna i Raspberry Pi:en, vilket är 115200 bps, eller 115.2 kbps. Om vi nu tittar på detta i ett oscilloskop så kommer vi sedan bilden här nedanför.
Mitt oscilloskop har stöd för cursors och betyder att vi direkt på skärmen kan visa spänning och frekvens. När jag markerar början och slutet på en av dessa bitar (kom ihåg att en bit är detsamma som en av/på, eller 0/1) så ser vi att överförningshastigheten är just 115.2 kbps, fast det visas här istället som 116 khz, vilket i vårt fall är precis samma sak, 155200 bps $\approx$ 116 khz. Här ser vi också tydliget var en bit är. Varje vertikalt streck på oscilloskopet är alltså en bit. Ett långt streck kan vara två eller tre bitar, man får kontrollera med en enstaka bit hur lång den ska vara, eller göra som jag gjort, mäta upp längden på en bit. Åtta sådana här bitar, bildar en byte. Med andra ord, åtta på/av är samma sak som en byte. Bitarna är alltså den lägsta möjliga enhet vi kan mäta i datorsammanhang.
Så här kan vi alltså titta på vår seriella data och med blotta ögat faktiskt se datatrafiken. Det finns alltså inga siffror, inga bokstäver och inga färger. Allting som överförs på kabeln är bitar, där varje bit består utav ett på- eller av-läge. Nu har jag bara ett analogt oscilloskop vilket betyder att jag inte kan spara ner datan som jag ser. Detta betyder alltså att jag egentligen inte kan utläsa själva data som överförs på kabeln, jag kan alltså bara se så att datan ser korrekt ut, vilken överföringshastighet den har och vilken spänning den har.
Spela in, eller spara, datan
Om jag verkligen skulle vilja spara ner data och avkoda den måste jag på något sätt spara den. Även med ett analogt oscilloskop är detta faktiskt möjligt. Många analoga oscilloskop har en CH1 output på baksidan i form av en BNC-kontakt. Fixar vi en BNC till 3.5mm-plugg kan vi faktiskt spela in datan på vår dator med hjälp av ljudkortet. OBS: Kontrollera alltid utspänningen från ditt oscilloskop och den maximala inspänning på ditt ljudkort innan du kopplar ihop dessa, annars kan du bränna din line-in på ljudkortet. När vi väl kopplat samman oscilloskopet med ljudkortet uppstår nästa problem. Mitt ljudkort kan bara hantera maximalt ca 44khz. Detta innebär att vi inte kommer att se någon data när vi spelar in det, eftersom ljudkortet så att säga inte hänger med. För att kunna spela in riktig data från oscilloskopet till ljudkortet krävs att vi sänker överföringshastigheten på Rasberry Pi:en. Detta kan vi enkelt göra genom att ändra i filen /boot/cmdline.txt. Här ändrar vi 115200 till 9600. Filen ska nu se ut som nedan.
dwc_otg.lpm_enable=0 console=ttyAMA0,9600 console=tty1 root=/dev/mmcblk0p2
rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
Nu startar vi om vår Raspberry Pi och justerar vårt oscilloskop så att vi det matchar den långsammare överföringshastigheten. Nu ser vi också att vi är nere på 9.6 khz, vilket motsvarar våra 9600 bps.
Om vi nu spelar in datan med till exempel Audacity så får vi följande inspelning (efter att vi zoomar in rejält). Som ni ser så lutar den lite i början, detta beror på störning från elnätet. Men vi har ändå lyckats spela in datan, även om det är ganska mycket störningar i den.
Kort om binär data
Det vi ser, våra av/på-cykler är alltså 0/1. Ettor och nollor är alltså binär data. Denna binära datan omvandlas sen till tecken i datorn. Att omvandla den datan vi har läst av med oscilloskopet är lite utanför denna artikelns räckvidd, då vi måste ta i beaktande det seriella protokollet med startbitar, stoppbitar, och annan overhead. Men vi kan istället visa hur man omvandlar vanliga tal och tecken till och från binära talsystemet med hjälp av ASCII-tabellen. En ACSII-tabell behövs då för omvandligen. Vi kan ta bokstaven a för enkelhetens skull. Bokstaven a i ACSII-tabellen är 97 i vårt decimala talsystem. Då börjar vi med att ställa upp det hela. Vi börjar bakifrån med 1, 2, 4, 8, 16 osv. Sedan sätter vi en etta där vi behöver den aktuella siffran, och en nolla om den siffran inte behövs.
-------------------------------------
|128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |
-------------------------------------
64+32+1=97. Alltså är bokstaven a i binärt 01100001.
Nyhetsbrev
Nyhetsuppdateringar från tidningen direkt till din inkorg, helt kostnadsfritt. Avsluta när du vill.
Relaterade artiklar
-
DOSBox för att programmera gamla personsökare
DOSBox kan användas till betydligt mer än bara gamla spel. Ett intressant användningsområde är att kunna använda gamla DOS-program för att programmera diverse enheter över serieporten. Oftast behövs inte ens en serieport, istället går det att använda en USB-serieportsadapter.
-
Ett av mina första nyttoprogram
Vilken nostalgi det var när jag gick igenom programmen på min gamla grafräknare från gymnasiet, en TI-83. Där hittade jag ett av mina första nyttoprogram jag någonsin skrivit. Det var ett program skrivit i ett språk kallat TI-BASIC, en version av Basic för Texas Instruments grafräknare. Året då jag skrev programmet är troligen år 2000 eller 2001.
-
Introduktion till elektronik
Ni har väl inte missat artikelserien Introduktion till elektronik som jag skrivit åt m.nu? Här nedan finns i så fall länkarna till samtliga delar i serien. Det är en kort introduktion till grundläggande elektronik på fem delar. Artiklarna behandlar allt från ellära, Ohms lag och Coulombs formel till lödning, breadboarding och hur mätinstrument fungerar.
-
Temperaturövervakning med Raspberry Pi
När det här projektet är klart så har vi en Raspberry Pi som övervakar temperaturen via en DS18B20 temperaturprob (finns att köpa för runt 40-80 kr till varstans). För att larma användaren om att temperaturen har överstigit ett visst gradtal tänds en lysiod. Under tiden programmet körs kan man också se temperaturen direkt på skärmen.
Senaste nyheterna och inläggen
-
Avlyssna trafik på servern med Wireshark och TShark
Wireshark är ett ovärderligt verktyg för att felsöka nätverkskonfigurationer, applikationer, API:er, demoner och mycket annat. I kombination med
tshark
kan vi dessutom avlyssna trafiken på en server i realtid. -
Mysig stämning på sommarens första demoparty
I helgen var det Reunion 2024 i Kvidinge Folkets hus, sommarens första skånska demoparty. Partyt organiserades av Jesper “Skuggan” Klingvall. På plats fanns ett 30-tal besökare.
-
Sommarens skånska demopartyn
Årets sommar bjuder på två skånska demopartyn. Först ut är Reunion i Kvidinge den 28–30 juni. Därefter är det Pågadata i Örtofta den 9–11 augusti.
-
Riskerna med BankID som ingen pratar om
BankID är ett säkert och smidigt sätt att identifiera sig online. Men i takt med dess ökade popularitet och användning har det blivit en svag länk – en single point of failure – på mer än ett sätt.
-
Polisernas fängelsedomar står fast
Efter tre år är målet mot de två poliser som olovligen tog sig in i en berusad mans bostad i Landskrona och misshandlade honom klart. Högsta domstolen beslutade den sjätte mars att avvisa överklagan. Fängelsedomarna för poliserna står därmed fast.
Utvalda artiklar
-
Mysig stämning på sommarens första demoparty
I helgen var det Reunion 2024 i Kvidinge Folkets hus, sommarens första skånska demoparty. Partyt organiserades av Jesper “Skuggan” Klingvall. På plats fanns ett 30-tal besökare.
-
Datorparty i Landskrona
I helgen höll Syntax Society sitt årliga sommarparty. Platsen var en källarlokal i Landskrona där ett femtontal personer medverkade.
-
Det första Pågadata har ägt rum
I helgen ägde det första Pågadata rum – uppföljaren till Gubbdata. Platsen var Folkets Hus i Kvidinge. Organisatör av partyt var Johan “z-nexx” Osvaldsson med hjälp från Jesper “Skuggan” Klingvall. Partyt hade över 100 anmälda deltagare.
-
Även hovrätten fäller poliserna för att ha satt dit oskyldig
Hovrätten fastställer straffet för de två poliser som förra året dömdes till vardera ett års fängelse av Lunds tingsrätt för att ha misshandlat och satt dit en oskyldig man. De båda poliserna ska även betala skadestånd till mannen.
-
Retroloppis i Påarp
Idag var det retroloppis hos Andreas Nilsson i Påarp. På baksidan av huset fanns hundratals spel uppradade på långa bord. Trots friska vindar och sval temperatur var loppisen välbesökt.
CyberInfo Sverige är ett it- och medieföretag i nordvästra Skåne som tillhandahåller böcker, utbildningar, nyheter och konsulttjänster inom Linux, säkerhet och programmering.
CyberInfo Sverige är godkänd för F-skatt, är momsregistrerat och innehar
utgivningsbevis för webbplatsen www.cyberinfo.se.