{"id":624,"date":"2013-01-12T02:40:57","date_gmt":"2013-01-12T01:40:57","guid":{"rendered":"http:\/\/majek.mamy.to\/?p=624"},"modified":"2013-09-01T01:35:14","modified_gmt":"2013-08-31T23:35:14","slug":"rc-diy-transmitter","status":"publish","type":"post","link":"https:\/\/majek.sh\/pl\/rc-diy-transmitter\/","title":{"rendered":"LCD88: Nadajnik R\/C DIY"},"content":{"rendered":"<p><\/p>\n<h1>Jeszcze jeden? \ud83d\ude42<\/h1>\n<p>Jest kilka otwartych projekt\u00f3w. wi\u0119c po co nast\u0119pny?<br \/>\nOd pocz\u0105tku: zacz\u0105\u0142em ten projekt ju\u017c w 2009, wtedy nie by\u0142o zbyt wiele opcji dost\u0119pnych, gotowe nadajniki o sporych mo\u017cliwo\u015bciach by\u0142y bardzo drogie. No i \u017caden nie by\u0142 dostatecznie elastyczny jak dla mnie \ud83d\ude42 Nawet dzisiaj nie wiem czy podobny nadajnik istnieje, przynajmniej za sensown\u0105 cen\u0119, a nie tysi\u0105ce $$ \ud83d\ude42<\/p>\n<p><a href=\"https:\/\/majek.sh\/happy-new-year-2013\/transmitter\/\" rel=\"attachment wp-att-607\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/01\/transmitter-584x480.jpg\" alt=\"\" title=\"DYI transmitter\" width=\"584\" height=\"480\" class=\"alignnone size-medium wp-image-607\" srcset=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/01\/transmitter-584x480.jpg 584w, https:\/\/majek.sh\/wp-content\/uploads\/2013\/01\/transmitter-150x123.jpg 150w, https:\/\/majek.sh\/wp-content\/uploads\/2013\/01\/transmitter.jpg 1024w\" sizes=\"(max-width: 584px) 100vw, 584px\" \/><\/a><\/p>\n<h1>BLOCZKI!<\/h1>\n<p>Ca\u0142a unikalno\u015bc tego projektu tkwi w  BLOCZKACH!<br \/>\nDo sterowania ka\u017cdym modelem mamy jakie\u015b dr\u0105\u017cki, ga\u0142ki, prze\u0142\u0105czniki, i na wyj\u015bciu kilka kana\u0142\u00f3w. Pomi\u0119dzy wej\u015bciami a wyj\u015bciami jest zawsze mniej lub bardziej elastyczna 'czarna skrzynka&#8217;.<br \/>\nW moim projekcie wn\u0119trze 'czarnej skrzynki&#8217; mo\u017cna swobodnie definiowa\u0107 \u0142\u0105cz\u0105c dowolnie matematyczne bloczki.<\/p>\n<p>Bloczki jakie mo\u017cna u\u017cy\u0107:<\/p>\n<ul>\n<li>trymery<\/li>\n<li>rewersy<\/li>\n<li>dodawanie<\/li>\n<li>odejmowanie<\/li>\n<li>negacja<\/li>\n<li>expo<\/li>\n<li>mno\u017cenie<\/li>\n<li>zamiana warto\u015bci analogowej na 3 stany: -1,0,1 (dla prze\u0142\u0105cznik\u00f3w)<\/li>\n<li>powszechne mixery<\/li>\n<li>limity<\/li>\n<li>i wiele innych&#8230;<\/li>\n<\/ul>\n<p>Najlepsz\u0105 metod\u0105 na wyja\u015bnienie tego jak to wszystko dzia\u0142a jest pokazanie na przyk\u0142adach.<br \/>\nW podanych przyk\u0142adach powiniene\u015b wiedzie\u0107 tylko, \u017ce kana\u0142y 0-7 s\u0105 wej\u015bciami (dr\u0105\u017cki, potencjometry, prze\u0142\u0105czniki), natomiast 16-23 to kana\u0142y wyj\u015bciowe (to co dostanie odbiornik). Reszta czasem ma specjalne znaczenie, albo jest zarezerwowana, ale to nie jest tu wa\u017cne.<\/p>\n<h2>Prosty model &#8211; taki jak w wi\u0119kszo\u015bci prostych nadajnik\u00f3w.<\/h2>\n<p>Podstawowe bloczki:<br \/>\n<a href=\"https:\/\/majek.sh\/rc-diy-transmitter\/1-ch-simple\/\" rel=\"attachment wp-att-702\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/01\/1-ch-simple.png\" alt=\"\" title=\"Jeden prosty kana\u0142 zrobiony z bloczk\u00f3w\" width=\"552\" height=\"222\" class=\"alignnone size-full wp-image-702\" srcset=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/01\/1-ch-simple.png 552w, https:\/\/majek.sh\/wp-content\/uploads\/2013\/01\/1-ch-simple-150x60.png 150w\" sizes=\"(max-width: 552px) 100vw, 552px\" \/><\/a><\/p>\n<p>Kana\u0142 0 (CH0) jest wej\u015bciem z dr\u0105\u017cka, jego warto\u015b idzie na wej\u015bcie bloczka <em>revers<\/em>. Drugie wej\u015bcie tego bloczka jest pod\u0142\u0105czone do kana\u0142u CH40, kt\u00f3ry pami\u0119ta pozycj\u0119 prze\u0142\u0105cznika rewersu. Wyj\u015bcie rewersu idzie do kana\u0142u 52. Nast\u0119pnym etapem jest bloczek trymera, kt\u00f3ry na jednym wej\u015bciu ma kana\u0142 52 (wyj\u015bcie poprzedniego bloczka), na drugim ma kana\u0142 28 z kt\u00f3rego dodaje warto\u015b\u0107 trymera. Wyj\u015bcie bloczka trymera idzie ju\u017c bezpo\u015brednio do kana\u0142u wyj\u015bciowego.<br \/>\nPozosta\u0142e kana\u0142y tworzy si\u0119 w podobny spos\u00f3b.<\/p>\n<p>Bloczek specjalny <em>rewers<\/em> jest tak naprawd\u0119 bloczkiem mno\u017cenia, ale w menu jest traktowany specjalnie &#8211; drugie wej\u015bcie automatycznie pojawia si\u0119 w menu 'Reverse&#8217;.<br \/>\nPodobnie jest z bloczkiem <em>trymera<\/em>, kt\u00f3ry jest bloczkiem dodawania, a drugie jego wej\u015bcie pojawia si\u0119 w menu 'Trims&#8217;.<\/p>\n<p>Wygl\u0105da prosto, nieprawda\u017c? \ud83d\ude42<br \/>\nTo teraz co\u015b odrobin\u0119 trudniejszego.<\/p>\n<h2>Delta lub lataj\u0105ce skrzyd\u0142o<\/h2>\n<p>Kolejny przyk\u0142ad: mixer delta.<\/p>\n<p>Na pocz\u0105tek warto napisa\u0107 co taki mikser liczy:<\/p>\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:550px;\"><div class=\"text codecolorer\">lewa lotka = ( kierunek + wysoko\u015b\u0107 ) \/2<br \/>\nprawa lotka = ( - kierunek + wysoko\u015b\u0107 ) \/2<\/div><\/div>\n<p>To narysujmy bloczki do policzenia tego:<br \/>\n<a href=\"https:\/\/majek.sh\/rc-diy-transmitter\/delta\/\" rel=\"attachment wp-att-704\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/01\/delta.png\" alt=\"\" title=\"Delta mixer z bloczk\u00f3w\" width=\"551\" height=\"274\" class=\"alignnone size-full wp-image-704\" srcset=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/01\/delta.png 551w, https:\/\/majek.sh\/wp-content\/uploads\/2013\/01\/delta-150x74.png 150w\" sizes=\"(max-width: 551px) 100vw, 551px\" \/><\/a><\/p>\n<p>Ale to tylko sam mixer, a co z trymerami, rewersami itp?<\/p>\n<p>Sp\u00f3jrzmy wi\u0119c na prawdziwy model:<br \/>\n<a href=\"https:\/\/majek.sh\/rc-diy-transmitter\/delta-full\/\" rel=\"attachment wp-att-713\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/01\/delta-full.png\" alt=\"\" title=\"Lataj\u0105ce skrzyd\u0142o zdefiniowane przy u\u017cyciu bloczk\u00f3w\" width=\"550\" height=\"384\" class=\"alignnone size-full wp-image-713\" srcset=\"https:\/\/majek.sh\/wp-content\/uploads\/2013\/01\/delta-full.png 550w, https:\/\/majek.sh\/wp-content\/uploads\/2013\/01\/delta-full-150x104.png 150w\" sizes=\"(max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\nWygl\u0105da dosy\u0107 skomplikowanie, wi\u0119c wyja\u015bnijmy o co tu chodzi.<\/p>\n<p>Troch\u0119 zmodyfikowane r\u00f3wnanie mixera delta:<\/p>\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:550px;\"><div class=\"text codecolorer\">prawa lotka=0.5*wysoko\u015b\u0107+0.5*kierunek<br \/>\nlewa lotka=0.5*wysoko\u015b\u0107-0.5*kierunek<\/div><\/div>\n<p>My\u015bl\u0119, \u017ce wi\u0119kszo\u015b\u0107 ludzi, kt\u00f3rzy mieli okazj\u0119 lata\u0107 lataj\u0105cym skrzyd\u0142em mo\u017ce potwierdzi\u0107, \u017ce ten typ modelu jest bardzo wra\u017cliwy na ster wysoko\u015bci. Jednym z rozwi\u0105za\u0144 tego problemu jest ustawienie expo na kanale wysoko\u015bci. Ale mo\u017cna te\u017c po prostu znieczuli\u0107 wysoko\u015b\u0107 na korzy\u015b\u0107 steru kierunku. Czyli zamiast u\u017cywa\u0107 0.5 jako mno\u017cnik dla obydwu kana\u0142\u00f3w, u\u017cywam mniejszego dla wysoko\u015bci, a wi\u0119kszego dla kierunku. Wa\u017cne, \u017ceby suma wsp\u00f3\u0142czynnik\u00f3w nie by\u0142a wi\u0119ksza od 1, to wtedy warto\u015bci na wyj\u015bciu nie b\u0119d\u0105 przesterowane lub obci\u0119te (podobnie zrobi\u0142em w moim ma\u0142ym mikserze na ATTINY13).<\/p>\n<p>Sp\u00f3jrzmy na powy\u017cszy obrazek. Bloki 1-3 'wytwarzaj\u0105&#8217; mno\u017cniki dla mixera delta. Poniewa\u017c CH40 jest pod\u0142\u0105czony do bloczka trymera, wi\u0119c jest mo\u017cliwo\u015b\u0107 z poziomu menu na modyfikacj\u0119 tego mno\u017cnika. Bloczek 2 normalizuje warto\u015b\u0107, \u017ceby mie\u015bci\u0142a si\u0119 mi\u0119dzy 0 a 1, Bloczek 3 wytwarza drugi mno\u017cnik odejmuj\u0105c od 1 poprzedni wyliczony.<br \/>\nBloczki 5,7,10,11,12 tworz\u0105 mikser delta z zmiennymi mno\u017cnikami. Po mikserze delta s\u0105 bloczki rewers\u00f3w i trymer\u00f3w dla w\u0142a\u015bciwego ustawienia kierunku i pozycji neutralnej serwa.<br \/>\nBlisko wej\u015b\u0107 mamy bloczki 4,6 i 8 &#8211; zwyk\u0142e trymery przydatne do korekcji zachowania samolotu w locie.<\/p>\n<p>Czyli  je\u017celi mo\u017cna sobie wyobrazi\u0107 r\u00f3wnanie opisuj\u0105ce zachowanie aparatury, to mo\u017cna takie co\u015b zrobi\u0107 z bloczk\u00f3w.<br \/>\nOczywi\u015bcie b\u0119d\u0105 potrzebne jeszcze specjalne bloczki (stany, prze\u0142\u0105czniki, pami\u0119ci itp), ale to mo\u017cna niewelkim kosztem dorobi\u0107, i pewnie dorobi\u0119 jak czego\u015b b\u0119d\u0119 potrzebowa\u0142 \ud83d\ude42<\/p>\n<p>Wystarczy o bloczkach, warto jeszcze opisa\u0107 kilka innych rzeczy \ud83d\ude42<\/p>\n<h1>Architektura oprogramowania<\/h1>\n<p>W nadajniku jest kilka typ\u00f3w proces\u00f3w:<\/p>\n<ul>\n<li>krytyczny &#8211; generowanie sygna\u0142y PPM<\/li>\n<li>wysokiego priorytetu &#8211; pobieranie warto\u015bci z wej\u015b\u0107, przeliczenie bloczk\u00f3w i przygotowanie warto\u015bci dla generatora PPM<\/li>\n<li>reszta &#8211; interfejs u\u017cytkownika (menu, wy\u015bwietlanie czego\u015b na LCD, trymowanie, opcje etc.)<\/li>\n<\/ul>\n<h2>Generowanie sygna\u0142u PPM<\/h2>\n<p>U\u017cy\u0142em sprz\u0119towego generatora PWM, \u017ceby PPM by\u0142 jak najdok\u0142adniejszy jak to tylko mo\u017cliwe \ud83d\ude42<br \/>\nUda\u0142o si\u0119 dzi\u0119ki ustawieniu licznika w tryb CTC i modyfikacji go w przerwaniu, ale w niekrytycznym momencie. Ca\u0142y pomys\u0142 opiera si\u0119 na tym, \u017ce zmiana g\u00f3rnej warto\u015bci licznika w tym trybie odbywa si\u0119 automatycznie dopiero po doj\u015bciu licznika do ko\u0144ca. Czyli now\u0105 warto\u015b\u0107 dla nast\u0119pnego cyklu mo\u017cna wpisa\u0107 w dowolnym momencie trwania obecnego bez jego zaburzania. Daje to sporo czasu na przeprogramowanie licznika i nie skutkuje jitterem czy innymi dziwnymi rzeczami. Poniewa\u017c ca\u0142y kawa\u0142ek przebiegu dla jednego kana\u0142y sk\u0142ada si\u0119 z impulsu synchronizuj\u0105cego, a p\u00f3\u017aniej z o wiele d\u0142u\u017cszego zale\u017cnego od warto\u015bci zadanej, uruchamiam licznik zawsze ze sta\u0142\u0105 warto\u015bci\u0105 dla czasu synchronizacji, a po jego zako\u0144czeniu ju\u017c programuj\u0119 licznik na nowy cykl. Poniewa\u017c mam na to co najmniej 10000 cykli zegarowych, szansa, \u017ce nawet jakie\u015b inne przerwanie op\u00f3\u017ani przeprogramowanie jest w\u0142a\u015bciwie zerowa.<br \/>\nA poniewa\u017c przeprogramowywanie odbywa si\u0119 w przerwaniach, wi\u0119c niezale\u017cnie co robi g\u0142\u00f3wny w\u0105tek programu, to sygna\u0142 PPM jest zawsze generowany.<\/p>\n<h2>Odczytywanie warto\u015bci, przeliczanie i inne rzeczy<\/h2>\n<p>Kolejnym ciekawym rozwi\u0105zaniem jakie zastosowa\u0142em w tym oprogramowaniu jest multitasking (tak, na AVR:-) )<br \/>\nPoniewa\u017c przerwania powinny by\u0107 w miar\u0119 kr\u00f3tkie, natomiast proces przeliczania bloczk\u00f3w mo\u017ce trwa\u0107 troch\u0119 d\u0142u\u017cej, postanowi\u0142em zrobi\u0107 co\u015b co pozwoli na ci\u0105g\u0142e i prawid\u0142owe dzia\u0142anie aparatury nawet jak du\u017co klikamy po menu czy wykonujemy inne czasoch\u0142onne operacje, kt\u00f3re zabijaj\u0105 programy oparte na jednej p\u0119tli ze wszystkim.<\/p>\n<p>Co si\u0119 w takim razie naprawd\u0119 dzieje w tym sofcie?<br \/>\nZ powy\u017cszego wida\u0107, \u017ce w przerwaniach generowany jest sygna\u0142 PPM. Na przerwaniach r\u00f3wnie\u017c odczytywane s\u0105 przetworniki ADC, przeliczane na zakres -1..1 i wstawiane w odpowiednie kana\u0142y. W przerwaniach jest r\u00f3wnie\u017c przegl\u0105dana klawiatura. \u017badne z tych przerwa\u0144 nie blokuje procesora na wi\u0119cej ni\u017c kilkaset takt\u00f3w.<br \/>\nPozostaj\u0105 jeszcze dwie rzeczy: przeliczanie bloczk\u00f3w, kt\u00f3re mo\u017ce zaj\u0105\u0107 wi\u0119cej czasu (wi\u0119c nie powinno by\u0107 robione w przerwaniach) oraz obs\u0142uga klawiatury i wy\u015bwietlanie informacji na wy\u015bwietlaczu (przerysowanie kolorowego wy\u015bwietlacza potrafi trwa\u0107 nawet ko\u0142o miliona takt\u00f3w!). W tym wypadku postanowi\u0142em, \u017ce w\u0105tek 'wy\u015bwietlacza&#8217; jest g\u0142\u00f3wnym w\u0105tkiem i dzia\u0142a ca\u0142y czas. Natomiast zaraz po tym jak zostan\u0105 zebrane nowe warto\u015bci z przetwornik\u00f3w ADC w\u0105tek ten jest wyw\u0142aszczany i uruchamiane jest w jego miejsce przeliczanie bloczk\u00f3w. Gdy wszystkie bloczki zostaj\u0105 przeliczone, program wraca do poprzedniego w\u0105tku. W ten spos\u00f3b wszystko robione jest o czasie, a klikanie po menu i wy\u015bwietlanie na ekranie nie ma \u017cadnego negatywnego wp\u0142ywu na dzia\u0142anie nadajnika.<\/p>\n<p>Dodatkow\u0105 zalet\u0105 multitaskingu jest to, \u017ce programuj\u0105c 'user interface&#8217; nie musz\u0119 si\u0119 martwi\u0107 o czas wykonywania, czy dzielenie procedur na kilka cz\u0119\u015bci i uruchamianie ich po kawa\u0142ku (jak to robi\u0142em w GPS-ie).<\/p>\n<h2>Pami\u0119\u0107<\/h2>\n<p>Zdecydowa\u0142em si\u0119 u\u017cy\u0107 wewn\u0119trznej pami\u0119ci Flash (programu) jako miejsca na definicj\u0119 modeli (bloczki, warto\u015bci kana\u0142\u00f3w itd). Dane s\u0105 zapisywane 'kontenerami&#8217; z odpowiednimi nag\u0142\u00f3wkami (numer modelu, typ bloczku itp), \u017ceby mo\u017cna by\u0142o szybko znale\u017a\u0107 w takim \u015bmietniku odpowiedni bloczek. A poniewa\u017c jest to pami\u0119\u0107 flash o mniejszym \u017cyciu ni\u017c wbudowany, ale ma\u0142y eeprom, wi\u0119c jest jeszcze jedno dodadkowe za\u0142o\u017cenie: ka\u017cdy bloczek mo\u017ce wyst\u0105pi\u0107 wi\u0119cej ni\u017c jeden raz &#8211; w takim wypadku aktualnym jest ostatni. Pozwala to zmodyfikowane bloki po prostu zapisywa\u0107 na ko\u0144cu pami\u0119ci, a ca\u0142o\u015b\u0107 'od\u015bmieca\u0107&#8217; dopiero co jaki\u015b czas na \u017c\u0105danie.<br \/>\nZ drugiej strony u\u017cywanie trymer\u00f3w mog\u0142o zapcha\u0107 w ten spos\u00f3b pami\u0119\u0107 bardzo szybko, wi\u0119c zdecydowa\u0142em, \u017ce jako tymczasowe miejsce do przechowywania b\u0119dzie u\u017cywany eeprom. Gdy ju\u017c wszystko wytrymujemy jak trzeba, to mo\u017cna przenie\u015b\u0107 warto\u015bci kana\u0142\u00f3w z eepromu do flasha.<\/p>\n<h1>W\u0142a\u015bciwo\u015bci nadajnika<\/h1>\n<ul>\n<li>Pami\u0119\u0107 modeli (maksimum 31).<\/li>\n<li>Ka\u017cdy model sk\u0142ada si\u0119 z:\n<ul>\n<li>komentarzy (maksimum 256\/model), nazwa modelu jest jednym z nich i jest obowi\u0105zkowy, komentarze mog\u0105 opisywa\u0107 kana\u0142y jak i bloczki<\/li>\n<li>kana\u0142\u00f3w, niekt\u00f3re s\u0105 dedykowane jako wej\u015bcie, niekt\u00f3re jako wyj\u015bcie, reszta mo\u017ca by\u0107 u\u017cyta jako miejsce na trymery, rewersy czy do po\u0142\u0105cze\u0144 pomi\u0119dzy bloczkami (maks. 253\/model)<\/li>\n<li>bloczk\u00f3w, kt\u00f3re robi\u0105 ca\u0142\u0105 przeliczeniow\u0105 cz\u0119\u015b\u0107 'czarnej skrzynki&#8217; (maksimum 255\/model)<\/li>\n<li>listy w jakiej bloczki powinny by\u0107 przetwarzane, obecnie lista musi by\u0107 r\u0119cznie robiona, ale mo\u017cliwe, \u017ce w przysz\u0142o\u015bci b\u0119dzie generowana automatycznie<\/li>\n<\/ul>\n<\/li>\n<li>8 kana\u0142\u00f3w wyj\u015bciowych, mo\u017cna zwi\u0119kszy\u0107, ale nale\u017cy pami\u0119ta\u0107, \u017ce wtedy ramka ju\u017c mo\u017ce si\u0119 nie zmie\u015bci\u0107 w standardowym czasie i trzeba b\u0119dzie co\u015b zmieni\u0107<\/li>\n<li>8 analogowych wej\u015b\u0107 z mo\u017cliwo\u015bci\u0105 pod\u0142\u0105czenia pod nie prze\u0142\u0105cznik\u00f3w<\/li>\n<li>wyj\u015bcie PPM (super dok\u0142adne, wolne od jiteru, ok. 11000 krok\u00f3w na kana\u0142)<\/li>\n<li>wewn\u0119trzne obliczenia robione na 16 bitowych liczbach sta\u0142oprzecinkowych (6+10), czyli z rozdzielczo\u015bci\u0105 ponad 2048 krok\u00f3w<\/li>\n<li>bootloader po porcie szeregowym, czyli upgrade firmware mo\u017ce by\u0107 zrobione zwyk\u0142ym kablem usb-serial(ttl)<\/li>\n<li>kolowy wy\u015bwietlacz LCD<\/li>\n<li>6 klawiszy do nawigacji po menu<\/li>\n<li>Open source! (kod wrzuc\u0119 nied\u0142ugo)<\/li>\n<\/ul>\n<h1>Troszk\u0119 historii<\/h1>\n<p>W 2006, kiedy zacz\u0105\u0142em interesowa\u0107 si\u0119 modelami R\/C, kupi\u0142em najta\u0144sz\u0105 4 kana\u0142ow\u0105 aparatur\u0119 z my\u015bl\u0105, \u017ce jak b\u0119d\u0119 potrzebowa\u0142 czego\u015b wi\u0119cej, to na tej bazie zrobi\u0119 sobie ju\u017c sam:-)<br \/>\nGdzie\u015b pomi\u0119dzy 2007 a 2008 podczas dyskusji na forum Alexrc narodzi\u0142a si\u0119 idea super elastycznego nadajnika.<br \/>\nPomys\u0142em by\u0142o, \u017ceby to co jest w \u015brodku nadajnika da\u0142o si\u0119 zdefiniowa\u0107 przy pomocy bloczk\u00f3w z podstawowymi funkcjami matematycznymi i po\u0142\u0105czeniami pomi\u0119dzy nimi, wej\u015bciami i wyj\u015bciami.<br \/>\nW 2008 zrobi\u0142em sobie uniwersaln\u0105 p\u0142ytk\u0119 do wielu zastosowa\u0144 na Atmega8L i z wy\u015bwietlaczem z telefonu Siemens S65.<br \/>\nW 2009 wymieni\u0142em Atmega8L na Atmega88 &#8211; dzi\u0119ki temu mog\u0142em podnie\u015b\u0107 taktowanie procesora z 7MHz do ponad 11MHz nadal pozostaj\u0105c w zgodzie ze specyfikacj\u0105 procesora i zasilaj\u0105c go z 3V. I tu prawdziwa historia si\u0119 zaczyna \ud83d\ude42<br \/>\nPod koniec 2009 mia\u0142em ju\u017c kilka rzeczy sko\u0144czonych: generowanie ppm, przeliczanie bloczk\u00f3w, multitasking, podstawy interfejsu u\u017cytkownika (menu, klawiatura). I od tej pory projekt utkn\u0105\u0142 na prawie 3 lata.<br \/>\nChcia\u0142em zrobi\u0107 wszystko zbyt uniwersalne i niestety to podej\u015bcie nie sprawdzi\u0142o si\u0119 do intefejsu u\u017cytkownika. Podczas tych lat u\u017cywa\u0142em kilku prostych nadajnik\u00f3w, kt\u00f3re do moich samolot\u00f3w sprawdza\u0142y si\u0119 ca\u0142kiem nie\u017ale. Ale nowy projekt <a href=\"https:\/\/majek.sh\/pl\/tricopter\/\" title=\"Tricopter\">Tricoptera<\/a> zmieni\u0142 wszystko, gdy nie by\u0142em w stanie \u017cadnym nadajnikiem uzbroi\u0107 <a href=\"https:\/\/majek.sh\/pl\/multiwii-328p-controller-from-hk\/\" title=\"MultiWii 328P controller from HK\">p\u0142ytki steruj\u0105cej<\/a>, poza tym nagle zasz\u0142a potrzeba posiadania wi\u0119cej ni\u017c 4 kana\u0142\u00f3w. W ten spos\u00f3b stary projekt od\u017cy\u0142.<br \/>\nPod koniec 2012 usun\u0105\u0142em praktycznie ca\u0142y 'superuniwersalny&#8217; kod generuj\u0105cy menu, przemy\u015bla\u0142em pewne rzeczy (trzymanie trymer\u00f3w r\u00f3wnie\u017c w eepromie) i od tego czasu projekt poszed\u0142 naprz\u00f3d.<br \/>\nP\u0142ytk\u0119 wsadzi\u0142em do starego nadajnika, kt\u00f3ry kupi\u0142em za 5z\u0142, doda\u0142em <a href=\"http:\/\/www.hobbyking.com\/hobbyking\/store\/uh_viewitem.asp?idproduct=17205&#038;aff=78124\" target=\"_blank\">modu\u0142 FrSky DHT<\/a>, pod\u0142\u0105czy\u0142em razem do kupy i teraz mo\u017cna tego ju\u017c u\u017cywa\u0107 w prawdziwym \u015bwiecie \ud83d\ude42<\/p>\n<h1>Przysz\u0142o\u015b\u0107<\/h1>\n<ul>\n<li>Zmiana procesora na Atmega168 lub od razu na Atmega328 (kod jest gotowy dla obydw\u00f3ch &#8211; trzeba tylko porobi\u0107 p\u0142ytki i polutowa\u0107)<\/li>\n<li>Poniewa\u017c obecnie praktycznie nie jest mo\u017cliwy ju\u017c zakup wy\u015bwietlacza od S65 (mimo, \u017ce mam jeszcze zapas \ud83d\ude42 ), to kupi\u0142em ju\u017c podobny i postaram si\u0119 jego r\u00f3wnie\u017c obs\u0142ugiwa\u0107.<\/li>\n<li>Przejrzenie i zmiana kodu, \u017ceby mo\u017cna by\u0142o go uruchomi\u0107 na zwyk\u0142ej p\u0142ytce Arduino z procesorem Atmega328 (czyli dostosowanie do innej cz\u0119stotliwo\u015bci taktowania).<\/li>\n<li>Wi\u0119cej kodu, wi\u0119ce funkcjonalno\u015bci (niestety ju\u017c nie na Atmega88, bo wi\u0119cej tam si\u0119 ju\u017c nie zmie\u015bci w pami\u0119ci)<\/li>\n<li>Timery, extender i\/o (mo\u017cliwo\u015b\u0107 pod\u0142\u0105czenia dodatkowych wej\u015b\u0107, wej\u015bcie trenera) <\/li>\n<li>&#8230;<\/li>\n<\/ul>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Jeszcze jeden? \ud83d\ude42 Jest kilka otwartych projekt\u00f3w. wi\u0119c po co nast\u0119pny? Od pocz\u0105tku: zacz\u0105\u0142em ten projekt ju\u017c w 2009, wtedy nie by\u0142o zbyt wiele opcji dost\u0119pnych, gotowe nadajniki o sporych mo\u017cliwo\u015bciach by\u0142y bardzo drogie. No i \u017caden nie by\u0142 dostatecznie <span class=\"excerpt-dots\">&hellip;<\/span> <a class=\"more-link\" href=\"https:\/\/majek.sh\/pl\/rc-diy-transmitter\/\"><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,5],"tags":[38,50,24,26,41,40,13,39],"_links":{"self":[{"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/posts\/624"}],"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=624"}],"version-history":[{"count":97,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/posts\/624\/revisions"}],"predecessor-version":[{"id":1156,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/posts\/624\/revisions\/1156"}],"wp:attachment":[{"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/media?parent=624"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/categories?post=624"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/tags?post=624"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}