Logic analyzer – Low cost…!

20160210_212621Jeg stod for nylig med en udfordring  – en af mine arduino sensorer holdt op med at virke når jeg kommunikerede med den for hurtigt… Min eneste indsigt i kommunikationen var gennem det softwaren gav – og det bragte mig ikke videre… Interfacet er via SPI som jeg bit-banger – dvs. styrer manuelt i stedet for at bruge den indbyggede SPI-controller i ATmega microcontrolleren.

Havde jeg ikke været for doven ville jeg være gået i kælderen, havde sat oscilloscopet på og analyseret signalerne på ledningerne. Desværre har jeg kun et 2-kanals scope og det har ingen SPI dekodning indbygget – så det ville være møg bøvlet på godt jysk…

Det “rigtige” værktøj til en applikation som denne er en logik analysator. Det er et digitalt oscilloscope – altså i stedet for at kunne måle analoge spændinger så måler den kun “1” og “0”. Det kan gøres meget billigere og de fleste logikanalysatorer har ret mange inputs (kanaler). De fleste har desuden avanceret dekodning af signaler – eks. SPI som jeg godt kunne bruge her…

Geeetech_1CY7C68013ASå – jeg gik på jagt med den intention at finde noget der ikke koster en million. Det naturlige var at kigge efter en USB-dims så jeg ikke skulle betale for en skærm – når den på PC’en sådan set virker fint. Det kunne også spare på bordpladsen 🙂

Med min nylige succes / overforbrug på ebay søgte jeg der – og efter nogen søgen opdagede jeg nogle moduler baseret på en Cypres CY7C68013A-56 chip.

til GPB 3,5 virkede det ret attraktivt… Jeg søgte dog efter software til den – og det vist sig at være ret tricky – noget med at downloade nogle developer tools fra Cypres’ hjemmeside. Lød lidt for bøvlet til mit temperament :-).

20160210_211531Så jeg ledte videre og endte på en “Hobby Components 8 ch / 24 MHZ logic analyzer”. Det er et britisk firma der har taget et af cypress modulerne og lagt deres egen firmware i – og så bruger det et open source tool der hedder “Sigrock Pulseview” (link) til analyen på pc. Det tændte jeg på – også selvom prisen var hele £9.90.

2016-02-10 (2)Da jeg fik den opstod der ca. en halv times total forvirring om drivere. Pulseview ville ikke genkende min logikanalysator… Det viste sig at Hobby Components har lavet en opdatering i efteråret og forvirringen skyltes dels at jeg ikke vidste hvilken version jeg havde og dels at jeg ikke tænkte på at tage USB-stikket ud og ind og genstarte Pulseview flere gange. Så – hermed viderebragt 🙂

Sigrok Pulseview

Programmet er open source og der er ingen releases (i hvert fald ikke til Windows) – så man henter bare det seneste nightly build… (link)

Når altså driveren først er installeret opdager Pulseview selv logikanalysatoren og tilbyder de 8 kanaler med det samme. Konceptet er ret enkelt.2016-02-10 (1)

I det store areal vises de digitale kanaler. På “bobbel-knappen” kan man tilføje “logiske” kanaler som er dekodede / fortolkede versioner af de primære logiksignaler. Det er ret nemt at tilføje kanaler og så konfigurere hvilke ben der anvendes til hvad. Man kan tilføje flere samtidig.2016-02-10 (4)

En af de vigtigste ting ved en logikanalysator er at kunne indstille hvor hurtigt / længe der skal samples OG hvornår sampling skal starte… 2016-02-10 (1)Samplerate og antal samples indstilles i menuen. Helt enkelt samples/sec (Hz) og antal samples. 2016-02-10 (5)Tiden bliver så samplerate * samples… “Run” knappen sætter det hele i gang. Hvis man ikke gør andet starter sampling med det samme – men man kan også definere triggere. Det gøres ved at clicke på et signal og definere hvilke flanker der skal fungere som triggere.

Et praktisk eksempel

Nu hvor det virker – så lad os lave et praktisk eksempel.

Jeg skriver på et blogindlæg om en quadrature encoder til Arduino. Det er en mekanisk encoder som med to ben giver mulighed for at regne ud hvor akslen står.

Jeg vil gerne se om jeg misser step når jeg drejer så hurtigt som jeg kan. Og… om der er kontaktprel…

Så jeg modificerer koden til at sende de nederste 4 bit af positionen ud på port D (Arduino pin 8-11). Dem tilslutter jeg på logikanalysatoren ben 1, 3, 5, 7. Ben 4, 6 bliver til A og B på quadrature encoderen.

Jeg brugte “skruetrækkeren” i menuen til at fjerne pin 1, 3, 5, 7 som jeg dekoder i en paralle dekoder. Og så konfigurerede jeg en trigger på A:

2016-02-10

Som det kan ses tæller den rigtigt :-). Der er en tælling for hver flanke

For at se reaktionen ved max hastighed satte jeg sample rate op til 6 MHz og vred akslen så hurtigt som muligt. Og… som forventet kunne koden ikke nå at fange dem alle som det kan ses her:2016-02-10 (6)

Som det kan ses står tælleren stille på 5 mens signalerne på A og B skifter flere gange. Kan den følge med vil der være ny tællerværdi for hvert skift i enten A eller B. Den blå markering er fra en cursor jeg satte på for at se hvilken tidsramme vi er i. Og det blå område er 18ms bredt. Det sjove er at 2 og 3 er meget korte / hurtige mens 4 og 5 er langsomme. Mit umiddelbare gæt er at koden går i gang med at sende serielle signaler ud på konsollen – men det har jeg nu indsigt nok til at kunne arbejde med.

Det er denne type indsigt som en logikanalysator kan give. Selvfølgelig havde det været fedt med en der også lige havde 4 analoge kanaler 🙂 – men til prisen (~100 kr incl. fragt) er dette her faktisk helt fantastisk!

Nå – og nu må jeg hellere få fundet den fejl jeg startede bloggen
med 🙂