{"id":770,"date":"2013-02-25T00:39:22","date_gmt":"2013-02-24T23:39:22","guid":{"rendered":"http:\/\/majek.mamy.to\/?p=770"},"modified":"2013-07-02T22:10:15","modified_gmt":"2013-07-02T20:10:15","slug":"logic-analyzer","status":"publish","type":"post","link":"https:\/\/majek.sh\/pl\/logic-analyzer\/","title":{"rendered":"Analizator stan\u00f3w logicznych"},"content":{"rendered":"<p>Tym razem o dw\u00f3ch rzeczach na raz, ale w sumie o jednej:-) Czyli nowa moja zabawka: analizator stan\u00f3w logicznych oraz zajawka diversity do odbiornika wideo.<\/p>\n<h1>Analizator stan\u00f3w logicznych<\/h1>\n<p>Robi\u0105c cokolwiek przy technice cyfrowej, mikrokontrolerach itp., analizator stan\u00f3w logicznych mo\u017ce by\u0107 bardzo przydatny do debugowania. Jest te\u017c \u015bwietny do rozgryzania gotowych uk\u0142ad\u00f3w \ud83d\ude42<br \/>\nOd pewnego czasu chodzi\u0142o mi po g\u0142owie, \u017ceby sobie zrobi\u0107 <a href=\"http:\/\/tfla-01.berlios.de\/\" target=\"_blank\">The Fabulous Logic Analyzer<\/a>, ale port r\u00f3wnoleg\u0142y, to niestety co\u015b co jest coraz rzadziej spotykane, zw\u0142aszcza w laptopach \ud83d\ude41<br \/>\nNiedawno widzia\u0142em jak dzia\u0142a <a href=\"http:\/\/www.saleae.com\/logic16\" target=\"_blank\">Saleae Logic16<\/a>\ud83d\ude42 Robi wra\u017cenie, zw\u0142aszcza, \u017ce dzia\u0142a r\u00f3wnie\u017c pod Linuxem. Tylko 100-200 Euro to troch\u0119 za du\u017co za now\u0105 zabawk\u0119, wi\u0119c zacz\u0105\u0142em szuka\u0107 bardziej dost\u0119pnych cenowo alternatyw. Po przekopaniu Internetu znalaz\u0142em, \u017ce starsza wersja Saleae Logic, CWAV USBee SX i inne ta\u0144sze analizatory oparte s\u0105 na tym samym uk\u0142adzie Cypressa: CY7C68013A &#8211; i co ciekawe prawie bez dodatkowych cz\u0119\u015bci. Wiedz\u0105c czego szuka\u0107 znalaz\u0142em na Ebay-u p\u0142ytk\u0119 prototypow\u0105 <em>Lcsoft CY7C68013A Mini Board<\/em> za mniej ni\u017c $12, kt\u00f3r\u0105 oczywi\u015bcie szybko kupi\u0142em \ud83d\ude42<br \/>\n<a href=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/analyzer1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/analyzer1-640x396.jpg\" alt=\"LCSoft Cypress prototyping board\" width=\"640\" height=\"396\" class=\"alignnone size-medium wp-image-773\" srcset=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/analyzer1-640x396.jpg 640w, https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/analyzer1-150x92.jpg 150w, https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/analyzer1.jpg 1024w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>Nie jest ona kompatybilna z Saleae mimo zaprogramowanego takiego samego identyfikatora USB (VID\/PID), ale poniewa\u017c staram si\u0119 u\u017cywa\u0107 otwartego softu o ile si\u0119 da, to wybra\u0142em <a href=\"http:\/\/sigrok.org\" target=\"_blank\">Sigrok<\/a>-a, kt\u00f3ry to za\u0142o\u017cenie spe\u0142nia i radzi sobie z t\u0105 p\u0142ytk\u0105.<br \/>\nPo pewnych trudno\u015bciach ze spe\u0142nieniem zale\u017cno\u015bci (Python3, sdcc i troch\u0119 innego dziwnego softu), w ko\u0144cu si\u0119 skompilowa\u0142 i zacz\u0105\u0142 dzia\u0142a\u0107. Sigrok na szcz\u0119\u015bcie przychodzi ze swoim firmware do uk\u0142ad\u00f3w Cypressa, wi\u0119c nic tym razem nie trzeba piratowa\u0107 \ud83d\ude42<\/p>\n<p>Jest nawet lepiej, p\u0142ytka Lcsoftu ma zwork\u0119, gdzie mo\u017cna zmieni\u0107 tryb pracy pomi\u0119dzy 'Saleae&#8217; i 'P\u0142ytka prototypowa Cypress&#8217;.<br \/>\nW trybiie Saleae, Sigrok wrzuca kompatybilny firmware, wi\u0119c dost\u0119pne jest tylko 8 bit\u00f3w przy samplowaniu 24MHz.<br \/>\nNatomiast po prze\u0142\u0105czeniu w tryb natywny dostajemy analizator z 16 wej\u015bciami. Niestety, dla 16 bit\u00f3w 24MHz jest ju\u017c nieosi\u0105galne (max 12MHz), ale mo\u017cna zmniejszy\u0107 liczb\u0119 pr\u00f3bkowanych wej\u015b\u0107 i jak zejdziemy do 8 bit\u00f3w i mniej, to wtedy jest dost\u0119pna jest pe\u0142na pr\u0119dko\u015b\u0107.<\/p>\n<p>Sogrok jest w miar\u0119 nowym projektem, wi\u0119c gui nie jest niestety jego mocn\u0105 stron\u0105, ale przynajmniej mo\u017cna posamplowa\u0107 i podejrze\u0107 przebiegi. I to wszystko &#8211; nawet zapisu nie da si\u0119 zrobi\u0107 \ud83d\ude41<br \/>\n<a href=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/pulseview.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/pulseview-640x417.png\" alt=\"Sigrok&#039;s Pulseview\" width=\"640\" height=\"417\" class=\"alignnone size-medium wp-image-776\" srcset=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/pulseview-640x417.png 640w, https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/pulseview-150x97.png 150w, https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/pulseview.png 889w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>Za to uruchamiany z linii komend <strong>sigrok_cli<\/strong> jest ju\u017c ca\u0142kiem pot\u0119\u017cnym narz\u0119dziem.<\/p>\n<h1>Analizowanie odbiornika wideo<\/h1>\n<p>Nadszed\u0142 czas co\u015b poanalizowa\u0107 i odbiornik wideo z zestawu Fox700 jest idealny do tego \ud83d\ude42<br \/>\nZastanawia\u0142em si\u0119 od jakiego\u015b czasu co dok\u0142adnie biega w nim na szynie i2c, czyli jak dok\u0142adnie programowany jest tuner dla konkretnej cz\u0119stotliwo\u015b\u0107i odbioru, i okazja si\u0119 w ko\u0144cu znalaz\u0142a \ud83d\ude42<\/p>\n<p><a href=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/video-receiver.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/video-receiver-640x480.jpg\" alt=\"Standard 1.2GHz video receiver\" width=\"640\" height=\"480\" class=\"alignnone size-medium wp-image-779\" srcset=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/video-receiver-640x480.jpg 640w, https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/video-receiver-150x112.jpg 150w, https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/video-receiver.jpg 1024w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><br \/>\n<a href=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/analyzer2.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/analyzer2-622x480.jpg\" alt=\"Logic analyzer and video receiver\" width=\"622\" height=\"480\" class=\"alignnone size-medium wp-image-782\" srcset=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/analyzer2-622x480.jpg 622w, https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/analyzer2-150x115.jpg 150w, https:\/\/majek.sh\/wp-content\/uploads\/2013\/02\/analyzer2.jpg 1024w\" sizes=\"(max-width: 622px) 100vw, 622px\" \/><\/a><\/p>\n<p>Jak wida\u0107 na zj\u0119ciach powy\u017cej, doda\u0142em prosty konwerter poziom\u00f3w na opornikach i diodach Zenera. By\u0142o to konieczne poniewa\u017c odbiornik wideo dzia\u0142a na 5V, a uk\u0142ad Cypressa na 3.3V. Oczywi\u015bcie na pocz\u0105tku pr\u00f3bowa\u0142em bez diod Zenera, ale to niestety nie jest AVR i dziwne rzeczy si\u0119 dzia\u0142y :&#8211;)<\/p>\n<p>Samplowanie przy pomocy <strong>sigrok_cli<\/strong>:<\/p>\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:550px;\"><div class=\"text codecolorer\">$ sigrok-cli --driver fx2lafw --device samplerate=24000000 --time 1s -p 0-7<br \/>\nlibsigrok 0.2.0<br \/>\nAcquisition with 8\/16 probes at 24 MHz<br \/>\n0:00000000 00000000 00000000 00000000<br \/>\n1:00000000 00000000 00000000 00000000<br \/>\n2:00000000 00000000 00000000 00000000<br \/>\n3:11111111 11111111 11111111 11111111<br \/>\n4:11111111 11111111 11111111 11111111<br \/>\n5:11111111 11111111 11111111 11111111<br \/>\n6:11111111 11111111 11111111 11111111<br \/>\n7:11111111 11111111 11111111 11111111<\/div><\/div>\n<p>Jedynki i zera s\u0105 ca\u0142kiem fajne, ale prawdziwa si\u0142a Sigroka tkwi z mo\u017cliwo\u015bci dekodowania protoko\u0142\u00f3w:<\/p>\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:550px;height:300px;\"><div class=\"text codecolorer\">$ sigrok-cli --driver fx2lafw --device samplerate=24000000 --time 10s -p 0-7 -o test.sr<br \/>\n$ sigrok-cli -i test.sr -a i2c:sda=0:scl=1<br \/>\ni2c: &quot;START&quot; <br \/>\ni2c: &quot;ADDRESS WRITE&quot; &quot;0x68&quot; <br \/>\ni2c: &quot;ACK&quot; <br \/>\ni2c: &quot;DATA WRITE&quot; &quot;0x05&quot; <br \/>\ni2c: &quot;NACK&quot; <br \/>\ni2c: &quot;STOP&quot; <br \/>\ni2c: &quot;START&quot; <br \/>\ni2c: &quot;ADDRESS READ&quot; &quot;0x50&quot; <br \/>\ni2c: &quot;ACK&quot; <br \/>\ni2c: &quot;DATA READ&quot; &quot;0x00&quot; <br \/>\ni2c: &quot;NACK&quot; <br \/>\ni2c: &quot;STOP&quot; <br \/>\ni2c: &quot;START&quot; <br \/>\ni2c: &quot;ADDRESS WRITE&quot; &quot;0x61&quot; <br \/>\ni2c: &quot;ACK&quot; <br \/>\ni2c: &quot;DATA WRITE&quot; &quot;0x2b&quot; <br \/>\ni2c: &quot;ACK&quot; <br \/>\ni2c: &quot;DATA WRITE&quot; &quot;0x6c&quot; <br \/>\ni2c: &quot;ACK&quot; <br \/>\ni2c: &quot;DATA WRITE&quot; &quot;0x8e&quot; <br \/>\ni2c: &quot;ACK&quot; <br \/>\ni2c: &quot;DATA WRITE&quot; &quot;0xf0&quot; <br \/>\ni2c: &quot;ACK&quot; <br \/>\ni2c: &quot;STOP&quot;<\/div><\/div>\n<p>Zapisy na pocz\u0105tku, to jakie\u015b \u015bmieci, my\u015bl\u0119, \u017ce uk\u0142ad steruj\u0105cy by\u0142 zaprojektowany do innego uk\u0142adu z dodatkowymi peryferiami, ale w zasadzie to co jest interesuj\u0105ce, to zapisy pod adres 0x61.<br \/>\nZgodnie z dokumentacj\u0105 uk\u0142adu SP5055 (synteza u\u017cywana w wi\u0119kszo\u015bci takich tuner\u00f3w), adres 0x61 jest adresem pod kt\u00f3rym uk\u0142ad zawsze odpowiada, niezale\u017cnie od ustawienia stanu na n\u00f3\u017cce adresu.<br \/>\nW czasie zapisu zostaj\u0105 przes\u0142ane 4 bajty: 2 bajty dzielnika (r\u00f3\u017cne dla ka\u017cdego kana\u0142u) oraz 2 bajty innych ustawie\u0144 (stan, zewn\u0119trzne wyj\u015bcia) &#8211; zawsze takie same.<\/p>\n<p>Sprawd\u017amy wi\u0119c jaka cz\u0119stotliwo\u015b\u0107 powinna by\u0107 zaprogramowana.<\/p>\n<p>Dzielnik w powy\u017cszym przyk\u0142adzie wynosi 0x2b6c (MSB jest transmitowane najpierw) = 11116<\/p>\n<p>Zgodnie ze specyfikacj\u0105 uk\u0142adu, cz\u0119stotliwo\u015b\u0107 dostrojenia wynosi:<br \/>\n<em>f = dzielnik * 16 * Fcomp<\/em><br \/>\nFcomp jest cz\u0119stotliwo\u015bci\u0105 z pod\u0142\u0105czonego kwarcu lub zewn\u0119trznego generatora (typowo 4MHz) podzielon\u0105 przez 512, wi\u0119c:<br \/>\n<em>f = dzielnik * 16 * 4000000 \/ 512<\/em><\/p>\n<p>W tym przypadku synteza\/generator jest natrojony na 1389500000Hz = 1389.5MHz<br \/>\nAle to nie koniec &#8211; trzeba jeszcze odj\u0105\u0107 cz\u0119stotliwo\u015b\u0107 po\u015bredni\u0105, czyli w tym tunerze 479.5MHz.<br \/>\nCzyli w rzeczywisto\u015bci tuner jest dostrojony do cz\u0119stotliwo\u015bci 910MHz co odpowiada dok\u0142adnie kana\u0142owi <strong>0<\/strong>, kt\u00f3ry by\u0142 ustationy w odbiorniku w czasie testu.<\/p>\n<p>Sukces! \ud83d\ude42<\/p>\n<p>Jedn\u0105 z rzeczy, kt\u00f3re mi brakuje w <strong>sigrok_cli<\/strong> jest brak timestamp\u00f3w (chocia\u017c opcj\u0105 -v mo\u017cna zobaczy\u0107 liczb\u0119 sampli), ale poniewa\u017c jest to otwarty soft, to mo\u017ce kto\u015b to pr\u0119dzej czy p\u00f3\u017aniej dopisze (mo\u017ce nawej ja) \ud83d\ude09<\/p>\n<p>Na dzisiaj ju\u017c wiem jak programowa\u0107 tuner, wi\u0119c mog\u0119 zrobi\u0107 sw\u00f3j kontroler.<br \/>\nDlaczego? Bo wg. dokumentacji SP5055 niekt\u00f3re tunery powinny mie\u0107 mo\u017cliwo\u015b\u0107 odczytu z wewn\u0119trznego przetwornika ADC po\u0142\u0105czonego zazwyczaj z uk\u0142adem demodulatora, co daje informacj\u0119 o dostrojeniu\/odstrojeniu mi\u0119dzy ustawion\u0105 cz\u0119stotliwo\u015bci\u0105, a rzeczywi\u015bcie odbieran\u0105. Dzi\u0119ki temu mo\u017cna si\u0119 dok\u0142adniej automatycznie dostroi\u0107 do nadajnika, kt\u00f3ry stabilno\u015bci\u0105 niestety nie grzeszy. Dodatkowo istnieje mo\u017cliwo\u015b\u0107 dostrojenia do dowolnej cz\u0119stotliwo\u015bci z zakresie pracy g\u0142owicy z rozdzielczo\u015bci\u0105 125kHz \ud83d\ude42<br \/>\nDostrajanie z tymi informacjami wielu tuner\u00f3w jednocze\u015bnie te\u017c nie jest problemem, wi\u0119c r\u00f3wnie\u017c zrobienie diversity b\u0119dzie prostsze \ud83d\ude42<br \/>\n<\/p>","protected":false},"excerpt":{"rendered":"<p>Tym razem o dw\u00f3ch rzeczach na raz, ale w sumie o jednej:-) Czyli nowa moja zabawka: analizator stan\u00f3w logicznych oraz zajawka diversity do odbiornika wideo. Analizator stan\u00f3w logicznych Robi\u0105c cokolwiek przy technice cyfrowej, mikrokontrolerach itp., analizator stan\u00f3w logicznych mo\u017ce by\u0107 <span class=\"excerpt-dots\">&hellip;<\/span> <a class=\"more-link\" href=\"https:\/\/majek.sh\/pl\/logic-analyzer\/\"><span class=\"more-msg\">Czytaj dalej &rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,6,5],"tags":[24,11,48,47,46,49],"_links":{"self":[{"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/posts\/770"}],"collection":[{"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/comments?post=770"}],"version-history":[{"count":46,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/posts\/770\/revisions"}],"predecessor-version":[{"id":1073,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/posts\/770\/revisions\/1073"}],"wp:attachment":[{"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/media?parent=770"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/categories?post=770"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/tags?post=770"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}